{"version":3,"sources":["gallery.js"],"names":["root","factory","define","amd","exports","module","PhotoSwipe","this","template","UiClass","items","options","framework","features","bind","target","type","listener","unbind","methodName","split","i","length","isArray","obj","Array","createEl","classes","tag","el","document","createElement","className","getScrollY","yOffset","window","pageYOffset","undefined","documentElement","scrollTop","removeClass","reg","RegExp","replace","addClass","hasClass","test","getChildByClass","parentEl","childClassName","node","firstChild","nextSibling","arraySearch","array","value","key","extend","o1","o2","preventOverwrite","prop","hasOwnProperty","easing","sine","out","k","Math","sin","PI","inOut","cos","cubic","detectFeatures","ua","androidversion","helperStyle","style","vendor","oldIE","all","addEventListener","touch","requestAnimationFrame","raf","caf","cancelAnimationFrame","pointerEvent","navigator","msPointerEnabled","userAgent","platform","v","match","parseInt","isOldIOSPhone","parseFloat","isOldAndroid","androidVersion","isMobileOpera","styleCheckItem","styleName","lastTime","styleChecks","vendors","a","charAt","toUpperCase","slice","toLowerCase","fn","currTime","Date","getTime","timeToCall","max","id","setTimeout","clearTimeout","svg","createElementNS","createSVGRect","evName","_handleEv","handleEvent","call","self","_options","allowPanToNext","spacing","bgOpacity","mouseUsed","loop","pinchToClose","closeOnScroll","closeOnVerticalDrag","verticalDragRange","hideAnimationDuration","showAnimationDuration","showHideOpacity","focus","escKey","arrowKeys","mainScrollEndFriction","panEndFriction","isClickableElement","tagName","getDoubleTapZoom","isMouseClick","item","initialZoomLevel","maxSpreadZoom","modal","scaleMode","_getEmptyPoint","x","y","_registerModule","name","publicMethods","_modules","push","_getLoopedId","index","numSlides","_getNumItems","_listen","_listeners","_shout","listeners","args","prototype","arguments","shift","apply","_getCurrentTime","_applyBgOpacity","opacity","_bgOpacity","bg","_applyZoomTransform","styleObj","zoom","_renderMaxResolution","currItem","fitRatio","_transformKey","_translatePrefix","_translateSufix","_moveMainScroll","dragging","newSlideIndexOffset","_currentItemIndex","_slideSize","_currPositionIndex","delta","round","_mainScrollPos","_setTranslateX","_containerStyle","_calculatePanOffset","axis","zoomLevel","m","_midZoomPoint","_offset","_startPanOffset","_currPanDist","_startZoomLevel","_equalizePoints","p1","p2","_roundPoint","p","_calculatePanBounds","update","bounds","_calculateItemSize","_viewportSize","_currPanBounds","_getMinZoomLevel","_getMaxZoomLevel","w","_modifyDestPanOffset","destPanBounds","destPanOffset","destZoomLevel","initialPosition","min","_onKeyDown","e","keydownAction","keyCode","ctrlKey","altKey","shiftKey","metaKey","preventDefault","returnValue","_onGlobalClick","_moved","_zoomStarted","_mainScrollAnimating","_verticalDragInitiated","stopPropagation","_updatePageScrollOffset","setScrollOffset","_stopAnimation","_animations","_cancelAF","_numAnimations","_registerStartAnimation","_stopAllAnimations","_animateProp","b","endProp","d","easingFn","onUpdate","onComplete","t","startAnimTime","animloop","_requestAF","_calculatePointsDistance","_tempPoint","abs","sqrt","_preventDefaultEventBehaviour","isDown","_preventObj","prevent","_closestElement","_convertTouchToPoint","pageX","pageY","identifier","_findCenterOfPoints","pCenter","_calculateVerticalDragOpacityRatio","_panOffset","_getTouchPoints","_tempPointsArr","pop","_pointerEventEnabled","_tempCounter","_currPointers","forEach","indexOf","touches","_ePoint1","_ePoint2","_panOrMoveMainScroll","startOverDiff","newPanPos","newMainScrollPos","newOffset","dir","newMainScrollPosition","mainScrollDiff","_startMainScrollPos","panFriction","_currZoomLevel","_currZoomElementStyle","_direction","_mainScrollShifted","_onDragStart","startPointsList","button","_initialZoomRunning","_oldAndroidTouchEndTimeout","pointerIndex","pointerId","numPoints","_currentPoints","_isDragging","_isFirstMove","_upMoveEvents","_isZoomingIn","_wasOverInitialZoom","_opacityChanged","_isMultitouch","_currPoint","_startPoint","_posPoints","_gestureCheckSpeedTime","_gestureStartTime","_stopDragUpdateLoop","_dragUpdateLoop","_isZooming","_currCenterPoint","_startPointsDistance","_onDragMove","touchesList","diff","_onDragRelease","_features","releasePoint","splice","4","2","3","pointerType","touchList","changedTouches","initalPanY","initialBgOpacity","releaseTimeDiff","_lastReleaseTime","gestureType","_releaseAnimData","_initDragReleaseAnimationData","calculateSwipeSpeed","close","now","_applyCurrentZoomPan","_finishSwipeMainScrollGesture","_completePanGesture","_completeZoomGesture","_isOpen","_isDestroying","_closedByScroll","_containerShiftIndex","_downEvents","_globalEventHandlers","_updateSizeInterval","_itemsNeedUpdate","_itemHolders","_prevItemIndex","_dragStartEvent","_dragMoveEvent","_dragEndEvent","_dragCancelEvent","_likelyTouchDevice","_initalClassName","_initalWindowScrollY","_oldIE","_currentWindowScrollY","_orientationChangeTimeout","_dragAnimFrame","_indexDiff","_isFixedPosition","_windowVisibleSize","allowRenderResolution","_setImageSize","_applyZoomPanToItem","container","elStyle","_mouseMoveTimeout","_onFirstMouseMove","shout","listen","viewportSize","isMainScrollAnimating","getZoomLevel","getCurrentIndex","isDragging","isZooming","applyZoomPan","panX","panY","init","transform","scrollWrap","itemHolders","children","wrap","display","allow3dTransform","perspective","left","zoomRatio","s","h","width","height","top","_setupTransforms","resize","updateSize","orientationchange","clientWidth","scroll","keydown","click","oldPhone","animationName","ui","isNaN","_getItemAt","setAttribute","position","rootClasses","mainClass","setContent","updateCurrItem","setInterval","_showOrHide","destroy","_showOrHideTimeout","clearInterval","panTo","force","event","goTo","next","prev","updateCurrZoomItem","emulateSetContent","zoomElement","center","invalidateCurrItems","needsUpdate","beforeAnimation","tempHolder","diffAbs","NUM_HOLDERS","unshift","prevItem","windowScrollY","innerWidth","innerHeight","clientHeight","holder","hIndex","cleanSlide","zoomTo","centerPoint","speed","updateFn","initialPanOffset","_currZoomedItemIndex","_centerPoint","_renderMovement","getAttribute","parentNode","time","pointsDistance","_calculateZoomLevel","zoomFriction","minZoomLevel","maxZoomLevel","percent","opacityRatio","o","lastFlickDuration","tempReleasePos","lastFlickOffset","lastFlickDist","lastFlickSpeed","slowDownRatio","slowDownRatioReverse","speedDecelerationRatio","speedDecelerationRatioAbs","distanceOffset","backAnimDestination","backAnimStarted","calculateOverBoundsAnimOffset","pos","calculateAnimOffset","timeDiff","panAnimLoop","zoomPan","lastNow","animData","itemChanged","totalShiftDist","isFastLastFlick","itemsDiff","nextCircle","animateToX","animateToDist","finishAnimDuration","touchesDistance","initialOpacity","initGestures","addEventNames","pref","down","move","up","cancel","maxTouchPoints","msMaxTouchPoints","likelyTouchDevice","mousedown","mousemove","mouseup","_getZeroBounds","_appendImage","baseDiv","img","preventAnimation","keepPlaceholder","loadError","imageAppended","appendChild","loaded","placeholder","_preloadImage","loading","loadComplete","onload","onerror","src","_checkForError","cleanUp","innerHTML","errorMsg","_appendImagesPool","_imagesToAppendPool","poolItem","clearPlaceholder","_items","_initialContentSet","completeFn","thumbBounds","initialLayout","getThumbBoundsFn","removeAttribute","duration","closeWithRaf","fadeEverything","miniImg","webkitBackfaceVisibility","initalBgOpacity","_tempPanAreaSize","_controllerDefaultOptions","forceProgressiveLoading","preload","getNumItemsFn","realPanElementW","realPanElementH","isInitial","vGap","bottom","hRatio","vRatio","maxRes","lastChild","lazyLoadItem","initController","getItemAt","isNext","preloadBefore","preloadAfter","preloader","allowProgressiveImg","screen","html","placeholderClassName","msrc","_dispatchTapEvent","origEvent","createEvent","eDetail","initCustomEvent","dispatchEvent","tapTimer","_wheelDelta","tapReleasePoint","initTap","onTapStart","onTapRelease","p0","touch0","touch1","initDesktopZoom","setupDesktopZoom","onInit","events","handleMouseWheel","mouseZoomedIn","updateZoomable","removeDraggingClass","hasDraggingClass","deltaY","deltaMode","deltaX","wheelDeltaX","wheelDeltaY","wheelDelta","detail","newPanX","newPanY","toggleDesktopZoom","doubleTapZoomLevel","zoomOut","_getHash","_windowLoc","hash","substring","_cleanHistoryTimeouts","_historyUpdateTimeout","_hashAnimCheckTimeout","_parseItemIndexFromURL","params","pair","vars","galleryPIDs","searchfor","pid","_hashChangeTimeout","_hashChangedByScript","_hashChangedByHistory","_hashReseted","_initialHash","_historyChanged","_closedFromURL","_urlChangedOnce","_supportsPushState","_historyDefaultOptions","history","galleryUID","_updateHash","newHash","newURL","href","location","title","initHistory","returnToOriginal","updateURL","onHashChange","back","pushState","pathname","search","PhotoSwipeUI_Default","pswp","_onControlsTap","_blockControlsTap","timeToIdle","_isIdle","_onIdleMouseMove","uiElement","found","clickedClass","srcElement","_uiElements","onTap","tapDelay","_togglePswpClass","cName","add","_countNumItems","hasOneSlide","_galleryHasOneSlide","_controls","_toggleShareModalClass","_shareModal","_shareModalHidden","_toggleShareModal","_updateShareURLs","_openWindowPopup","hasAttribute","open","_hasCloseClass","closeElClasses","_onMouseLeaveWindow","from","relatedTarget","toElement","nodeName","_idleTimer","setIdle","timeToIdleOutside","_applyNavBarGaps","bars","gap","fitControlsWidth","barsSize","captionEl","_fakeCaptionContainer","insertBefore","_captionContainer","addCaptionHTMLFn","captionSize","_setupUIElements","loopThroughChildElements","sChildren","l","classAttr","option","topBar","_fullscrenAPI","_indexIndicator","_shareButton","_initalCloseOnScrollValue","_loadingIndicator","_loadingIndicatorHidden","_loadingIndicatorTimeout","_idleInterval","_overlayUIUpdated","_controlsVisible","_defaultUIOptions","loadingIndicatorDelay","closeEl","fullscreenEl","zoomEl","shareEl","counterEl","arrowEl","preloaderEl","tapToClose","tapToToggleControls","clickToCloseNonZoomable","shareButtons","label","url","download","getImageURLForShare","getPageURLForShare","getTextForShare","indexIndicatorSep","shareButtonData","image_url","page_url","share_text","shareButtonOut","encodeURIComponent","parseShareButtonOut","onclick","_idleIncrement","_toggleLoadingIndicator","hide","isFullscreen","exit","enter","pinchControlsHidden","hideControls","showControls","point","preventObj","onGlobalTap","onMouseOver","eventK","updateFullscreen","removeChild","getFullscreenAPI","naturalWidth","isIdle","updateIndexIndicator","supportsFullscreen","exitFullscreen","mozCancelFullScreen","webkitExitFullscreen","msExitFullscreen","api","dE","tF","requestFullscreen","enterK","exitK","elementK","mozRequestFullScreen","webkitRequestFullscreen","msRequestFullscreen","Element","ALLOW_KEYBOARD_INPUT","Gallery","galleryElements","querySelectorAll","galleryInstances","pswpElement","namePrefix","injectPhotoswipeMarkup","Helpers","scopedLoop","galleryElement","context","setup","maybeOpenGallery","body","insertAdjacentHTML","querySelector","galleryId","galleryItems","toString","galleryItem","openGallery","slideIndex","slides","getSlides","pageYScroll","rect","thumbnailElement","getBoundingClientRect","size","source","slide","getHash","gid","hashData"],"mappings":"CAGA,SAAAA,EAAAC,GACA,mBAAAC,QAAAA,OAAAC,IACAD,OAAAD,GACA,iBAAAG,QACAC,OAAAD,QAAAH,IAEAD,EAAAM,WAAAL,IANA,CAQAM,KAAA,wBA0oHA,OAvoHA,SAAAC,EAAAC,EAAAC,EAAAC,GAUA,IAAAC,EAAA,CACAC,SAAA,KACAC,KAAA,SAAAC,EAAAC,EAAAC,EAAAC,GACA,IAAAC,GAAAD,EAAA,SAAA,OAAA,gBACAF,EAAAA,EAAAI,MAAA,KACA,IAAA,IAAAC,EAAA,EAAAA,EAAAL,EAAAM,OAAAD,IACAL,EAAAK,IACAN,EAAAI,GAAAH,EAAAK,GAAAJ,GAAA,IAIAM,QAAA,SAAAC,GACA,OAAAA,aAAAC,OAEAC,SAAA,SAAAC,EAAAC,GACAC,EAAAC,SAAAC,cAAAH,GAAA,OAIA,OAHAD,IACAE,EAAAG,UAAAL,GAEAE,GAEAI,WAAA,WACA,IAAAC,EAAAC,OAAAC,YACA,YAAAC,IAAAH,EAAAA,EAAAJ,SAAAQ,gBAAAC,WAEArB,OAAA,SAAAH,EAAAC,EAAAC,GACAL,EAAAE,KAAAC,EAAAC,EAAAC,GAAA,IAEAuB,YAAA,SAAAX,EAAAG,GACAS,EAAA,IAAAC,OAAA,UAAAV,EAAA,WACAH,EAAAG,UAAAH,EAAAG,UAAAW,QAAAF,EAAA,KAAAE,QAAA,SAAA,IAAAA,QAAA,SAAA,KAEAC,SAAA,SAAAf,EAAAG,GACApB,EAAAiC,SAAAhB,EAAAG,KACAH,EAAAG,YAAAH,EAAAG,UAAA,IAAA,IAAAA,IAGAa,SAAA,SAAAhB,EAAAG,GACA,OAAAH,EAAAG,WAAA,IAAAU,OAAA,UAAAV,EAAA,WAAAc,KAAAjB,EAAAG,YAEAe,gBAAA,SAAAC,EAAAC,GAEA,IADA,IAAAC,EAAAF,EAAAG,WACAD,GAAA,CACA,GAAAtC,EAAAiC,SAAAK,EAAAD,GACA,OAAAC,EAEAA,EAAAA,EAAAE,cAGAC,YAAA,SAAAC,EAAAC,EAAAC,GAEA,IADA,IAAAnC,EAAAiC,EAAAhC,OACAD,KACA,GAAAiC,EAAAjC,GAAAmC,KAAAD,EACA,OAAAlC,EAGA,OAAA,GAEAoC,OAAA,SAAAC,EAAAC,EAAAC,GACA,IAAA,IAAAC,KAAAF,EACAA,EAAAG,eAAAD,KACAD,GAAAF,EAAAI,eAAAD,KAGAH,EAAAG,GAAAF,EAAAE,MAIAE,OAAA,CACAC,KAAA,CACAC,IAAA,SAAAC,GACA,OAAAC,KAAAC,IAAAF,GAAAC,KAAAE,GAAA,KAEAC,MAAA,SAAAJ,GACA,QAAAC,KAAAI,IAAAJ,KAAAE,GAAAH,GAAA,GAAA,IAGAM,MAAA,CACAP,IAAA,SAAAC,GACA,QAAAA,EAAAA,EAAAA,EAAA,KAqCAO,eAAA,WACA,GAAA7D,EAAAC,SACA,OAAAD,EAAAC,SAEA,IAsBA6D,EAyBAC,EA9CAC,EADAhE,EAAAc,WACAmD,MACAC,EAAA,GACAjE,EAAA,GAGAA,EAAAkE,MAAAjD,SAAAkD,MAAAlD,SAAAmD,iBAEApE,EAAAqE,MAAA,iBAAA/C,OAEAA,OAAAgD,wBACAtE,EAAAuE,IAAAjD,OAAAgD,sBACAtE,EAAAwE,IAAAlD,OAAAmD,sBAGAzE,EAAA0E,eAAApD,OAAA,cAAAqD,UAAAC,iBAKA5E,EAAA0E,eAEAb,EAAAc,UAAAE,WASA,cAAA5C,KAAA0C,UAAAG,YACAC,EAAAJ,UAAA,WAAAK,MAAA,4BACA,EAAAD,EAAAtE,QAEA,IADAsE,EAAAE,SAAAF,EAAA,GAAA,MACAA,EAAA,IACA/E,EAAAkF,eAAA,GAUApB,GADAkB,EAAAnB,EAAAmB,MAAA,wBACAA,EAAA,GAAA,EAEA,IADAlB,EAAAqB,WAAArB,MAEAA,EAAA,MACA9D,EAAAoF,cAAA,GAEApF,EAAAqF,eAAAvB,GAEA9D,EAAAsF,cAAA,yBAAArD,KAAA4B,IAUA,IALA,IAEA0B,EACAC,EA6BAC,EAhCAC,EAAA,CAAA,YAAA,cAAA,iBACAC,EAAA,CAAA,GAAA,SAAA,MAAA,KAAA,KAIAnF,EAAA,EAAAA,EAAA,EAAAA,IAAA,CAGA,IAAA,IAFAyD,EAAA0B,EAAAnF,GAEAoF,EAAA,EAAAA,EAAA,EAAAA,IACAL,EAAAG,EAAAE,GAGAJ,EAAAvB,GAAAA,EACAsB,EAAAM,OAAA,GAAAC,cAAAP,EAAAQ,MAAA,GACAR,IAEAvF,EAAAuF,IAAAC,KAAAzB,IACA/D,EAAAuF,GAAAC,GAIAvB,IAAAjE,EAAAuE,MACAN,EAAAA,EAAA+B,cACAhG,EAAAuE,IAAAjD,OAAA2C,EAAA,yBACAjE,EAAAuE,MACAvE,EAAAwE,IAAAlD,OAAA2C,EAAA,yBACA3C,OAAA2C,EAAA,iCAuBA,OAlBAjE,EAAAuE,MACAkB,EAAA,EACAzF,EAAAuE,IAAA,SAAA0B,GACA,IAAAC,GAAA,IAAAC,MAAAC,UACAC,EAAA/C,KAAAgD,IAAA,EAAA,IAAAJ,EAAAT,IACAc,EAAAjF,OAAAkF,WAAA,WAAAP,EAAAC,EAAAG,IAAAA,GAEA,OADAZ,EAAAS,EAAAG,EACAE,GAEAvG,EAAAwE,IAAA,SAAA+B,GAAAE,aAAAF,KAIAvG,EAAA0G,MAAAzF,SAAA0F,mBACA1F,SAAA0F,gBAAA,6BAAA,OAAAC,cAEA7G,EAAAC,SAAAA,IAMAD,EAAA6D,iBAGA7D,EAAAC,SAAAkE,QAEAnE,EAAAE,KAAA,SAAAC,EAAAC,EAAAC,EAAAC,GAEAF,EAAAA,EAAAI,MAAA,KAQA,IANA,IACAsG,EADAvG,GAAAD,EAAA,SAAA,UAAA,QAEAyG,EAAA,WACA1G,EAAA2G,YAAAC,KAAA5G,IAGAI,EAAA,EAAAA,EAAAL,EAAAM,OAAAD,IAEA,GADAqG,EAAA1G,EAAAK,GAGA,GAAA,iBAAAJ,GAAAA,EAAA2G,YAAA,CACA,GAAA1G,GAGA,IAAAD,EAAA,QAAAyG,GACA,OAAA,OAHAzG,EAAA,QAAAyG,GAAAC,EAOA5G,EAAAI,GAAA,KAAAuG,EAAAzG,EAAA,QAAAyG,SAEA3G,EAAAI,GAAA,KAAAuG,EAAAzG,KAcA,IAAA6G,EAAAvH,KAWAwH,EAAA,CACAC,gBAAA,EACAC,QAAA,IACAC,UAAA,EACAC,WAAA,EACAC,MAAA,EACAC,cAAA,EACAC,eAAA,EACAC,qBAAA,EACAC,kBAAA,IACAC,sBAAA,IACAC,sBAAA,IACAC,iBAAA,EACAC,OAAA,EACAC,QAAA,EACAC,WAAA,EACAC,sBAAA,IACAC,eAAA,IACAC,mBAAA,SAAApH,GACA,MAAA,MAAAA,EAAAqH,SAEAC,iBAAA,SAAAC,EAAAC,GACA,OAAAD,GAGAC,EAAAC,iBAAA,GAFA,EAEA,MAGAC,cAAA,KACAC,OAAA,EAGAC,UAAA,OAEA7I,EAAA6C,OAAAsE,EAAApH,GAOA,SAAA+I,IACA,MAAA,CAAAC,EAAA,EAAAC,EAAA,GAkDA,SAAAC,EAAAC,EAAAzJ,GACAO,EAAA6C,OAAAqE,EAAAzH,EAAA0J,eACAC,GAAAC,KAAAH,GAGA,SAAAI,EAAAC,GACA,IAAAC,EAAAC,KACA,OAAAD,EAAA,EAAAD,EACAA,EAAAC,EACAD,EAAA,EACAC,EAAAD,EAEAA,EAKA,SAAAG,EAAAR,EAAAhD,GAIA,OAHAyD,GAAAT,KACAS,GAAAT,GAAA,IAEAS,GAAAT,GAAAG,KAAAnD,GAEA,SAAA0D,EAAAV,GACA,IAAAW,EAAAF,GAAAT,GAEA,GAAAW,EAAA,CACA,IAAAC,EAAAjJ,MAAAkJ,UAAA/D,MAAAiB,KAAA+C,WACAF,EAAAG,QAEA,IAAA,IAAAxJ,EAAA,EAAAA,EAAAoJ,EAAAnJ,OAAAD,IACAoJ,EAAApJ,GAAAyJ,MAAAhD,EAAA4C,IAKA,SAAAK,IACA,OAAA,IAAA/D,MAAAC,UAEA,SAAA+D,EAAAC,GACAC,GAAAD,EACAnD,EAAAqD,GAAAtG,MAAAoG,QAAAA,EAAAlD,EAAAG,UAGA,SAAAkD,EAAAC,EAAA1B,EAAAC,EAAA0B,EAAAjC,KACAkC,IAAAlC,GAAAA,IAAAvB,EAAA0D,YACAF,IAAAjC,GAAAvB,EAAA0D,UAAAC,UAGAJ,EAAAK,IAAAC,EAAAhC,EAAA,OAAAC,EAAA,KAAAgC,EAAA,UAAAN,EAAA,IAoCA,SAAAO,EAAAlC,EAAAmC,GAEA,IACAC,GADAhE,EAAAK,MAAA0D,IACAC,EAAAC,GAAAC,GAAAtC,EAAAuC,GAAAvC,GAAAsC,GAAAtC,EACAwC,EAAAhI,KAAAiI,MAAAzC,EAAA0C,GAAA1C,IAEAoC,EAAA,GAAA,EAAAI,GACAJ,GAAA1B,KAAA,GAAA8B,EAAA,KACAxC,EAAA0C,GAAA1C,EAAAwC,EAAApE,EAAAgB,wBAIAsD,GAAA1C,EAAAA,EACA2C,GAAA3C,EAAA4C,GAEA,SAAAC,EAAAC,EAAAC,GACA,IAAAC,EAAAC,GAAAH,GAAAI,GAAAJ,GACA,OAAAK,GAAAL,GAAAM,GAAAN,GAAAE,EAAAD,EAAAM,EAAAL,EAGA,SAAAM,EAAAC,EAAAC,GACAD,EAAAvD,EAAAwD,EAAAxD,EACAuD,EAAAtD,EAAAuD,EAAAvD,EACAuD,EAAA/F,KACA8F,EAAA9F,GAAA+F,EAAA/F,IAGA,SAAAgG,EAAAC,GACAA,EAAA1D,EAAAxF,KAAAiI,MAAAiB,EAAA1D,GACA0D,EAAAzD,EAAAzF,KAAAiI,MAAAiB,EAAAzD,GAuDA,SAAA0D,EAAAZ,EAAAa,GAKA,OAJAC,EAAAC,GAAA3F,EAAA0D,SAAAkC,GAAAhB,GACAa,IACAI,GAAAH,GAEAA,EAGA,SAAAI,EAAAvE,GAIA,OAFAA,EADAA,GACAvB,EAAA0D,UAEAlC,iBAEA,SAAAuE,EAAAxE,GAIA,OAAA,GAFAA,EADAA,GACAvB,EAAA0D,UAEAsC,EAAA/F,EAAAwB,cAAA,EAIA,SAAAwE,EAAAtB,EAAAuB,EAAAC,EAAAC,GACA,OAAAA,IAAApG,EAAA0D,SAAAlC,kBACA2E,EAAAxB,GAAA3E,EAAA0D,SAAA2C,gBAAA1B,IACA,IAEAwB,EAAAxB,GAAAD,EAAAC,EAAAyB,GAEAD,EAAAxB,GAAAuB,EAAAI,IAAA3B,IACAwB,EAAAxB,GAAAuB,EAAAI,IAAA3B,IACA,GACAwB,EAAAxB,GAAAuB,EAAA7G,IAAAsF,KACAwB,EAAAxB,GAAAuB,EAAA7G,IAAAsF,IACA,IA0DA,SAAA4B,EAAAC,GACA,IAAAC,EAAA,GACAxG,EAAAc,QAAA,KAAAyF,EAAAE,QACAD,EAAA,QACAxG,EAAAe,YACA,KAAAwF,EAAAE,QACAD,EAAA,OACA,KAAAD,EAAAE,UACAD,EAAA,SAIAA,IAGAD,EAAAG,SAAAH,EAAAI,QAAAJ,EAAAK,UAAAL,EAAAM,UACAN,EAAAO,eACAP,EAAAO,iBAEAP,EAAAQ,aAAA,EAEAhH,EAAAyG,OAKA,SAAAQ,EAAAT,GACAA,IAKAU,IAAAC,IAAAC,IAAAC,MACAb,EAAAO,iBACAP,EAAAc,mBAIA,SAAAC,IACAvH,EAAAwH,gBAAA,EAAA1O,EAAAqB,cAYA,SAAAsN,EAAAzF,GACA0F,GAAA1F,KACA0F,GAAA1F,GAAA1E,KACAqK,GAAAD,GAAA1F,GAAA1E,KAEAsK,YACAF,GAAA1F,IAGA,SAAA6F,EAAA7F,GACA0F,GAAA1F,IACAyF,EAAAzF,GAEA0F,GAAA1F,KACA4F,KACAF,GAAA1F,GAAA,IAGA,SAAA8F,IACA,IAAA,IAAA/L,KAAA2L,GAEAA,GAAA1L,eAAAD,IACA0L,EAAA1L,GAKA,SAAAgM,EAAA/F,EAAAgG,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,GACA,IAAAC,EAAAC,EAAAtF,IACA4E,EAAA7F,GAEA,IAAAwG,EAAA,WACA,GAAAd,GAAA1F,GAAA,CAMA,GAJAsG,EAAArF,IAAAsF,EAIAL,GAAAI,EAMA,OALAb,EAAAzF,GACAoG,EAAAH,QACAI,GACAA,KAIAD,GAAAH,EAAAD,GAAAG,EAAAG,EAAAJ,GAAAF,GAEAN,GAAA1F,GAAA1E,IAAAmL,GAAAD,KAGAA,IA8nBA,SAAAE,EAAAtD,EAAAC,GAGA,OAFAsD,GAAA9G,EAAAxF,KAAAuM,IAAAxD,EAAAvD,EAAAwD,EAAAxD,GACA8G,GAAA7G,EAAAzF,KAAAuM,IAAAxD,EAAAtD,EAAAuD,EAAAvD,GACAzF,KAAAwM,KAAAF,GAAA9G,EAAA8G,GAAA9G,EAAA8G,GAAA7G,EAAA6G,GAAA7G,GAqCA,SAAAgH,EAAAtC,EAAAuC,GAIA,OAHAC,GAAAC,SAAAC,GAAA1C,EAAAvN,OAAAgH,EAAAkB,oBAEAuB,EAAA,mBAAA8D,EAAAuC,EAAAC,IACAA,GAAAC,QAGA,SAAAE,EAAA/L,EAAAmI,GAIA,OAHAA,EAAA1D,EAAAzE,EAAAgM,MACA7D,EAAAzD,EAAA1E,EAAAiM,MACA9D,EAAAjG,GAAAlC,EAAAkM,WACA/D,EAEA,SAAAgE,EAAAnE,EAAAC,EAAAmE,GACAA,EAAA3H,EAAA,IAAAuD,EAAAvD,EAAAwD,EAAAxD,GACA2H,EAAA1H,EAAA,IAAAsD,EAAAtD,EAAAuD,EAAAvD,GAYA,SAAA2H,IACA,IAAArP,EAAAsP,GAAA5H,EAAA9B,EAAA0D,SAAA2C,gBAAAvE,EACA,OAAA,EAAAzF,KAAAuM,IAAAxO,GAAAwL,GAAA9D,EAAA,IASA,SAAA6H,EAAAnD,GAEA,KAAA,EAAAoD,GAAApQ,QACAoQ,GAAAC,MAgCA,OA7BAC,IAiBAC,GAAA,EAEAC,GAAAC,QAAA,SAAA1E,GACA,IAAAwE,GACAH,GAAA,GAAArE,EACA,IAAAwE,KACAH,GAAA,GAAArE,GAEAwE,SAxBA,EAAAvD,EAAAtN,KAAAgR,QAAA,SAEA1D,EAAA2D,SAAA,EAAA3D,EAAA2D,QAAA3Q,SACAoQ,GAAA,GAAAT,EAAA3C,EAAA2D,QAAA,GAAAC,IACA,EAAA5D,EAAA2D,QAAA3Q,SACAoQ,GAAA,GAAAT,EAAA3C,EAAA2D,QAAA,GAAAE,OAKAD,GAAAvI,EAAA2E,EAAA4C,MACAgB,GAAAtI,EAAA0E,EAAA6C,MACAe,GAAA9K,GAAA,GACAsK,GAAA,GAAAQ,IAeAR,GAGA,SAAAU,EAAA3F,EAAAN,GAEA,IAGAkG,EAIAC,EACAC,EANAC,EAAAhB,GAAA/E,GAAAN,EAAAM,GAEAgG,EAAA,EAAAtG,EAAAM,GACAiG,EAAArG,GAAA1C,EAAAwC,EAAAxC,EACAgJ,EAAAtG,GAAA1C,EAAAiJ,GAAAjJ,EAMAkJ,EADAL,EAAA7E,GAAAS,IAAA3B,IAAA+F,EAAA7E,GAAAxG,IAAAsF,GACA1E,EAAAiB,eAKA,EAGAwJ,EAAAhB,GAAA/E,GAAAN,EAAAM,GAAAoG,EAGA,IAAA9K,EAAAC,gBAAA8K,IAAAhL,EAAA0D,SAAAlC,oBAGAyJ,GAIA,MAAAC,IAAA,MAAAvG,GAAAwC,KAEAwD,GACAD,EAAA7E,GAAAS,IAAA3B,KACAoG,EAAA9K,EAAAiB,eACA2E,GAAAS,IAAA3B,GACA4F,EAAA1E,GAAAS,IAAA3B,GAAAK,GAAAL,KAIA4F,GAAA,GAAAM,EAAA,IAAA,EAAAtI,MACAkI,EAAAG,EACAC,EAAA,GAAAD,EAAAE,GAAAjJ,IACA4I,EAAAK,GAAAjJ,IAGAgE,GAAAS,IAAAzE,IAAAgE,GAAAxG,IAAAwC,IACA2I,EAAAE,KAOAA,EAAA7E,GAAAxG,IAAAsF,KACAoG,EAAA9K,EAAAiB,eACA2E,GAAAxG,IAAAsF,GACA4F,EAAAvF,GAAAL,GAAAkB,GAAAxG,IAAAsF,KAGA4F,GAAA,GAAA,EAAAM,IAAA,EAAAtI,MACAkI,EAAAG,EAEA,EAAAC,GAAAD,EAAAE,GAAAjJ,IACA4I,EAAAK,GAAAjJ,IAIAgE,GAAAS,IAAAzE,IAAAgE,GAAAxG,IAAAwC,IACA2I,EAAAE,KAzCAD,EAAAG,EAmDA,MAAAjG,GAmBA,YAjBApK,IAAAkQ,IACA1G,EAAA0G,GAAA,GAEAU,GADAV,IAAAK,GAAAjJ,GAOAgE,GAAAS,IAAAzE,IAAAgE,GAAAxG,IAAAwC,SACAtH,IAAAiQ,EACAd,GAAA7H,EAAA2I,EACAW,KACAzB,GAAA7H,GAAAwC,EAAAxC,EAAAkJ,SAIAxQ,IAAAkQ,EAKArD,IAEA+D,IACAH,EAAAhL,EAAA0D,SAAAC,WACA+F,GAAA/E,IAAAN,EAAAM,GAAAoG,GAWA,SAAAK,EAAA5E,GAOA,IA+BA6E,EA/BA,cAAA7E,EAAAtN,MAAA,EAAAsN,EAAA8E,SAIAC,GACA/E,EAAAO,iBAIAyE,IAAA,cAAAhF,EAAAtN,OAIA4P,EAAAtC,GAAA,IACAA,EAAAO,iBAKArE,EAAA,eAEAoH,MACA2B,EAAA3S,EAAAyC,YAAAyO,GAAAxD,EAAAkF,UAAA,OACA,IACAD,EAAAzB,GAAAxQ,QAEAwQ,GAAAyB,GAAA,CAAA5J,EAAA2E,EAAA4C,MAAAtH,EAAA0E,EAAA6C,MAAA/J,GAAAkH,EAAAkF,YAMAC,GADAN,EAAA1B,EAAAnD,IACAhN,OAEAoS,GAAA,KAEA9D,IAGA+D,IAAA,IAAAF,IAIAE,GAAAC,IAAA,EACAhT,EAAAE,KAAAqB,OAAA0R,EAAA/L,GAEAgM,GACAC,GACAC,GACA7E,GACA8D,GACAjE,GACAiF,GACAhF,IAAA,EAEA+D,GAAA,KAEAxI,EAAA,kBAAA2I,GAEAlG,EAAAH,GAAA0E,IAEAzE,GAAApD,EAAAoD,GAAAnD,EAAA,EACAqD,EAAAiH,GAAAf,EAAA,IACAlG,EAAAkH,GAAAD,IAGAtB,GAAAjJ,EAAAsC,GAAAtC,EAAAuC,GAEAkI,GAAA,CAAA,CACAzK,EAAAuK,GAAAvK,EACAC,EAAAsK,GAAAtK,IAGAyK,GAAAC,GAAAvJ,IAGAuC,EAAAwF,GAAA,GAGAyB,KACAC,OAKAC,IAAA,EAAAhB,IAAAvE,KAAA+D,KACAjG,EAAA8F,EAGA2B,GAAAR,KAFAhF,IAAA,GAGAlC,GAAAnD,EAAAmD,GAAApD,EAAA,EAEAsD,EAAAH,GAAA0E,IAEAvE,EAAAI,GAAA8F,EAAA,IACAlG,EAAAE,GAAAgG,EAAA,IAEA9B,EAAAhE,GAAAF,GAAAuH,IAEA9H,GAAAjD,EAAAxF,KAAAuM,IAAAgE,GAAA/K,GAAA6H,GAAA7H,EACAiD,GAAAhD,EAAAzF,KAAAuM,IAAAgE,GAAA9K,GAAA4H,GAAA5H,EACA+K,GAAAnE,EAAAnD,GAAAF,OAOA,SAAAyH,EAAAtG,GAIA,IACAiF,EASAsB,EAZAvG,EAAAO,kBAEA+C,KAEA,GADA2B,EAAA3S,EAAAyC,YAAAyO,GAAAxD,EAAAkF,UAAA,UAEAnG,EAAAyE,GAAAyB,IACA5J,EAAA2E,EAAA4C,MACA7D,EAAAzD,EAAA0E,EAAA6C,OAIAwC,KACAkB,EAAApD,EAAAnD,GACA0E,IAAAhE,IAAAyF,GAeAf,GAAAmB,EAbAxI,GAAA1C,IAAAsC,GAAAtC,EAAAuC,GAEA8G,GAAA,KAEA8B,EAAA3Q,KAAAuM,IAAAmE,EAAA,GAAAlL,EAAAuK,GAAAvK,GAAAxF,KAAAuM,IAAAmE,EAAA,GAAAjL,EAAAsK,GAAAtK,GAvaA,IAyaAzF,KAAAuM,IAAAoE,KACA9B,GAAA,EAAA8B,EAAA,IAAA,IACApB,GAAAmB,KA8KA,SAAAE,EAAAzG,GAEA,GAAA0G,GAAA/O,aAAA,CAEA,GAAAqN,IAAA,YAAAhF,EAAAtN,KACA,QAOA,EAAAsN,EAAAtN,KAAAgR,QAAA,WACA1K,aAAAgM,IACAA,GAAAjM,WAAA,WACAiM,GAAA,GACA,MAKA9I,EAAA,aAEAoG,EAAAtC,GAAA,IACAA,EAAAO,kBAKA+C,KAGA,GAFA2B,EAAA3S,EAAAyC,YAAAyO,GAAAxD,EAAAkF,UAAA,SAGAyB,EAAAnD,GAAAoD,OAAA3B,EAAA,GAAA,GAEA/N,UAAAC,kBAMAwP,EAAAjU,KALA,CACAmU,EAAA,QACAC,EAAA,QACAC,EAAA,OAEA/G,EAAAgH,aAEAL,EAAAjU,OACAiU,EAAAjU,KAAAsN,EAAAgH,aAAA,UAGAL,EAAAjU,KAAAsN,EAAAgH,aAAA,SAMA,IAAAC,EAAA9D,EAAAnD,GAEAmF,EAAA8B,EAAAjU,OAOA,GAAA,KAJAmS,EADA,YAAAnF,EAAAtN,KACA,EAIAyS,GAEA,QADAC,GAAA,MAKA,IAAAD,GACAxG,EAAAkH,GAAAoB,EAAA,IAKA,IAAA9B,GAAAT,IAAA9D,KACA+F,IACA,YAAA3G,EAAAtN,KACAiU,EAAA,CAAAtL,EAAA2E,EAAA4C,MAAAtH,EAAA0E,EAAA6C,MAAAnQ,KAAA,SACAsN,EAAAkH,gBAAAlH,EAAAkH,eAAA,KACAP,EAAA,CAAAtL,EAAA2E,EAAAkH,eAAA,GAAAtE,MAAAtH,EAAA0E,EAAAkH,eAAA,GAAArE,MAAAnQ,KAAA,WAIAwJ,EAAA,eAAA8D,EAAA2G,IAIA,IAyDAQ,EACAC,EA1DAC,GAAA,EAmCA,GAhCA,IAAAlC,IACAE,IAAA,EACA/S,EAAAM,OAAAiB,OAAA0R,EAAA/L,GAEAyM,KAEAE,GAEAkB,EAAA,GACA,IAAAC,KACAD,EAAA5K,IAAA6K,KAGAA,GAAA,IAAAnC,EAAA1I,KAAA,EAGA8K,GADA,IAAAF,GAAAA,EAAA,IACA,OAEA,QAGAlB,IAAAhB,EAAA,IACAgB,IAAA,EAGA,IAAAhB,IACAoC,EAAA,iBAEArL,EAAA,qBAGAkJ,GAAA,KACA1E,IAAAC,IAAAC,IAAAC,GAeA,GAVAS,KAIAkG,GADAA,IACAC,MAGAC,oBAAA,KAGA7G,GAEAoC,IAEAxJ,EAAAS,kBACAV,EAAAmO,SAEAR,EAAAjE,GAAA5H,EACA8L,EAAAxK,GAEA2E,EAAA,eAAA,EAAA,EAAA,IAAAjP,EAAAmD,OAAAS,MAAAP,IAAA,SAAAiS,GAEA1E,GAAA5H,GAAA9B,EAAA0D,SAAA2C,gBAAAvE,EAAA6L,GAAAS,EAAAT,EAEAzK,GAAA,EAAA0K,GAAAQ,EAAAR,GACAS,OAGA3L,EAAA,iBAAA,QAlBA,CA0BA,IAAAyI,IAAA/D,KAAA,IAAAuE,EAAA,CAEA,GADA2C,GAAAP,EAAAC,IAEA,OAEAD,EAAA,gBAIA3G,KAKA,UAAA2G,GAMA5C,IAAAH,EAAAhL,EAAA0D,SAAAC,UACA4K,GAAAP,IANAQ,OApvDA,IAIAC,EACAC,EACAC,EACAzK,EACAO,EACAmK,EAIA7C,EACA8C,EACAC,EAEA9D,EACA9F,EACArB,EACAC,EACAiL,EACAC,GAIAC,GACAC,GAEAC,GACAC,GACAC,GACAC,GACA1L,GACAkG,GAEAyF,GAEA9G,GACAd,GACA6H,GACAC,GACAC,GACAC,GACAzC,GAGA0C,GA47BApD,GACAD,GAUAyB,GAIAhC,GACA3E,GACAmE,GAIAK,GACAM,GACAhF,GACAD,GACA2I,GACA1E,GACAS,GACAe,GAEAE,GACAhH,GAEAoF,GACA7D,GAGA8D,GACAY,GACAI,GACA9I,GACA6I,GAqFAlC,GA/lCA9E,GAAArD,IACAoD,GAAApD,IACA8H,GAAA9H,IAIAgE,GAAA,GAOAxB,GAAA,EACAW,GAAA,GACAZ,GAAAvC,IAGAkO,GAAA,EAOAC,IAAA,EAEA7N,GAAA,GAQA8N,GAAA,GACAvM,IAAA,EAqBAhB,GAAA,GAmCA4L,GAAA,SAAA4B,GACAhF,KAEAgF,IACAjF,EAAAhL,EAAA0D,SAAAC,SACAF,KACAyM,GAAAlQ,EAAA0D,UAAA,GAAA,GACAD,IAAA,GAGAA,KACAyM,GAAAlQ,EAAA0D,UACAD,IAAA,IAMAH,EAAA2H,GAAAvB,GAAA7H,EAAA6H,GAAA5H,EAAAkJ,KAGAmF,GAAA,SAAA5O,GACAA,EAAA6O,WAEA9M,EAAA/B,EAAA6O,UAAArT,MACAwE,EAAA8E,gBAAAxE,EACAN,EAAA8E,gBAAAvE,EACAP,EAAAC,iBACAD,IAGAiD,GAAA,SAAA3C,EAAAwO,GACAA,EAAAzM,IAAAC,EAAAhC,EAAA,UAAAiC,GAkCAwM,GAAA,KACAC,GAAA,WAGAD,KACAxX,EAAAM,OAAAY,SAAA,YAAAuW,IACAzX,EAAAgC,SAAApC,EAAA,mBACAuH,EAAAI,WAAA,EACAqC,EAAA,cAEA4N,GAAA/Q,WAAA,WACA+Q,GAAA,MACA,MAqLA5I,GAAA,GACAE,GAAA,EAyDA3F,EAAA,CAGAuO,MAAA9N,EACA+N,OAAAjO,EACAkO,aAAA9K,GACA/M,QAAAoH,EAEA0Q,sBAAA,WACA,OAAAvJ,IAEAwJ,aAAA,WACA,OAAA5F,GAEA6F,gBAAA,WACA,OAAA3M,GAEA4M,WAAA,WACA,OAAAjF,IAEAkF,UAAA,WACA,OAAApE,IAEAnF,gBAAA,SAAA3F,EAAAC,GACAiD,GAAAlD,EAAAA,EACA8N,GAAA5K,GAAAjD,EAAAA,EACAY,EAAA,qBAAAqC,KAEAiM,aAAA,SAAApM,EAAAqM,EAAAC,EAAAjB,GACAvG,GAAA7H,EAAAoP,EACAvH,GAAA5H,EAAAoP,EACAlG,EAAApG,EACAyJ,GAAA4B,IAGAkB,KAAA,WAEA,IAAA1C,IAAAC,EAAA,CAIA,IAAAnV,EAEAyG,EAAAlH,UAAAA,EACAkH,EAAAtH,SAAAA,EACAsH,EAAAqD,GAAAvK,EAAAmC,gBAAAvC,EAAA,YAEA8W,GAAA9W,EAAAwB,UACAuU,GAAA,EAEAvB,GAAApU,EAAA6D,iBACA8L,GAAAyE,GAAA5P,IACAqK,GAAAuF,GAAA3P,IACAqG,GAAAsJ,GAAAkE,UACA1B,GAAAxC,GAAAjQ,MAEA+C,EAAAqR,WAAAvY,EAAAmC,gBAAAvC,EAAA,qBACAsH,EAAAoQ,UAAAtX,EAAAmC,gBAAA+E,EAAAqR,WAAA,mBAEA5M,EAAAzE,EAAAoQ,UAAArT,MAGAiD,EAAAsR,YAAArC,GAAA,CACA,CAAAlV,GAAAiG,EAAAoQ,UAAAmB,SAAA,GAAAC,KAAA,EAAAnP,OAAA,GACA,CAAAtI,GAAAiG,EAAAoQ,UAAAmB,SAAA,GAAAC,KAAA,EAAAnP,OAAA,GACA,CAAAtI,GAAAiG,EAAAoQ,UAAAmB,SAAA,GAAAC,KAAA,EAAAnP,OAAA,IAIA4M,GAAA,GAAAlV,GAAAgD,MAAA0U,QAAAxC,GAAA,GAAAlV,GAAAgD,MAAA0U,QAAA,OApOA,WAEA,GAAA7N,GAAA,CAEA,IAAA8N,EAAAxE,GAAAyE,cAAApC,GAGA,OAFA1L,EAAA,aAAA6N,EAAA,MAAA,KACA5N,EAAAoJ,GAAAyE,YAAA,SAAA,IAOA/N,GAAA,OACA9K,EAAAgC,SAAApC,EAAA,YAEA8L,GAAA,SAAA3C,EAAAwO,GACAA,EAAAuB,KAAA/P,EAAA,MAEAsO,GAAA,SAAA5O,GAEA,IAAAsQ,EAAA,EAAAtQ,EAAAoC,SAAA,EAAApC,EAAAoC,SACAmO,EAAAvQ,EAAA6O,UAAArT,MACAiJ,EAAA6L,EAAAtQ,EAAAyE,EACA+L,EAAAF,EAAAtQ,EAAAwQ,EAEAD,EAAAE,MAAAhM,EAAA,KACA8L,EAAAG,OAAAF,EAAA,KACAD,EAAAF,KAAArQ,EAAA8E,gBAAAxE,EAAA,KACAiQ,EAAAI,IAAA3Q,EAAA8E,gBAAAvE,EAAA,MAGAuM,GAAA,WACA,IAGA9M,EAEAyE,EACA+L,EANA9G,KAKAjF,GADA6L,EAAA,GADAtQ,EAAAvB,EAAA0D,UACAC,SAAA,EAAApC,EAAAoC,UACApC,EAAAyE,EACA+L,EAAAF,EAAAtQ,EAAAwQ,GAJAD,EAAA7G,IAMA+G,MAAAhM,EAAA,KACA8L,EAAAG,OAAAF,EAAA,KAGAD,EAAAF,KAAAlI,GAAA7H,EAAA,KACAiQ,EAAAI,IAAAxI,GAAA5H,EAAA,OAwLAqQ,GAGArD,EAAA,CACAsD,OAAApS,EAAAqS,WAKAC,kBAAA,WACA9S,aAAAoQ,IACAA,GAAArQ,WAAA,WACAqG,GAAA/D,IAAA7B,EAAAqR,WAAAkB,aACAvS,EAAAqS,cAEA,MAEAG,OAAAjL,EACAkL,QAAAlM,EACAmM,MAAAzL,GAKA,IAAA0L,EAAAzF,GAAAjP,eAAAiP,GAAA/O,cAAA+O,GAAA7O,cAMA,IALA6O,GAAA0F,eAAA1F,GAAAkE,YAAAuB,IACA1S,EAAAW,sBAAAX,EAAAU,sBAAA,GAIApH,EAAA,EAAAA,EAAA2I,GAAA1I,OAAAD,IACAyG,EAAA,OAAAkC,GAAA3I,MAIAZ,IACAqH,EAAA6S,GAAA,IAAAla,EAAAqH,EAAAlH,IACAqY,OAGAzO,EAAA,eACAwB,EAAAA,GAAAjE,EAAAoC,OAAA,GAEAyQ,MAAA5O,IAAAA,EAAA,GAAAA,GAAA3B,QACA2B,EAAA,GAEAlE,EAAA0D,SAAAqP,GAAA7O,IAGAgJ,GAAAjP,eAAAiP,GAAA/O,gBACA4R,IAAA,GAGArX,EAAAsa,aAAA,cAAA,SACA/S,EAAAyB,QACAqO,GAIArX,EAAAqE,MAAAkW,SAAA,SAHAva,EAAAqE,MAAAkW,SAAA,WACAva,EAAAqE,MAAAmV,IAAApZ,EAAAqB,aAAA,YAMAI,IAAAoV,KACAjN,EAAA,iBACAiN,GAAAF,GAAA3W,EAAAqB,cAIA+Y,EAAA,cAiBA,IAhBAjT,EAAAkT,YACAD,GAAAjT,EAAAkT,UAAA,KAEAlT,EAAAY,kBACAqS,GAAA,0BAEAA,GAAA3D,GAAA,cAAA,gBACA2D,GAAAhG,GAAA0F,cAAA,uBAAA,GACAM,GAAAhG,GAAAzN,IAAA,aAAA,GACA3G,EAAAgC,SAAApC,EAAAwa,GAEAlT,EAAAqS,aAGAzD,GAAA,EACAkB,GAAA,KACAvW,EAAA,EAAAA,EA9mBA,EA8mBAA,IACAiL,IAAAjL,EAAAqV,GAAAzK,GAAAtC,EAAAoN,GAAA1V,GAAAQ,GAAAgD,OAGA2S,IACA5W,EAAAE,KAAAgH,EAAAqR,WAAAxC,EAAA7O,GAGAwC,EAAA,mBAAA,WACAxC,EAAAoT,WAAAnE,GAAA,GAAA/K,EAAA,GACAlE,EAAAoT,WAAAnE,GAAA,GAAA/K,EAAA,GAEA+K,GAAA,GAAAlV,GAAAgD,MAAA0U,QAAAxC,GAAA,GAAAlV,GAAAgD,MAAA0U,QAAA,QAEAxR,EAAAa,OAIApI,EAAAoI,QA1ZAhI,EAAAE,KAAAgB,SAAA,UAAAgG,GAEAkN,GAAAkE,WAEAtY,EAAAE,KAAAgH,EAAAqR,WAAA,QAAArR,GAIAC,EAAAI,WACAvH,EAAAE,KAAAgB,SAAA,YAAAuW,IAGAzX,EAAAE,KAAAqB,OAAA,kCAAA2F,GAEA0C,EAAA,gBAoZA1C,EAAAoT,WAAAnE,GAAA,GAAA/K,GAEAlE,EAAAqT,iBAEA3Q,EAAA,aAEAqN,KAWAhB,EAAAuE,YAAA,WACA1L,IAAAiE,IAAAc,IAAA3B,IAAAhL,EAAA0D,SAAAlC,kBACAxB,EAAAqS,cAEA,MAGAvZ,EAAAgC,SAAApC,EAAA,mBAIAyV,MAAA,WACAM,IAKAC,IADAD,GAAA,GAEA/L,EAAA,SAnbA5J,EAAAM,OAAAiB,OAAA,kCAAA2F,GACAlH,EAAAM,OAAAiB,OAAA,SAAAyU,EAAA0D,QACA1Z,EAAAM,OAAAY,SAAA,UAAAgG,GACAlH,EAAAM,OAAAY,SAAA,YAAAuW,IAEArD,GAAAkE,WACAtY,EAAAM,OAAA4G,EAAAqR,WAAA,QAAArR,GAGA6L,IACA/S,EAAAM,OAAAiB,OAAA0R,EAAA/L,GAGAR,aAAAoQ,IAEAlN,EAAA,gBAuaA6Q,GAAAvT,EAAA0D,SAAA,MAAA,EAAA1D,EAAAwT,WAIAA,QAAA,WACA9Q,EAAA,WAEA+Q,IACAjU,aAAAiU,IAGA/a,EAAAsa,aAAA,cAAA,QACAta,EAAAwB,UAAAsV,GAEAT,GACA2E,cAAA3E,GAGAjW,EAAAM,OAAA4G,EAAAqR,WAAAxC,EAAA7O,GAGAlH,EAAAM,OAAAiB,OAAA,SAAA2F,GAEAyM,KAEA3E,IAEArF,GAAA,MASAkR,MAAA,SAAA9R,EAAAC,EAAA8R,GACAA,IACA/R,EAAAgE,GAAAS,IAAAzE,EACAA,EAAAgE,GAAAS,IAAAzE,EACAA,EAAAgE,GAAAxG,IAAAwC,IACAA,EAAAgE,GAAAxG,IAAAwC,GAGAC,EAAA+D,GAAAS,IAAAxE,EACAA,EAAA+D,GAAAS,IAAAxE,EACAA,EAAA+D,GAAAxG,IAAAyC,IACAA,EAAA+D,GAAAxG,IAAAyC,IAIA4H,GAAA7H,EAAAA,EACA6H,GAAA5H,EAAAA,EACAuM,MAGAvO,YAAA,SAAA0G,GACAA,EAAAA,GAAAnM,OAAAwZ,MACA/E,EAAAtI,EAAAtN,OACA4V,EAAAtI,EAAAtN,MAAAsN,IAKAsN,KAAA,SAAAzR,GAIA,IAAA2K,GAFA3K,EAAAD,EAAAC,IAEA6B,EACA4L,GAAA9C,EAEA9I,EAAA7B,EACArC,EAAA0D,SAAAqP,GAAA7O,GACAE,IAAA4I,EAEAjJ,EAAAI,GAAAtC,EAAAuC,IAGA0D,IACAV,IAAA,EAEApH,EAAAqT,kBAEAU,KAAA,WACA/T,EAAA8T,KAAA5P,EAAA,IAEA8P,KAAA,WACAhU,EAAA8T,KAAA5P,EAAA,IAIA+P,mBAAA,SAAAC,GAMA,IACAC,EANAD,GACAxR,EAAA,eAAA,GAOAuI,GAHAgE,GAAA,GAAAlV,GAAAwX,SAAA/X,QACA2a,EAAAlF,GAAA,GAAAlV,GAAAwX,SAAA,GACAzY,EAAAiC,SAAAoZ,EAAA,mBACAA,EAAApX,MAEA,MAGA,KAGA8I,GAAA7F,EAAA0D,SAAAgC,OACAR,EAAA8F,EAAAhL,EAAA0D,SAAAlC,iBAEAkI,GAAA7H,EAAAgE,GAAAuO,OAAAvS,EACA6H,GAAA5H,EAAA+D,GAAAuO,OAAAtS,EAEAoS,GACAxR,EAAA,gBAKA2R,oBAAA,WACArF,IAAA,EACA,IAAA,IAAAzV,EAAA,EAAAA,EAxyBA,EAwyBAA,IACA0V,GAAA1V,GAAAgI,OACA0N,GAAA1V,GAAAgI,KAAA+S,aAAA,IAKAjB,eAAA,SAAAkB,GAEA,GAAA,IAAAzE,GAAA,CAIA,IACA0E,EADAC,EAAApY,KAAAuM,IAAAkH,IAGA,KAAAyE,GAAAE,EAAA,GAAA,CAKAzU,EAAA0D,SAAAqP,GAAA7O,GACAT,IAAA,EAEAf,EAAA,eAAAoN,IAh0BA,GAk0BA2E,IACA7F,GAAAkB,IAAA,EAAAA,IAn0BA,EAAA,GAo0BA2E,EAp0BA,GAs0BA,IAAA,IAAAlb,EAAA,EAAAA,EAAAkb,EAAAlb,IACA,EAAAuW,IACA0E,EAAAvF,GAAAlM,QACAkM,GAAAyF,GAAAF,EAGAhQ,MADAoK,EACA,GAAAzK,GAAAtC,EAAA2S,EAAAza,GAAAgD,OACAiD,EAAAoT,WAAAoB,EAAAtQ,EAAAuQ,EAAAlb,EAAA,EAAA,KAEAib,EAAAvF,GAAApF,MACAoF,GAAA0F,QAAAH,GAGAhQ,KADAoK,EACAzK,GAAAtC,EAAA2S,EAAAza,GAAAgD,OACAiD,EAAAoT,WAAAoB,EAAAtQ,EAAAuQ,EAAAlb,EAAA,EAAA,KAMA0R,IAAA,IAAA5O,KAAAuM,IAAAkH,MAEA8E,EAAA7B,GAAA7D,KACA1N,mBAAAwJ,IACArF,GAAAiP,EAAAhP,IACAsK,GAAA0E,GACAzE,GAAAyE,IAMA9E,GAAA,EAEA9P,EAAAiU,qBAEA/E,GAAAhL,EAEAxB,EAAA,kBAMA2P,WAAA,SAAAuB,GAEA,IAAA7D,IAAA9P,EAAAyB,MAAA,CACA,IAAAmT,EAAA/b,EAAAqB,aAKA,GAJAwV,KAAAkF,IACAnc,EAAAqE,MAAAmV,IAAA2C,EAAA,KACAlF,GAAAkF,IAEAjB,GAAA5D,GAAAnO,IAAAxH,OAAAya,YAAA9E,GAAAlO,IAAAzH,OAAA0a,YACA,OAEA/E,GAAAnO,EAAAxH,OAAAya,WACA9E,GAAAlO,EAAAzH,OAAA0a,YAGArc,EAAAqE,MAAAkV,OAAAjC,GAAAlO,EAAA,KAmBA,GAdA8D,GAAA/D,EAAA7B,EAAAqR,WAAAkB,YACA3M,GAAA9D,EAAA9B,EAAAqR,WAAA2D,aAEAzN,IAEApD,GAAAtC,EAAA+D,GAAA/D,EAAAxF,KAAAiI,MAAAsB,GAAA/D,EAAA5B,EAAAE,SACAgE,GAAArC,EAAA8D,GAAA9D,EAEAiC,EAAAI,GAAAtC,EAAAuC,IAEA1B,EAAA,qBAIAnI,IAAAqU,EAAA,CAMA,IAJA,IAAAqG,EACA1T,EACA2T,EAEA3b,EAAA,EAAAA,EA15BA,EA05BAA,IACA0b,EAAAhG,GAAA1V,GACAiL,IAAAjL,EAAAqV,GAAAzK,GAAAtC,EAAAoT,EAAAlb,GAAAgD,OAEAmY,EAAAhR,EAAA3K,EAAA,EAEA0G,EAAAK,MAAA,EAAAiC,OACA2S,EAAA9S,EAAA8S,KAIA3T,EAAAwR,GAAAmC,MAIAlG,IAAAzN,EAAA+S,cAAA/S,EAAAmE,SAEA1F,EAAAmV,WAAA5T,GAEAvB,EAAAoT,WAAA6B,EAAAC,GAGA,IAAA3b,IACAyG,EAAA0D,SAAAnC,EACAvB,EAAAiU,oBAAA,IAGA1S,EAAA+S,aAAA,IAEA,IAAAW,EAAA5S,OAAA,GAAA6S,GAEAlV,EAAAoT,WAAA6B,EAAAC,GAEA3T,GAAAA,EAAA6O,YACAzK,GAAApE,EAAAqE,IACAsK,GAAA3O,GACA4O,GAAA5O,IAIAyN,IAAA,EAGA9J,EAAA8F,EAAAhL,EAAA0D,SAAAlC,kBACAqE,GAAA7F,EAAA0D,SAAAgC,UAGAgE,GAAA7H,EAAAgE,GAAAuO,OAAAvS,EACA6H,GAAA5H,EAAA+D,GAAAuO,OAAAtS,EACAuM,IAAA,IAGA3L,EAAA,WAIA0S,OAAA,SAAAhP,EAAAiP,EAAAC,EAAAnN,EAAAoN,GASAF,IACAnQ,EAAA8F,EACAlG,GAAAjD,EAAAxF,KAAAuM,IAAAyM,EAAAxT,GAAA6H,GAAA7H,EACAiD,GAAAhD,EAAAzF,KAAAuM,IAAAyM,EAAAvT,GAAA4H,GAAA5H,EACAqD,EAAAH,GAAA0E,KAGA,IAAAxD,EAAAV,EAAAY,GAAA,GACAD,EAAA,GAEAF,EAAA,IAAAC,EAAAC,EAAAC,GACAH,EAAA,IAAAC,EAAAC,EAAAC,GAEA,IAAA5E,EAAAwJ,EACAwK,EACA9L,GAAA7H,EADA2T,EAEA9L,GAAA5H,EAGAwD,EAAAa,GAEAiC,EAAA,SAAAgG,GACA,IAAAA,GACApD,EAAA5E,EACAsD,GAAA7H,EAAAsE,EAAAtE,EACA6H,GAAA5H,EAAAqE,EAAArE,IAEAkJ,GAAA5E,EAAA5E,GAAA4M,EAAA5M,EACAkI,GAAA7H,GAAAsE,EAAAtE,EAAA2T,GAAApH,EAAAoH,EACA9L,GAAA5H,GAAAqE,EAAArE,EAAA0T,GAAApH,EAAAoH,GAGAD,GACAA,EAAAnH,GAGAC,GAAA,IAAAD,IAGAkH,EACAvN,EAAA,eAAA,EAAA,EAAAuN,EAAAnN,GAAArP,EAAAmD,OAAAC,KAAAM,MAAA4L,GAEAA,EAAA,KAwBA7C,GAAA,GACAF,GAAA,GACAhB,GAAA,GACA+H,GAAA,GACAC,GAAA,GACArC,GAAA,GACAc,GAAA,GAEAwB,GAAA,GACA3D,GAAA,GAKA8M,GAAA,EACAC,GAAA9T,IACAkM,GAAA,EAYAvJ,GAAA3C,IAGAkD,GAAAlD,IACAgL,GAAAhL,IAkBA6K,GAAA,WACAoD,KACAlI,GAAAkI,IACAA,GAAA,OAGAnD,GAAA,WACAb,KACAgE,GAAApH,GAAAiE,IACAiJ,OAQAzM,GAAA,SAAAnP,EAAAiF,GACA,SAAAjF,GAAAA,IAAAC,cAKAD,EAAA6b,aAAA,WAAA,EAAA7b,EAAA6b,aAAA,SAAA1L,QAAA,wBAIAlL,EAAAjF,GACAA,EAGAmP,GAAAnP,EAAA8b,WAAA7W,MAGAgK,GAAA,GAmCAoB,GAAA,GACAC,GAAA,GACAT,GAAA,GAsTA+L,GAAA,WAEA,GAAA/J,GAAA,CAIA,IA/UAkK,EAAAjU,EAAAC,EA/DAsD,EAAAC,EA8YAsG,EAAAC,GAAApS,OAEA,GAAA,IAAAmS,EASA,GALAxG,EAAAI,GAAAqG,GAAA,IAEAvH,GAAAxC,EAAA0D,GAAA1D,EAAAuK,GAAAvK,EACAwC,GAAAvC,EAAAyD,GAAAzD,EAAAsK,GAAAtK,EAEA6K,IAAA,EAAAhB,EAGAS,GAAAvK,EAAA0D,GAAA1D,EACAuK,GAAAtK,EAAAyD,GAAAzD,GAGAuC,GAAAxC,GAAAwC,GAAAvC,IAhaAsD,EAgaAwG,GAAA,GAhaAvG,EAgaAA,GA/ZAD,EAAAvD,IAAAwD,EAAAxD,GAAAuD,EAAAtD,IAAAuD,EAAAvD,MAmaAqD,EAAAE,GAAAuG,GAAA,IAGAzE,KACAA,IAAA,EACAzE,EAAA,uBAIAqT,EAAArN,EAAAnD,GAAAF,KAEAT,EAAAoR,GAAAD,IAGA/V,EAAA0D,SAAAlC,iBAAAxB,EAAA0D,SAAAlC,iBAAA,KACAyK,IAAA,GAIAgK,EAAA,EACAC,EAAApQ,IACAqQ,EAAApQ,IAEAnB,EAAAsR,EAEAjW,EAAAM,eAAA0L,IAAA/G,GAAAlF,EAAA0D,SAAAlC,kBAKA0B,EAFAkT,EAAA,GADAF,EAAAtR,IACAsR,EAAA,MAGAxT,EAAA,eAAA0T,GACAlK,IAAA,GAMAtH,EAAAsR,GAFAD,EADA,GADAA,GAAAC,EAAAtR,GAAAsR,GAEA,EAEAD,IAAAC,EAAA,GAGAC,EAAAvR,IAMAA,EAAAuR,GAFAF,EADA,GADAA,GAAArR,EAAAuR,IAAA,EAAAD,IAEA,EAEAD,GAAAC,GAGAD,EAAA,IACAA,EAAA,GAOA1M,EAAAhE,GAAAF,GAAAqQ,IAGAzQ,GAAApD,GAAA6T,GAAA7T,EAAA+K,GAAA/K,EACAoD,GAAAnD,GAAA4T,GAAA5T,EAAA8K,GAAA9K,EACAqD,EAAAyH,GAAA8I,IAEAhM,GAAA7H,EAAA6C,EAAA,IAAAE,GACA8E,GAAA5H,EAAA4C,EAAA,IAAAE,GAEAoH,GAAAhB,EAAApG,EACAoG,EAAApG,EACAyJ,WAMA,GAAAnD,KAIAY,KACAA,IAAA,EAliBA,IAsiBAzP,KAAAuM,IAAAvE,GAAAxC,KACAwC,GAAAxC,GAAA+J,GAAA,GAAA/J,EAAAwK,GAAAxK,GAviBA,IA0iBAxF,KAAAuM,IAAAvE,GAAAvC,KACAuC,GAAAvC,GAAA8J,GAAA,GAAA9J,EAAAuK,GAAAvK,IAIAsK,GAAAvK,EAAA0D,GAAA1D,EACAuK,GAAAtK,EAAAyD,GAAAzD,EAGA,IAAAuC,GAAAxC,GAAA,IAAAwC,GAAAvC,GAAA,CAIA,GAAA,MAAAoJ,IAAAjL,EAAAQ,qBAlfA,QAAAR,EAAA0B,WAAAqJ,IAAAhL,EAAA0D,SAAAlC,iBAmfA,CACAyD,GAAAnD,GAAAuC,GAAAvC,EACA4H,GAAA5H,GAAAuC,GAAAvC,EAEA,IAAAuU,EAAA5M,IAOA,OALApC,IAAA,EACA3E,EAAA,iBAAA2T,GAEAnT,EAAAmT,QACAhI,KAtdAyH,EA2dA7S,IA3dApB,EA2dA0D,GAAA1D,EA3dAC,EA2dAyD,GAAAzD,EA1dA,GAAAgU,EAAAvJ,MACA+J,EAAA,EAAAhK,GAAA9S,OAAA8S,GAAAvJ,QAAA,IACAlB,EAAAA,EACAyU,EAAAxU,EAAAA,EACAwK,GAAAnK,KAAAmU,GACA/J,GAAAuJ,GAudA5O,IAAA,EACArB,GAAA7F,EAAA0D,SAAAgC,OAEA4E,EAAA,IAAAjG,MAEAiG,EAAA,IAAAjG,IAEAiB,EAAAoE,IACA2E,SAuMAJ,GAAA,WAEA,IAAAsI,EACAC,EAGA1E,EAAA,CACA2E,gBAAA,GACAC,cAAA,GACAC,eAAA,GACAC,cAAA,GACAC,qBAAA,GACAC,uBAAA,GACAC,0BAAA,GACAC,eAAA,GACAC,oBAAA,GACAC,gBAAA,GACAhJ,oBAAA,SAAAvJ,GAKA6R,EAFA,EAAAlK,GAAA9S,QACA+c,EAAAtT,IAAAsJ,GAAA,GACAD,GAAAA,GAAA9S,OAAA,GAAAmL,KAEA4R,EAAAtT,IAAAuJ,GACAH,GAAA1H,IAEAmN,EAAA2E,gBAAA9R,GAAAyH,GAAAzH,GAAA6R,EACA1E,EAAA4E,cAAA/R,GAAAtI,KAAAuM,IAAAkJ,EAAA2E,gBAAA9R,IACA,GAAAmN,EAAA4E,cAAA/R,GACAmN,EAAA6E,eAAAhS,GAAAmN,EAAA2E,gBAAA9R,GAAA4R,EAEAzE,EAAA6E,eAAAhS,GAAA,EAEAtI,KAAAuM,IAAAkJ,EAAA6E,eAAAhS,IAAA,KACAmN,EAAA6E,eAAAhS,GAAA,GAGAmN,EAAA8E,cAAAjS,GAAA,IACAmN,EAAA+E,qBAAAlS,GAAA,EAAAmN,EAAA8E,cAAAjS,GACAmN,EAAAgF,uBAAAnS,GAAA,GAGAwS,8BAAA,SAAAxS,EAAA2Q,GACAxD,EAAAoF,gBAAAvS,KAEA+E,GAAA/E,GAAAkB,GAAAS,IAAA3B,GACAmN,EAAAmF,oBAAAtS,GAAAkB,GAAAS,IAAA3B,GAEA+E,GAAA/E,GAAAkB,GAAAxG,IAAAsF,KACAmN,EAAAmF,oBAAAtS,GAAAkB,GAAAxG,IAAAsF,SAGApK,IAAAuX,EAAAmF,oBAAAtS,KACAmN,EAAA8E,cAAAjS,GAAA,GACAmN,EAAA+E,qBAAAlS,GAAA,EAAAmN,EAAA8E,cAAAjS,GACAmN,EAAAiF,0BAAApS,GAAA,MAEAmN,EAAA6E,eAAAhS,GAAA,EACAmN,EAAAoF,gBAAAvS,IAAA,EAEAoD,EAAA,gBAAApD,EAAA+E,GAAA/E,GACAmN,EAAAmF,oBAAAtS,GACA2Q,GAAA,IACAxc,EAAAmD,OAAAC,KAAAC,IACA,SAAAib,GACA1N,GAAA/E,GAAAyS,EACA/I,WAUAgJ,oBAAA,SAAA1S,GACAmN,EAAAoF,gBAAAvS,KACAmN,EAAAgF,uBAAAnS,GAAAmN,EAAAgF,uBAAAnS,IAAAmN,EAAA8E,cAAAjS,GACAmN,EAAA+E,qBAAAlS,GACAmN,EAAA+E,qBAAAlS,GAAAmN,EAAAwF,SAAA,IAEAxF,EAAAiF,0BAAApS,GAAAtI,KAAAuM,IAAAkJ,EAAA6E,eAAAhS,GAAAmN,EAAAgF,uBAAAnS,IACAmN,EAAAkF,eAAArS,GAAAmN,EAAA6E,eAAAhS,GAAAmN,EAAAgF,uBAAAnS,GAAAmN,EAAAwF,SACA5N,GAAA/E,IAAAmN,EAAAkF,eAAArS,KAKA4S,YAAA,WACA7P,GAAA8P,UACA9P,GAAA8P,QAAAla,IAAAmL,GAAAqJ,EAAAyF,aAEAzF,EAAA1D,IAAAnL,IACA6O,EAAAwF,SAAAxF,EAAA1D,IAAA0D,EAAA2F,QACA3F,EAAA2F,QAAA3F,EAAA1D,IAEA0D,EAAAuF,oBAAA,KACAvF,EAAAuF,oBAAA,KAEAhJ,KAEAyD,EAAAqF,8BAAA,KACArF,EAAAqF,8BAAA,KAGArF,EAAAiF,0BAAAlV,EAAA,KAAAiQ,EAAAiF,0BAAAjV,EAAA,MAGA4H,GAAA7H,EAAAxF,KAAAiI,MAAAoF,GAAA7H,GACA6H,GAAA5H,EAAAzF,KAAAiI,MAAAoF,GAAA5H,GACAuM,KAEA5G,EAAA,eAOA,OAAAqK,GAGAvD,GAAA,SAAAmJ,GAUA,GARAA,EAAAxJ,oBAAA,KAEArI,GAAA7F,EAAA0D,SAAAgC,OAEAgS,EAAAT,oBAAA,GACAS,EAAAR,gBAAA,GAGA7a,KAAAuM,IAAA8O,EAAAf,eAAA9U,IAAA,KAAAxF,KAAAuM,IAAA8O,EAAAf,eAAA7U,IAAA,IAMA,OALA4V,EAAAX,0BAAAlV,EAAA6V,EAAAX,0BAAAjV,EAAA,EAGA4V,EAAAP,8BAAA,KACAO,EAAAP,8BAAA,MACA,EAIAtP,EAAA,WACA6P,EAAAD,QAAAxU,IACAyU,EAAAH,eAIAjJ,GAAA,SAAAP,EAAAC,GACA,IAAA2J,EAUAC,EATAxQ,KACAqO,GAAAvR,GAOA,UAAA6J,IACA6J,EAAAxL,GAAAvK,EAAAwK,GAAAxK,EACAgW,EAAA7J,EAAA0I,cAAA7U,EAAA,GA37BA,GA+7BA+V,IACAC,GAAA,GAAA7J,EAAAyI,gBAAA5U,GAEAiW,GAAA,EACAF,GAn8BA,KAo8BAC,GAAA7J,EAAAyI,gBAAA5U,GAAA,MAEAiW,EAAA,IAMAA,KAEA5T,GAAA4T,GAEA,GACA5T,EAAAjE,EAAAK,KAAAiC,KAAA,EAAA,EACAwV,GAAA,GACA7T,GAAA3B,OACA2B,EAAAjE,EAAAK,KAAA,EAAAiC,KAAA,EACAwV,GAAA,GAGAA,IAAA9X,EAAAK,OACAwP,IAAAgI,EACA1T,IAAA0T,EACAH,GAAA,IAOA,IAAAK,EAAA7T,GAAAtC,EAAAuC,GACA6T,EAAA5b,KAAAuM,IAAAoP,EAAAzT,GAAA1C,GAaAqW,EATAP,GAAAK,EAAAzT,GAAA1C,GAAA,EAAAmM,EAAA2I,eAAA9U,GAIAqW,EAAA,EAAA7b,KAAAuM,IAAAoF,EAAA2I,eAAA9U,GACAoW,EAAA5b,KAAAuM,IAAAoF,EAAA2I,eAAA9U,GACA,IAEAqW,EAAA7b,KAAAiK,IAAA4R,EAAA,KACA7b,KAAAgD,IAAA6Y,EAAA,MAPA,IAqCA,OA3BAzC,KAAAvR,IACAyT,GAAA,GAGAvQ,IAAA,EAEA1E,EAAA,uBAEAqF,EAAA,aAAAxD,GAAA1C,EAAAmW,EAAAE,EAAApf,EAAAmD,OAAAS,MAAAP,IACA4H,EACA,WACA+D,IACAV,IAAA,EACAqO,IAAA,GAEAkC,GAAAlC,KAAAvR,GACAlE,EAAAqT,iBAGA3Q,EAAA,4BAIAiV,GACA3X,EAAAqT,gBAAA,GAGAsE,GAGA3B,GAAA,SAAAmC,GACA,OAAA,EAAAtL,GAAAsL,EAAAjT,GAIAsJ,GAAA,WACA,IAAApI,EAAA4E,EACAkL,EAAApQ,IACAqQ,EAAApQ,IAEAiF,EAAAkL,EACA9P,EAAA8P,EACAC,EAAAnL,IACA5E,EAAA+P,GAGA,IACA/N,EACAgQ,EAAAhV,GAEA,OAAA8I,KAAAF,KAAAC,IAAAjB,EAAAkL,EAEAlW,EAAAmO,QAUAnO,EAAAoV,OAAAhP,EAAA,EAAA,IAAAtN,EAAAmD,OAAAS,MAAAP,IALAiM,EADA8D,GACA,SAAAkC,GACAlL,GAZA,EAYAkV,GAAAhK,EAAAgK,IAIAhQ,IATA,GAcArG,EAAA,WAAA,CACAE,cAAA,CAEAoW,aAAA,WAGA,SAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,GACAxJ,GAAAoJ,EAAAC,EACApJ,GAAAmJ,EAAAE,EACApJ,GAAAkJ,EAAAG,EAEApJ,GADAqJ,EACAJ,EAAAI,EAEA,IAIA7O,GAAAoD,GAAAzP,eACAyP,GAAA9P,QAEA8P,GAAA9P,OAAA,GAGA0M,GACApM,UAAAC,iBAEA2a,EAAA,YAAA,OAAA,OAAA,KAAA,UAEAA,EAAA,UAAA,OAAA,OAAA,KAAA,UAEApL,GAAA9P,OACAkb,EAAA,QAAA,QAAA,OAAA,MAAA,UACA/I,IAAA,GAEA+I,EAAA,QAAA,OAAA,OAAA,MAGAvM,EAAAqD,GAAA,IAAAC,GAAA,IAAAC,GACAT,EAAAM,GAEArF,KAAAyF,KACAA,GAAA,EAAA7R,UAAAkb,gBAAA,EAAAlb,UAAAmb,kBAGA7Y,EAAA8Y,kBAAAvJ,GAEAT,EAAAK,IAAA/D,EACA0D,EAAAM,IAAAtC,EACAgC,EAAAO,IAAApC,EAEAqC,KACAR,EAAAQ,IAAAR,EAAAO,KAIAnC,GAAA9P,QACAyR,GAAA,aACA9C,GAAA,qBACA+C,EAAAiK,UAAAjK,EAAAK,IACAL,EAAAkK,UAAAlK,EAAAM,IACAN,EAAAmK,QAAAnK,EAAAO,KAGAE,KAEAtP,EAAAC,gBAAA,OA6NA,SAAAgZ,KACA,MAAA,CACA9E,OAAA,CAAAvS,EAAA,EAAAC,EAAA,GACAzC,IAAA,CAAAwC,EAAA,EAAAC,EAAA,GACAwE,IAAA,CAAAzE,EAAA,EAAAC,EAAA,IA6FA,SAAAqX,GAAA9W,EAAAd,EAAA6X,EAAAC,EAAAC,EAAAC,GAGAhY,EAAAiY,WAIAH,IAEA9X,EAAAkY,eAAA,EACAvJ,GAAA3O,EAAA8X,EAAA9X,IAAAvB,EAAA0D,UAAAD,IAEA2V,EAAAM,YAAAL,GAEAE,GACAha,WAAA,WACAgC,GAAAA,EAAAoY,QAAApY,EAAAqY,cACArY,EAAAqY,YAAA7c,MAAA0U,QAAA,OACAlQ,EAAAqY,YAAA,OAEA,MAOA,SAAAC,GAAAtY,GAIA,SAAA8G,IACA9G,EAAAuY,SAAA,EACAvY,EAAAoY,QAAA,EAEApY,EAAAwY,aACAxY,EAAAwY,aAAAxY,GAEAA,EAAA8X,IAAA,KAEAA,EAAAW,OAAAX,EAAAY,QAAA,KACAZ,EAAA,KAbA9X,EAAAuY,SAAA,EACAvY,EAAAoY,QAAA,EACA,IAAAN,EAAA9X,EAAA8X,IAAAvgB,EAAAc,SAAA,YAAA,OAqBA,OARAyf,EAAAW,OAAA3R,EACAgR,EAAAY,QAAA,WACA1Y,EAAAiY,WAAA,EACAnR,KAGAgR,EAAAa,IAAA3Y,EAAA2Y,IAEAb,EAEA,SAAAc,GAAA5Y,EAAA6Y,GACA,OAAA7Y,EAAA2Y,KAAA3Y,EAAAiY,WAAAjY,EAAA6O,YAEAgK,IACA7Y,EAAA6O,UAAAiK,UAAA,IAGA9Y,EAAA6O,UAAAiK,UAAApa,EAAAqa,SAAAzf,QAAA,QAAA0G,EAAA2Y,KAJA,GA6BA,SAAAK,KAEA,GAAAC,GAAAhhB,OAAA,CAGA,IAFA,IAAAihB,EAEAlhB,EAAA,EAAAA,EAAAihB,GAAAhhB,OAAAD,KACAkhB,EAAAD,GAAAjhB,IACA0b,OAAA5S,QAAAoY,EAAApY,OACA8W,GAAAsB,EAAApY,MAAAoY,EAAAlZ,KAAAkZ,EAAArB,QAAAqB,EAAApB,IAAA,EAAAoB,EAAAC,kBAGAF,GAAA,IAvYA,IAAA/G,GAmLAkH,GAGAC,GACArP,GAYAwH,GACAxQ,GAnMAgR,GAAA,SAAAhS,EAAA8X,EAAAld,EAAA0e,GAWA,IAAAC,EATArH,IACAjU,aAAAiU,IAIAmH,GADArP,IAAA,EAMAhK,EAAAwZ,eACAD,EAAAvZ,EAAAwZ,cACAxZ,EAAAwZ,cAAA,MAEAD,EAAA7a,EAAA+a,kBAAA/a,EAAA+a,iBAAA9W,GAKA,SAAAmE,IACAZ,EAAA,eACAtL,GAQA6D,EAAAtH,SAAAuiB,gBAAA,SACAjb,EAAAqD,GAAA4X,gBAAA,WARA/X,EAAA,GACAmW,IACAA,EAAAtc,MAAA0U,QAAA,SAEA3Y,EAAAgC,SAAApC,EAAA,qBACAgK,EAAA,eAAAvG,EAAA,SAAA,WAMA0e,GACAA,IAEAtP,IAAA,EAnBA,IAAA2P,EAAA/e,EAAA8D,EAAAU,sBAAAV,EAAAW,sBAuBA,IAAAsa,IAAAJ,QAAAvgB,IAAAugB,EAAAjZ,EAmBA,OAjBAa,EAAA,eAAAvG,EAAA,MAAA,OAEA6O,EAAAzJ,EAAAC,iBACA2D,EAAAuE,GAAAnI,EAAA8E,iBACAgI,KAEA3V,EAAAqE,MAAAoG,QAAAhH,EAAA,EAAA,EACA+G,EAAA,QAEAgY,EACA3b,WAAA,WACA8I,KACA6S,GAEA7S,KAMA,IACA8S,EACAC,EADAD,EAAAxM,EACAyM,GAAApb,EAAA0D,SAAAwW,KAAAla,EAAA0D,SAAA8V,WAAAvZ,EAAAY,gBAGAU,EAAA8Z,UACA9Z,EAAA8Z,QAAAte,MAAAue,yBAAA,UAGAnf,IACA6O,EAAA8P,EAAA9U,EAAAzE,EAAAyE,EACA0D,GAAA7H,EAAAiZ,EAAAjZ,EACA6H,GAAA5H,EAAAgZ,EAAAhZ,EAAA2N,GAEAzP,EAAAob,EAAA,WAAA,MAAAre,MAAAoG,QAAA,KACAkL,MAGAxG,EAAA,eAEA1L,IAAAgf,GACAriB,EAAA4B,YAAAhC,EAAA,qBAGA0iB,IACAjf,EACArD,GAAAqiB,EAAA,SAAA,OAAA,SAAAziB,EAAA,yBAEA6G,WAAA,WACAzG,EAAAgC,SAAApC,EAAA,0BACA,KAIA+a,GAAAlU,WAAA,WAKA,IAsBA6G,EACAoP,EAAAA,EAIAhU,EACA+Z,EACAnT,EAhCA1F,EAAA,eAAAvG,EAAA,MAAA,OAGAA,GAsBAiK,EAAA0U,EAAA9U,EAAAzE,EAAAyE,EACAwP,EACA9L,GAAA7H,EADA2T,EAEA9L,GAAA5H,EAEAN,EAAAwJ,EACAuQ,EAAAnY,GACAgF,EAAA,SAAAgG,GAEA,IAAAA,GACApD,EAAA5E,EACAsD,GAAA7H,EAAAiZ,EAAAjZ,EACA6H,GAAA5H,EAAAgZ,EAAAhZ,EAAA6N,KAEA3E,GAAA5E,EAAA5E,GAAA4M,EAAA5M,EACAkI,GAAA7H,GAAAiZ,EAAAjZ,EAAA2T,GAAApH,EAAAoH,EACA9L,GAAA5H,GAAAgZ,EAAAhZ,EAAA6N,GAAA6F,GAAApH,EAAAoH,GAGAnH,KACA+M,EACA1iB,EAAAqE,MAAAoG,QAAA,EAAAiL,EAEAlL,EAAAqY,EAAAnN,EAAAmN,IAIAJ,EACApT,EAAA,cAAA,EAAA,EAAAmT,EAAApiB,EAAAmD,OAAAS,MAAAP,IAAAiM,EAAAC,IAEAD,EAAA,GACAqL,GAAAlU,WAAA8I,EAAA6S,EAAA,OA9CAlQ,EAAAzJ,EAAAC,iBACA2D,EAAAuE,GAAAnI,EAAA8E,iBACAgI,KACAnL,EAAA,GAEAkY,EACA1iB,EAAAqE,MAAAoG,QAAA,EAEAD,EAAA,GAGAuQ,GAAAlU,WAAA8I,EAAA6S,EAAA,MAuCA/e,EAAA,GAAA,KAmBAqf,GAAA,GACAhB,GAAA,GAGAiB,GAAA,CACApZ,MAAA,EACAiY,SAAA,wGACAoB,yBAAA,EACAC,QAAA,CAAA,EAAA,GACAC,cAAA,WACA,OAAAjB,GAAAnhB,SAmCAmM,GAAA,SAAApE,EAAAmP,EAAA9L,GAEA,IAAArD,EAAA2Y,KAAA3Y,EAAAiY,UA4DA,OANAjY,EAAAyE,EAAAzE,EAAAwQ,EAAA,EACAxQ,EAAAC,iBAAAD,EAAAoC,SAAA,EACApC,EAAAmE,OAAAwT,KACA3X,EAAA8E,gBAAA9E,EAAAmE,OAAA0O,OAGA7S,EAAAmE,OA3DA,IAvBAmW,EAAAC,EACApW,EAsBAqW,GAAAnX,EAyCA,OAvCAmX,IACAxa,EAAAya,OACAza,EAAAya,KAAA,CAAA9J,IAAA,EAAA+J,OAAA,IAGAvZ,EAAA,sBAAAnB,IAIAia,GAAA3Z,EAAA6O,EAAA7O,EACA2Z,GAAA1Z,EAAA4O,EAAA5O,EAAAP,EAAAya,KAAA9J,IAAA3Q,EAAAya,KAAAC,OAEAF,IACAG,EAAAV,GAAA3Z,EAAAN,EAAAyE,EACAmW,EAAAX,GAAA1Z,EAAAP,EAAAwQ,EAEAxQ,EAAAoC,SAAAuY,EAAAC,EAAAD,EAAAC,EAKA,UAFAxa,EAAA1B,EAAA0B,WAGAiD,EAAA,EACA,QAAAjD,IACAiD,EAAArD,EAAAoC,UAOApC,EAAAC,iBAHAoD,EADA,EAAAA,EACA,EAGAA,EAEArD,EAAAmE,SAEAnE,EAAAmE,OAAAwT,OAIAtU,GAhEAiX,GAAAta,EAoEAA,GAAAyE,EAAApB,EApEAkX,EAoEAva,EAAAwQ,EAAAnN,GAnEAc,EAAAnE,EAAAmE,QAGA0O,OAAAvS,EAAAxF,KAAAiI,OAAAkX,GAAA3Z,EAAAga,GAAA,GACAnW,EAAA0O,OAAAtS,EAAAzF,KAAAiI,OAAAkX,GAAA1Z,EAAAga,GAAA,GAAAva,EAAAya,KAAA9J,IAGAxM,EAAArG,IAAAwC,EAAAga,EAAAL,GAAA3Z,EACAxF,KAAAiI,MAAAkX,GAAA3Z,EAAAga,GACAnW,EAAA0O,OAAAvS,EAEA6D,EAAArG,IAAAyC,EAAAga,EAAAN,GAAA1Z,EACAzF,KAAAiI,MAAAkX,GAAA1Z,EAAAga,GAAAva,EAAAya,KAAA9J,IACAxM,EAAA0O,OAAAtS,EAGA4D,EAAAY,IAAAzE,EAAAga,EAAAL,GAAA3Z,EAAA,EAAA6D,EAAA0O,OAAAvS,EACA6D,EAAAY,IAAAxE,EAAAga,EAAAN,GAAA1Z,EAAAP,EAAAya,KAAA9J,IAAAxM,EAAA0O,OAAAtS,EAoDAia,GAAAnX,IAAArD,EAAAC,mBACAD,EAAA8E,gBAAA9E,EAAAmE,OAAA0O,QAGA7S,EAAAmE,aAVA,GA2FAwK,GAAA,SAAA3O,EAAA8X,EAAA+C,GACA,IAQApW,EARAzE,EAAA2Y,MAKAb,EADAA,GACA9X,EAAA6O,UAAAiM,UAGArW,EAAAoW,EAAA7a,EAAAyE,EAAA3J,KAAAiI,MAAA/C,EAAAyE,EAAAzE,EAAAoC,UACAoO,EAAAqK,EAAA7a,EAAAwQ,EAAA1V,KAAAiI,MAAA/C,EAAAwQ,EAAAxQ,EAAAoC,UAEApC,EAAAqY,cAAArY,EAAAoY,SACApY,EAAAqY,YAAA7c,MAAAiV,MAAAhM,EAAA,KACAzE,EAAAqY,YAAA7c,MAAAkV,OAAAF,EAAA,MAGAsH,EAAAtc,MAAAiV,MAAAhM,EAAA,KACAqT,EAAAtc,MAAAkV,OAAAF,EAAA,OAmBAhQ,EAAA,aAAA,CAEAE,cAAA,CAEAqa,aAAA,SAAAja,GACAA,EAAAD,EAAAC,GACA,IAAAd,EAAAwR,GAAA1Q,GAEAd,KAAAA,EAAAoY,SAAApY,EAAAuY,SAAA9K,MAIAtM,EAAA,cAAAL,EAAAd,GAEAA,EAAA2Y,KAIAL,GAAAtY,KAEAgb,eAAA,WACAzjB,EAAA6C,OAAAsE,EAAAwb,IAAA,GACAzb,EAAApH,MAAA+hB,GAAA/hB,EACAma,GAAA/S,EAAAwc,UACAja,GAAAtC,EAAA2b,cAIA3b,EAAAK,KACAiC,KAAA,IACAtC,EAAAK,MAAA,GAGAkC,EAAA,eAAA,SAAAwK,GASA,IAPA,IAAAzH,EAAAtF,EAAA0b,QACAc,EAAA,OAAAzP,GAAA,GAAAA,EACA0P,EAAArgB,KAAAiK,IAAAf,EAAA,GAAAhD,MACAoa,EAAAtgB,KAAAiK,IAAAf,EAAA,GAAAhD,MAIAhJ,EAAA,EAAAA,IAAAkjB,EAAAE,EAAAD,GAAAnjB,IACAyG,EAAAsc,aAAApY,EAAA3K,GAEA,IAAAA,EAAA,EAAAA,IAAAkjB,EAAAC,EAAAC,GAAApjB,IACAyG,EAAAsc,aAAApY,EAAA3K,KAIAiJ,EAAA,gBAAA,WACAxC,EAAA0D,SAAAqX,cAAA9a,EAAA+a,kBAAA/a,EAAA+a,iBAAA9W,KAGA1B,EAAA,yBAAA+X,IACA/X,EAAA,mBAAA+X,IAIA/X,EAAA,UAAA,WAEA,IADA,IAAAjB,EACAhI,EAAA,EAAAA,EAAAohB,GAAAnhB,OAAAD,KACAgI,EAAAoZ,GAAAphB,IAEA6W,YACA7O,EAAA6O,UAAA,MAEA7O,EAAAqY,cACArY,EAAAqY,YAAA,MAEArY,EAAA8X,MACA9X,EAAA8X,IAAA,MAEA9X,EAAAqb,YACArb,EAAAqb,UAAA,MAEArb,EAAAiY,YACAjY,EAAAoY,OAAApY,EAAAiY,WAAA,GAGAgB,GAAA,QAKAgC,UAAA,SAAAna,GACA,OAAA,GAAAA,SACA9H,IAAAogB,GAAAtY,IAAAsY,GAAAtY,KAKAwa,oBAAA,WAWA,OAAA5c,EAAAyb,0BAAAnM,IAAAtP,EAAAI,WAAA,KAAAyc,OAAA9K,OAIAoB,WAAA,SAAA6B,EAAA5S,GAEApC,EAAAK,OACA+B,EAAAD,EAAAC,IAGA,IAAAuS,EAAA5U,EAAAwc,UAAAvH,EAAA5S,OACAuS,IACAA,EAAAxE,UAAA,MAGA,IACAiJ,EAcAD,EAfA7X,EAAAvB,EAAAwc,UAAAna,GAGAd,GAMAmB,EAAA,cAAAL,EAAAd,GAEA0T,EAAA5S,MAAAA,EAIA+W,GAHAnE,EAAA1T,KAAAA,GAGA6O,UAAAtX,EAAAc,SAAA,oBAIA2H,EAAA2Y,KAAA3Y,EAAAwb,OACAxb,EAAAwb,KAAA3b,QACAgY,EAAAM,YAAAnY,EAAAwb,MAEA3D,EAAAiB,UAAA9Y,EAAAwb,MAIA5C,GAAA5Y,GAEAoE,GAAApE,EAAAqE,KAEArE,EAAA2Y,KAAA3Y,EAAAiY,WAAAjY,EAAAoY,OA0FApY,EAAA2Y,MAAA3Y,EAAAiY,aAEAH,EAAAvgB,EAAAc,SAAA,YAAA,QACAmD,MAAAoG,QAAA,EACAkW,EAAAa,IAAA3Y,EAAA2Y,IACAhK,GAAA3O,EAAA8X,GACAF,GAAA9W,EAAAd,EAAA6X,EAAAC,KA9FA9X,EAAAwY,aAAA,SAAAxY,GAGA,GAAAkN,EAAA,CAKA,GAAAwG,GAAAA,EAAA5S,QAAAA,EAAA,CACA,GAAA8X,GAAA5Y,GAAA,GASA,OARAA,EAAAwY,aAAAxY,EAAA8X,IAAA,KACA1T,GAAApE,EAAAqE,IACAuK,GAAA5O,QAEA0T,EAAA5S,QAAA6B,GAEAlE,EAAAiU,sBAIA1S,EAAAkY,eAeAlO,IAAAhK,EAAAqY,cACArY,EAAAqY,YAAA7c,MAAA0U,QAAA,OACAlQ,EAAAqY,YAAA,MAhBA1M,GAAAkE,YAAAhK,IAAAmE,IACAiP,GAAArY,KAAA,CACAZ,KAAAA,EACA6X,QAAAA,EACAC,IAAA9X,EAAA8X,IACAhX,MAAAA,EACA4S,OAAAA,EACAyF,kBAAA,IAGAvB,GAAA9W,EAAAd,EAAA6X,EAAA7X,EAAA8X,IAAAjS,GAAA,GAWA7F,EAAAwY,aAAA,KACAxY,EAAA8X,IAAA,KAEA3W,EAAA,oBAAAL,EAAAd,KAGAzI,EAAAC,SAAAqY,YAEA4L,EAAA,mCACAA,GAAAzb,EAAA0b,KAAA,GAAA,iCAEArD,EAAA9gB,EAAAc,SAAAojB,EAAAzb,EAAA0b,KAAA,MAAA,IACA1b,EAAA0b,OACArD,EAAAM,IAAA3Y,EAAA0b,MAGA/M,GAAA3O,EAAAqY,GAEAR,EAAAM,YAAAE,GACArY,EAAAqY,YAAAA,GAOArY,EAAAuY,SACAD,GAAAtY,GAIAvB,EAAA6c,yBAEAjC,IAAA1N,GAAAkE,UACAoJ,GAAArY,KAAA,CACAZ,KAAAA,EACA6X,QAAAA,EACAC,IAAA9X,EAAA8X,IACAhX,MAAAA,EACA4S,OAAAA,IAGAkE,GAAA9W,EAAAd,EAAA6X,EAAA7X,EAAA8X,IAAA,GAAA,KAcAuB,IAAAvY,IAAA6B,EAIAiM,GAAA5O,IAHA0J,GAAAmO,EAAArc,MACAwW,GAAAhS,EAAA8X,GAAA9X,EAAA8X,MAKApE,EAAAlb,GAAAsgB,UAAA,GACApF,EAAAlb,GAAA2f,YAAAN,IAvIAnE,EAAAlb,GAAAsgB,UAAA,IA0IAlF,WAAA,SAAA5T,GACAA,EAAA8X,MACA9X,EAAA8X,IAAAW,OAAAzY,EAAA8X,IAAAY,QAAA,MAEA1Y,EAAAoY,OAAApY,EAAAuY,QAAAvY,EAAA8X,IAAA9X,EAAAkY,eAAA,MAkBA,SAAAyD,GAAAC,EAAAhQ,EAAAK,GACA,IAAAhH,EAAAxM,SAAAojB,YAAA,eACAC,EAAA,CACAF,UAAAA,EACAlkB,OAAAkkB,EAAAlkB,OACAkU,aAAAA,EACAK,YAAAA,GAAA,SAGAhH,EAAA8W,gBAAA,WAAA,GAAA,EAAAD,GACAF,EAAAlkB,OAAAskB,cAAA/W,GAZA,IAAAgX,GAsFAC,GArFAC,GAAA,GAcA3b,EAAA,MAAA,CACAE,cAAA,CACA0b,QAAA,WACAnb,EAAA,kBAAAxC,EAAA4d,YACApb,EAAA,eAAAxC,EAAA6d,cACArb,EAAA,UAAA,WACAkb,GAAA,GACAF,GAAA,QAGAI,WAAA,SAAAnQ,GACA,EAAAA,EAAAjU,SACAgG,aAAAge,IACAA,GAAA,OAGAK,aAAA,SAAArX,EAAA2G,GACA,IAKA2Q,EAvyDAC,EAAAC,EAkyDA7Q,IAIAjG,IAAAiF,IAAAvE,KACAkW,EAAA3Q,EACAqQ,KACAhe,aAAAge,IACAA,GAAA,KA1yDAO,EA6yDAD,EA7yDAE,EA6yDAN,GA5yDArhB,KAAAuM,IAAAmV,EAAAlc,EAAAmc,EAAAnc,GAzkCA,IAykCAxF,KAAAuM,IAAAmV,EAAAjc,EAAAkc,EAAAlc,GAzkCA,IAs3FAY,EAAA,YAAAob,GAKA,UAAA3Q,EAAAjU,KAOA,WAFAsN,EAAAvN,OAAAmI,QAAAvC,eAEA/F,EAAAiC,SAAAyL,EAAAvN,OAAA,oBACAikB,GAAA1W,EAAA2G,IAIAhI,EAAAuY,GAAAI,GAEAN,GAAAje,WAAA,WACA2d,GAAA1W,EAAA2G,GACAqQ,GAAA,MACA,MAhBAN,GAAA1W,EAAA2G,EAAA,eAsCApL,EAAA,cAAA,CAEAE,cAAA,CAEAgc,gBAAA,WAEAvO,KAKAH,GAGA/M,EAAA,YAAA,WACAxC,EAAAke,qBAGAle,EAAAke,kBAAA,KAKAA,iBAAA,SAAAC,GAEAV,GAAA,GAEA,IAAAW,EAAA,kCAEA5b,EAAA,aAAA,WACA1J,EAAAE,KAAAN,EAAA0lB,EAAApe,EAAAqe,oBAGA7b,EAAA,eAAA,WACAib,IACA3kB,EAAAM,OAAAV,EAAA0lB,EAAApe,EAAAqe,oBAIAre,EAAAse,eAAA,EAGA,SAAAC,IACAve,EAAAse,gBACAxlB,EAAA4B,YAAAhC,EAAA,mBACAsH,EAAAse,eAAA,GAEAtT,EAAA,EACAlS,EAAAgC,SAAApC,EAAA,sBAEAI,EAAA4B,YAAAhC,EAAA,sBAEA8lB,IAXA,IAAAC,EAaAD,EAAA,WACAC,IACA3lB,EAAA4B,YAAAhC,EAAA,kBACA+lB,GAAA,IAIAjc,EAAA,SAAA+b,GACA/b,EAAA,cAAA+b,GACA/b,EAAA,cAAA,WACAxC,EAAAse,gBACAG,GAAA,EACA3lB,EAAAgC,SAAApC,EAAA,qBAGA8J,EAAA,YAAAgc,GAEAL,GACAI,KAKAF,iBAAA,SAAA7X,GAEA,GAAAwE,GAAAhL,EAAA0D,SAAAC,SAaA,OAZA1D,EAAAyB,SAEAzB,EAAAO,eAAAoH,IAAAiE,GACArF,EAAAO,iBACAnD,IAAA,EAAAvH,KAAAuM,IAAApC,EAAAkY,UAGA/P,GAAA,EACA3O,EAAAmO,WAIA,EASA,GALA3H,EAAAc,kBAGAmW,GAAA5b,EAAA,EAEA,WAAA2E,EACA,IAAAA,EAAAmY,WAEAlB,GAAA5b,EAAA,GAAA2E,EAAAoY,OACAnB,GAAA3b,EAAA,GAAA0E,EAAAkY,SAEAjB,GAAA5b,EAAA2E,EAAAoY,OACAnB,GAAA3b,EAAA0E,EAAAkY,aAEA,GAAA,eAAAlY,EACAA,EAAAqY,cACApB,GAAA5b,GAAA,IAAA2E,EAAAqY,aAEArY,EAAAsY,YACArB,GAAA3b,GAAA,IAAA0E,EAAAsY,YAEArB,GAAA3b,GAAA,IAAA0E,EAAAuY,eAEA,CAAA,KAAA,WAAAvY,GAGA,OAFAiX,GAAA3b,EAAA0E,EAAAwY,OAKAxZ,EAAAwF,GAAA,GAEA,IAAAiU,EAAAvV,GAAA7H,EAAA4b,GAAA5b,EACAqd,EAAAxV,GAAA5H,EAAA2b,GAAA3b,GAGA7B,EAAAyB,OAEAud,GAAApZ,GAAAS,IAAAzE,GAAAod,GAAApZ,GAAAxG,IAAAwC,GACAqd,GAAArZ,GAAAS,IAAAxE,GAAAod,GAAArZ,GAAAxG,IAAAyC,IAEA0E,EAAAO,iBAIA/G,EAAA2T,MAAAsL,EAAAC,IAGAC,kBAAA,SAAA9J,GACAA,EAAAA,GAAA,CAAAxT,EAAA+D,GAAA/D,EAAA,EAAAkD,GAAAlD,EAAAC,EAAA8D,GAAA9D,EAAA,EAAAiD,GAAAjD,GAEA,IAAAsd,EAAAnf,EAAAoB,kBAAA,EAAArB,EAAA0D,UACA2b,EAAArU,IAAAoU,EAEApf,EAAAse,eAAAe,EAEArf,EAAAoV,OAAAiK,EAAArf,EAAA0D,SAAAlC,iBAAA4d,EAAA/J,EAAA,KACAvc,GAAAumB,EAAA,SAAA,OAAA,SAAA3mB,EAAA,uBA2CA,SAAA4mB,KACA,OAAAC,GAAAC,KAAAC,UAAA,GAEA,SAAAC,KAEAC,IACAngB,aAAAmgB,IAGAC,IACApgB,aAAAogB,IAMA,SAAAC,KACA,IAAAL,EAAAF,KACAQ,EAAA,GAEA,GAAAN,EAAAhmB,OAAA,EACA,OAAAsmB,EAGA,IAKAC,EALAC,EAAAR,EAAAlmB,MAAA,KACA,IAAAC,EAAA,EAAAA,EAAAymB,EAAAxmB,OAAAD,IACAymB,EAAAzmB,MAGAwmB,EAAAC,EAAAzmB,GAAAD,MAAA,MACAE,OAAA,IAGAsmB,EAAAC,EAAA,IAAAA,EAAA,KAEA,GAAA9f,EAAAggB,aAIA,IAFA,IAAAC,EAAAJ,EAAAK,IAEA5mB,EADAumB,EAAAK,IAAA,EACA5mB,EAAAohB,GAAAnhB,OAAAD,IACA,GAAAohB,GAAAphB,GAAA4mB,MAAAD,EAAA,CACAJ,EAAAK,IAAA5mB,EACA,YAIAumB,EAAAK,IAAAniB,SAAA8hB,EAAAK,IAAA,IAAA,EAKA,OAHAL,EAAAK,IAAA,IACAL,EAAAK,IAAA,GAEAL,EAtEA,IAKAH,GACAS,GACAR,GACAS,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACApB,GAEAqB,GAjBAC,GAAA,CACAC,SAAA,EACAC,WAAA,GAsEAC,GAAA,WAOA,IAoBAC,EASAC,EAlCAtB,IACApgB,aAAAogB,IAIAhY,IAAAiE,GAGA+T,GAAArgB,WAAAyhB,GAAA,MAIAX,GACA7gB,aAAA4gB,IAEAC,IAAA,EAIAF,EAAAjc,EAAA,GACA3C,EAAAwR,GAAA7O,IACAlI,eAAA,SAEAmkB,EAAA5e,EAAA4e,KAEAc,EAAAT,GAAA,QAAAvgB,EAAA8gB,WAAA,QAAAZ,EAEAM,KACA,IAAAlB,GAAAC,KAAAtV,QAAA+W,KACAN,IAAA,GAKAO,EAAA3B,GAAA4B,KAAA7nB,MAAA,KAAA,GAAA,IAAA2nB,EAEAL,GAEA,IAAAK,IAAA5mB,OAAA+mB,SAAA5B,MACAsB,QAAAL,GAAA,eAAA,aAAA,GAAAzmB,SAAAqnB,MAAAH,GAIAT,GACAlB,GAAA1kB,QAAAqmB,GAEA3B,GAAAC,KAAAyB,EAMAR,IAAA,EACAL,GAAA7gB,WAAA,WACA8gB,IAAA,GACA,MAOAte,EAAA,UAAA,CAIAE,cAAA,CACAqf,YAAA,WAIA,IAyBAC,EA8CAlf,EAzEAvJ,EAAA6C,OAAAsE,EAAA4gB,IAAA,GAEA5gB,EAAA6gB,UAKAvB,GAAAllB,OAAA+mB,SAGAX,GADAC,GADAC,IAAA,EAGAH,GAAAlB,KACAsB,GAAA,cAAAE,SAGA,EAAAN,GAAAtW,QAAA,UAEAsW,IADAA,GAAAA,GAAAlnB,MAAA,SAAA,IACAA,MAAA,SAAA,IAIAkJ,EAAA,cAAAxC,EAAAwhB,WACAhf,EAAA,eAAA,WACA1J,EAAAM,OAAAiB,OAAA,aAAA2F,EAAAyhB,gBAIAF,EAAA,WACAhB,IAAA,EACAG,KAEAC,GACAG,QAAAY,OAGAlB,GACAjB,GAAAC,KAAAgB,GAEAI,GAGAE,QAAAa,UAAA,GAAA3nB,SAAAqnB,MAAA9B,GAAAqC,SAAArC,GAAAsC,QAEAtC,GAAAC,KAAA,IAOAE,MAIAld,EAAA,eAAA,WACAmM,GAGA4S,MAGA/e,EAAA,UAAA,WACA+d,IACAgB,MAGA/e,EAAA,cAAA,WACA0B,EAAA2b,KAAAM,OAOA,GADA9d,EAAAme,GAAAtW,QAAA,UAGA,OADAsW,GAAAA,GAAAf,UAAA,EAAApd,IACAvD,OAAA,KACA0hB,GAAAA,GAAA1hB,MAAA,GAAA,IAKAS,WAAA,WACAkP,GACA3V,EAAAE,KAAAqB,OAAA,aAAA2F,EAAAyhB,eAEA,MAGAA,aAAA,WAEA,GAAAnC,OAAAkB,GAIA,OAFAE,IAAA,OACA1gB,EAAAmO,QAGAkS,KAEAC,IAAA,EACAtgB,EAAA8T,KAAA+L,KAAAM,KACAG,IAAA,IAIAkB,UAAA,WAKA9B,KAGAY,KAIAG,GAGAd,GAAApgB,WAAAyhB,GAAA,KAFAA,UAWAloB,EAAA6C,OAAAqE,EAAAiC,MAcA,SAAA/J,EAAAC,GACA,mBAAAC,QAAAA,OAAAC,IACAD,OAAAD,GACA,iBAAAG,QACAC,OAAAD,QAAAH,IAEAD,EAAA4pB,qBAAA3pB,IANA,CAQAM,KAAA,wBA00BA,OAn0BA,SAAAspB,EAAAjpB,GAkFA,SAAAkpB,EAAAxb,GACA,GAAAyb,EACA,OAAA,EAIAzb,EAAAA,GAAAnM,OAAAwZ,MAEA5T,EAAAiiB,YAAAjiB,EAAAI,YAAA8hB,GAEAC,IASA,IALA,IACAC,EAEAC,EADAC,GAFA/b,EAAAvN,QAAAuN,EAAAgc,YAEA5M,aAAA,UAAA,GAGArc,EAAA,EAAAA,EAAAkpB,EAAAjpB,OAAAD,KACA8oB,EAAAI,EAAAlpB,IACAmpB,QAAA,EAAAH,EAAArY,QAAA,SAAAmY,EAAArgB,QACAqgB,EAAAK,QACAJ,GAAA,GAKAA,IACA9b,EAAAc,iBACAd,EAAAc,kBAEA2a,GAAA,EAQAU,EAAA7pB,EAAAC,SAAAoF,aAAA,IAAA,GACAoB,WAAA,WACA0iB,GAAA,GACAU,IAOA,SAAAC,EAAA7oB,EAAA8oB,EAAAC,GACAhqB,GAAAgqB,EAAA,MAAA,UAAA,SAAA/oB,EAAA,SAAA8oB,GAKA,SAAAE,IACA,IAAAC,EAAA,IAAA/iB,EAAA2b,gBAEAoH,IAAAC,IACAL,EAAAM,EAAA,gBAAAF,GACAC,EAAAD,GAGA,SAAAG,IACAP,EAAAQ,EAAA,sBAAAC,GAEA,SAAAC,IAwBA,OAtBAD,GAAAA,IAWAvqB,EAAA4B,YAAA0oB,EAAA,8BACA7jB,WAAA,WACA8jB,GACAF,KAEA,OAZAA,IACA5jB,WAAA,WACA8jB,GACAvqB,EAAAgC,SAAAsoB,EAAA,+BAEA,KAUAC,GACAE,IApBAF,EAyBA,SAAAG,EAAAhd,GAEA,IAAAvN,GADAuN,EAAAA,GAAAnM,OAAAwZ,OACA5a,QAAAuN,EAAAgc,WAIA,OAFAT,EAAAvR,MAAA,iBAAAhK,EAAAvN,KAEAA,EAAAkoB,SAIAloB,EAAAwqB,aAAA,cAIAppB,OAAAqpB,KAAAzqB,EAAAkoB,KAAA,aAAA,2FAEA9mB,OAAAyiB,OAAAzgB,KAAAiI,MAAAwY,OAAA9K,MAAA,EAAA,KAAA,MAEAqR,GACAC,KAGA,IAmCA,SAAAK,EAAA1qB,GACA,IAAA,IAAAM,EAAA,EAAAA,EAAA0G,EAAA2jB,eAAApqB,OAAAD,IACA,GAAAT,EAAAiC,SAAA9B,EAAA,SAAAgH,EAAA2jB,eAAArqB,IACA,OAAA,EAcA,SAAAsqB,EAAArd,IAEAsd,GADAtd,EAAAA,GAAAnM,OAAAwZ,OACAkQ,eAAAvd,EAAAwd,YACA,SAAAF,EAAAG,WACAzkB,aAAA0kB,GACAA,EAAA3kB,WAAA,WACAsT,EAAAsR,SAAA,IACAlkB,EAAAmkB,oBA4DA,SAAAC,EAAA9iB,GACA,IAIA+iB,EAJAC,EAAAhjB,EAAAya,MA5LA+F,EAAAjJ,mBAAA7Y,EAAAI,WAAAyc,OAAA9K,MAAA/R,EAAAukB,kBAgMAF,EAAArkB,EAAAwkB,SACAxkB,EAAAykB,WAAA,SAAAJ,EAAArI,QACA0I,KACAA,EAAA7rB,EAAAc,SAAA,sCACA8f,YAAA5gB,EAAAc,SAAA,0BACAspB,EAAA0B,aAAAD,EAAAE,GACA/rB,EAAAgC,SAAAooB,EAAA,kBAEAjjB,EAAA6kB,iBAAAvjB,EAAAojB,GAAA,IAEAI,EAAAJ,EAAA3P,aACAuP,EAAAtI,OAAAje,SAAA+mB,EAAA,KAAA,IAEAR,EAAAtI,OAAAqI,EAAApS,KAGAqS,EAAAtI,OAAA,SAAAqI,EAAArI,OAAA,EAAAqI,EAAArI,OAIAsI,EAAArS,IAAAoS,EAAApS,KAEAqS,EAAArS,IAAAqS,EAAAtI,OAAA,EAiIA,SAAA+I,IAKA,SAAAC,EAAAC,GACA,GAAAA,EAKA,IADA,IAAAC,EAAAD,EAAA1rB,OACAD,EAAA,EAAAA,EAAA4rB,EAAA5rB,IAAA,CACAgI,EAAA2jB,EAAA3rB,GACA6rB,EAAA7jB,EAAArH,UAEA,IAAA,IAAAyE,EAAA,EAAAA,EAAA8jB,EAAAjpB,OAAAmF,IACA0jB,EAAAI,EAAA9jB,IAEA,EAAAymB,EAAAlb,QAAA,SAAAmY,EAAArgB,QAEA/B,EAAAoiB,EAAAgD,SAEAvsB,EAAA4B,YAAA6G,EAAA,2BACA8gB,EAAAlE,QACAkE,EAAAlE,OAAA5c,IAKAzI,EAAAgC,SAAAyG,EAAA,6BA5BA,IAAAA,EACA6jB,EACA/C,EAiCA4C,EAAA/B,EAAA3R,UAEA,IAAA+T,EAAAxsB,EAAAmC,gBAAAioB,EAAA,iBACAoC,GACAL,EAAAK,EAAA/T,UA/fA,IAGAgU,EACArC,EACA2B,EACAF,EACAa,EACAC,EACArC,EAEAsC,EACAvD,EACA3f,EAEAmjB,EACAC,EACAC,EAEA5C,EAEAhjB,EAsDAgiB,EAmKA6D,EACA5B,EA/OArR,EAAApa,KACAstB,GAAA,EACAC,GAAA,EAQA3C,GAAA,EAYA4C,EAAA,CACAxB,SAAA,CAAAvS,IAAA,GAAA+J,OAAA,QACA2H,eAAA,CAAA,OAAA,UAAA,YAAA,KAAA,WACA1B,WAAA,IACAkC,kBAAA,IACA8B,sBAAA,IAEApB,iBAAA,SAAAvjB,EAAAmjB,GACA,OAAAnjB,EAAA8f,OAIAqD,EAAAnT,SAAA,GAAA8I,UAAA9Y,EAAA8f,OACA,IAJAqD,EAAAnT,SAAA,GAAA8I,UAAA,IACA,IAMA8L,SAAA,EACAzB,WAAA,EACA0B,cAAA,EACAC,QAAA,EACAC,SAAA,EACAC,WAAA,EACAC,SAAA,EACAC,aAAA,EAEAC,YAAA,EACAC,qBAAA,EAEAC,yBAAA,EAEAC,aAAA,CACA,CAAAvnB,GAAA,WAAAwnB,MAAA,oBAAAC,IAAA,wDACA,CAAAznB,GAAA,UAAAwnB,MAAA,QAAAC,IAAA,8DACA,CACAznB,GAAA,YAAAwnB,MAAA,SAAAC,IAAA,oGAGA,CAAAznB,GAAA,WAAAwnB,MAAA,iBAAAC,IAAA,oBAAAC,UAAA,IAEAC,oBAAA,WACA,OAAAlF,EAAAre,SAAAwW,KAAA,IAEAgN,mBAAA,WACA,OAAA7sB,OAAA+mB,SAAAD,MAEAgG,gBAAA,WACA,OAAApF,EAAAre,SAAA2d,OAAA,IAGA+F,kBAAA,MACA5C,iBAAA,MA8HAjB,EAAA,WAQA,IAPA,IACA8D,EAEAC,EACAC,EACAC,EALAC,EAAA,GAOAluB,EAAA,EAAAA,EAAA0G,EAAA4mB,aAAArtB,OAAAD,IACA8tB,EAAApnB,EAAA4mB,aAAAttB,GAEA+tB,EAAArnB,EAAAgnB,oBAAAI,GACAE,EAAAtnB,EAAAinB,mBAAAG,GACAG,EAAAvnB,EAAAknB,gBAAAE,GAOAI,GAAA,YALAJ,EAAAN,IAAAlsB,QAAA,UAAA6sB,mBAAAH,IACA1sB,QAAA,gBAAA6sB,mBAAAJ,IACAzsB,QAAA,oBAAAysB,GACAzsB,QAAA,WAAA6sB,mBAAAF,IAEA,yCACAH,EAAA/nB,GAAA,KACA+nB,EAAAL,SAAA,WAAA,IAAA,IACAK,EAAAP,MAAA,OAEA7mB,EAAA0nB,sBACAF,EAAAxnB,EAAA0nB,oBAAAN,EAAAI,IAGArE,EAAA7R,SAAA,GAAA8I,UAAAoN,EACArE,EAAA7R,SAAA,GAAAqW,QAAApE,GAYAqE,EAAA,EACAzF,EAAA,WACA5iB,aAAA0kB,GACA2D,EAAA,EACA1F,GACAtP,EAAAsR,SAAA,IAgEA2D,EAAA,SAAAC,GACAnC,IAAAmC,IACAnF,EAAA+C,EAAA,qBAAAoC,GACAnC,EAAAmC,IAmFAtF,EAAA,CACA,CACAzgB,KAAA,UACAqjB,OAAA,YACAlH,OAAA,SAAApkB,GACA8qB,EAAA9qB,IAGA,CACAiI,KAAA,cACAqjB,OAAA,UACAlH,OAAA,SAAApkB,GACAqpB,EAAArpB,GAEA2oB,MAAA,WACAY,MAGA,CACAthB,KAAA,gBACAqjB,OAAA,UACAlH,OAAA,SAAApkB,GACA0rB,EAAA1rB,GAEA2oB,MAAA,WACAY,MAGA,CACAthB,KAAA,eACAqjB,OAAA,SACA3C,MAAAX,EAAA5C,mBAEA,CACAnd,KAAA,UACAqjB,OAAA,YACAlH,OAAA,SAAApkB,GACAyrB,EAAAzrB,IAGA,CACAiI,KAAA,gBACAqjB,OAAA,UACA3C,MAAAX,EAAA5T,OAEA,CACAnM,KAAA,sBACAqjB,OAAA,UACA3C,MAAAX,EAAA/N,MAEA,CACAhS,KAAA,uBACAqjB,OAAA,UACA3C,MAAAX,EAAAhO,MAEA,CACA/R,KAAA,aACAqjB,OAAA,eACA3C,MAAA,WACA6C,EAAAyC,eACAzC,EAAA0C,OAEA1C,EAAA2C,UAIA,CACAlmB,KAAA,YACAqjB,OAAA,cACAlH,OAAA,SAAApkB,GACA4rB,EAAA5rB,KAqDA8Y,EAAA1B,KAAA,WA5JA,IAYAgX,EAmJArvB,EAAA6C,OAAAomB,EAAAlpB,QAAAotB,GAAA,GAGAhmB,EAAA8hB,EAAAlpB,QAGAqqB,EAAApqB,EAAAmC,gBAAA8mB,EAAA1Q,WAAA,aAGA7O,EAAAuf,EAAAtR,QArKA,iBAAA,SAAArC,GACA4X,GAAA5X,EAAA,IACAyE,EAAAuV,gBACApC,GAAA,KAAA5X,GACAyE,EAAAwV,iBAMA7lB,EAAA,eAAA,SAAA4L,GACA4X,GAAA5X,EAAA,IACAyE,EAAAuV,eACAD,GAAA,GACAA,IAAAnC,GAAA,GAAA5X,GACAyE,EAAAwV,iBAIA7lB,EAAA,mBAAA,YACA2lB,GAAA,KACAnC,GACAnT,EAAAwV,iBAqJA7lB,EAAA,eAAAqQ,EAAApN,QAGAjD,EAAA,YAAA,SAAA8lB,GACA,IAAA9mB,EAAAugB,EAAAre,SAAAlC,iBACAugB,EAAAnR,iBAAApP,EACAugB,EAAA3M,OAAA5T,EAAA8mB,EAAA,KAEAvG,EAAA3M,OAAAnV,EAAAoB,kBAAA,EAAA0gB,EAAAre,UAAA4kB,EAAA,OAKA9lB,EAAA,mBAAA,SAAAgE,EAAAuC,EAAAwf,GACA,IAAAjgB,EAAA9B,EAAAvN,QAAAuN,EAAAgc,WAEAla,GACAA,EAAAsN,aAAA,WAAA,EAAApP,EAAAtN,KAAAgR,QAAA,WACA,EAAA5B,EAAAsN,aAAA,SAAA1L,QAAA,cAAA,qBAAAlP,KAAAsN,EAAAlH,YAEAmnB,EAAAtf,SAAA,KAKAzG,EAAA,aAAA,WACA1J,EAAAE,KAAAkqB,EAAA,gBAAAlB,GACAlpB,EAAAE,KAAA+oB,EAAA1Q,WAAA,UAAAwB,EAAA2V,aAEAzG,EAAAjJ,mBACAhgB,EAAAE,KAAA+oB,EAAA1Q,WAAA,YAAAwB,EAAA4V,eAKAjmB,EAAA,eAAA,WACA6gB,GACAC,IAGAwC,GACApS,cAAAoS,GAEAhtB,EAAAM,OAAAY,SAAA,WAAA6pB,GACA/qB,EAAAM,OAAAY,SAAA,YAAAooB,GACAtpB,EAAAM,OAAA8pB,EAAA,gBAAAlB,GACAlpB,EAAAM,OAAA2oB,EAAA1Q,WAAA,UAAAwB,EAAA2V,aACA1vB,EAAAM,OAAA2oB,EAAA1Q,WAAA,YAAAwB,EAAA4V,aAEAlD,IACAzsB,EAAAM,OAAAY,SAAAurB,EAAAmD,OAAA7V,EAAA8V,kBACApD,EAAAyC,iBACA/nB,EAAAU,sBAAA,EACA4kB,EAAA0C,QAEA1C,EAAA,QAMA/iB,EAAA,UAAA,WACAvC,EAAAykB,YACAC,GACAzB,EAAA0F,YAAAjE,GAEA7rB,EAAA4B,YAAAmqB,EAAA,yBAGAzB,IACAA,EAAA7R,SAAA,GAAAqW,QAAA,MAEA9uB,EAAA4B,YAAAwoB,EAAA,wBACApqB,EAAAgC,SAAAooB,EAAA,oBACArQ,EAAAsR,SAAA,KAIAlkB,EAAAW,uBACA9H,EAAA4B,YAAAwoB,EAAA,oBAEA1gB,EAAA,gBAAA,WACAvC,EAAAW,uBACA9H,EAAA4B,YAAAwoB,EAAA,sBAGA1gB,EAAA,iBAAA,WACA1J,EAAAgC,SAAAooB,EAAA,sBAGA1gB,EAAA,sBAAA6hB,GAEAW,IAEA/kB,EAAAqmB,SAAAb,GAAArC,IACAC,GAAA,GAGAN,IA/RA9iB,EAAAiiB,YACA1f,EAAA,YAAA,WAEA1J,EAAAE,KAAAgB,SAAA,YAAAooB,GACAtpB,EAAAE,KAAAgB,SAAA,WAAA6pB,GAEAiC,EAAAxS,YAAA,WAEA,MADAuU,GAEAhV,EAAAsR,SAAA,IAEAlkB,EAAAiiB,WAAA,KAnGAjiB,EAAAmmB,eAAAttB,EAAAC,SAAAoF,gBAEAonB,EADAA,GACA1S,EAAAgW,qBAGA/vB,EAAAE,KAAAgB,SAAAurB,EAAAmD,OAAA7V,EAAA8V,kBACA9V,EAAA8V,mBACA7vB,EAAAgC,SAAAinB,EAAArpB,SAAA,sBAEAI,EAAA4B,YAAAqnB,EAAArpB,SAAA,sBAMAuH,EAAAwmB,cAEAqB,GAAA,GAEAtlB,EAAA,eAAA,WAEAhD,aAAAqmB,GAGAA,EAAAtmB,WAAA,WAEAwiB,EAAAre,UAAAqe,EAAAre,SAAAoW,QAEAiI,EAAAlF,yBAAAkF,EAAAre,SAAA2V,KAAA0I,EAAAre,SAAA2V,IAAAyP,eAGAhB,GAAA,GAKAA,GAAA,IAGA7nB,EAAAimB,yBAGA1jB,EAAA,oBAAA,SAAAH,EAAAd,GACAwgB,EAAAre,WAAAnC,GACAumB,GAAA,OAoVAjV,EAAAsR,QAAA,SAAA4E,GAEAnG,EAAAM,EAAA,WADAf,EAAA4G,IAIAlW,EAAApN,OAAA,WAYAsgB,KAVAC,IAAAjE,EAAAre,YAEAmP,EAAAmW,uBAEA/oB,EAAAykB,YACAzkB,EAAA6kB,iBAAA/C,EAAAre,SAAAmhB,GAEAjC,EAAAiC,EAAA,kBAAA9C,EAAAre,SAAA2d,SAGA,GAMAgC,GACAC,IAGAP,KAGAlQ,EAAA8V,iBAAA,SAAAniB,GAEAA,GAGAjH,WAAA,WACAwiB,EAAAva,gBAAA,EAAA1O,EAAAqB,eACA,IAIArB,GAAAysB,EAAAyC,eAAA,MAAA,UAAA,SAAAjG,EAAArpB,SAAA,aAGAma,EAAAmW,qBAAA,WACA/oB,EAAAsmB,YACAf,EAAAnL,UAAA0H,EAAAlR,kBAAA,EACA5Q,EAAAmnB,kBACAnnB,EAAA2b,kBAIA/I,EAAA2V,YAAA,SAAAhiB,GAEA,IAAAvN,GADAuN,EAAAA,GAAAnM,OAAAwZ,OACA5a,QAAAuN,EAAAgc,WAEAP,IAIAzb,EAAAwY,QAAA,UAAAxY,EAAAwY,OAAAxR,YAGAmW,EAAA1qB,GACA8oB,EAAA5T,QAIArV,EAAAiC,SAAA9B,EAAA,eACA,IAAA8oB,EAAAnR,gBAAAmR,EAAAnR,gBAAAmR,EAAAre,SAAAC,SACA1D,EAAA2mB,yBACA7E,EAAA5T,QAGA4T,EAAA5C,kBAAA3Y,EAAAwY,OAAA7R,gBAOAlN,EAAA0mB,sBACAX,EACAnT,EAAAuV,eAEAvV,EAAAwV,gBAKApoB,EAAAymB,aAAA5tB,EAAAiC,SAAA9B,EAAA,cAAA0qB,EAAA1qB,KACA8oB,EAAA5T,WAMA0E,EAAA4V,YAAA,SAAAjiB,GAEAvN,GADAuN,EAAAA,GAAAnM,OAAAwZ,OACA5a,QAAAuN,EAAAgc,WAGAI,EAAAM,EAAA,iBAAAS,EAAA1qB,KAGA4Z,EAAAuV,aAAA,WACAtvB,EAAAgC,SAAAooB,EAAA,oBACA8C,GAAA,GAGAnT,EAAAwV,aAAA,WACArC,GAAA,EACAD,GACAlT,EAAApN,SAEA3M,EAAA4B,YAAAwoB,EAAA,qBAGArQ,EAAAoW,mBAAA,WACA,IAAA/gB,EAAAlO,SACA,SAAAkO,EAAAghB,gBAAAhhB,EAAAihB,qBAAAjhB,EAAAkhB,sBAAAlhB,EAAAmhB,mBAGAxW,EAAAgW,iBAAA,WACA,IACAS,EADAC,EAAAvvB,SAAAQ,gBAEAgvB,EAAA,mBA0DA,OAxDAD,EAAAE,kBACAH,EAAA,CACAI,OAAA,oBACAC,MAAA,iBACAC,SAAA,oBACAlB,OAAAc,GAGAD,EAAAM,qBACAP,EAAA,CACAI,OAAA,uBACAC,MAAA,sBACAC,SAAA,uBACAlB,OAAA,MAAAc,GAKAD,EAAAO,wBACAR,EAAA,CACAI,OAAA,0BACAC,MAAA,uBACAC,SAAA,0BACAlB,OAAA,SAAAc,GAGAD,EAAAQ,sBACAT,EAAA,CACAI,OAAA,sBACAC,MAAA,mBACAC,SAAA,sBACAlB,OAAA,uBAIAY,IACAA,EAAApB,MAAA,WAKA,GAHAxC,EAAAzlB,EAAAO,cACAP,EAAAO,eAAA,EAEA,4BAAA/H,KAAAixB,OAGA,OAAA3H,EAAArpB,SAAAD,KAAAixB,UAFA3H,EAAArpB,SAAAD,KAAAixB,QAAAM,QAAAC,uBAKAX,EAAArB,KAAA,WAGA,OAFAhoB,EAAAO,cAAAklB,EAEA1rB,SAAAvB,KAAAkxB,UAGAL,EAAAtB,aAAA,WAAA,OAAAhuB,SAAAvB,KAAAmxB,YAGAN,MAaA,IAAAY,QAAA,WAEA,SAAAA,IAEAzxB,KAAA0xB,gBAAAnwB,SAAAowB,iBAAA,kBAEA3xB,KAAA4xB,iBAAA,GAEA5xB,KAAA6xB,YAAA,KAEA7xB,KAAA8xB,WAAA,WAEA9xB,KAAA0xB,gBAAA3wB,SAIAf,KAAA+xB,yBAEAC,QAAAC,WAAAjyB,KAAA0xB,gBAAA,SAAAQ,EAAApxB,EAAAqxB,GAIAA,EAAAC,MAAAF,EAFApxB,EAAA,IAIAd,MAEAA,KAAAqyB,oBAsKA,OAlKAZ,EAAArnB,UAAA2nB,uBAAA,WAIAxwB,SAAA+wB,KAAAC,mBAAA,YAFA,orDAIAvyB,KAAA6xB,YAAAtwB,SAAAixB,cAAA,UAIAf,EAAArnB,UAAAgoB,MAAA,SAAAF,EAAAO,GAEA,IAAAC,EAAAR,EAAAP,iBAAA,uBAEAe,EAAA3xB,SAIAmxB,EAAA3X,aAAA,eAAAkY,EAAAE,YAEAX,QAAAC,WAAAS,EAAA,SAAAE,EAAA9xB,EAAAqxB,GAEAS,EAAAluB,iBAAA,QAAA,SAAAqJ,GAEAokB,EAAAU,YAAAJ,EAAA3xB,GAEAiN,EAAAO,oBAIAtO,QAIAyxB,EAAArnB,UAAAyoB,YAAA,SAAAJ,EAAAK,GAEA,IAMAvpB,EANAwpB,EAAA/yB,KAAAgzB,UAAAP,GAEAM,EAAAhyB,SAIAwI,EAAAvJ,KAAA8xB,WAAAW,EAEAryB,EAAA,CAEAmiB,iBAAA,SAAAuQ,GAEA,IAAAG,EAAArxB,OAAAC,aAAAN,SAAAQ,gBAAAC,UAEAkxB,EAAAH,EAAAD,GAAAK,iBAAAC,wBAEA,MAAA,CAAAhqB,EAAA8pB,EAAA/Z,KAAA9P,EAAA6pB,EAAAzZ,IAAAwZ,EAAA1lB,EAAA2lB,EAAA3Z,QAIA3P,MAAAkpB,EAEAxK,WAAAmK,EAEA9qB,UAAA,IAIA3H,KAAA4xB,iBAAAroB,GAAA,IAAAxJ,WAAAC,KAAA6xB,YAAAxI,qBAAA0J,EAAA3yB,GAEAJ,KAAA4xB,iBAAAroB,GAAAmP,SAIA+Y,EAAArnB,UAAA4oB,UAAA,SAAAP,GAEAC,EAAAnxB,SAAAowB,iBAAA,kBAAAc,EAAA,0BAEA,GAAAC,EAAA3xB,OAAA,CAIA,IAAAgyB,EAAA,GA8BA,OA5BAf,QAAAC,WAAAS,EAAA,SAAAE,EAAA9xB,EAAAqxB,GAEA,IAAAkB,EAAAT,EAAAzV,aAAA,qBAEAmW,EAAAV,EAAAzV,aAAA,QAEAgW,EAAAP,EAAAJ,cAAA,iCAIAe,EAAA,CAEA9R,IAAA6R,EAEA9O,KANA2O,EAAAhW,aAAA,OAQA5P,EAAAhI,SAAA8tB,EAAAxyB,MAAA,KAAA,IAEAyY,EAAA/T,SAAA8tB,EAAAxyB,MAAA,KAAA,IAEAsyB,iBAAAA,GAIAJ,EAAArpB,KAAA6pB,IAEAvzB,MAEA+yB,IAIAtB,EAAArnB,UAAAopB,QAAA,WAEA,IAAAzM,EAAAnlB,OAAA+mB,SAAA5B,KAAAC,UAAA,GAEAK,EAAA,GAEA,GAAAN,EAAAhmB,OAAA,EAEA,OAAAsmB,EAIA,IAFA,IAQAC,EARAC,EAAAR,EAAAlmB,MAAA,KAEAC,EAAA,EAAAA,EAAAymB,EAAAxmB,OAAAD,IAEAymB,EAAAzmB,MAIAwmB,EAAAC,EAAAzmB,GAAAD,MAAA,MAEAE,OAAA,IAIAsmB,EAAAC,EAAA,IAAAA,EAAA,KAUA,OANAD,EAAAoM,MAEApM,EAAAoM,IAAAluB,SAAA8hB,EAAAoM,IAAA,KAIApM,GAIAoK,EAAArnB,UAAAioB,iBAAA,WAEA,IAAAqB,EAAA1zB,KAAAwzB,UAEAE,EAAAhM,KAAAgM,EAAAD,KAEAzzB,KAAA6yB,YAAAa,EAAAD,IAAAC,EAAAhM,MAMA+J,EAhMA,GAoMA,IAAAA","file":"gallery-c24a752f88.min.js","sourcesContent":["/*! PhotoSwipe - v4.1.3 - 2019-01-08\r\n* http://photoswipe.com\r\n* Copyright (c) 2019 Dmitry Semenov; */\r\n(function (root, factory) {\r\n\tif (typeof define === 'function' && define.amd) {\r\n\t\tdefine(factory);\r\n\t} else if (typeof exports === 'object') {\r\n\t\tmodule.exports = factory();\r\n\t} else {\r\n\t\troot.PhotoSwipe = factory();\r\n\t}\r\n})(this, function () {\r\n\r\n\t'use strict';\r\n\tvar PhotoSwipe = function (template, UiClass, items, options) {\r\n\r\n\t\t/*>>framework-bridge*/\r\n\t\t/**\r\n\t\t *\r\n\t\t * Set of generic functions used by gallery.\r\n\t\t * \r\n\t\t * You're free to modify anything here as long as functionality is kept.\r\n\t\t * \r\n\t\t */\r\n\t\tvar framework = {\r\n\t\t\tfeatures: null,\r\n\t\t\tbind: function (target, type, listener, unbind) {\r\n\t\t\t\tvar methodName = (unbind ? 'remove' : 'add') + 'EventListener';\r\n\t\t\t\ttype = type.split(' ');\r\n\t\t\t\tfor (var i = 0; i < type.length; i++) {\r\n\t\t\t\t\tif (type[i]) {\r\n\t\t\t\t\t\ttarget[methodName](type[i], listener, false);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tisArray: function (obj) {\r\n\t\t\t\treturn (obj instanceof Array);\r\n\t\t\t},\r\n\t\t\tcreateEl: function (classes, tag) {\r\n\t\t\t\tvar el = document.createElement(tag || 'div');\r\n\t\t\t\tif (classes) {\r\n\t\t\t\t\tel.className = classes;\r\n\t\t\t\t}\r\n\t\t\t\treturn el;\r\n\t\t\t},\r\n\t\t\tgetScrollY: function () {\r\n\t\t\t\tvar yOffset = window.pageYOffset;\r\n\t\t\t\treturn yOffset !== undefined ? yOffset : document.documentElement.scrollTop;\r\n\t\t\t},\r\n\t\t\tunbind: function (target, type, listener) {\r\n\t\t\t\tframework.bind(target, type, listener, true);\r\n\t\t\t},\r\n\t\t\tremoveClass: function (el, className) {\r\n\t\t\t\tvar reg = new RegExp('(\\\\s|^)' + className + '(\\\\s|$)');\r\n\t\t\t\tel.className = el.className.replace(reg, ' ').replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\r\n\t\t\t},\r\n\t\t\taddClass: function (el, className) {\r\n\t\t\t\tif (!framework.hasClass(el, className)) {\r\n\t\t\t\t\tel.className += (el.className ? ' ' : '') + className;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\thasClass: function (el, className) {\r\n\t\t\t\treturn el.className && new RegExp('(^|\\\\s)' + className + '(\\\\s|$)').test(el.className);\r\n\t\t\t},\r\n\t\t\tgetChildByClass: function (parentEl, childClassName) {\r\n\t\t\t\tvar node = parentEl.firstChild;\r\n\t\t\t\twhile (node) {\r\n\t\t\t\t\tif (framework.hasClass(node, childClassName)) {\r\n\t\t\t\t\t\treturn node;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tnode = node.nextSibling;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tarraySearch: function (array, value, key) {\r\n\t\t\t\tvar i = array.length;\r\n\t\t\t\twhile (i--) {\r\n\t\t\t\t\tif (array[i][key] === value) {\r\n\t\t\t\t\t\treturn i;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn -1;\r\n\t\t\t},\r\n\t\t\textend: function (o1, o2, preventOverwrite) {\r\n\t\t\t\tfor (var prop in o2) {\r\n\t\t\t\t\tif (o2.hasOwnProperty(prop)) {\r\n\t\t\t\t\t\tif (preventOverwrite && o1.hasOwnProperty(prop)) {\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\to1[prop] = o2[prop];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\teasing: {\r\n\t\t\t\tsine: {\r\n\t\t\t\t\tout: function (k) {\r\n\t\t\t\t\t\treturn Math.sin(k * (Math.PI / 2));\r\n\t\t\t\t\t},\r\n\t\t\t\t\tinOut: function (k) {\r\n\t\t\t\t\t\treturn - (Math.cos(Math.PI * k) - 1) / 2;\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tcubic: {\r\n\t\t\t\t\tout: function (k) {\r\n\t\t\t\t\t\treturn --k * k * k + 1;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t/*\r\n\t\t\t\t\telastic: {\r\n\t\t\t\t\t\tout: function ( k ) {\r\n\t\t\r\n\t\t\t\t\t\t\tvar s, a = 0.1, p = 0.4;\r\n\t\t\t\t\t\t\tif ( k === 0 ) return 0;\r\n\t\t\t\t\t\t\tif ( k === 1 ) return 1;\r\n\t\t\t\t\t\t\tif ( !a || a < 1 ) { a = 1; s = p / 4; }\r\n\t\t\t\t\t\t\telse s = p * Math.asin( 1 / a ) / ( 2 * Math.PI );\r\n\t\t\t\t\t\t\treturn ( a * Math.pow( 2, - 10 * k) * Math.sin( ( k - s ) * ( 2 * Math.PI ) / p ) + 1 );\r\n\t\t\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t},\r\n\t\t\t\t\tback: {\r\n\t\t\t\t\t\tout: function ( k ) {\r\n\t\t\t\t\t\t\tvar s = 1.70158;\r\n\t\t\t\t\t\t\treturn --k * k * ( ( s + 1 ) * k + s ) + 1;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t*/\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * \r\n\t\t\t * @return {object}\r\n\t\t\t * \r\n\t\t\t * {\r\n\t\t\t * raf : request animation frame function\r\n\t\t\t * caf : cancel animation frame function\r\n\t\t\t * transfrom : transform property key (with vendor), or null if not supported\r\n\t\t\t * oldIE : IE8 or below\r\n\t\t\t * }\r\n\t\t\t * \r\n\t\t\t */\r\n\t\t\tdetectFeatures: function () {\r\n\t\t\t\tif (framework.features) {\r\n\t\t\t\t\treturn framework.features;\r\n\t\t\t\t}\r\n\t\t\t\tvar helperEl = framework.createEl(),\r\n\t\t\t\t\thelperStyle = helperEl.style,\r\n\t\t\t\t\tvendor = '',\r\n\t\t\t\t\tfeatures = {};\r\n\r\n\t\t\t\t// IE8 and below\r\n\t\t\t\tfeatures.oldIE = document.all && !document.addEventListener;\r\n\r\n\t\t\t\tfeatures.touch = 'ontouchstart' in window;\r\n\r\n\t\t\t\tif (window.requestAnimationFrame) {\r\n\t\t\t\t\tfeatures.raf = window.requestAnimationFrame;\r\n\t\t\t\t\tfeatures.caf = window.cancelAnimationFrame;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfeatures.pointerEvent = !!(window.PointerEvent) || navigator.msPointerEnabled;\r\n\r\n\t\t\t\t// fix false-positive detection of old Android in new IE\r\n\t\t\t\t// (IE11 ua string contains \"Android 4.0\")\r\n\r\n\t\t\t\tif (!features.pointerEvent) {\r\n\r\n\t\t\t\t\tvar ua = navigator.userAgent;\r\n\r\n\t\t\t\t\t// Detect if device is iPhone or iPod and if it's older than iOS 8\r\n\t\t\t\t\t// http://stackoverflow.com/a/14223920\r\n\t\t\t\t\t// \r\n\t\t\t\t\t// This detection is made because of buggy top/bottom toolbars\r\n\t\t\t\t\t// that don't trigger window.resize event.\r\n\t\t\t\t\t// For more info refer to _isFixedPosition variable in core.js\r\n\r\n\t\t\t\t\tif (/iP(hone|od)/.test(navigator.platform)) {\r\n\t\t\t\t\t\tvar v = (navigator.appVersion).match(/OS (\\d+)_(\\d+)_?(\\d+)?/);\r\n\t\t\t\t\t\tif (v && v.length > 0) {\r\n\t\t\t\t\t\t\tv = parseInt(v[1], 10);\r\n\t\t\t\t\t\t\tif (v >= 1 && v < 8) {\r\n\t\t\t\t\t\t\t\tfeatures.isOldIOSPhone = true;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Detect old Android (before KitKat)\r\n\t\t\t\t\t// due to bugs related to position:fixed\r\n\t\t\t\t\t// http://stackoverflow.com/questions/7184573/pick-up-the-android-version-in-the-browser-by-javascript\r\n\r\n\t\t\t\t\tvar match = ua.match(/Android\\s([0-9\\.]*)/);\r\n\t\t\t\t\tvar androidversion = match ? match[1] : 0;\r\n\t\t\t\t\tandroidversion = parseFloat(androidversion);\r\n\t\t\t\t\tif (androidversion >= 1) {\r\n\t\t\t\t\t\tif (androidversion < 4.4) {\r\n\t\t\t\t\t\t\tfeatures.isOldAndroid = true; // for fixed position bug & performance\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tfeatures.androidVersion = androidversion; // for touchend bug\r\n\t\t\t\t\t}\r\n\t\t\t\t\tfeatures.isMobileOpera = /opera mini|opera mobi/i.test(ua);\r\n\r\n\t\t\t\t\t// p.s. yes, yes, UA sniffing is bad, propose your solution for above bugs.\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar styleChecks = ['transform', 'perspective', 'animationName'],\r\n\t\t\t\t\tvendors = ['', 'webkit', 'Moz', 'ms', 'O'],\r\n\t\t\t\t\tstyleCheckItem,\r\n\t\t\t\t\tstyleName;\r\n\r\n\t\t\t\tfor (var i = 0; i < 4; i++) {\r\n\t\t\t\t\tvendor = vendors[i];\r\n\r\n\t\t\t\t\tfor (var a = 0; a < 3; a++) {\r\n\t\t\t\t\t\tstyleCheckItem = styleChecks[a];\r\n\r\n\t\t\t\t\t\t// uppercase first letter of property name, if vendor is present\r\n\t\t\t\t\t\tstyleName = vendor + (vendor ?\r\n\t\t\t\t\t\t\tstyleCheckItem.charAt(0).toUpperCase() + styleCheckItem.slice(1) :\r\n\t\t\t\t\t\t\tstyleCheckItem);\r\n\r\n\t\t\t\t\t\tif (!features[styleCheckItem] && styleName in helperStyle) {\r\n\t\t\t\t\t\t\tfeatures[styleCheckItem] = styleName;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (vendor && !features.raf) {\r\n\t\t\t\t\t\tvendor = vendor.toLowerCase();\r\n\t\t\t\t\t\tfeatures.raf = window[vendor + 'RequestAnimationFrame'];\r\n\t\t\t\t\t\tif (features.raf) {\r\n\t\t\t\t\t\t\tfeatures.caf = window[vendor + 'CancelAnimationFrame'] ||\r\n\t\t\t\t\t\t\t\twindow[vendor + 'CancelRequestAnimationFrame'];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!features.raf) {\r\n\t\t\t\t\tvar lastTime = 0;\r\n\t\t\t\t\tfeatures.raf = function (fn) {\r\n\t\t\t\t\t\tvar currTime = new Date().getTime();\r\n\t\t\t\t\t\tvar timeToCall = Math.max(0, 16 - (currTime - lastTime));\r\n\t\t\t\t\t\tvar id = window.setTimeout(function () { fn(currTime + timeToCall); }, timeToCall);\r\n\t\t\t\t\t\tlastTime = currTime + timeToCall;\r\n\t\t\t\t\t\treturn id;\r\n\t\t\t\t\t};\r\n\t\t\t\t\tfeatures.caf = function (id) { clearTimeout(id); };\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Detect SVG support\r\n\t\t\t\tfeatures.svg = !!document.createElementNS &&\r\n\t\t\t\t\t!!document.createElementNS('http://www.w3.org/2000/svg', 'svg').createSVGRect;\r\n\r\n\t\t\t\tframework.features = features;\r\n\r\n\t\t\t\treturn features;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tframework.detectFeatures();\r\n\r\n\t\t// Override addEventListener for old versions of IE\r\n\t\tif (framework.features.oldIE) {\r\n\r\n\t\t\tframework.bind = function (target, type, listener, unbind) {\r\n\r\n\t\t\t\ttype = type.split(' ');\r\n\r\n\t\t\t\tvar methodName = (unbind ? 'detach' : 'attach') + 'Event',\r\n\t\t\t\t\tevName,\r\n\t\t\t\t\t_handleEv = function () {\r\n\t\t\t\t\t\tlistener.handleEvent.call(listener);\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\tfor (var i = 0; i < type.length; i++) {\r\n\t\t\t\t\tevName = type[i];\r\n\t\t\t\t\tif (evName) {\r\n\r\n\t\t\t\t\t\tif (typeof listener === 'object' && listener.handleEvent) {\r\n\t\t\t\t\t\t\tif (!unbind) {\r\n\t\t\t\t\t\t\t\tlistener['oldIE' + evName] = _handleEv;\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tif (!listener['oldIE' + evName]) {\r\n\t\t\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\ttarget[methodName]('on' + evName, listener['oldIE' + evName]);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\ttarget[methodName]('on' + evName, listener);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t}\r\n\r\n\t\t/*>>framework-bridge*/\r\n\r\n\t\t/*>>core*/\r\n\t\t//function(template, UiClass, items, options)\r\n\r\n\t\tvar self = this;\r\n\r\n\t\t/**\r\n\t\t * Static vars, don't change unless you know what you're doing.\r\n\t\t */\r\n\t\tvar DOUBLE_TAP_RADIUS = 25,\r\n\t\t\tNUM_HOLDERS = 3;\r\n\r\n\t\t/**\r\n\t\t * Options\r\n\t\t */\r\n\t\tvar _options = {\r\n\t\t\tallowPanToNext: true,\r\n\t\t\tspacing: 0.12,\r\n\t\t\tbgOpacity: 1,\r\n\t\t\tmouseUsed: false,\r\n\t\t\tloop: true,\r\n\t\t\tpinchToClose: true,\r\n\t\t\tcloseOnScroll: true,\r\n\t\t\tcloseOnVerticalDrag: true,\r\n\t\t\tverticalDragRange: 0.75,\r\n\t\t\thideAnimationDuration: 333,\r\n\t\t\tshowAnimationDuration: 333,\r\n\t\t\tshowHideOpacity: false,\r\n\t\t\tfocus: true,\r\n\t\t\tescKey: true,\r\n\t\t\tarrowKeys: true,\r\n\t\t\tmainScrollEndFriction: 0.35,\r\n\t\t\tpanEndFriction: 0.35,\r\n\t\t\tisClickableElement: function (el) {\r\n\t\t\t\treturn el.tagName === 'A';\r\n\t\t\t},\r\n\t\t\tgetDoubleTapZoom: function (isMouseClick, item) {\r\n\t\t\t\tif (isMouseClick) {\r\n\t\t\t\t\treturn 1;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn item.initialZoomLevel < 0.7 ? 1 : 1.33;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tmaxSpreadZoom: 1.33,\r\n\t\t\tmodal: true,\r\n\r\n\t\t\t// not fully implemented yet\r\n\t\t\tscaleMode: 'fit' // TODO\r\n\t\t};\r\n\t\tframework.extend(_options, options);\r\n\r\n\r\n\t\t/**\r\n\t\t * Private helper variables & functions\r\n\t\t */\r\n\r\n\t\tvar _getEmptyPoint = function () {\r\n\t\t\treturn { x: 0, y: 0 };\r\n\t\t};\r\n\r\n\t\tvar _isOpen,\r\n\t\t\t_isDestroying,\r\n\t\t\t_closedByScroll,\r\n\t\t\t_currentItemIndex,\r\n\t\t\t_containerStyle,\r\n\t\t\t_containerShiftIndex,\r\n\t\t\t_currPanDist = _getEmptyPoint(),\r\n\t\t\t_startPanOffset = _getEmptyPoint(),\r\n\t\t\t_panOffset = _getEmptyPoint(),\r\n\t\t\t_upMoveEvents, // drag move, drag end & drag cancel events array\r\n\t\t\t_downEvents, // drag start events array\r\n\t\t\t_globalEventHandlers,\r\n\t\t\t_viewportSize = {},\r\n\t\t\t_currZoomLevel,\r\n\t\t\t_startZoomLevel,\r\n\t\t\t_translatePrefix,\r\n\t\t\t_translateSufix,\r\n\t\t\t_updateSizeInterval,\r\n\t\t\t_itemsNeedUpdate,\r\n\t\t\t_currPositionIndex = 0,\r\n\t\t\t_offset = {},\r\n\t\t\t_slideSize = _getEmptyPoint(), // size of slide area, including spacing\r\n\t\t\t_itemHolders,\r\n\t\t\t_prevItemIndex,\r\n\t\t\t_indexDiff = 0, // difference of indexes since last content update\r\n\t\t\t_dragStartEvent,\r\n\t\t\t_dragMoveEvent,\r\n\t\t\t_dragEndEvent,\r\n\t\t\t_dragCancelEvent,\r\n\t\t\t_transformKey,\r\n\t\t\t_pointerEventEnabled,\r\n\t\t\t_isFixedPosition = true,\r\n\t\t\t_likelyTouchDevice,\r\n\t\t\t_modules = [],\r\n\t\t\t_requestAF,\r\n\t\t\t_cancelAF,\r\n\t\t\t_initalClassName,\r\n\t\t\t_initalWindowScrollY,\r\n\t\t\t_oldIE,\r\n\t\t\t_currentWindowScrollY,\r\n\t\t\t_features,\r\n\t\t\t_windowVisibleSize = {},\r\n\t\t\t_renderMaxResolution = false,\r\n\t\t\t_orientationChangeTimeout,\r\n\r\n\r\n\t\t\t// Registers PhotoSWipe module (History, Controller ...)\r\n\t\t\t_registerModule = function (name, module) {\r\n\t\t\t\tframework.extend(self, module.publicMethods);\r\n\t\t\t\t_modules.push(name);\r\n\t\t\t},\r\n\r\n\t\t\t_getLoopedId = function (index) {\r\n\t\t\t\tvar numSlides = _getNumItems();\r\n\t\t\t\tif (index > numSlides - 1) {\r\n\t\t\t\t\treturn index - numSlides;\r\n\t\t\t\t} else if (index < 0) {\r\n\t\t\t\t\treturn numSlides + index;\r\n\t\t\t\t}\r\n\t\t\t\treturn index;\r\n\t\t\t},\r\n\r\n\t\t\t// Micro bind/trigger\r\n\t\t\t_listeners = {},\r\n\t\t\t_listen = function (name, fn) {\r\n\t\t\t\tif (!_listeners[name]) {\r\n\t\t\t\t\t_listeners[name] = [];\r\n\t\t\t\t}\r\n\t\t\t\treturn _listeners[name].push(fn);\r\n\t\t\t},\r\n\t\t\t_shout = function (name) {\r\n\t\t\t\tvar listeners = _listeners[name];\r\n\r\n\t\t\t\tif (listeners) {\r\n\t\t\t\t\tvar args = Array.prototype.slice.call(arguments);\r\n\t\t\t\t\targs.shift();\r\n\r\n\t\t\t\t\tfor (var i = 0; i < listeners.length; i++) {\r\n\t\t\t\t\t\tlisteners[i].apply(self, args);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t_getCurrentTime = function () {\r\n\t\t\t\treturn new Date().getTime();\r\n\t\t\t},\r\n\t\t\t_applyBgOpacity = function (opacity) {\r\n\t\t\t\t_bgOpacity = opacity;\r\n\t\t\t\tself.bg.style.opacity = opacity * _options.bgOpacity;\r\n\t\t\t},\r\n\r\n\t\t\t_applyZoomTransform = function (styleObj, x, y, zoom, item) {\r\n\t\t\t\tif (!_renderMaxResolution || (item && item !== self.currItem)) {\r\n\t\t\t\t\tzoom = zoom / (item ? item.fitRatio : self.currItem.fitRatio);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tstyleObj[_transformKey] = _translatePrefix + x + 'px, ' + y + 'px' + _translateSufix + ' scale(' + zoom + ')';\r\n\t\t\t},\r\n\t\t\t_applyCurrentZoomPan = function (allowRenderResolution) {\r\n\t\t\t\tif (_currZoomElementStyle) {\r\n\r\n\t\t\t\t\tif (allowRenderResolution) {\r\n\t\t\t\t\t\tif (_currZoomLevel > self.currItem.fitRatio) {\r\n\t\t\t\t\t\t\tif (!_renderMaxResolution) {\r\n\t\t\t\t\t\t\t\t_setImageSize(self.currItem, false, true);\r\n\t\t\t\t\t\t\t\t_renderMaxResolution = true;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tif (_renderMaxResolution) {\r\n\t\t\t\t\t\t\t\t_setImageSize(self.currItem);\r\n\t\t\t\t\t\t\t\t_renderMaxResolution = false;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t\t_applyZoomTransform(_currZoomElementStyle, _panOffset.x, _panOffset.y, _currZoomLevel);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t_applyZoomPanToItem = function (item) {\r\n\t\t\t\tif (item.container) {\r\n\r\n\t\t\t\t\t_applyZoomTransform(item.container.style,\r\n\t\t\t\t\t\titem.initialPosition.x,\r\n\t\t\t\t\t\titem.initialPosition.y,\r\n\t\t\t\t\t\titem.initialZoomLevel,\r\n\t\t\t\t\t\titem);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t_setTranslateX = function (x, elStyle) {\r\n\t\t\t\telStyle[_transformKey] = _translatePrefix + x + 'px, 0px' + _translateSufix;\r\n\t\t\t},\r\n\t\t\t_moveMainScroll = function (x, dragging) {\r\n\r\n\t\t\t\tif (!_options.loop && dragging) {\r\n\t\t\t\t\tvar newSlideIndexOffset = _currentItemIndex + (_slideSize.x * _currPositionIndex - x) / _slideSize.x,\r\n\t\t\t\t\t\tdelta = Math.round(x - _mainScrollPos.x);\r\n\r\n\t\t\t\t\tif ((newSlideIndexOffset < 0 && delta > 0) ||\r\n\t\t\t\t\t\t(newSlideIndexOffset >= _getNumItems() - 1 && delta < 0)) {\r\n\t\t\t\t\t\tx = _mainScrollPos.x + delta * _options.mainScrollEndFriction;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t_mainScrollPos.x = x;\r\n\t\t\t\t_setTranslateX(x, _containerStyle);\r\n\t\t\t},\r\n\t\t\t_calculatePanOffset = function (axis, zoomLevel) {\r\n\t\t\t\tvar m = _midZoomPoint[axis] - _offset[axis];\r\n\t\t\t\treturn _startPanOffset[axis] + _currPanDist[axis] + m - m * (zoomLevel / _startZoomLevel);\r\n\t\t\t},\r\n\r\n\t\t\t_equalizePoints = function (p1, p2) {\r\n\t\t\t\tp1.x = p2.x;\r\n\t\t\t\tp1.y = p2.y;\r\n\t\t\t\tif (p2.id) {\r\n\t\t\t\t\tp1.id = p2.id;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t_roundPoint = function (p) {\r\n\t\t\t\tp.x = Math.round(p.x);\r\n\t\t\t\tp.y = Math.round(p.y);\r\n\t\t\t},\r\n\r\n\t\t\t_mouseMoveTimeout = null,\r\n\t\t\t_onFirstMouseMove = function () {\r\n\t\t\t\t// Wait until mouse move event is fired at least twice during 100ms\r\n\t\t\t\t// We do this, because some mobile browsers trigger it on touchstart\r\n\t\t\t\tif (_mouseMoveTimeout) {\r\n\t\t\t\t\tframework.unbind(document, 'mousemove', _onFirstMouseMove);\r\n\t\t\t\t\tframework.addClass(template, 'pswp--has_mouse');\r\n\t\t\t\t\t_options.mouseUsed = true;\r\n\t\t\t\t\t_shout('mouseUsed');\r\n\t\t\t\t}\r\n\t\t\t\t_mouseMoveTimeout = setTimeout(function () {\r\n\t\t\t\t\t_mouseMoveTimeout = null;\r\n\t\t\t\t}, 100);\r\n\t\t\t},\r\n\r\n\t\t\t_bindEvents = function () {\r\n\t\t\t\tframework.bind(document, 'keydown', self);\r\n\r\n\t\t\t\tif (_features.transform) {\r\n\t\t\t\t\t// don't bind click event in browsers that don't support transform (mostly IE8)\r\n\t\t\t\t\tframework.bind(self.scrollWrap, 'click', self);\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t\tif (!_options.mouseUsed) {\r\n\t\t\t\t\tframework.bind(document, 'mousemove', _onFirstMouseMove);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tframework.bind(window, 'resize scroll orientationchange', self);\r\n\r\n\t\t\t\t_shout('bindEvents');\r\n\t\t\t},\r\n\r\n\t\t\t_unbindEvents = function () {\r\n\t\t\t\tframework.unbind(window, 'resize scroll orientationchange', self);\r\n\t\t\t\tframework.unbind(window, 'scroll', _globalEventHandlers.scroll);\r\n\t\t\t\tframework.unbind(document, 'keydown', self);\r\n\t\t\t\tframework.unbind(document, 'mousemove', _onFirstMouseMove);\r\n\r\n\t\t\t\tif (_features.transform) {\r\n\t\t\t\t\tframework.unbind(self.scrollWrap, 'click', self);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (_isDragging) {\r\n\t\t\t\t\tframework.unbind(window, _upMoveEvents, self);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tclearTimeout(_orientationChangeTimeout);\r\n\r\n\t\t\t\t_shout('unbindEvents');\r\n\t\t\t},\r\n\r\n\t\t\t_calculatePanBounds = function (zoomLevel, update) {\r\n\t\t\t\tvar bounds = _calculateItemSize(self.currItem, _viewportSize, zoomLevel);\r\n\t\t\t\tif (update) {\r\n\t\t\t\t\t_currPanBounds = bounds;\r\n\t\t\t\t}\r\n\t\t\t\treturn bounds;\r\n\t\t\t},\r\n\r\n\t\t\t_getMinZoomLevel = function (item) {\r\n\t\t\t\tif (!item) {\r\n\t\t\t\t\titem = self.currItem;\r\n\t\t\t\t}\r\n\t\t\t\treturn item.initialZoomLevel;\r\n\t\t\t},\r\n\t\t\t_getMaxZoomLevel = function (item) {\r\n\t\t\t\tif (!item) {\r\n\t\t\t\t\titem = self.currItem;\r\n\t\t\t\t}\r\n\t\t\t\treturn item.w > 0 ? _options.maxSpreadZoom : 1;\r\n\t\t\t},\r\n\r\n\t\t\t// Return true if offset is out of the bounds\r\n\t\t\t_modifyDestPanOffset = function (axis, destPanBounds, destPanOffset, destZoomLevel) {\r\n\t\t\t\tif (destZoomLevel === self.currItem.initialZoomLevel) {\r\n\t\t\t\t\tdestPanOffset[axis] = self.currItem.initialPosition[axis];\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdestPanOffset[axis] = _calculatePanOffset(axis, destZoomLevel);\r\n\r\n\t\t\t\t\tif (destPanOffset[axis] > destPanBounds.min[axis]) {\r\n\t\t\t\t\t\tdestPanOffset[axis] = destPanBounds.min[axis];\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t} else if (destPanOffset[axis] < destPanBounds.max[axis]) {\r\n\t\t\t\t\t\tdestPanOffset[axis] = destPanBounds.max[axis];\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn false;\r\n\t\t\t},\r\n\r\n\t\t\t_setupTransforms = function () {\r\n\r\n\t\t\t\tif (_transformKey) {\r\n\t\t\t\t\t// setup 3d transforms\r\n\t\t\t\t\tvar allow3dTransform = _features.perspective && !_likelyTouchDevice;\r\n\t\t\t\t\t_translatePrefix = 'translate' + (allow3dTransform ? '3d(' : '(');\r\n\t\t\t\t\t_translateSufix = _features.perspective ? ', 0px)' : ')';\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Override zoom/pan/move functions in case old browser is used (most likely IE)\r\n\t\t\t\t// (so they use left/top/width/height, instead of CSS transform)\r\n\r\n\t\t\t\t_transformKey = 'left';\r\n\t\t\t\tframework.addClass(template, 'pswp--ie');\r\n\r\n\t\t\t\t_setTranslateX = function (x, elStyle) {\r\n\t\t\t\t\telStyle.left = x + 'px';\r\n\t\t\t\t};\r\n\t\t\t\t_applyZoomPanToItem = function (item) {\r\n\r\n\t\t\t\t\tvar zoomRatio = item.fitRatio > 1 ? 1 : item.fitRatio,\r\n\t\t\t\t\t\ts = item.container.style,\r\n\t\t\t\t\t\tw = zoomRatio * item.w,\r\n\t\t\t\t\t\th = zoomRatio * item.h;\r\n\r\n\t\t\t\t\ts.width = w + 'px';\r\n\t\t\t\t\ts.height = h + 'px';\r\n\t\t\t\t\ts.left = item.initialPosition.x + 'px';\r\n\t\t\t\t\ts.top = item.initialPosition.y + 'px';\r\n\r\n\t\t\t\t};\r\n\t\t\t\t_applyCurrentZoomPan = function () {\r\n\t\t\t\t\tif (_currZoomElementStyle) {\r\n\r\n\t\t\t\t\t\tvar s = _currZoomElementStyle,\r\n\t\t\t\t\t\t\titem = self.currItem,\r\n\t\t\t\t\t\t\tzoomRatio = item.fitRatio > 1 ? 1 : item.fitRatio,\r\n\t\t\t\t\t\t\tw = zoomRatio * item.w,\r\n\t\t\t\t\t\t\th = zoomRatio * item.h;\r\n\r\n\t\t\t\t\t\ts.width = w + 'px';\r\n\t\t\t\t\t\ts.height = h + 'px';\r\n\r\n\r\n\t\t\t\t\t\ts.left = _panOffset.x + 'px';\r\n\t\t\t\t\t\ts.top = _panOffset.y + 'px';\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t};\r\n\t\t\t},\r\n\r\n\t\t\t_onKeyDown = function (e) {\r\n\t\t\t\tvar keydownAction = '';\r\n\t\t\t\tif (_options.escKey && e.keyCode === 27) {\r\n\t\t\t\t\tkeydownAction = 'close';\r\n\t\t\t\t} else if (_options.arrowKeys) {\r\n\t\t\t\t\tif (e.keyCode === 37) {\r\n\t\t\t\t\t\tkeydownAction = 'prev';\r\n\t\t\t\t\t} else if (e.keyCode === 39) {\r\n\t\t\t\t\t\tkeydownAction = 'next';\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (keydownAction) {\r\n\t\t\t\t\t// don't do anything if special key pressed to prevent from overriding default browser actions\r\n\t\t\t\t\t// e.g. in Chrome on Mac cmd+arrow-left returns to previous page\r\n\t\t\t\t\tif (!e.ctrlKey && !e.altKey && !e.shiftKey && !e.metaKey) {\r\n\t\t\t\t\t\tif (e.preventDefault) {\r\n\t\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\te.returnValue = false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tself[keydownAction]();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t_onGlobalClick = function (e) {\r\n\t\t\t\tif (!e) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// don't allow click event to pass through when triggering after drag or some other gesture\r\n\t\t\t\tif (_moved || _zoomStarted || _mainScrollAnimating || _verticalDragInitiated) {\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t_updatePageScrollOffset = function () {\r\n\t\t\t\tself.setScrollOffset(0, framework.getScrollY());\r\n\t\t\t};\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\t\t// Micro animation engine\r\n\t\tvar _animations = {},\r\n\t\t\t_numAnimations = 0,\r\n\t\t\t_stopAnimation = function (name) {\r\n\t\t\t\tif (_animations[name]) {\r\n\t\t\t\t\tif (_animations[name].raf) {\r\n\t\t\t\t\t\t_cancelAF(_animations[name].raf);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t_numAnimations--;\r\n\t\t\t\t\tdelete _animations[name];\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t_registerStartAnimation = function (name) {\r\n\t\t\t\tif (_animations[name]) {\r\n\t\t\t\t\t_stopAnimation(name);\r\n\t\t\t\t}\r\n\t\t\t\tif (!_animations[name]) {\r\n\t\t\t\t\t_numAnimations++;\r\n\t\t\t\t\t_animations[name] = {};\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t_stopAllAnimations = function () {\r\n\t\t\t\tfor (var prop in _animations) {\r\n\r\n\t\t\t\t\tif (_animations.hasOwnProperty(prop)) {\r\n\t\t\t\t\t\t_stopAnimation(prop);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t_animateProp = function (name, b, endProp, d, easingFn, onUpdate, onComplete) {\r\n\t\t\t\tvar startAnimTime = _getCurrentTime(), t;\r\n\t\t\t\t_registerStartAnimation(name);\r\n\r\n\t\t\t\tvar animloop = function () {\r\n\t\t\t\t\tif (_animations[name]) {\r\n\r\n\t\t\t\t\t\tt = _getCurrentTime() - startAnimTime; // time diff\r\n\t\t\t\t\t\t//b - beginning (start prop)\r\n\t\t\t\t\t\t//d - anim duration\r\n\r\n\t\t\t\t\t\tif (t >= d) {\r\n\t\t\t\t\t\t\t_stopAnimation(name);\r\n\t\t\t\t\t\t\tonUpdate(endProp);\r\n\t\t\t\t\t\t\tif (onComplete) {\r\n\t\t\t\t\t\t\t\tonComplete();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tonUpdate((endProp - b) * easingFn(t / d) + b);\r\n\r\n\t\t\t\t\t\t_animations[name].raf = _requestAF(animloop);\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\t\tanimloop();\r\n\t\t\t};\r\n\r\n\r\n\r\n\t\tvar publicMethods = {\r\n\r\n\t\t\t// make a few local variables and functions public\r\n\t\t\tshout: _shout,\r\n\t\t\tlisten: _listen,\r\n\t\t\tviewportSize: _viewportSize,\r\n\t\t\toptions: _options,\r\n\r\n\t\t\tisMainScrollAnimating: function () {\r\n\t\t\t\treturn _mainScrollAnimating;\r\n\t\t\t},\r\n\t\t\tgetZoomLevel: function () {\r\n\t\t\t\treturn _currZoomLevel;\r\n\t\t\t},\r\n\t\t\tgetCurrentIndex: function () {\r\n\t\t\t\treturn _currentItemIndex;\r\n\t\t\t},\r\n\t\t\tisDragging: function () {\r\n\t\t\t\treturn _isDragging;\r\n\t\t\t},\r\n\t\t\tisZooming: function () {\r\n\t\t\t\treturn _isZooming;\r\n\t\t\t},\r\n\t\t\tsetScrollOffset: function (x, y) {\r\n\t\t\t\t_offset.x = x;\r\n\t\t\t\t_currentWindowScrollY = _offset.y = y;\r\n\t\t\t\t_shout('updateScrollOffset', _offset);\r\n\t\t\t},\r\n\t\t\tapplyZoomPan: function (zoomLevel, panX, panY, allowRenderResolution) {\r\n\t\t\t\t_panOffset.x = panX;\r\n\t\t\t\t_panOffset.y = panY;\r\n\t\t\t\t_currZoomLevel = zoomLevel;\r\n\t\t\t\t_applyCurrentZoomPan(allowRenderResolution);\r\n\t\t\t},\r\n\r\n\t\t\tinit: function () {\r\n\r\n\t\t\t\tif (_isOpen || _isDestroying) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar i;\r\n\r\n\t\t\t\tself.framework = framework; // basic functionality\r\n\t\t\t\tself.template = template; // root DOM element of PhotoSwipe\r\n\t\t\t\tself.bg = framework.getChildByClass(template, 'pswp__bg');\r\n\r\n\t\t\t\t_initalClassName = template.className;\r\n\t\t\t\t_isOpen = true;\r\n\r\n\t\t\t\t_features = framework.detectFeatures();\r\n\t\t\t\t_requestAF = _features.raf;\r\n\t\t\t\t_cancelAF = _features.caf;\r\n\t\t\t\t_transformKey = _features.transform;\r\n\t\t\t\t_oldIE = _features.oldIE;\r\n\r\n\t\t\t\tself.scrollWrap = framework.getChildByClass(template, 'pswp__scroll-wrap');\r\n\t\t\t\tself.container = framework.getChildByClass(self.scrollWrap, 'pswp__container');\r\n\r\n\t\t\t\t_containerStyle = self.container.style; // for fast access\r\n\r\n\t\t\t\t// Objects that hold slides (there are only 3 in DOM)\r\n\t\t\t\tself.itemHolders = _itemHolders = [\r\n\t\t\t\t\t{ el: self.container.children[0], wrap: 0, index: -1 },\r\n\t\t\t\t\t{ el: self.container.children[1], wrap: 0, index: -1 },\r\n\t\t\t\t\t{ el: self.container.children[2], wrap: 0, index: -1 }\r\n\t\t\t\t];\r\n\r\n\t\t\t\t// hide nearby item holders until initial zoom animation finishes (to avoid extra Paints)\r\n\t\t\t\t_itemHolders[0].el.style.display = _itemHolders[2].el.style.display = 'none';\r\n\r\n\t\t\t\t_setupTransforms();\r\n\r\n\t\t\t\t// Setup global events\r\n\t\t\t\t_globalEventHandlers = {\r\n\t\t\t\t\tresize: self.updateSize,\r\n\r\n\t\t\t\t\t// Fixes: iOS 10.3 resize event\r\n\t\t\t\t\t// does not update scrollWrap.clientWidth instantly after resize\r\n\t\t\t\t\t// https://github.com/dimsemenov/PhotoSwipe/issues/1315\r\n\t\t\t\t\torientationchange: function () {\r\n\t\t\t\t\t\tclearTimeout(_orientationChangeTimeout);\r\n\t\t\t\t\t\t_orientationChangeTimeout = setTimeout(function () {\r\n\t\t\t\t\t\t\tif (_viewportSize.x !== self.scrollWrap.clientWidth) {\r\n\t\t\t\t\t\t\t\tself.updateSize();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}, 500);\r\n\t\t\t\t\t},\r\n\t\t\t\t\tscroll: _updatePageScrollOffset,\r\n\t\t\t\t\tkeydown: _onKeyDown,\r\n\t\t\t\t\tclick: _onGlobalClick\r\n\t\t\t\t};\r\n\r\n\t\t\t\t// disable show/hide effects on old browsers that don't support CSS animations or transforms, \r\n\t\t\t\t// old IOS, Android and Opera mobile. Blackberry seems to work fine, even older models.\r\n\t\t\t\tvar oldPhone = _features.isOldIOSPhone || _features.isOldAndroid || _features.isMobileOpera;\r\n\t\t\t\tif (!_features.animationName || !_features.transform || oldPhone) {\r\n\t\t\t\t\t_options.showAnimationDuration = _options.hideAnimationDuration = 0;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// init modules\r\n\t\t\t\tfor (i = 0; i < _modules.length; i++) {\r\n\t\t\t\t\tself['init' + _modules[i]]();\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// init\r\n\t\t\t\tif (UiClass) {\r\n\t\t\t\t\tvar ui = self.ui = new UiClass(self, framework);\r\n\t\t\t\t\tui.init();\r\n\t\t\t\t}\r\n\r\n\t\t\t\t_shout('firstUpdate');\r\n\t\t\t\t_currentItemIndex = _currentItemIndex || _options.index || 0;\r\n\t\t\t\t// validate index\r\n\t\t\t\tif (isNaN(_currentItemIndex) || _currentItemIndex < 0 || _currentItemIndex >= _getNumItems()) {\r\n\t\t\t\t\t_currentItemIndex = 0;\r\n\t\t\t\t}\r\n\t\t\t\tself.currItem = _getItemAt(_currentItemIndex);\r\n\r\n\r\n\t\t\t\tif (_features.isOldIOSPhone || _features.isOldAndroid) {\r\n\t\t\t\t\t_isFixedPosition = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttemplate.setAttribute('aria-hidden', 'false');\r\n\t\t\t\tif (_options.modal) {\r\n\t\t\t\t\tif (!_isFixedPosition) {\r\n\t\t\t\t\t\ttemplate.style.position = 'absolute';\r\n\t\t\t\t\t\ttemplate.style.top = framework.getScrollY() + 'px';\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\ttemplate.style.position = 'fixed';\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (_currentWindowScrollY === undefined) {\r\n\t\t\t\t\t_shout('initialLayout');\r\n\t\t\t\t\t_currentWindowScrollY = _initalWindowScrollY = framework.getScrollY();\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// add classes to root element of PhotoSwipe\r\n\t\t\t\tvar rootClasses = 'pswp--open ';\r\n\t\t\t\tif (_options.mainClass) {\r\n\t\t\t\t\trootClasses += _options.mainClass + ' ';\r\n\t\t\t\t}\r\n\t\t\t\tif (_options.showHideOpacity) {\r\n\t\t\t\t\trootClasses += 'pswp--animate_opacity ';\r\n\t\t\t\t}\r\n\t\t\t\trootClasses += _likelyTouchDevice ? 'pswp--touch' : 'pswp--notouch';\r\n\t\t\t\trootClasses += _features.animationName ? ' pswp--css_animation' : '';\r\n\t\t\t\trootClasses += _features.svg ? ' pswp--svg' : '';\r\n\t\t\t\tframework.addClass(template, rootClasses);\r\n\r\n\t\t\t\tself.updateSize();\r\n\r\n\t\t\t\t// initial update\r\n\t\t\t\t_containerShiftIndex = -1;\r\n\t\t\t\t_indexDiff = null;\r\n\t\t\t\tfor (i = 0; i < NUM_HOLDERS; i++) {\r\n\t\t\t\t\t_setTranslateX((i + _containerShiftIndex) * _slideSize.x, _itemHolders[i].el.style);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!_oldIE) {\r\n\t\t\t\t\tframework.bind(self.scrollWrap, _downEvents, self); // no dragging for old IE\r\n\t\t\t\t}\r\n\r\n\t\t\t\t_listen('initialZoomInEnd', function () {\r\n\t\t\t\t\tself.setContent(_itemHolders[0], _currentItemIndex - 1);\r\n\t\t\t\t\tself.setContent(_itemHolders[2], _currentItemIndex + 1);\r\n\r\n\t\t\t\t\t_itemHolders[0].el.style.display = _itemHolders[2].el.style.display = 'block';\r\n\r\n\t\t\t\t\tif (_options.focus) {\r\n\t\t\t\t\t\t// focus causes layout, \r\n\t\t\t\t\t\t// which causes lag during the animation, \r\n\t\t\t\t\t\t// that's why we delay it untill the initial zoom transition ends\r\n\t\t\t\t\t\ttemplate.focus();\r\n\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t\t_bindEvents();\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// set content for center slide (first time)\r\n\t\t\t\tself.setContent(_itemHolders[1], _currentItemIndex);\r\n\r\n\t\t\t\tself.updateCurrItem();\r\n\r\n\t\t\t\t_shout('afterInit');\r\n\r\n\t\t\t\tif (!_isFixedPosition) {\r\n\r\n\t\t\t\t\t// On all versions of iOS lower than 8.0, we check size of viewport every second.\r\n\t\t\t\t\t// \r\n\t\t\t\t\t// This is done to detect when Safari top & bottom bars appear, \r\n\t\t\t\t\t// as this action doesn't trigger any events (like resize). \r\n\t\t\t\t\t// \r\n\t\t\t\t\t// On iOS8 they fixed this.\r\n\t\t\t\t\t// \r\n\t\t\t\t\t// 10 Nov 2014: iOS 7 usage ~40%. iOS 8 usage 56%.\r\n\r\n\t\t\t\t\t_updateSizeInterval = setInterval(function () {\r\n\t\t\t\t\t\tif (!_numAnimations && !_isDragging && !_isZooming && (_currZoomLevel === self.currItem.initialZoomLevel)) {\r\n\t\t\t\t\t\t\tself.updateSize();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}, 1000);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tframework.addClass(template, 'pswp--visible');\r\n\t\t\t},\r\n\r\n\t\t\t// Close the gallery, then destroy it\r\n\t\t\tclose: function () {\r\n\t\t\t\tif (!_isOpen) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t_isOpen = false;\r\n\t\t\t\t_isDestroying = true;\r\n\t\t\t\t_shout('close');\r\n\t\t\t\t_unbindEvents();\r\n\r\n\t\t\t\t_showOrHide(self.currItem, null, true, self.destroy);\r\n\t\t\t},\r\n\r\n\t\t\t// destroys the gallery (unbinds events, cleans up intervals and timeouts to avoid memory leaks)\r\n\t\t\tdestroy: function () {\r\n\t\t\t\t_shout('destroy');\r\n\r\n\t\t\t\tif (_showOrHideTimeout) {\r\n\t\t\t\t\tclearTimeout(_showOrHideTimeout);\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttemplate.setAttribute('aria-hidden', 'true');\r\n\t\t\t\ttemplate.className = _initalClassName;\r\n\r\n\t\t\t\tif (_updateSizeInterval) {\r\n\t\t\t\t\tclearInterval(_updateSizeInterval);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tframework.unbind(self.scrollWrap, _downEvents, self);\r\n\r\n\t\t\t\t// we unbind scroll event at the end, as closing animation may depend on it\r\n\t\t\t\tframework.unbind(window, 'scroll', self);\r\n\r\n\t\t\t\t_stopDragUpdateLoop();\r\n\r\n\t\t\t\t_stopAllAnimations();\r\n\r\n\t\t\t\t_listeners = null;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Pan image to position\r\n\t\t\t * @param {Number} x \r\n\t\t\t * @param {Number} y \r\n\t\t\t * @param {Boolean} force Will ignore bounds if set to true.\r\n\t\t\t */\r\n\t\t\tpanTo: function (x, y, force) {\r\n\t\t\t\tif (!force) {\r\n\t\t\t\t\tif (x > _currPanBounds.min.x) {\r\n\t\t\t\t\t\tx = _currPanBounds.min.x;\r\n\t\t\t\t\t} else if (x < _currPanBounds.max.x) {\r\n\t\t\t\t\t\tx = _currPanBounds.max.x;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (y > _currPanBounds.min.y) {\r\n\t\t\t\t\t\ty = _currPanBounds.min.y;\r\n\t\t\t\t\t} else if (y < _currPanBounds.max.y) {\r\n\t\t\t\t\t\ty = _currPanBounds.max.y;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t_panOffset.x = x;\r\n\t\t\t\t_panOffset.y = y;\r\n\t\t\t\t_applyCurrentZoomPan();\r\n\t\t\t},\r\n\r\n\t\t\thandleEvent: function (e) {\r\n\t\t\t\te = e || window.event;\r\n\t\t\t\tif (_globalEventHandlers[e.type]) {\r\n\t\t\t\t\t_globalEventHandlers[e.type](e);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\r\n\t\t\tgoTo: function (index) {\r\n\r\n\t\t\t\tindex = _getLoopedId(index);\r\n\r\n\t\t\t\tvar diff = index - _currentItemIndex;\r\n\t\t\t\t_indexDiff = diff;\r\n\r\n\t\t\t\t_currentItemIndex = index;\r\n\t\t\t\tself.currItem = _getItemAt(_currentItemIndex);\r\n\t\t\t\t_currPositionIndex -= diff;\r\n\r\n\t\t\t\t_moveMainScroll(_slideSize.x * _currPositionIndex);\r\n\r\n\r\n\t\t\t\t_stopAllAnimations();\r\n\t\t\t\t_mainScrollAnimating = false;\r\n\r\n\t\t\t\tself.updateCurrItem();\r\n\t\t\t},\r\n\t\t\tnext: function () {\r\n\t\t\t\tself.goTo(_currentItemIndex + 1);\r\n\t\t\t},\r\n\t\t\tprev: function () {\r\n\t\t\t\tself.goTo(_currentItemIndex - 1);\r\n\t\t\t},\r\n\r\n\t\t\t// update current zoom/pan objects\r\n\t\t\tupdateCurrZoomItem: function (emulateSetContent) {\r\n\t\t\t\tif (emulateSetContent) {\r\n\t\t\t\t\t_shout('beforeChange', 0);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// itemHolder[1] is middle (current) item\r\n\t\t\t\tif (_itemHolders[1].el.children.length) {\r\n\t\t\t\t\tvar zoomElement = _itemHolders[1].el.children[0];\r\n\t\t\t\t\tif (framework.hasClass(zoomElement, 'pswp__zoom-wrap')) {\r\n\t\t\t\t\t\t_currZoomElementStyle = zoomElement.style;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t_currZoomElementStyle = null;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\t_currZoomElementStyle = null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t_currPanBounds = self.currItem.bounds;\r\n\t\t\t\t_startZoomLevel = _currZoomLevel = self.currItem.initialZoomLevel;\r\n\r\n\t\t\t\t_panOffset.x = _currPanBounds.center.x;\r\n\t\t\t\t_panOffset.y = _currPanBounds.center.y;\r\n\r\n\t\t\t\tif (emulateSetContent) {\r\n\t\t\t\t\t_shout('afterChange');\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\r\n\t\t\tinvalidateCurrItems: function () {\r\n\t\t\t\t_itemsNeedUpdate = true;\r\n\t\t\t\tfor (var i = 0; i < NUM_HOLDERS; i++) {\r\n\t\t\t\t\tif (_itemHolders[i].item) {\r\n\t\t\t\t\t\t_itemHolders[i].item.needsUpdate = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\tupdateCurrItem: function (beforeAnimation) {\r\n\r\n\t\t\t\tif (_indexDiff === 0) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar diffAbs = Math.abs(_indexDiff),\r\n\t\t\t\t\ttempHolder;\r\n\r\n\t\t\t\tif (beforeAnimation && diffAbs < 2) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t\tself.currItem = _getItemAt(_currentItemIndex);\r\n\t\t\t\t_renderMaxResolution = false;\r\n\r\n\t\t\t\t_shout('beforeChange', _indexDiff);\r\n\r\n\t\t\t\tif (diffAbs >= NUM_HOLDERS) {\r\n\t\t\t\t\t_containerShiftIndex += _indexDiff + (_indexDiff > 0 ? -NUM_HOLDERS : NUM_HOLDERS);\r\n\t\t\t\t\tdiffAbs = NUM_HOLDERS;\r\n\t\t\t\t}\r\n\t\t\t\tfor (var i = 0; i < diffAbs; i++) {\r\n\t\t\t\t\tif (_indexDiff > 0) {\r\n\t\t\t\t\t\ttempHolder = _itemHolders.shift();\r\n\t\t\t\t\t\t_itemHolders[NUM_HOLDERS - 1] = tempHolder; // move first to last\r\n\r\n\t\t\t\t\t\t_containerShiftIndex++;\r\n\t\t\t\t\t\t_setTranslateX((_containerShiftIndex + 2) * _slideSize.x, tempHolder.el.style);\r\n\t\t\t\t\t\tself.setContent(tempHolder, _currentItemIndex - diffAbs + i + 1 + 1);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\ttempHolder = _itemHolders.pop();\r\n\t\t\t\t\t\t_itemHolders.unshift(tempHolder); // move last to first\r\n\r\n\t\t\t\t\t\t_containerShiftIndex--;\r\n\t\t\t\t\t\t_setTranslateX(_containerShiftIndex * _slideSize.x, tempHolder.el.style);\r\n\t\t\t\t\t\tself.setContent(tempHolder, _currentItemIndex + diffAbs - i - 1 - 1);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// reset zoom/pan on previous item\r\n\t\t\t\tif (_currZoomElementStyle && Math.abs(_indexDiff) === 1) {\r\n\r\n\t\t\t\t\tvar prevItem = _getItemAt(_prevItemIndex);\r\n\t\t\t\t\tif (prevItem.initialZoomLevel !== _currZoomLevel) {\r\n\t\t\t\t\t\t_calculateItemSize(prevItem, _viewportSize);\r\n\t\t\t\t\t\t_setImageSize(prevItem);\r\n\t\t\t\t\t\t_applyZoomPanToItem(prevItem);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// reset diff after update\r\n\t\t\t\t_indexDiff = 0;\r\n\r\n\t\t\t\tself.updateCurrZoomItem();\r\n\r\n\t\t\t\t_prevItemIndex = _currentItemIndex;\r\n\r\n\t\t\t\t_shout('afterChange');\r\n\r\n\t\t\t},\r\n\r\n\r\n\r\n\t\t\tupdateSize: function (force) {\r\n\r\n\t\t\t\tif (!_isFixedPosition && _options.modal) {\r\n\t\t\t\t\tvar windowScrollY = framework.getScrollY();\r\n\t\t\t\t\tif (_currentWindowScrollY !== windowScrollY) {\r\n\t\t\t\t\t\ttemplate.style.top = windowScrollY + 'px';\r\n\t\t\t\t\t\t_currentWindowScrollY = windowScrollY;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (!force && _windowVisibleSize.x === window.innerWidth && _windowVisibleSize.y === window.innerHeight) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t_windowVisibleSize.x = window.innerWidth;\r\n\t\t\t\t\t_windowVisibleSize.y = window.innerHeight;\r\n\r\n\t\t\t\t\t//template.style.width = _windowVisibleSize.x + 'px';\r\n\t\t\t\t\ttemplate.style.height = _windowVisibleSize.y + 'px';\r\n\t\t\t\t}\r\n\r\n\r\n\r\n\t\t\t\t_viewportSize.x = self.scrollWrap.clientWidth;\r\n\t\t\t\t_viewportSize.y = self.scrollWrap.clientHeight;\r\n\r\n\t\t\t\t_updatePageScrollOffset();\r\n\r\n\t\t\t\t_slideSize.x = _viewportSize.x + Math.round(_viewportSize.x * _options.spacing);\r\n\t\t\t\t_slideSize.y = _viewportSize.y;\r\n\r\n\t\t\t\t_moveMainScroll(_slideSize.x * _currPositionIndex);\r\n\r\n\t\t\t\t_shout('beforeResize'); // even may be used for example to switch image sources\r\n\r\n\r\n\t\t\t\t// don't re-calculate size on inital size update\r\n\t\t\t\tif (_containerShiftIndex !== undefined) {\r\n\r\n\t\t\t\t\tvar holder,\r\n\t\t\t\t\t\titem,\r\n\t\t\t\t\t\thIndex;\r\n\r\n\t\t\t\t\tfor (var i = 0; i < NUM_HOLDERS; i++) {\r\n\t\t\t\t\t\tholder = _itemHolders[i];\r\n\t\t\t\t\t\t_setTranslateX((i + _containerShiftIndex) * _slideSize.x, holder.el.style);\r\n\r\n\t\t\t\t\t\thIndex = _currentItemIndex + i - 1;\r\n\r\n\t\t\t\t\t\tif (_options.loop && _getNumItems() > 2) {\r\n\t\t\t\t\t\t\thIndex = _getLoopedId(hIndex);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// update zoom level on items and refresh source (if needsUpdate)\r\n\t\t\t\t\t\titem = _getItemAt(hIndex);\r\n\r\n\t\t\t\t\t\t// re-render gallery item if `needsUpdate`,\r\n\t\t\t\t\t\t// or doesn't have `bounds` (entirely new slide object)\r\n\t\t\t\t\t\tif (item && (_itemsNeedUpdate || item.needsUpdate || !item.bounds)) {\r\n\r\n\t\t\t\t\t\t\tself.cleanSlide(item);\r\n\r\n\t\t\t\t\t\t\tself.setContent(holder, hIndex);\r\n\r\n\t\t\t\t\t\t\t// if \"center\" slide\r\n\t\t\t\t\t\t\tif (i === 1) {\r\n\t\t\t\t\t\t\t\tself.currItem = item;\r\n\t\t\t\t\t\t\t\tself.updateCurrZoomItem(true);\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\titem.needsUpdate = false;\r\n\r\n\t\t\t\t\t\t} else if (holder.index === -1 && hIndex >= 0) {\r\n\t\t\t\t\t\t\t// add content first time\r\n\t\t\t\t\t\t\tself.setContent(holder, hIndex);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (item && item.container) {\r\n\t\t\t\t\t\t\t_calculateItemSize(item, _viewportSize);\r\n\t\t\t\t\t\t\t_setImageSize(item);\r\n\t\t\t\t\t\t\t_applyZoomPanToItem(item);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\t\t\t\t\t_itemsNeedUpdate = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t_startZoomLevel = _currZoomLevel = self.currItem.initialZoomLevel;\r\n\t\t\t\t_currPanBounds = self.currItem.bounds;\r\n\r\n\t\t\t\tif (_currPanBounds) {\r\n\t\t\t\t\t_panOffset.x = _currPanBounds.center.x;\r\n\t\t\t\t\t_panOffset.y = _currPanBounds.center.y;\r\n\t\t\t\t\t_applyCurrentZoomPan(true);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t_shout('resize');\r\n\t\t\t},\r\n\r\n\t\t\t// Zoom current item to\r\n\t\t\tzoomTo: function (destZoomLevel, centerPoint, speed, easingFn, updateFn) {\r\n\t\t\t\t/*\r\n\t\t\t\t\tif(destZoomLevel === 'fit') {\r\n\t\t\t\t\t\tdestZoomLevel = self.currItem.fitRatio;\r\n\t\t\t\t\t} else if(destZoomLevel === 'fill') {\r\n\t\t\t\t\t\tdestZoomLevel = self.currItem.fillRatio;\r\n\t\t\t\t\t}\r\n\t\t\t\t*/\r\n\r\n\t\t\t\tif (centerPoint) {\r\n\t\t\t\t\t_startZoomLevel = _currZoomLevel;\r\n\t\t\t\t\t_midZoomPoint.x = Math.abs(centerPoint.x) - _panOffset.x;\r\n\t\t\t\t\t_midZoomPoint.y = Math.abs(centerPoint.y) - _panOffset.y;\r\n\t\t\t\t\t_equalizePoints(_startPanOffset, _panOffset);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar destPanBounds = _calculatePanBounds(destZoomLevel, false),\r\n\t\t\t\t\tdestPanOffset = {};\r\n\r\n\t\t\t\t_modifyDestPanOffset('x', destPanBounds, destPanOffset, destZoomLevel);\r\n\t\t\t\t_modifyDestPanOffset('y', destPanBounds, destPanOffset, destZoomLevel);\r\n\r\n\t\t\t\tvar initialZoomLevel = _currZoomLevel;\r\n\t\t\t\tvar initialPanOffset = {\r\n\t\t\t\t\tx: _panOffset.x,\r\n\t\t\t\t\ty: _panOffset.y\r\n\t\t\t\t};\r\n\r\n\t\t\t\t_roundPoint(destPanOffset);\r\n\r\n\t\t\t\tvar onUpdate = function (now) {\r\n\t\t\t\t\tif (now === 1) {\r\n\t\t\t\t\t\t_currZoomLevel = destZoomLevel;\r\n\t\t\t\t\t\t_panOffset.x = destPanOffset.x;\r\n\t\t\t\t\t\t_panOffset.y = destPanOffset.y;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t_currZoomLevel = (destZoomLevel - initialZoomLevel) * now + initialZoomLevel;\r\n\t\t\t\t\t\t_panOffset.x = (destPanOffset.x - initialPanOffset.x) * now + initialPanOffset.x;\r\n\t\t\t\t\t\t_panOffset.y = (destPanOffset.y - initialPanOffset.y) * now + initialPanOffset.y;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (updateFn) {\r\n\t\t\t\t\t\tupdateFn(now);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t_applyCurrentZoomPan(now === 1);\r\n\t\t\t\t};\r\n\r\n\t\t\t\tif (speed) {\r\n\t\t\t\t\t_animateProp('customZoomTo', 0, 1, speed, easingFn || framework.easing.sine.inOut, onUpdate);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tonUpdate(1);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\r\n\t\t};\r\n\r\n\r\n\t\t/*>>core*/\r\n\r\n\t\t/*>>gestures*/\r\n\t\t/**\r\n\t\t * Mouse/touch/pointer event handlers.\r\n\t\t * \r\n\t\t * separated from @core.js for readability\r\n\t\t */\r\n\r\n\t\tvar MIN_SWIPE_DISTANCE = 30,\r\n\t\t\tDIRECTION_CHECK_OFFSET = 10; // amount of pixels to drag to determine direction of swipe\r\n\r\n\t\tvar _gestureStartTime,\r\n\t\t\t_gestureCheckSpeedTime,\r\n\r\n\t\t\t// pool of objects that are used during dragging of zooming\r\n\t\t\tp = {}, // first point\r\n\t\t\tp2 = {}, // second point (for zoom gesture)\r\n\t\t\tdelta = {},\r\n\t\t\t_currPoint = {},\r\n\t\t\t_startPoint = {},\r\n\t\t\t_currPointers = [],\r\n\t\t\t_startMainScrollPos = {},\r\n\t\t\t_releaseAnimData,\r\n\t\t\t_posPoints = [], // array of points during dragging, used to determine type of gesture\r\n\t\t\t_tempPoint = {},\r\n\r\n\t\t\t_isZoomingIn,\r\n\t\t\t_verticalDragInitiated,\r\n\t\t\t_oldAndroidTouchEndTimeout,\r\n\t\t\t_currZoomedItemIndex = 0,\r\n\t\t\t_centerPoint = _getEmptyPoint(),\r\n\t\t\t_lastReleaseTime = 0,\r\n\t\t\t_isDragging, // at least one pointer is down\r\n\t\t\t_isMultitouch, // at least two _pointers are down\r\n\t\t\t_zoomStarted, // zoom level changed during zoom gesture\r\n\t\t\t_moved,\r\n\t\t\t_dragAnimFrame,\r\n\t\t\t_mainScrollShifted,\r\n\t\t\t_currentPoints, // array of current touch points\r\n\t\t\t_isZooming,\r\n\t\t\t_currPointsDistance,\r\n\t\t\t_startPointsDistance,\r\n\t\t\t_currPanBounds,\r\n\t\t\t_mainScrollPos = _getEmptyPoint(),\r\n\t\t\t_currZoomElementStyle,\r\n\t\t\t_mainScrollAnimating, // true, if animation after swipe gesture is running\r\n\t\t\t_midZoomPoint = _getEmptyPoint(),\r\n\t\t\t_currCenterPoint = _getEmptyPoint(),\r\n\t\t\t_direction,\r\n\t\t\t_isFirstMove,\r\n\t\t\t_opacityChanged,\r\n\t\t\t_bgOpacity,\r\n\t\t\t_wasOverInitialZoom,\r\n\r\n\t\t\t_isEqualPoints = function (p1, p2) {\r\n\t\t\t\treturn p1.x === p2.x && p1.y === p2.y;\r\n\t\t\t},\r\n\t\t\t_isNearbyPoints = function (touch0, touch1) {\r\n\t\t\t\treturn Math.abs(touch0.x - touch1.x) < DOUBLE_TAP_RADIUS && Math.abs(touch0.y - touch1.y) < DOUBLE_TAP_RADIUS;\r\n\t\t\t},\r\n\t\t\t_calculatePointsDistance = function (p1, p2) {\r\n\t\t\t\t_tempPoint.x = Math.abs(p1.x - p2.x);\r\n\t\t\t\t_tempPoint.y = Math.abs(p1.y - p2.y);\r\n\t\t\t\treturn Math.sqrt(_tempPoint.x * _tempPoint.x + _tempPoint.y * _tempPoint.y);\r\n\t\t\t},\r\n\t\t\t_stopDragUpdateLoop = function () {\r\n\t\t\t\tif (_dragAnimFrame) {\r\n\t\t\t\t\t_cancelAF(_dragAnimFrame);\r\n\t\t\t\t\t_dragAnimFrame = null;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t_dragUpdateLoop = function () {\r\n\t\t\t\tif (_isDragging) {\r\n\t\t\t\t\t_dragAnimFrame = _requestAF(_dragUpdateLoop);\r\n\t\t\t\t\t_renderMovement();\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t_canPan = function () {\r\n\t\t\t\treturn !(_options.scaleMode === 'fit' && _currZoomLevel === self.currItem.initialZoomLevel);\r\n\t\t\t},\r\n\r\n\t\t\t// find the closest parent DOM element\r\n\t\t\t_closestElement = function (el, fn) {\r\n\t\t\t\tif (!el || el === document) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// don't search elements above pswp__scroll-wrap\r\n\t\t\t\tif (el.getAttribute('class') && el.getAttribute('class').indexOf('pswp__scroll-wrap') > -1) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (fn(el)) {\r\n\t\t\t\t\treturn el;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn _closestElement(el.parentNode, fn);\r\n\t\t\t},\r\n\r\n\t\t\t_preventObj = {},\r\n\t\t\t_preventDefaultEventBehaviour = function (e, isDown) {\r\n\t\t\t\t_preventObj.prevent = !_closestElement(e.target, _options.isClickableElement);\r\n\r\n\t\t\t\t_shout('preventDragEvent', e, isDown, _preventObj);\r\n\t\t\t\treturn _preventObj.prevent;\r\n\r\n\t\t\t},\r\n\t\t\t_convertTouchToPoint = function (touch, p) {\r\n\t\t\t\tp.x = touch.pageX;\r\n\t\t\t\tp.y = touch.pageY;\r\n\t\t\t\tp.id = touch.identifier;\r\n\t\t\t\treturn p;\r\n\t\t\t},\r\n\t\t\t_findCenterOfPoints = function (p1, p2, pCenter) {\r\n\t\t\t\tpCenter.x = (p1.x + p2.x) * 0.5;\r\n\t\t\t\tpCenter.y = (p1.y + p2.y) * 0.5;\r\n\t\t\t},\r\n\t\t\t_pushPosPoint = function (time, x, y) {\r\n\t\t\t\tif (time - _gestureCheckSpeedTime > 50) {\r\n\t\t\t\t\tvar o = _posPoints.length > 2 ? _posPoints.shift() : {};\r\n\t\t\t\t\to.x = x;\r\n\t\t\t\t\to.y = y;\r\n\t\t\t\t\t_posPoints.push(o);\r\n\t\t\t\t\t_gestureCheckSpeedTime = time;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t_calculateVerticalDragOpacityRatio = function () {\r\n\t\t\t\tvar yOffset = _panOffset.y - self.currItem.initialPosition.y; // difference between initial and current position\r\n\t\t\t\treturn 1 - Math.abs(yOffset / (_viewportSize.y / 2));\r\n\t\t\t},\r\n\r\n\r\n\t\t\t// points pool, reused during touch events\r\n\t\t\t_ePoint1 = {},\r\n\t\t\t_ePoint2 = {},\r\n\t\t\t_tempPointsArr = [],\r\n\t\t\t_tempCounter,\r\n\t\t\t_getTouchPoints = function (e) {\r\n\t\t\t\t// clean up previous points, without recreating array\r\n\t\t\t\twhile (_tempPointsArr.length > 0) {\r\n\t\t\t\t\t_tempPointsArr.pop();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!_pointerEventEnabled) {\r\n\t\t\t\t\tif (e.type.indexOf('touch') > -1) {\r\n\r\n\t\t\t\t\t\tif (e.touches && e.touches.length > 0) {\r\n\t\t\t\t\t\t\t_tempPointsArr[0] = _convertTouchToPoint(e.touches[0], _ePoint1);\r\n\t\t\t\t\t\t\tif (e.touches.length > 1) {\r\n\t\t\t\t\t\t\t\t_tempPointsArr[1] = _convertTouchToPoint(e.touches[1], _ePoint2);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t_ePoint1.x = e.pageX;\r\n\t\t\t\t\t\t_ePoint1.y = e.pageY;\r\n\t\t\t\t\t\t_ePoint1.id = '';\r\n\t\t\t\t\t\t_tempPointsArr[0] = _ePoint1;//_ePoint1;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\t_tempCounter = 0;\r\n\t\t\t\t\t// we can use forEach, as pointer events are supported only in modern browsers\r\n\t\t\t\t\t_currPointers.forEach(function (p) {\r\n\t\t\t\t\t\tif (_tempCounter === 0) {\r\n\t\t\t\t\t\t\t_tempPointsArr[0] = p;\r\n\t\t\t\t\t\t} else if (_tempCounter === 1) {\r\n\t\t\t\t\t\t\t_tempPointsArr[1] = p;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t_tempCounter++;\r\n\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\treturn _tempPointsArr;\r\n\t\t\t},\r\n\r\n\t\t\t_panOrMoveMainScroll = function (axis, delta) {\r\n\r\n\t\t\t\tvar panFriction,\r\n\t\t\t\t\toverDiff = 0,\r\n\t\t\t\t\tnewOffset = _panOffset[axis] + delta[axis],\r\n\t\t\t\t\tstartOverDiff,\r\n\t\t\t\t\tdir = delta[axis] > 0,\r\n\t\t\t\t\tnewMainScrollPosition = _mainScrollPos.x + delta.x,\r\n\t\t\t\t\tmainScrollDiff = _mainScrollPos.x - _startMainScrollPos.x,\r\n\t\t\t\t\tnewPanPos,\r\n\t\t\t\t\tnewMainScrollPos;\r\n\r\n\t\t\t\t// calculate fdistance over the bounds and friction\r\n\t\t\t\tif (newOffset > _currPanBounds.min[axis] || newOffset < _currPanBounds.max[axis]) {\r\n\t\t\t\t\tpanFriction = _options.panEndFriction;\r\n\t\t\t\t\t// Linear increasing of friction, so at 1/4 of viewport it's at max value. \r\n\t\t\t\t\t// Looks not as nice as was expected. Left for history.\r\n\t\t\t\t\t// panFriction = (1 - (_panOffset[axis] + delta[axis] + panBounds.min[axis]) / (_viewportSize[axis] / 4) );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tpanFriction = 1;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tnewOffset = _panOffset[axis] + delta[axis] * panFriction;\r\n\r\n\t\t\t\t// move main scroll or start panning\r\n\t\t\t\tif (_options.allowPanToNext || _currZoomLevel === self.currItem.initialZoomLevel) {\r\n\r\n\r\n\t\t\t\t\tif (!_currZoomElementStyle) {\r\n\r\n\t\t\t\t\t\tnewMainScrollPos = newMainScrollPosition;\r\n\r\n\t\t\t\t\t} else if (_direction === 'h' && axis === 'x' && !_zoomStarted) {\r\n\r\n\t\t\t\t\t\tif (dir) {\r\n\t\t\t\t\t\t\tif (newOffset > _currPanBounds.min[axis]) {\r\n\t\t\t\t\t\t\t\tpanFriction = _options.panEndFriction;\r\n\t\t\t\t\t\t\t\toverDiff = _currPanBounds.min[axis] - newOffset;\r\n\t\t\t\t\t\t\t\tstartOverDiff = _currPanBounds.min[axis] - _startPanOffset[axis];\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t// drag right\r\n\t\t\t\t\t\t\tif ((startOverDiff <= 0 || mainScrollDiff < 0) && _getNumItems() > 1) {\r\n\t\t\t\t\t\t\t\tnewMainScrollPos = newMainScrollPosition;\r\n\t\t\t\t\t\t\t\tif (mainScrollDiff < 0 && newMainScrollPosition > _startMainScrollPos.x) {\r\n\t\t\t\t\t\t\t\t\tnewMainScrollPos = _startMainScrollPos.x;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tif (_currPanBounds.min.x !== _currPanBounds.max.x) {\r\n\t\t\t\t\t\t\t\t\tnewPanPos = newOffset;\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\t\tif (newOffset < _currPanBounds.max[axis]) {\r\n\t\t\t\t\t\t\t\tpanFriction = _options.panEndFriction;\r\n\t\t\t\t\t\t\t\toverDiff = newOffset - _currPanBounds.max[axis];\r\n\t\t\t\t\t\t\t\tstartOverDiff = _startPanOffset[axis] - _currPanBounds.max[axis];\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif ((startOverDiff <= 0 || mainScrollDiff > 0) && _getNumItems() > 1) {\r\n\t\t\t\t\t\t\t\tnewMainScrollPos = newMainScrollPosition;\r\n\r\n\t\t\t\t\t\t\t\tif (mainScrollDiff > 0 && newMainScrollPosition < _startMainScrollPos.x) {\r\n\t\t\t\t\t\t\t\t\tnewMainScrollPos = _startMainScrollPos.x;\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tif (_currPanBounds.min.x !== _currPanBounds.max.x) {\r\n\t\t\t\t\t\t\t\t\tnewPanPos = newOffset;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t\t\t//\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (axis === 'x') {\r\n\r\n\t\t\t\t\t\tif (newMainScrollPos !== undefined) {\r\n\t\t\t\t\t\t\t_moveMainScroll(newMainScrollPos, true);\r\n\t\t\t\t\t\t\tif (newMainScrollPos === _startMainScrollPos.x) {\r\n\t\t\t\t\t\t\t\t_mainScrollShifted = false;\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t_mainScrollShifted = true;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (_currPanBounds.min.x !== _currPanBounds.max.x) {\r\n\t\t\t\t\t\t\tif (newPanPos !== undefined) {\r\n\t\t\t\t\t\t\t\t_panOffset.x = newPanPos;\r\n\t\t\t\t\t\t\t} else if (!_mainScrollShifted) {\r\n\t\t\t\t\t\t\t\t_panOffset.x += delta.x * panFriction;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\treturn newMainScrollPos !== undefined;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!_mainScrollAnimating) {\r\n\r\n\t\t\t\t\tif (!_mainScrollShifted) {\r\n\t\t\t\t\t\tif (_currZoomLevel > self.currItem.fitRatio) {\r\n\t\t\t\t\t\t\t_panOffset[axis] += delta[axis] * panFriction;\r\n\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t},\r\n\r\n\t\t\t// Pointerdown/touchstart/mousedown handler\r\n\t\t\t_onDragStart = function (e) {\r\n\r\n\t\t\t\t// Allow dragging only via left mouse button.\r\n\t\t\t\t// As this handler is not added in IE8 - we ignore e.which\r\n\t\t\t\t// \r\n\t\t\t\t// http://www.quirksmode.org/js/events_properties.html\r\n\t\t\t\t// https://developer.mozilla.org/en-US/docs/Web/API/event.button\r\n\t\t\t\tif (e.type === 'mousedown' && e.button > 0) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (_initialZoomRunning) {\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (_oldAndroidTouchEndTimeout && e.type === 'mousedown') {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (_preventDefaultEventBehaviour(e, true)) {\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t}\r\n\r\n\r\n\r\n\t\t\t\t_shout('pointerDown');\r\n\r\n\t\t\t\tif (_pointerEventEnabled) {\r\n\t\t\t\t\tvar pointerIndex = framework.arraySearch(_currPointers, e.pointerId, 'id');\r\n\t\t\t\t\tif (pointerIndex < 0) {\r\n\t\t\t\t\t\tpointerIndex = _currPointers.length;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t_currPointers[pointerIndex] = { x: e.pageX, y: e.pageY, id: e.pointerId };\r\n\t\t\t\t}\r\n\r\n\r\n\r\n\t\t\t\tvar startPointsList = _getTouchPoints(e),\r\n\t\t\t\t\tnumPoints = startPointsList.length;\r\n\r\n\t\t\t\t_currentPoints = null;\r\n\r\n\t\t\t\t_stopAllAnimations();\r\n\r\n\t\t\t\t// init drag\r\n\t\t\t\tif (!_isDragging || numPoints === 1) {\r\n\r\n\r\n\r\n\t\t\t\t\t_isDragging = _isFirstMove = true;\r\n\t\t\t\t\tframework.bind(window, _upMoveEvents, self);\r\n\r\n\t\t\t\t\t_isZoomingIn =\r\n\t\t\t\t\t\t_wasOverInitialZoom =\r\n\t\t\t\t\t\t_opacityChanged =\r\n\t\t\t\t\t\t_verticalDragInitiated =\r\n\t\t\t\t\t\t_mainScrollShifted =\r\n\t\t\t\t\t\t_moved =\r\n\t\t\t\t\t\t_isMultitouch =\r\n\t\t\t\t\t\t_zoomStarted = false;\r\n\r\n\t\t\t\t\t_direction = null;\r\n\r\n\t\t\t\t\t_shout('firstTouchStart', startPointsList);\r\n\r\n\t\t\t\t\t_equalizePoints(_startPanOffset, _panOffset);\r\n\r\n\t\t\t\t\t_currPanDist.x = _currPanDist.y = 0;\r\n\t\t\t\t\t_equalizePoints(_currPoint, startPointsList[0]);\r\n\t\t\t\t\t_equalizePoints(_startPoint, _currPoint);\r\n\r\n\t\t\t\t\t//_equalizePoints(_startMainScrollPos, _mainScrollPos);\r\n\t\t\t\t\t_startMainScrollPos.x = _slideSize.x * _currPositionIndex;\r\n\r\n\t\t\t\t\t_posPoints = [{\r\n\t\t\t\t\t\tx: _currPoint.x,\r\n\t\t\t\t\t\ty: _currPoint.y\r\n\t\t\t\t\t}];\r\n\r\n\t\t\t\t\t_gestureCheckSpeedTime = _gestureStartTime = _getCurrentTime();\r\n\r\n\t\t\t\t\t//_mainScrollAnimationEnd(true);\r\n\t\t\t\t\t_calculatePanBounds(_currZoomLevel, true);\r\n\r\n\t\t\t\t\t// Start rendering\r\n\t\t\t\t\t_stopDragUpdateLoop();\r\n\t\t\t\t\t_dragUpdateLoop();\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// init zoom\r\n\t\t\t\tif (!_isZooming && numPoints > 1 && !_mainScrollAnimating && !_mainScrollShifted) {\r\n\t\t\t\t\t_startZoomLevel = _currZoomLevel;\r\n\t\t\t\t\t_zoomStarted = false; // true if zoom changed at least once\r\n\r\n\t\t\t\t\t_isZooming = _isMultitouch = true;\r\n\t\t\t\t\t_currPanDist.y = _currPanDist.x = 0;\r\n\r\n\t\t\t\t\t_equalizePoints(_startPanOffset, _panOffset);\r\n\r\n\t\t\t\t\t_equalizePoints(p, startPointsList[0]);\r\n\t\t\t\t\t_equalizePoints(p2, startPointsList[1]);\r\n\r\n\t\t\t\t\t_findCenterOfPoints(p, p2, _currCenterPoint);\r\n\r\n\t\t\t\t\t_midZoomPoint.x = Math.abs(_currCenterPoint.x) - _panOffset.x;\r\n\t\t\t\t\t_midZoomPoint.y = Math.abs(_currCenterPoint.y) - _panOffset.y;\r\n\t\t\t\t\t_currPointsDistance = _startPointsDistance = _calculatePointsDistance(p, p2);\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t},\r\n\r\n\t\t\t// Pointermove/touchmove/mousemove handler\r\n\t\t\t_onDragMove = function (e) {\r\n\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tif (_pointerEventEnabled) {\r\n\t\t\t\t\tvar pointerIndex = framework.arraySearch(_currPointers, e.pointerId, 'id');\r\n\t\t\t\t\tif (pointerIndex > -1) {\r\n\t\t\t\t\t\tvar p = _currPointers[pointerIndex];\r\n\t\t\t\t\t\tp.x = e.pageX;\r\n\t\t\t\t\t\tp.y = e.pageY;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (_isDragging) {\r\n\t\t\t\t\tvar touchesList = _getTouchPoints(e);\r\n\t\t\t\t\tif (!_direction && !_moved && !_isZooming) {\r\n\r\n\t\t\t\t\t\tif (_mainScrollPos.x !== _slideSize.x * _currPositionIndex) {\r\n\t\t\t\t\t\t\t// if main scroll position is shifted – direction is always horizontal\r\n\t\t\t\t\t\t\t_direction = 'h';\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tvar diff = Math.abs(touchesList[0].x - _currPoint.x) - Math.abs(touchesList[0].y - _currPoint.y);\r\n\t\t\t\t\t\t\t// check the direction of movement\r\n\t\t\t\t\t\t\tif (Math.abs(diff) >= DIRECTION_CHECK_OFFSET) {\r\n\t\t\t\t\t\t\t\t_direction = diff > 0 ? 'h' : 'v';\r\n\t\t\t\t\t\t\t\t_currentPoints = touchesList;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t_currentPoints = touchesList;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t// \r\n\t\t\t_renderMovement = function () {\r\n\r\n\t\t\t\tif (!_currentPoints) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar numPoints = _currentPoints.length;\r\n\r\n\t\t\t\tif (numPoints === 0) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t_equalizePoints(p, _currentPoints[0]);\r\n\r\n\t\t\t\tdelta.x = p.x - _currPoint.x;\r\n\t\t\t\tdelta.y = p.y - _currPoint.y;\r\n\r\n\t\t\t\tif (_isZooming && numPoints > 1) {\r\n\t\t\t\t\t// Handle behaviour for more than 1 point\r\n\r\n\t\t\t\t\t_currPoint.x = p.x;\r\n\t\t\t\t\t_currPoint.y = p.y;\r\n\r\n\t\t\t\t\t// check if one of two points changed\r\n\t\t\t\t\tif (!delta.x && !delta.y && _isEqualPoints(_currentPoints[1], p2)) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t_equalizePoints(p2, _currentPoints[1]);\r\n\r\n\r\n\t\t\t\t\tif (!_zoomStarted) {\r\n\t\t\t\t\t\t_zoomStarted = true;\r\n\t\t\t\t\t\t_shout('zoomGestureStarted');\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Distance between two points\r\n\t\t\t\t\tvar pointsDistance = _calculatePointsDistance(p, p2);\r\n\r\n\t\t\t\t\tvar zoomLevel = _calculateZoomLevel(pointsDistance);\r\n\r\n\t\t\t\t\t// slightly over the of initial zoom level\r\n\t\t\t\t\tif (zoomLevel > self.currItem.initialZoomLevel + self.currItem.initialZoomLevel / 15) {\r\n\t\t\t\t\t\t_wasOverInitialZoom = true;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Apply the friction if zoom level is out of the bounds\r\n\t\t\t\t\tvar zoomFriction = 1,\r\n\t\t\t\t\t\tminZoomLevel = _getMinZoomLevel(),\r\n\t\t\t\t\t\tmaxZoomLevel = _getMaxZoomLevel();\r\n\r\n\t\t\t\t\tif (zoomLevel < minZoomLevel) {\r\n\r\n\t\t\t\t\t\tif (_options.pinchToClose && !_wasOverInitialZoom && _startZoomLevel <= self.currItem.initialZoomLevel) {\r\n\t\t\t\t\t\t\t// fade out background if zooming out\r\n\t\t\t\t\t\t\tvar minusDiff = minZoomLevel - zoomLevel;\r\n\t\t\t\t\t\t\tvar percent = 1 - minusDiff / (minZoomLevel / 1.2);\r\n\r\n\t\t\t\t\t\t\t_applyBgOpacity(percent);\r\n\t\t\t\t\t\t\t_shout('onPinchClose', percent);\r\n\t\t\t\t\t\t\t_opacityChanged = true;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tzoomFriction = (minZoomLevel - zoomLevel) / minZoomLevel;\r\n\t\t\t\t\t\t\tif (zoomFriction > 1) {\r\n\t\t\t\t\t\t\t\tzoomFriction = 1;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tzoomLevel = minZoomLevel - zoomFriction * (minZoomLevel / 3);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t} else if (zoomLevel > maxZoomLevel) {\r\n\t\t\t\t\t\t// 1.5 - extra zoom level above the max. E.g. if max is x6, real max 6 + 1.5 = 7.5\r\n\t\t\t\t\t\tzoomFriction = (zoomLevel - maxZoomLevel) / (minZoomLevel * 6);\r\n\t\t\t\t\t\tif (zoomFriction > 1) {\r\n\t\t\t\t\t\t\tzoomFriction = 1;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tzoomLevel = maxZoomLevel + zoomFriction * minZoomLevel;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (zoomFriction < 0) {\r\n\t\t\t\t\t\tzoomFriction = 0;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// distance between touch points after friction is applied\r\n\t\t\t\t\t_currPointsDistance = pointsDistance;\r\n\r\n\t\t\t\t\t// _centerPoint - The point in the middle of two pointers\r\n\t\t\t\t\t_findCenterOfPoints(p, p2, _centerPoint);\r\n\r\n\t\t\t\t\t// paning with two pointers pressed\r\n\t\t\t\t\t_currPanDist.x += _centerPoint.x - _currCenterPoint.x;\r\n\t\t\t\t\t_currPanDist.y += _centerPoint.y - _currCenterPoint.y;\r\n\t\t\t\t\t_equalizePoints(_currCenterPoint, _centerPoint);\r\n\r\n\t\t\t\t\t_panOffset.x = _calculatePanOffset('x', zoomLevel);\r\n\t\t\t\t\t_panOffset.y = _calculatePanOffset('y', zoomLevel);\r\n\r\n\t\t\t\t\t_isZoomingIn = zoomLevel > _currZoomLevel;\r\n\t\t\t\t\t_currZoomLevel = zoomLevel;\r\n\t\t\t\t\t_applyCurrentZoomPan();\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\t// handle behaviour for one point (dragging or panning)\r\n\r\n\t\t\t\t\tif (!_direction) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (_isFirstMove) {\r\n\t\t\t\t\t\t_isFirstMove = false;\r\n\r\n\t\t\t\t\t\t// subtract drag distance that was used during the detection direction \r\n\r\n\t\t\t\t\t\tif (Math.abs(delta.x) >= DIRECTION_CHECK_OFFSET) {\r\n\t\t\t\t\t\t\tdelta.x -= _currentPoints[0].x - _startPoint.x;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (Math.abs(delta.y) >= DIRECTION_CHECK_OFFSET) {\r\n\t\t\t\t\t\t\tdelta.y -= _currentPoints[0].y - _startPoint.y;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t_currPoint.x = p.x;\r\n\t\t\t\t\t_currPoint.y = p.y;\r\n\r\n\t\t\t\t\t// do nothing if pointers position hasn't changed\r\n\t\t\t\t\tif (delta.x === 0 && delta.y === 0) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (_direction === 'v' && _options.closeOnVerticalDrag) {\r\n\t\t\t\t\t\tif (!_canPan()) {\r\n\t\t\t\t\t\t\t_currPanDist.y += delta.y;\r\n\t\t\t\t\t\t\t_panOffset.y += delta.y;\r\n\r\n\t\t\t\t\t\t\tvar opacityRatio = _calculateVerticalDragOpacityRatio();\r\n\r\n\t\t\t\t\t\t\t_verticalDragInitiated = true;\r\n\t\t\t\t\t\t\t_shout('onVerticalDrag', opacityRatio);\r\n\r\n\t\t\t\t\t\t\t_applyBgOpacity(opacityRatio);\r\n\t\t\t\t\t\t\t_applyCurrentZoomPan();\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t_pushPosPoint(_getCurrentTime(), p.x, p.y);\r\n\r\n\t\t\t\t\t_moved = true;\r\n\t\t\t\t\t_currPanBounds = self.currItem.bounds;\r\n\r\n\t\t\t\t\tvar mainScrollChanged = _panOrMoveMainScroll('x', delta);\r\n\t\t\t\t\tif (!mainScrollChanged) {\r\n\t\t\t\t\t\t_panOrMoveMainScroll('y', delta);\r\n\r\n\t\t\t\t\t\t_roundPoint(_panOffset);\r\n\t\t\t\t\t\t_applyCurrentZoomPan();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t},\r\n\r\n\t\t\t// Pointerup/pointercancel/touchend/touchcancel/mouseup event handler\r\n\t\t\t_onDragRelease = function (e) {\r\n\r\n\t\t\t\tif (_features.isOldAndroid) {\r\n\r\n\t\t\t\t\tif (_oldAndroidTouchEndTimeout && e.type === 'mouseup') {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// on Android (v4.1, 4.2, 4.3 & possibly older) \r\n\t\t\t\t\t// ghost mousedown/up event isn't preventable via e.preventDefault,\r\n\t\t\t\t\t// which causes fake mousedown event\r\n\t\t\t\t\t// so we block mousedown/up for 600ms\r\n\t\t\t\t\tif (e.type.indexOf('touch') > -1) {\r\n\t\t\t\t\t\tclearTimeout(_oldAndroidTouchEndTimeout);\r\n\t\t\t\t\t\t_oldAndroidTouchEndTimeout = setTimeout(function () {\r\n\t\t\t\t\t\t\t_oldAndroidTouchEndTimeout = 0;\r\n\t\t\t\t\t\t}, 600);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t_shout('pointerUp');\r\n\r\n\t\t\t\tif (_preventDefaultEventBehaviour(e, false)) {\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar releasePoint;\r\n\r\n\t\t\t\tif (_pointerEventEnabled) {\r\n\t\t\t\t\tvar pointerIndex = framework.arraySearch(_currPointers, e.pointerId, 'id');\r\n\r\n\t\t\t\t\tif (pointerIndex > -1) {\r\n\t\t\t\t\t\treleasePoint = _currPointers.splice(pointerIndex, 1)[0];\r\n\r\n\t\t\t\t\t\tif (navigator.msPointerEnabled) {\r\n\t\t\t\t\t\t\tvar MSPOINTER_TYPES = {\r\n\t\t\t\t\t\t\t\t4: 'mouse', // event.MSPOINTER_TYPE_MOUSE\r\n\t\t\t\t\t\t\t\t2: 'touch', // event.MSPOINTER_TYPE_TOUCH \r\n\t\t\t\t\t\t\t\t3: 'pen' // event.MSPOINTER_TYPE_PEN\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\treleasePoint.type = MSPOINTER_TYPES[e.pointerType];\r\n\r\n\t\t\t\t\t\t\tif (!releasePoint.type) {\r\n\t\t\t\t\t\t\t\treleasePoint.type = e.pointerType || 'mouse';\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\treleasePoint.type = e.pointerType || 'mouse';\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar touchList = _getTouchPoints(e),\r\n\t\t\t\t\tgestureType,\r\n\t\t\t\t\tnumPoints = touchList.length;\r\n\r\n\t\t\t\tif (e.type === 'mouseup') {\r\n\t\t\t\t\tnumPoints = 0;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Do nothing if there were 3 touch points or more\r\n\t\t\t\tif (numPoints === 2) {\r\n\t\t\t\t\t_currentPoints = null;\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// if second pointer released\r\n\t\t\t\tif (numPoints === 1) {\r\n\t\t\t\t\t_equalizePoints(_startPoint, touchList[0]);\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t\t// pointer hasn't moved, send \"tap release\" point\r\n\t\t\t\tif (numPoints === 0 && !_direction && !_mainScrollAnimating) {\r\n\t\t\t\t\tif (!releasePoint) {\r\n\t\t\t\t\t\tif (e.type === 'mouseup') {\r\n\t\t\t\t\t\t\treleasePoint = { x: e.pageX, y: e.pageY, type: 'mouse' };\r\n\t\t\t\t\t\t} else if (e.changedTouches && e.changedTouches[0]) {\r\n\t\t\t\t\t\t\treleasePoint = { x: e.changedTouches[0].pageX, y: e.changedTouches[0].pageY, type: 'touch' };\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t_shout('touchRelease', e, releasePoint);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Difference in time between releasing of two last touch points (zoom gesture)\r\n\t\t\t\tvar releaseTimeDiff = -1;\r\n\r\n\t\t\t\t// Gesture completed, no pointers left\r\n\t\t\t\tif (numPoints === 0) {\r\n\t\t\t\t\t_isDragging = false;\r\n\t\t\t\t\tframework.unbind(window, _upMoveEvents, self);\r\n\r\n\t\t\t\t\t_stopDragUpdateLoop();\r\n\r\n\t\t\t\t\tif (_isZooming) {\r\n\t\t\t\t\t\t// Two points released at the same time\r\n\t\t\t\t\t\treleaseTimeDiff = 0;\r\n\t\t\t\t\t} else if (_lastReleaseTime !== -1) {\r\n\t\t\t\t\t\treleaseTimeDiff = _getCurrentTime() - _lastReleaseTime;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t_lastReleaseTime = numPoints === 1 ? _getCurrentTime() : -1;\r\n\r\n\t\t\t\tif (releaseTimeDiff !== -1 && releaseTimeDiff < 150) {\r\n\t\t\t\t\tgestureType = 'zoom';\r\n\t\t\t\t} else {\r\n\t\t\t\t\tgestureType = 'swipe';\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (_isZooming && numPoints < 2) {\r\n\t\t\t\t\t_isZooming = false;\r\n\r\n\t\t\t\t\t// Only second point released\r\n\t\t\t\t\tif (numPoints === 1) {\r\n\t\t\t\t\t\tgestureType = 'zoomPointerUp';\r\n\t\t\t\t\t}\r\n\t\t\t\t\t_shout('zoomGestureEnded');\r\n\t\t\t\t}\r\n\r\n\t\t\t\t_currentPoints = null;\r\n\t\t\t\tif (!_moved && !_zoomStarted && !_mainScrollAnimating && !_verticalDragInitiated) {\r\n\t\t\t\t\t// nothing to animate\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t_stopAllAnimations();\r\n\r\n\r\n\t\t\t\tif (!_releaseAnimData) {\r\n\t\t\t\t\t_releaseAnimData = _initDragReleaseAnimationData();\r\n\t\t\t\t}\r\n\r\n\t\t\t\t_releaseAnimData.calculateSwipeSpeed('x');\r\n\r\n\r\n\t\t\t\tif (_verticalDragInitiated) {\r\n\r\n\t\t\t\t\tvar opacityRatio = _calculateVerticalDragOpacityRatio();\r\n\r\n\t\t\t\t\tif (opacityRatio < _options.verticalDragRange) {\r\n\t\t\t\t\t\tself.close();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tvar initalPanY = _panOffset.y,\r\n\t\t\t\t\t\t\tinitialBgOpacity = _bgOpacity;\r\n\r\n\t\t\t\t\t\t_animateProp('verticalDrag', 0, 1, 300, framework.easing.cubic.out, function (now) {\r\n\r\n\t\t\t\t\t\t\t_panOffset.y = (self.currItem.initialPosition.y - initalPanY) * now + initalPanY;\r\n\r\n\t\t\t\t\t\t\t_applyBgOpacity((1 - initialBgOpacity) * now + initialBgOpacity);\r\n\t\t\t\t\t\t\t_applyCurrentZoomPan();\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t_shout('onVerticalDrag', 1);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t\t// main scroll \r\n\t\t\t\tif ((_mainScrollShifted || _mainScrollAnimating) && numPoints === 0) {\r\n\t\t\t\t\tvar itemChanged = _finishSwipeMainScrollGesture(gestureType, _releaseAnimData);\r\n\t\t\t\t\tif (itemChanged) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tgestureType = 'zoomPointerUp';\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// prevent zoom/pan animation when main scroll animation runs\r\n\t\t\t\tif (_mainScrollAnimating) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Complete simple zoom gesture (reset zoom level if it's out of the bounds) \r\n\t\t\t\tif (gestureType !== 'swipe') {\r\n\t\t\t\t\t_completeZoomGesture();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Complete pan gesture if main scroll is not shifted, and it's possible to pan current image\r\n\t\t\t\tif (!_mainScrollShifted && _currZoomLevel > self.currItem.fitRatio) {\r\n\t\t\t\t\t_completePanGesture(_releaseAnimData);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\r\n\t\t\t// Returns object with data about gesture\r\n\t\t\t// It's created only once and then reused\r\n\t\t\t_initDragReleaseAnimationData = function () {\r\n\t\t\t\t// temp local vars\r\n\t\t\t\tvar lastFlickDuration,\r\n\t\t\t\t\ttempReleasePos;\r\n\r\n\t\t\t\t// s = this\r\n\t\t\t\tvar s = {\r\n\t\t\t\t\tlastFlickOffset: {},\r\n\t\t\t\t\tlastFlickDist: {},\r\n\t\t\t\t\tlastFlickSpeed: {},\r\n\t\t\t\t\tslowDownRatio: {},\r\n\t\t\t\t\tslowDownRatioReverse: {},\r\n\t\t\t\t\tspeedDecelerationRatio: {},\r\n\t\t\t\t\tspeedDecelerationRatioAbs: {},\r\n\t\t\t\t\tdistanceOffset: {},\r\n\t\t\t\t\tbackAnimDestination: {},\r\n\t\t\t\t\tbackAnimStarted: {},\r\n\t\t\t\t\tcalculateSwipeSpeed: function (axis) {\r\n\r\n\r\n\t\t\t\t\t\tif (_posPoints.length > 1) {\r\n\t\t\t\t\t\t\tlastFlickDuration = _getCurrentTime() - _gestureCheckSpeedTime + 50;\r\n\t\t\t\t\t\t\ttempReleasePos = _posPoints[_posPoints.length - 2][axis];\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tlastFlickDuration = _getCurrentTime() - _gestureStartTime; // total gesture duration\r\n\t\t\t\t\t\t\ttempReleasePos = _startPoint[axis];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\ts.lastFlickOffset[axis] = _currPoint[axis] - tempReleasePos;\r\n\t\t\t\t\t\ts.lastFlickDist[axis] = Math.abs(s.lastFlickOffset[axis]);\r\n\t\t\t\t\t\tif (s.lastFlickDist[axis] > 20) {\r\n\t\t\t\t\t\t\ts.lastFlickSpeed[axis] = s.lastFlickOffset[axis] / lastFlickDuration;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\ts.lastFlickSpeed[axis] = 0;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (Math.abs(s.lastFlickSpeed[axis]) < 0.1) {\r\n\t\t\t\t\t\t\ts.lastFlickSpeed[axis] = 0;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\ts.slowDownRatio[axis] = 0.95;\r\n\t\t\t\t\t\ts.slowDownRatioReverse[axis] = 1 - s.slowDownRatio[axis];\r\n\t\t\t\t\t\ts.speedDecelerationRatio[axis] = 1;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\tcalculateOverBoundsAnimOffset: function (axis, speed) {\r\n\t\t\t\t\t\tif (!s.backAnimStarted[axis]) {\r\n\r\n\t\t\t\t\t\t\tif (_panOffset[axis] > _currPanBounds.min[axis]) {\r\n\t\t\t\t\t\t\t\ts.backAnimDestination[axis] = _currPanBounds.min[axis];\r\n\r\n\t\t\t\t\t\t\t} else if (_panOffset[axis] < _currPanBounds.max[axis]) {\r\n\t\t\t\t\t\t\t\ts.backAnimDestination[axis] = _currPanBounds.max[axis];\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif (s.backAnimDestination[axis] !== undefined) {\r\n\t\t\t\t\t\t\t\ts.slowDownRatio[axis] = 0.7;\r\n\t\t\t\t\t\t\t\ts.slowDownRatioReverse[axis] = 1 - s.slowDownRatio[axis];\r\n\t\t\t\t\t\t\t\tif (s.speedDecelerationRatioAbs[axis] < 0.05) {\r\n\r\n\t\t\t\t\t\t\t\t\ts.lastFlickSpeed[axis] = 0;\r\n\t\t\t\t\t\t\t\t\ts.backAnimStarted[axis] = true;\r\n\r\n\t\t\t\t\t\t\t\t\t_animateProp('bounceZoomPan' + axis, _panOffset[axis],\r\n\t\t\t\t\t\t\t\t\t\ts.backAnimDestination[axis],\r\n\t\t\t\t\t\t\t\t\t\tspeed || 300,\r\n\t\t\t\t\t\t\t\t\t\tframework.easing.sine.out,\r\n\t\t\t\t\t\t\t\t\t\tfunction (pos) {\r\n\t\t\t\t\t\t\t\t\t\t\t_panOffset[axis] = pos;\r\n\t\t\t\t\t\t\t\t\t\t\t_applyCurrentZoomPan();\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t// Reduces the speed by slowDownRatio (per 10ms)\r\n\t\t\t\t\tcalculateAnimOffset: function (axis) {\r\n\t\t\t\t\t\tif (!s.backAnimStarted[axis]) {\r\n\t\t\t\t\t\t\ts.speedDecelerationRatio[axis] = s.speedDecelerationRatio[axis] * (s.slowDownRatio[axis] +\r\n\t\t\t\t\t\t\t\ts.slowDownRatioReverse[axis] -\r\n\t\t\t\t\t\t\t\ts.slowDownRatioReverse[axis] * s.timeDiff / 10);\r\n\r\n\t\t\t\t\t\t\ts.speedDecelerationRatioAbs[axis] = Math.abs(s.lastFlickSpeed[axis] * s.speedDecelerationRatio[axis]);\r\n\t\t\t\t\t\t\ts.distanceOffset[axis] = s.lastFlickSpeed[axis] * s.speedDecelerationRatio[axis] * s.timeDiff;\r\n\t\t\t\t\t\t\t_panOffset[axis] += s.distanceOffset[axis];\r\n\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\tpanAnimLoop: function () {\r\n\t\t\t\t\t\tif (_animations.zoomPan) {\r\n\t\t\t\t\t\t\t_animations.zoomPan.raf = _requestAF(s.panAnimLoop);\r\n\r\n\t\t\t\t\t\t\ts.now = _getCurrentTime();\r\n\t\t\t\t\t\t\ts.timeDiff = s.now - s.lastNow;\r\n\t\t\t\t\t\t\ts.lastNow = s.now;\r\n\r\n\t\t\t\t\t\t\ts.calculateAnimOffset('x');\r\n\t\t\t\t\t\t\ts.calculateAnimOffset('y');\r\n\r\n\t\t\t\t\t\t\t_applyCurrentZoomPan();\r\n\r\n\t\t\t\t\t\t\ts.calculateOverBoundsAnimOffset('x');\r\n\t\t\t\t\t\t\ts.calculateOverBoundsAnimOffset('y');\r\n\r\n\r\n\t\t\t\t\t\t\tif (s.speedDecelerationRatioAbs.x < 0.05 && s.speedDecelerationRatioAbs.y < 0.05) {\r\n\r\n\t\t\t\t\t\t\t\t// round pan position\r\n\t\t\t\t\t\t\t\t_panOffset.x = Math.round(_panOffset.x);\r\n\t\t\t\t\t\t\t\t_panOffset.y = Math.round(_panOffset.y);\r\n\t\t\t\t\t\t\t\t_applyCurrentZoomPan();\r\n\r\n\t\t\t\t\t\t\t\t_stopAnimation('zoomPan');\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\t\treturn s;\r\n\t\t\t},\r\n\r\n\t\t\t_completePanGesture = function (animData) {\r\n\t\t\t\t// calculate swipe speed for Y axis (paanning)\r\n\t\t\t\tanimData.calculateSwipeSpeed('y');\r\n\r\n\t\t\t\t_currPanBounds = self.currItem.bounds;\r\n\r\n\t\t\t\tanimData.backAnimDestination = {};\r\n\t\t\t\tanimData.backAnimStarted = {};\r\n\r\n\t\t\t\t// Avoid acceleration animation if speed is too low\r\n\t\t\t\tif (Math.abs(animData.lastFlickSpeed.x) <= 0.05 && Math.abs(animData.lastFlickSpeed.y) <= 0.05) {\r\n\t\t\t\t\tanimData.speedDecelerationRatioAbs.x = animData.speedDecelerationRatioAbs.y = 0;\r\n\r\n\t\t\t\t\t// Run pan drag release animation. E.g. if you drag image and release finger without momentum.\r\n\t\t\t\t\tanimData.calculateOverBoundsAnimOffset('x');\r\n\t\t\t\t\tanimData.calculateOverBoundsAnimOffset('y');\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Animation loop that controls the acceleration after pan gesture ends\r\n\t\t\t\t_registerStartAnimation('zoomPan');\r\n\t\t\t\tanimData.lastNow = _getCurrentTime();\r\n\t\t\t\tanimData.panAnimLoop();\r\n\t\t\t},\r\n\r\n\r\n\t\t\t_finishSwipeMainScrollGesture = function (gestureType, _releaseAnimData) {\r\n\t\t\t\tvar itemChanged;\r\n\t\t\t\tif (!_mainScrollAnimating) {\r\n\t\t\t\t\t_currZoomedItemIndex = _currentItemIndex;\r\n\t\t\t\t}\r\n\r\n\r\n\r\n\t\t\t\tvar itemsDiff;\r\n\r\n\t\t\t\tif (gestureType === 'swipe') {\r\n\t\t\t\t\tvar totalShiftDist = _currPoint.x - _startPoint.x,\r\n\t\t\t\t\t\tisFastLastFlick = _releaseAnimData.lastFlickDist.x < 10;\r\n\r\n\t\t\t\t\t// if container is shifted for more than MIN_SWIPE_DISTANCE, \r\n\t\t\t\t\t// and last flick gesture was in right direction\r\n\t\t\t\t\tif (totalShiftDist > MIN_SWIPE_DISTANCE &&\r\n\t\t\t\t\t\t(isFastLastFlick || _releaseAnimData.lastFlickOffset.x > 20)) {\r\n\t\t\t\t\t\t// go to prev item\r\n\t\t\t\t\t\titemsDiff = -1;\r\n\t\t\t\t\t} else if (totalShiftDist < -MIN_SWIPE_DISTANCE &&\r\n\t\t\t\t\t\t(isFastLastFlick || _releaseAnimData.lastFlickOffset.x < -20)) {\r\n\t\t\t\t\t\t// go to next item\r\n\t\t\t\t\t\titemsDiff = 1;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar nextCircle;\r\n\r\n\t\t\t\tif (itemsDiff) {\r\n\r\n\t\t\t\t\t_currentItemIndex += itemsDiff;\r\n\r\n\t\t\t\t\tif (_currentItemIndex < 0) {\r\n\t\t\t\t\t\t_currentItemIndex = _options.loop ? _getNumItems() - 1 : 0;\r\n\t\t\t\t\t\tnextCircle = true;\r\n\t\t\t\t\t} else if (_currentItemIndex >= _getNumItems()) {\r\n\t\t\t\t\t\t_currentItemIndex = _options.loop ? 0 : _getNumItems() - 1;\r\n\t\t\t\t\t\tnextCircle = true;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (!nextCircle || _options.loop) {\r\n\t\t\t\t\t\t_indexDiff += itemsDiff;\r\n\t\t\t\t\t\t_currPositionIndex -= itemsDiff;\r\n\t\t\t\t\t\titemChanged = true;\r\n\t\t\t\t\t}\r\n\r\n\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar animateToX = _slideSize.x * _currPositionIndex;\r\n\t\t\t\tvar animateToDist = Math.abs(animateToX - _mainScrollPos.x);\r\n\t\t\t\tvar finishAnimDuration;\r\n\r\n\r\n\t\t\t\tif (!itemChanged && animateToX > _mainScrollPos.x !== _releaseAnimData.lastFlickSpeed.x > 0) {\r\n\t\t\t\t\t// \"return to current\" duration, e.g. when dragging from slide 0 to -1\r\n\t\t\t\t\tfinishAnimDuration = 333;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tfinishAnimDuration = Math.abs(_releaseAnimData.lastFlickSpeed.x) > 0 ?\r\n\t\t\t\t\t\tanimateToDist / Math.abs(_releaseAnimData.lastFlickSpeed.x) :\r\n\t\t\t\t\t\t333;\r\n\r\n\t\t\t\t\tfinishAnimDuration = Math.min(finishAnimDuration, 400);\r\n\t\t\t\t\tfinishAnimDuration = Math.max(finishAnimDuration, 250);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (_currZoomedItemIndex === _currentItemIndex) {\r\n\t\t\t\t\titemChanged = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t_mainScrollAnimating = true;\r\n\r\n\t\t\t\t_shout('mainScrollAnimStart');\r\n\r\n\t\t\t\t_animateProp('mainScroll', _mainScrollPos.x, animateToX, finishAnimDuration, framework.easing.cubic.out,\r\n\t\t\t\t\t_moveMainScroll,\r\n\t\t\t\t\tfunction () {\r\n\t\t\t\t\t\t_stopAllAnimations();\r\n\t\t\t\t\t\t_mainScrollAnimating = false;\r\n\t\t\t\t\t\t_currZoomedItemIndex = -1;\r\n\r\n\t\t\t\t\t\tif (itemChanged || _currZoomedItemIndex !== _currentItemIndex) {\r\n\t\t\t\t\t\t\tself.updateCurrItem();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t_shout('mainScrollAnimComplete');\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\r\n\t\t\t\tif (itemChanged) {\r\n\t\t\t\t\tself.updateCurrItem(true);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn itemChanged;\r\n\t\t\t},\r\n\r\n\t\t\t_calculateZoomLevel = function (touchesDistance) {\r\n\t\t\t\treturn 1 / _startPointsDistance * touchesDistance * _startZoomLevel;\r\n\t\t\t},\r\n\r\n\t\t\t// Resets zoom if it's out of bounds\r\n\t\t\t_completeZoomGesture = function () {\r\n\t\t\t\tvar destZoomLevel = _currZoomLevel,\r\n\t\t\t\t\tminZoomLevel = _getMinZoomLevel(),\r\n\t\t\t\t\tmaxZoomLevel = _getMaxZoomLevel();\r\n\r\n\t\t\t\tif (_currZoomLevel < minZoomLevel) {\r\n\t\t\t\t\tdestZoomLevel = minZoomLevel;\r\n\t\t\t\t} else if (_currZoomLevel > maxZoomLevel) {\r\n\t\t\t\t\tdestZoomLevel = maxZoomLevel;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar destOpacity = 1,\r\n\t\t\t\t\tonUpdate,\r\n\t\t\t\t\tinitialOpacity = _bgOpacity;\r\n\r\n\t\t\t\tif (_opacityChanged && !_isZoomingIn && !_wasOverInitialZoom && _currZoomLevel < minZoomLevel) {\r\n\t\t\t\t\t//_closedByScroll = true;\r\n\t\t\t\t\tself.close();\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (_opacityChanged) {\r\n\t\t\t\t\tonUpdate = function (now) {\r\n\t\t\t\t\t\t_applyBgOpacity((destOpacity - initialOpacity) * now + initialOpacity);\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\r\n\t\t\t\tself.zoomTo(destZoomLevel, 0, 200, framework.easing.cubic.out, onUpdate);\r\n\t\t\t\treturn true;\r\n\t\t\t};\r\n\r\n\r\n\t\t_registerModule('Gestures', {\r\n\t\t\tpublicMethods: {\r\n\r\n\t\t\t\tinitGestures: function () {\r\n\r\n\t\t\t\t\t// helper function that builds touch/pointer/mouse events\r\n\t\t\t\t\tvar addEventNames = function (pref, down, move, up, cancel) {\r\n\t\t\t\t\t\t_dragStartEvent = pref + down;\r\n\t\t\t\t\t\t_dragMoveEvent = pref + move;\r\n\t\t\t\t\t\t_dragEndEvent = pref + up;\r\n\t\t\t\t\t\tif (cancel) {\r\n\t\t\t\t\t\t\t_dragCancelEvent = pref + cancel;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t_dragCancelEvent = '';\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\t_pointerEventEnabled = _features.pointerEvent;\r\n\t\t\t\t\tif (_pointerEventEnabled && _features.touch) {\r\n\t\t\t\t\t\t// we don't need touch events, if browser supports pointer events\r\n\t\t\t\t\t\t_features.touch = false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (_pointerEventEnabled) {\r\n\t\t\t\t\t\tif (navigator.msPointerEnabled) {\r\n\t\t\t\t\t\t\t// IE10 pointer events are case-sensitive\r\n\t\t\t\t\t\t\taddEventNames('MSPointer', 'Down', 'Move', 'Up', 'Cancel');\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\taddEventNames('pointer', 'down', 'move', 'up', 'cancel');\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else if (_features.touch) {\r\n\t\t\t\t\t\taddEventNames('touch', 'start', 'move', 'end', 'cancel');\r\n\t\t\t\t\t\t_likelyTouchDevice = true;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\taddEventNames('mouse', 'down', 'move', 'up');\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t_upMoveEvents = _dragMoveEvent + ' ' + _dragEndEvent + ' ' + _dragCancelEvent;\r\n\t\t\t\t\t_downEvents = _dragStartEvent;\r\n\r\n\t\t\t\t\tif (_pointerEventEnabled && !_likelyTouchDevice) {\r\n\t\t\t\t\t\t_likelyTouchDevice = (navigator.maxTouchPoints > 1) || (navigator.msMaxTouchPoints > 1);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// make variable public\r\n\t\t\t\t\tself.likelyTouchDevice = _likelyTouchDevice;\r\n\r\n\t\t\t\t\t_globalEventHandlers[_dragStartEvent] = _onDragStart;\r\n\t\t\t\t\t_globalEventHandlers[_dragMoveEvent] = _onDragMove;\r\n\t\t\t\t\t_globalEventHandlers[_dragEndEvent] = _onDragRelease; // the Kraken\r\n\r\n\t\t\t\t\tif (_dragCancelEvent) {\r\n\t\t\t\t\t\t_globalEventHandlers[_dragCancelEvent] = _globalEventHandlers[_dragEndEvent];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Bind mouse events on device with detected hardware touch support, in case it supports multiple types of input.\r\n\t\t\t\t\tif (_features.touch) {\r\n\t\t\t\t\t\t_downEvents += ' mousedown';\r\n\t\t\t\t\t\t_upMoveEvents += ' mousemove mouseup';\r\n\t\t\t\t\t\t_globalEventHandlers.mousedown = _globalEventHandlers[_dragStartEvent];\r\n\t\t\t\t\t\t_globalEventHandlers.mousemove = _globalEventHandlers[_dragMoveEvent];\r\n\t\t\t\t\t\t_globalEventHandlers.mouseup = _globalEventHandlers[_dragEndEvent];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (!_likelyTouchDevice) {\r\n\t\t\t\t\t\t// don't allow pan to next slide from zoomed state on Desktop\r\n\t\t\t\t\t\t_options.allowPanToNext = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\t\t});\r\n\r\n\r\n\t\t/*>>gestures*/\r\n\r\n\t\t/*>>show-hide-transition*/\r\n\t\t/**\r\n\t\t * show-hide-transition.js:\r\n\t\t *\r\n\t\t * Manages initial opening or closing transition.\r\n\t\t *\r\n\t\t * If you're not planning to use transition for gallery at all,\r\n\t\t * you may set options hideAnimationDuration and showAnimationDuration to 0,\r\n\t\t * and just delete startAnimation function.\r\n\t\t * \r\n\t\t */\r\n\r\n\r\n\t\tvar _showOrHideTimeout,\r\n\t\t\t_showOrHide = function (item, img, out, completeFn) {\r\n\r\n\t\t\t\tif (_showOrHideTimeout) {\r\n\t\t\t\t\tclearTimeout(_showOrHideTimeout);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t_initialZoomRunning = true;\r\n\t\t\t\t_initialContentSet = true;\r\n\r\n\t\t\t\t// dimensions of small thumbnail {x:,y:,w:}.\r\n\t\t\t\t// Height is optional, as calculated based on large image.\r\n\t\t\t\tvar thumbBounds;\r\n\t\t\t\tif (item.initialLayout) {\r\n\t\t\t\t\tthumbBounds = item.initialLayout;\r\n\t\t\t\t\titem.initialLayout = null;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthumbBounds = _options.getThumbBoundsFn && _options.getThumbBoundsFn(_currentItemIndex);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar duration = out ? _options.hideAnimationDuration : _options.showAnimationDuration;\r\n\r\n\t\t\t\tvar onComplete = function () {\r\n\t\t\t\t\t_stopAnimation('initialZoom');\r\n\t\t\t\t\tif (!out) {\r\n\t\t\t\t\t\t_applyBgOpacity(1);\r\n\t\t\t\t\t\tif (img) {\r\n\t\t\t\t\t\t\timg.style.display = 'block';\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tframework.addClass(template, 'pswp--animated-in');\r\n\t\t\t\t\t\t_shout('initialZoom' + (out ? 'OutEnd' : 'InEnd'));\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tself.template.removeAttribute('style');\r\n\t\t\t\t\t\tself.bg.removeAttribute('style');\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (completeFn) {\r\n\t\t\t\t\t\tcompleteFn();\r\n\t\t\t\t\t}\r\n\t\t\t\t\t_initialZoomRunning = false;\r\n\t\t\t\t};\r\n\r\n\t\t\t\t// if bounds aren't provided, just open gallery without animation\r\n\t\t\t\tif (!duration || !thumbBounds || thumbBounds.x === undefined) {\r\n\r\n\t\t\t\t\t_shout('initialZoom' + (out ? 'Out' : 'In'));\r\n\r\n\t\t\t\t\t_currZoomLevel = item.initialZoomLevel;\r\n\t\t\t\t\t_equalizePoints(_panOffset, item.initialPosition);\r\n\t\t\t\t\t_applyCurrentZoomPan();\r\n\r\n\t\t\t\t\ttemplate.style.opacity = out ? 0 : 1;\r\n\t\t\t\t\t_applyBgOpacity(1);\r\n\r\n\t\t\t\t\tif (duration) {\r\n\t\t\t\t\t\tsetTimeout(function () {\r\n\t\t\t\t\t\t\tonComplete();\r\n\t\t\t\t\t\t}, duration);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tonComplete();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar startAnimation = function () {\r\n\t\t\t\t\tvar closeWithRaf = _closedByScroll,\r\n\t\t\t\t\t\tfadeEverything = !self.currItem.src || self.currItem.loadError || _options.showHideOpacity;\r\n\r\n\t\t\t\t\t// apply hw-acceleration to image\r\n\t\t\t\t\tif (item.miniImg) {\r\n\t\t\t\t\t\titem.miniImg.style.webkitBackfaceVisibility = 'hidden';\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (!out) {\r\n\t\t\t\t\t\t_currZoomLevel = thumbBounds.w / item.w;\r\n\t\t\t\t\t\t_panOffset.x = thumbBounds.x;\r\n\t\t\t\t\t\t_panOffset.y = thumbBounds.y - _initalWindowScrollY;\r\n\r\n\t\t\t\t\t\tself[fadeEverything ? 'template' : 'bg'].style.opacity = 0.001;\r\n\t\t\t\t\t\t_applyCurrentZoomPan();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t_registerStartAnimation('initialZoom');\r\n\r\n\t\t\t\t\tif (out && !closeWithRaf) {\r\n\t\t\t\t\t\tframework.removeClass(template, 'pswp--animated-in');\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (fadeEverything) {\r\n\t\t\t\t\t\tif (out) {\r\n\t\t\t\t\t\t\tframework[(closeWithRaf ? 'remove' : 'add') + 'Class'](template, 'pswp--animate_opacity');\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tsetTimeout(function () {\r\n\t\t\t\t\t\t\t\tframework.addClass(template, 'pswp--animate_opacity');\r\n\t\t\t\t\t\t\t}, 30);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t_showOrHideTimeout = setTimeout(function () {\r\n\r\n\t\t\t\t\t\t_shout('initialZoom' + (out ? 'Out' : 'In'));\r\n\r\n\r\n\t\t\t\t\t\tif (!out) {\r\n\r\n\t\t\t\t\t\t\t// \"in\" animation always uses CSS transitions (instead of rAF).\r\n\t\t\t\t\t\t\t// CSS transition work faster here, \r\n\t\t\t\t\t\t\t// as developer may also want to animate other things, \r\n\t\t\t\t\t\t\t// like ui on top of sliding area, which can be animated just via CSS\r\n\r\n\t\t\t\t\t\t\t_currZoomLevel = item.initialZoomLevel;\r\n\t\t\t\t\t\t\t_equalizePoints(_panOffset, item.initialPosition);\r\n\t\t\t\t\t\t\t_applyCurrentZoomPan();\r\n\t\t\t\t\t\t\t_applyBgOpacity(1);\r\n\r\n\t\t\t\t\t\t\tif (fadeEverything) {\r\n\t\t\t\t\t\t\t\ttemplate.style.opacity = 1;\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t_applyBgOpacity(1);\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t_showOrHideTimeout = setTimeout(onComplete, duration + 20);\r\n\t\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\t\t// \"out\" animation uses rAF only when PhotoSwipe is closed by browser scroll, to recalculate position\r\n\t\t\t\t\t\t\tvar destZoomLevel = thumbBounds.w / item.w,\r\n\t\t\t\t\t\t\t\tinitialPanOffset = {\r\n\t\t\t\t\t\t\t\t\tx: _panOffset.x,\r\n\t\t\t\t\t\t\t\t\ty: _panOffset.y\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\tinitialZoomLevel = _currZoomLevel,\r\n\t\t\t\t\t\t\t\tinitalBgOpacity = _bgOpacity,\r\n\t\t\t\t\t\t\t\tonUpdate = function (now) {\r\n\r\n\t\t\t\t\t\t\t\t\tif (now === 1) {\r\n\t\t\t\t\t\t\t\t\t\t_currZoomLevel = destZoomLevel;\r\n\t\t\t\t\t\t\t\t\t\t_panOffset.x = thumbBounds.x;\r\n\t\t\t\t\t\t\t\t\t\t_panOffset.y = thumbBounds.y - _currentWindowScrollY;\r\n\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\t_currZoomLevel = (destZoomLevel - initialZoomLevel) * now + initialZoomLevel;\r\n\t\t\t\t\t\t\t\t\t\t_panOffset.x = (thumbBounds.x - initialPanOffset.x) * now + initialPanOffset.x;\r\n\t\t\t\t\t\t\t\t\t\t_panOffset.y = (thumbBounds.y - _currentWindowScrollY - initialPanOffset.y) * now + initialPanOffset.y;\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t_applyCurrentZoomPan();\r\n\t\t\t\t\t\t\t\t\tif (fadeEverything) {\r\n\t\t\t\t\t\t\t\t\t\ttemplate.style.opacity = 1 - now;\r\n\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\t_applyBgOpacity(initalBgOpacity - now * initalBgOpacity);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\t\tif (closeWithRaf) {\r\n\t\t\t\t\t\t\t\t_animateProp('initialZoom', 0, 1, duration, framework.easing.cubic.out, onUpdate, onComplete);\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tonUpdate(1);\r\n\t\t\t\t\t\t\t\t_showOrHideTimeout = setTimeout(onComplete, duration + 20);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}, out ? 25 : 90); // Main purpose of this delay is to give browser time to paint and\r\n\t\t\t\t\t// create composite layers of PhotoSwipe UI parts (background, controls, caption, arrows).\r\n\t\t\t\t\t// Which avoids lag at the beginning of scale transition.\r\n\t\t\t\t};\r\n\t\t\t\tstartAnimation();\r\n\r\n\r\n\t\t\t};\r\n\r\n\t\t/*>>show-hide-transition*/\r\n\r\n\t\t/*>>items-controller*/\r\n\t\t/**\r\n\t\t*\r\n\t\t* Controller manages gallery items, their dimensions, and their content.\r\n\t\t* \r\n\t\t*/\r\n\r\n\t\tvar _items,\r\n\t\t\t_tempPanAreaSize = {},\r\n\t\t\t_imagesToAppendPool = [],\r\n\t\t\t_initialContentSet,\r\n\t\t\t_initialZoomRunning,\r\n\t\t\t_controllerDefaultOptions = {\r\n\t\t\t\tindex: 0,\r\n\t\t\t\terrorMsg: '
The image could not be loaded.
',\r\n\t\t\t\tforceProgressiveLoading: false, // TODO\r\n\t\t\t\tpreload: [1, 1],\r\n\t\t\t\tgetNumItemsFn: function () {\r\n\t\t\t\t\treturn _items.length;\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\r\n\t\tvar _getItemAt,\r\n\t\t\t_getNumItems,\r\n\t\t\t_initialIsLoop,\r\n\t\t\t_getZeroBounds = function () {\r\n\t\t\t\treturn {\r\n\t\t\t\t\tcenter: { x: 0, y: 0 },\r\n\t\t\t\t\tmax: { x: 0, y: 0 },\r\n\t\t\t\t\tmin: { x: 0, y: 0 }\r\n\t\t\t\t};\r\n\t\t\t},\r\n\t\t\t_calculateSingleItemPanBounds = function (item, realPanElementW, realPanElementH) {\r\n\t\t\t\tvar bounds = item.bounds;\r\n\r\n\t\t\t\t// position of element when it's centered\r\n\t\t\t\tbounds.center.x = Math.round((_tempPanAreaSize.x - realPanElementW) / 2);\r\n\t\t\t\tbounds.center.y = Math.round((_tempPanAreaSize.y - realPanElementH) / 2) + item.vGap.top;\r\n\r\n\t\t\t\t// maximum pan position\r\n\t\t\t\tbounds.max.x = (realPanElementW > _tempPanAreaSize.x) ?\r\n\t\t\t\t\tMath.round(_tempPanAreaSize.x - realPanElementW) :\r\n\t\t\t\t\tbounds.center.x;\r\n\r\n\t\t\t\tbounds.max.y = (realPanElementH > _tempPanAreaSize.y) ?\r\n\t\t\t\t\tMath.round(_tempPanAreaSize.y - realPanElementH) + item.vGap.top :\r\n\t\t\t\t\tbounds.center.y;\r\n\r\n\t\t\t\t// minimum pan position\r\n\t\t\t\tbounds.min.x = (realPanElementW > _tempPanAreaSize.x) ? 0 : bounds.center.x;\r\n\t\t\t\tbounds.min.y = (realPanElementH > _tempPanAreaSize.y) ? item.vGap.top : bounds.center.y;\r\n\t\t\t},\r\n\t\t\t_calculateItemSize = function (item, viewportSize, zoomLevel) {\r\n\r\n\t\t\t\tif (item.src && !item.loadError) {\r\n\t\t\t\t\tvar isInitial = !zoomLevel;\r\n\r\n\t\t\t\t\tif (isInitial) {\r\n\t\t\t\t\t\tif (!item.vGap) {\r\n\t\t\t\t\t\t\titem.vGap = { top: 0, bottom: 0 };\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// allows overriding vertical margin for individual items\r\n\t\t\t\t\t\t_shout('parseVerticalMargin', item);\r\n\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t\t_tempPanAreaSize.x = viewportSize.x;\r\n\t\t\t\t\t_tempPanAreaSize.y = viewportSize.y - item.vGap.top - item.vGap.bottom;\r\n\r\n\t\t\t\t\tif (isInitial) {\r\n\t\t\t\t\t\tvar hRatio = _tempPanAreaSize.x / item.w;\r\n\t\t\t\t\t\tvar vRatio = _tempPanAreaSize.y / item.h;\r\n\r\n\t\t\t\t\t\titem.fitRatio = hRatio < vRatio ? hRatio : vRatio;\r\n\t\t\t\t\t\t//item.fillRatio = hRatio > vRatio ? hRatio : vRatio;\r\n\r\n\t\t\t\t\t\tvar scaleMode = _options.scaleMode;\r\n\r\n\t\t\t\t\t\tif (scaleMode === 'orig') {\r\n\t\t\t\t\t\t\tzoomLevel = 1;\r\n\t\t\t\t\t\t} else if (scaleMode === 'fit') {\r\n\t\t\t\t\t\t\tzoomLevel = item.fitRatio;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (zoomLevel > 1) {\r\n\t\t\t\t\t\t\tzoomLevel = 1;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\titem.initialZoomLevel = zoomLevel;\r\n\r\n\t\t\t\t\t\tif (!item.bounds) {\r\n\t\t\t\t\t\t\t// reuse bounds object\r\n\t\t\t\t\t\t\titem.bounds = _getZeroBounds();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (!zoomLevel) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t_calculateSingleItemPanBounds(item, item.w * zoomLevel, item.h * zoomLevel);\r\n\r\n\t\t\t\t\tif (isInitial && zoomLevel === item.initialZoomLevel) {\r\n\t\t\t\t\t\titem.initialPosition = item.bounds.center;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn item.bounds;\r\n\t\t\t\t} else {\r\n\t\t\t\t\titem.w = item.h = 0;\r\n\t\t\t\t\titem.initialZoomLevel = item.fitRatio = 1;\r\n\t\t\t\t\titem.bounds = _getZeroBounds();\r\n\t\t\t\t\titem.initialPosition = item.bounds.center;\r\n\r\n\t\t\t\t\t// if it's not image, we return zero bounds (content is not zoomable)\r\n\t\t\t\t\treturn item.bounds;\r\n\t\t\t\t}\r\n\r\n\t\t\t},\r\n\r\n\r\n\r\n\r\n\t\t\t_appendImage = function (index, item, baseDiv, img, preventAnimation, keepPlaceholder) {\r\n\r\n\r\n\t\t\t\tif (item.loadError) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (img) {\r\n\r\n\t\t\t\t\titem.imageAppended = true;\r\n\t\t\t\t\t_setImageSize(item, img, (item === self.currItem && _renderMaxResolution));\r\n\r\n\t\t\t\t\tbaseDiv.appendChild(img);\r\n\r\n\t\t\t\t\tif (keepPlaceholder) {\r\n\t\t\t\t\t\tsetTimeout(function () {\r\n\t\t\t\t\t\t\tif (item && item.loaded && item.placeholder) {\r\n\t\t\t\t\t\t\t\titem.placeholder.style.display = 'none';\r\n\t\t\t\t\t\t\t\titem.placeholder = null;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}, 500);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\r\n\r\n\t\t\t_preloadImage = function (item) {\r\n\t\t\t\titem.loading = true;\r\n\t\t\t\titem.loaded = false;\r\n\t\t\t\tvar img = item.img = framework.createEl('pswp__img', 'img');\r\n\t\t\t\tvar onComplete = function () {\r\n\t\t\t\t\titem.loading = false;\r\n\t\t\t\t\titem.loaded = true;\r\n\r\n\t\t\t\t\tif (item.loadComplete) {\r\n\t\t\t\t\t\titem.loadComplete(item);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\titem.img = null; // no need to store image object\r\n\t\t\t\t\t}\r\n\t\t\t\t\timg.onload = img.onerror = null;\r\n\t\t\t\t\timg = null;\r\n\t\t\t\t};\r\n\t\t\t\timg.onload = onComplete;\r\n\t\t\t\timg.onerror = function () {\r\n\t\t\t\t\titem.loadError = true;\r\n\t\t\t\t\tonComplete();\r\n\t\t\t\t};\r\n\r\n\t\t\t\timg.src = item.src;// + '?a=' + Math.random();\r\n\r\n\t\t\t\treturn img;\r\n\t\t\t},\r\n\t\t\t_checkForError = function (item, cleanUp) {\r\n\t\t\t\tif (item.src && item.loadError && item.container) {\r\n\r\n\t\t\t\t\tif (cleanUp) {\r\n\t\t\t\t\t\titem.container.innerHTML = '';\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\titem.container.innerHTML = _options.errorMsg.replace('%url%', item.src);\r\n\t\t\t\t\treturn true;\r\n\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t_setImageSize = function (item, img, maxRes) {\r\n\t\t\t\tif (!item.src) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!img) {\r\n\t\t\t\t\timg = item.container.lastChild;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar w = maxRes ? item.w : Math.round(item.w * item.fitRatio),\r\n\t\t\t\t\th = maxRes ? item.h : Math.round(item.h * item.fitRatio);\r\n\r\n\t\t\t\tif (item.placeholder && !item.loaded) {\r\n\t\t\t\t\titem.placeholder.style.width = w + 'px';\r\n\t\t\t\t\titem.placeholder.style.height = h + 'px';\r\n\t\t\t\t}\r\n\r\n\t\t\t\timg.style.width = w + 'px';\r\n\t\t\t\timg.style.height = h + 'px';\r\n\t\t\t},\r\n\t\t\t_appendImagesPool = function () {\r\n\r\n\t\t\t\tif (_imagesToAppendPool.length) {\r\n\t\t\t\t\tvar poolItem;\r\n\r\n\t\t\t\t\tfor (var i = 0; i < _imagesToAppendPool.length; i++) {\r\n\t\t\t\t\t\tpoolItem = _imagesToAppendPool[i];\r\n\t\t\t\t\t\tif (poolItem.holder.index === poolItem.index) {\r\n\t\t\t\t\t\t\t_appendImage(poolItem.index, poolItem.item, poolItem.baseDiv, poolItem.img, false, poolItem.clearPlaceholder);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t_imagesToAppendPool = [];\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\r\n\r\n\t\t_registerModule('Controller', {\r\n\r\n\t\t\tpublicMethods: {\r\n\r\n\t\t\t\tlazyLoadItem: function (index) {\r\n\t\t\t\t\tindex = _getLoopedId(index);\r\n\t\t\t\t\tvar item = _getItemAt(index);\r\n\r\n\t\t\t\t\tif (!item || ((item.loaded || item.loading) && !_itemsNeedUpdate)) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t_shout('gettingData', index, item);\r\n\r\n\t\t\t\t\tif (!item.src) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t_preloadImage(item);\r\n\t\t\t\t},\r\n\t\t\t\tinitController: function () {\r\n\t\t\t\t\tframework.extend(_options, _controllerDefaultOptions, true);\r\n\t\t\t\t\tself.items = _items = items;\r\n\t\t\t\t\t_getItemAt = self.getItemAt;\r\n\t\t\t\t\t_getNumItems = _options.getNumItemsFn; //self.getNumItems;\r\n\r\n\r\n\r\n\t\t\t\t\t_initialIsLoop = _options.loop;\r\n\t\t\t\t\tif (_getNumItems() < 3) {\r\n\t\t\t\t\t\t_options.loop = false; // disable loop if less then 3 items\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t_listen('beforeChange', function (diff) {\r\n\r\n\t\t\t\t\t\tvar p = _options.preload,\r\n\t\t\t\t\t\t\tisNext = diff === null ? true : (diff >= 0),\r\n\t\t\t\t\t\t\tpreloadBefore = Math.min(p[0], _getNumItems()),\r\n\t\t\t\t\t\t\tpreloadAfter = Math.min(p[1], _getNumItems()),\r\n\t\t\t\t\t\t\ti;\r\n\r\n\r\n\t\t\t\t\t\tfor (i = 1; i <= (isNext ? preloadAfter : preloadBefore); i++) {\r\n\t\t\t\t\t\t\tself.lazyLoadItem(_currentItemIndex + i);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tfor (i = 1; i <= (isNext ? preloadBefore : preloadAfter); i++) {\r\n\t\t\t\t\t\t\tself.lazyLoadItem(_currentItemIndex - i);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\t_listen('initialLayout', function () {\r\n\t\t\t\t\t\tself.currItem.initialLayout = _options.getThumbBoundsFn && _options.getThumbBoundsFn(_currentItemIndex);\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\t_listen('mainScrollAnimComplete', _appendImagesPool);\r\n\t\t\t\t\t_listen('initialZoomInEnd', _appendImagesPool);\r\n\r\n\r\n\r\n\t\t\t\t\t_listen('destroy', function () {\r\n\t\t\t\t\t\tvar item;\r\n\t\t\t\t\t\tfor (var i = 0; i < _items.length; i++) {\r\n\t\t\t\t\t\t\titem = _items[i];\r\n\t\t\t\t\t\t\t// remove reference to DOM elements, for GC\r\n\t\t\t\t\t\t\tif (item.container) {\r\n\t\t\t\t\t\t\t\titem.container = null;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (item.placeholder) {\r\n\t\t\t\t\t\t\t\titem.placeholder = null;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (item.img) {\r\n\t\t\t\t\t\t\t\titem.img = null;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (item.preloader) {\r\n\t\t\t\t\t\t\t\titem.preloader = null;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (item.loadError) {\r\n\t\t\t\t\t\t\t\titem.loaded = item.loadError = false;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t_imagesToAppendPool = null;\r\n\t\t\t\t\t});\r\n\t\t\t\t},\r\n\r\n\r\n\t\t\t\tgetItemAt: function (index) {\r\n\t\t\t\t\tif (index >= 0) {\r\n\t\t\t\t\t\treturn _items[index] !== undefined ? _items[index] : false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t},\r\n\r\n\t\t\t\tallowProgressiveImg: function () {\r\n\t\t\t\t\t// 1. Progressive image loading isn't working on webkit/blink \r\n\t\t\t\t\t// when hw-acceleration (e.g. translateZ) is applied to IMG element.\r\n\t\t\t\t\t// That's why in PhotoSwipe parent element gets zoom transform, not image itself.\r\n\t\t\t\t\t// \r\n\t\t\t\t\t// 2. Progressive image loading sometimes blinks in webkit/blink when applying animation to parent element.\r\n\t\t\t\t\t// That's why it's disabled on touch devices (mainly because of swipe transition)\r\n\t\t\t\t\t// \r\n\t\t\t\t\t// 3. Progressive image loading sometimes doesn't work in IE (up to 11).\r\n\r\n\t\t\t\t\t// Don't allow progressive loading on non-large touch devices\r\n\t\t\t\t\treturn _options.forceProgressiveLoading || !_likelyTouchDevice || _options.mouseUsed || screen.width > 1200;\r\n\t\t\t\t\t// 1200 - to eliminate touch devices with large screen (like Chromebook Pixel)\r\n\t\t\t\t},\r\n\r\n\t\t\t\tsetContent: function (holder, index) {\r\n\r\n\t\t\t\t\tif (_options.loop) {\r\n\t\t\t\t\t\tindex = _getLoopedId(index);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tvar prevItem = self.getItemAt(holder.index);\r\n\t\t\t\t\tif (prevItem) {\r\n\t\t\t\t\t\tprevItem.container = null;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tvar item = self.getItemAt(index),\r\n\t\t\t\t\t\timg;\r\n\r\n\t\t\t\t\tif (!item) {\r\n\t\t\t\t\t\tholder.el.innerHTML = '';\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// allow to override data\r\n\t\t\t\t\t_shout('gettingData', index, item);\r\n\r\n\t\t\t\t\tholder.index = index;\r\n\t\t\t\t\tholder.item = item;\r\n\r\n\t\t\t\t\t// base container DIV is created only once for each of 3 holders\r\n\t\t\t\t\tvar baseDiv = item.container = framework.createEl('pswp__zoom-wrap');\r\n\r\n\r\n\r\n\t\t\t\t\tif (!item.src && item.html) {\r\n\t\t\t\t\t\tif (item.html.tagName) {\r\n\t\t\t\t\t\t\tbaseDiv.appendChild(item.html);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tbaseDiv.innerHTML = item.html;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t_checkForError(item);\r\n\r\n\t\t\t\t\t_calculateItemSize(item, _viewportSize);\r\n\r\n\t\t\t\t\tif (item.src && !item.loadError && !item.loaded) {\r\n\r\n\t\t\t\t\t\titem.loadComplete = function (item) {\r\n\r\n\t\t\t\t\t\t\t// gallery closed before image finished loading\r\n\t\t\t\t\t\t\tif (!_isOpen) {\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t// check if holder hasn't changed while image was loading\r\n\t\t\t\t\t\t\tif (holder && holder.index === index) {\r\n\t\t\t\t\t\t\t\tif (_checkForError(item, true)) {\r\n\t\t\t\t\t\t\t\t\titem.loadComplete = item.img = null;\r\n\t\t\t\t\t\t\t\t\t_calculateItemSize(item, _viewportSize);\r\n\t\t\t\t\t\t\t\t\t_applyZoomPanToItem(item);\r\n\r\n\t\t\t\t\t\t\t\t\tif (holder.index === _currentItemIndex) {\r\n\t\t\t\t\t\t\t\t\t\t// recalculate dimensions\r\n\t\t\t\t\t\t\t\t\t\tself.updateCurrZoomItem();\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tif (!item.imageAppended) {\r\n\t\t\t\t\t\t\t\t\tif (_features.transform && (_mainScrollAnimating || _initialZoomRunning)) {\r\n\t\t\t\t\t\t\t\t\t\t_imagesToAppendPool.push({\r\n\t\t\t\t\t\t\t\t\t\t\titem: item,\r\n\t\t\t\t\t\t\t\t\t\t\tbaseDiv: baseDiv,\r\n\t\t\t\t\t\t\t\t\t\t\timg: item.img,\r\n\t\t\t\t\t\t\t\t\t\t\tindex: index,\r\n\t\t\t\t\t\t\t\t\t\t\tholder: holder,\r\n\t\t\t\t\t\t\t\t\t\t\tclearPlaceholder: true\r\n\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\t_appendImage(index, item, baseDiv, item.img, _mainScrollAnimating || _initialZoomRunning, true);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t// remove preloader & mini-img\r\n\t\t\t\t\t\t\t\t\tif (!_initialZoomRunning && item.placeholder) {\r\n\t\t\t\t\t\t\t\t\t\titem.placeholder.style.display = 'none';\r\n\t\t\t\t\t\t\t\t\t\titem.placeholder = null;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\titem.loadComplete = null;\r\n\t\t\t\t\t\t\titem.img = null; // no need to store image element after it's added\r\n\r\n\t\t\t\t\t\t\t_shout('imageLoadComplete', index, item);\r\n\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\tif (framework.features.transform) {\r\n\r\n\t\t\t\t\t\t\tvar placeholderClassName = 'pswp__img pswp__img--placeholder';\r\n\t\t\t\t\t\t\tplaceholderClassName += (item.msrc ? '' : ' pswp__img--placeholder--blank');\r\n\r\n\t\t\t\t\t\t\tvar placeholder = framework.createEl(placeholderClassName, item.msrc ? 'img' : '');\r\n\t\t\t\t\t\t\tif (item.msrc) {\r\n\t\t\t\t\t\t\t\tplaceholder.src = item.msrc;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t_setImageSize(item, placeholder);\r\n\r\n\t\t\t\t\t\t\tbaseDiv.appendChild(placeholder);\r\n\t\t\t\t\t\t\titem.placeholder = placeholder;\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\r\n\r\n\r\n\t\t\t\t\t\tif (!item.loading) {\r\n\t\t\t\t\t\t\t_preloadImage(item);\r\n\t\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t\t\tif (self.allowProgressiveImg()) {\r\n\t\t\t\t\t\t\t// just append image\r\n\t\t\t\t\t\t\tif (!_initialContentSet && _features.transform) {\r\n\t\t\t\t\t\t\t\t_imagesToAppendPool.push({\r\n\t\t\t\t\t\t\t\t\titem: item,\r\n\t\t\t\t\t\t\t\t\tbaseDiv: baseDiv,\r\n\t\t\t\t\t\t\t\t\timg: item.img,\r\n\t\t\t\t\t\t\t\t\tindex: index,\r\n\t\t\t\t\t\t\t\t\tholder: holder\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t_appendImage(index, item, baseDiv, item.img, true, true);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t} else if (item.src && !item.loadError) {\r\n\t\t\t\t\t\t// image object is created every time, due to bugs of image loading & delay when switching images\r\n\t\t\t\t\t\timg = framework.createEl('pswp__img', 'img');\r\n\t\t\t\t\t\timg.style.opacity = 1;\r\n\t\t\t\t\t\timg.src = item.src;\r\n\t\t\t\t\t\t_setImageSize(item, img);\r\n\t\t\t\t\t\t_appendImage(index, item, baseDiv, img, true);\r\n\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t\tif (!_initialContentSet && index === _currentItemIndex) {\r\n\t\t\t\t\t\t_currZoomElementStyle = baseDiv.style;\r\n\t\t\t\t\t\t_showOrHide(item, (img || item.img));\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t_applyZoomPanToItem(item);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tholder.el.innerHTML = '';\r\n\t\t\t\t\tholder.el.appendChild(baseDiv);\r\n\t\t\t\t},\r\n\r\n\t\t\t\tcleanSlide: function (item) {\r\n\t\t\t\t\tif (item.img) {\r\n\t\t\t\t\t\titem.img.onload = item.img.onerror = null;\r\n\t\t\t\t\t}\r\n\t\t\t\t\titem.loaded = item.loading = item.img = item.imageAppended = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t/*>>items-controller*/\r\n\r\n\t\t/*>>tap*/\r\n\t\t/**\r\n\t\t * tap.js:\r\n\t\t *\r\n\t\t * Displatches tap and double-tap events.\r\n\t\t * \r\n\t\t */\r\n\r\n\t\tvar tapTimer,\r\n\t\t\ttapReleasePoint = {},\r\n\t\t\t_dispatchTapEvent = function (origEvent, releasePoint, pointerType) {\r\n\t\t\t\tvar e = document.createEvent('CustomEvent'),\r\n\t\t\t\t\teDetail = {\r\n\t\t\t\t\t\torigEvent: origEvent,\r\n\t\t\t\t\t\ttarget: origEvent.target,\r\n\t\t\t\t\t\treleasePoint: releasePoint,\r\n\t\t\t\t\t\tpointerType: pointerType || 'touch'\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\te.initCustomEvent('pswpTap', true, true, eDetail);\r\n\t\t\t\torigEvent.target.dispatchEvent(e);\r\n\t\t\t};\r\n\r\n\t\t_registerModule('Tap', {\r\n\t\t\tpublicMethods: {\r\n\t\t\t\tinitTap: function () {\r\n\t\t\t\t\t_listen('firstTouchStart', self.onTapStart);\r\n\t\t\t\t\t_listen('touchRelease', self.onTapRelease);\r\n\t\t\t\t\t_listen('destroy', function () {\r\n\t\t\t\t\t\ttapReleasePoint = {};\r\n\t\t\t\t\t\ttapTimer = null;\r\n\t\t\t\t\t});\r\n\t\t\t\t},\r\n\t\t\t\tonTapStart: function (touchList) {\r\n\t\t\t\t\tif (touchList.length > 1) {\r\n\t\t\t\t\t\tclearTimeout(tapTimer);\r\n\t\t\t\t\t\ttapTimer = null;\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tonTapRelease: function (e, releasePoint) {\r\n\t\t\t\t\tif (!releasePoint) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (!_moved && !_isMultitouch && !_numAnimations) {\r\n\t\t\t\t\t\tvar p0 = releasePoint;\r\n\t\t\t\t\t\tif (tapTimer) {\r\n\t\t\t\t\t\t\tclearTimeout(tapTimer);\r\n\t\t\t\t\t\t\ttapTimer = null;\r\n\r\n\t\t\t\t\t\t\t// Check if taped on the same place\r\n\t\t\t\t\t\t\tif (_isNearbyPoints(p0, tapReleasePoint)) {\r\n\t\t\t\t\t\t\t\t_shout('doubleTap', p0);\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (releasePoint.type === 'mouse') {\r\n\t\t\t\t\t\t\t_dispatchTapEvent(e, releasePoint, 'mouse');\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tvar clickedTagName = e.target.tagName.toUpperCase();\r\n\t\t\t\t\t\t// avoid double tap delay on buttons and elements that have class pswp__single-tap\r\n\t\t\t\t\t\tif (clickedTagName === 'BUTTON' || framework.hasClass(e.target, 'pswp__single-tap')) {\r\n\t\t\t\t\t\t\t_dispatchTapEvent(e, releasePoint);\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t_equalizePoints(tapReleasePoint, p0);\r\n\r\n\t\t\t\t\t\ttapTimer = setTimeout(function () {\r\n\t\t\t\t\t\t\t_dispatchTapEvent(e, releasePoint);\r\n\t\t\t\t\t\t\ttapTimer = null;\r\n\t\t\t\t\t\t}, 300);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t/*>>tap*/\r\n\r\n\t\t/*>>desktop-zoom*/\r\n\t\t/**\r\n\t\t *\r\n\t\t * desktop-zoom.js:\r\n\t\t *\r\n\t\t * - Binds mousewheel event for paning zoomed image.\r\n\t\t * - Manages \"dragging\", \"zoomed-in\", \"zoom-out\" classes.\r\n\t\t * (which are used for cursors and zoom icon)\r\n\t\t * - Adds toggleDesktopZoom function.\r\n\t\t * \r\n\t\t */\r\n\r\n\t\tvar _wheelDelta;\r\n\r\n\t\t_registerModule('DesktopZoom', {\r\n\r\n\t\t\tpublicMethods: {\r\n\r\n\t\t\t\tinitDesktopZoom: function () {\r\n\r\n\t\t\t\t\tif (_oldIE) {\r\n\t\t\t\t\t\t// no zoom for old IE (<=8)\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (_likelyTouchDevice) {\r\n\t\t\t\t\t\t// if detected hardware touch support, we wait until mouse is used,\r\n\t\t\t\t\t\t// and only then apply desktop-zoom features\r\n\t\t\t\t\t\t_listen('mouseUsed', function () {\r\n\t\t\t\t\t\t\tself.setupDesktopZoom();\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tself.setupDesktopZoom(true);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t},\r\n\r\n\t\t\t\tsetupDesktopZoom: function (onInit) {\r\n\r\n\t\t\t\t\t_wheelDelta = {};\r\n\r\n\t\t\t\t\tvar events = 'wheel mousewheel DOMMouseScroll';\r\n\r\n\t\t\t\t\t_listen('bindEvents', function () {\r\n\t\t\t\t\t\tframework.bind(template, events, self.handleMouseWheel);\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\t_listen('unbindEvents', function () {\r\n\t\t\t\t\t\tif (_wheelDelta) {\r\n\t\t\t\t\t\t\tframework.unbind(template, events, self.handleMouseWheel);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tself.mouseZoomedIn = false;\r\n\r\n\t\t\t\t\tvar hasDraggingClass,\r\n\t\t\t\t\t\tupdateZoomable = function () {\r\n\t\t\t\t\t\t\tif (self.mouseZoomedIn) {\r\n\t\t\t\t\t\t\t\tframework.removeClass(template, 'pswp--zoomed-in');\r\n\t\t\t\t\t\t\t\tself.mouseZoomedIn = false;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (_currZoomLevel < 1) {\r\n\t\t\t\t\t\t\t\tframework.addClass(template, 'pswp--zoom-allowed');\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tframework.removeClass(template, 'pswp--zoom-allowed');\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tremoveDraggingClass();\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tremoveDraggingClass = function () {\r\n\t\t\t\t\t\t\tif (hasDraggingClass) {\r\n\t\t\t\t\t\t\t\tframework.removeClass(template, 'pswp--dragging');\r\n\t\t\t\t\t\t\t\thasDraggingClass = false;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t_listen('resize', updateZoomable);\r\n\t\t\t\t\t_listen('afterChange', updateZoomable);\r\n\t\t\t\t\t_listen('pointerDown', function () {\r\n\t\t\t\t\t\tif (self.mouseZoomedIn) {\r\n\t\t\t\t\t\t\thasDraggingClass = true;\r\n\t\t\t\t\t\t\tframework.addClass(template, 'pswp--dragging');\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t\t_listen('pointerUp', removeDraggingClass);\r\n\r\n\t\t\t\t\tif (!onInit) {\r\n\t\t\t\t\t\tupdateZoomable();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t},\r\n\r\n\t\t\t\thandleMouseWheel: function (e) {\r\n\r\n\t\t\t\t\tif (_currZoomLevel <= self.currItem.fitRatio) {\r\n\t\t\t\t\t\tif (_options.modal) {\r\n\r\n\t\t\t\t\t\t\tif (!_options.closeOnScroll || _numAnimations || _isDragging) {\r\n\t\t\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\t\t} else if (_transformKey && Math.abs(e.deltaY) > 2) {\r\n\t\t\t\t\t\t\t\t// close PhotoSwipe\r\n\t\t\t\t\t\t\t\t// if browser supports transforms & scroll changed enough\r\n\t\t\t\t\t\t\t\t_closedByScroll = true;\r\n\t\t\t\t\t\t\t\tself.close();\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// allow just one event to fire\r\n\t\t\t\t\te.stopPropagation();\r\n\r\n\t\t\t\t\t// https://developer.mozilla.org/en-US/docs/Web/Events/wheel\r\n\t\t\t\t\t_wheelDelta.x = 0;\r\n\r\n\t\t\t\t\tif ('deltaX' in e) {\r\n\t\t\t\t\t\tif (e.deltaMode === 1 /* DOM_DELTA_LINE */) {\r\n\t\t\t\t\t\t\t// 18 - average line height\r\n\t\t\t\t\t\t\t_wheelDelta.x = e.deltaX * 18;\r\n\t\t\t\t\t\t\t_wheelDelta.y = e.deltaY * 18;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t_wheelDelta.x = e.deltaX;\r\n\t\t\t\t\t\t\t_wheelDelta.y = e.deltaY;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else if ('wheelDelta' in e) {\r\n\t\t\t\t\t\tif (e.wheelDeltaX) {\r\n\t\t\t\t\t\t\t_wheelDelta.x = -0.16 * e.wheelDeltaX;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (e.wheelDeltaY) {\r\n\t\t\t\t\t\t\t_wheelDelta.y = -0.16 * e.wheelDeltaY;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t_wheelDelta.y = -0.16 * e.wheelDelta;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else if ('detail' in e) {\r\n\t\t\t\t\t\t_wheelDelta.y = e.detail;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t_calculatePanBounds(_currZoomLevel, true);\r\n\r\n\t\t\t\t\tvar newPanX = _panOffset.x - _wheelDelta.x,\r\n\t\t\t\t\t\tnewPanY = _panOffset.y - _wheelDelta.y;\r\n\r\n\t\t\t\t\t// only prevent scrolling in nonmodal mode when not at edges\r\n\t\t\t\t\tif (_options.modal ||\r\n\t\t\t\t\t\t(\r\n\t\t\t\t\t\t\tnewPanX <= _currPanBounds.min.x && newPanX >= _currPanBounds.max.x &&\r\n\t\t\t\t\t\t\tnewPanY <= _currPanBounds.min.y && newPanY >= _currPanBounds.max.y\r\n\t\t\t\t\t\t)) {\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// TODO: use rAF instead of mousewheel?\r\n\t\t\t\t\tself.panTo(newPanX, newPanY);\r\n\t\t\t\t},\r\n\r\n\t\t\t\ttoggleDesktopZoom: function (centerPoint) {\r\n\t\t\t\t\tcenterPoint = centerPoint || { x: _viewportSize.x / 2 + _offset.x, y: _viewportSize.y / 2 + _offset.y };\r\n\r\n\t\t\t\t\tvar doubleTapZoomLevel = _options.getDoubleTapZoom(true, self.currItem);\r\n\t\t\t\t\tvar zoomOut = _currZoomLevel === doubleTapZoomLevel;\r\n\r\n\t\t\t\t\tself.mouseZoomedIn = !zoomOut;\r\n\r\n\t\t\t\t\tself.zoomTo(zoomOut ? self.currItem.initialZoomLevel : doubleTapZoomLevel, centerPoint, 333);\r\n\t\t\t\t\tframework[(!zoomOut ? 'add' : 'remove') + 'Class'](template, 'pswp--zoomed-in');\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\t\t});\r\n\r\n\r\n\t\t/*>>desktop-zoom*/\r\n\r\n\t\t/*>>history*/\r\n\t\t/**\r\n\t\t *\r\n\t\t * history.js:\r\n\t\t *\r\n\t\t * - Back button to close gallery.\r\n\t\t * \r\n\t\t * - Unique URL for each slide: example.com/&pid=1&gid=3\r\n\t\t * (where PID is picture index, and GID and gallery index)\r\n\t\t * \r\n\t\t * - Switch URL when slides change.\r\n\t\t * \r\n\t\t */\r\n\r\n\r\n\t\tvar _historyDefaultOptions = {\r\n\t\t\thistory: true,\r\n\t\t\tgalleryUID: 1\r\n\t\t};\r\n\r\n\t\tvar _historyUpdateTimeout,\r\n\t\t\t_hashChangeTimeout,\r\n\t\t\t_hashAnimCheckTimeout,\r\n\t\t\t_hashChangedByScript,\r\n\t\t\t_hashChangedByHistory,\r\n\t\t\t_hashReseted,\r\n\t\t\t_initialHash,\r\n\t\t\t_historyChanged,\r\n\t\t\t_closedFromURL,\r\n\t\t\t_urlChangedOnce,\r\n\t\t\t_windowLoc,\r\n\r\n\t\t\t_supportsPushState,\r\n\r\n\t\t\t_getHash = function () {\r\n\t\t\t\treturn _windowLoc.hash.substring(1);\r\n\t\t\t},\r\n\t\t\t_cleanHistoryTimeouts = function () {\r\n\r\n\t\t\t\tif (_historyUpdateTimeout) {\r\n\t\t\t\t\tclearTimeout(_historyUpdateTimeout);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (_hashAnimCheckTimeout) {\r\n\t\t\t\t\tclearTimeout(_hashAnimCheckTimeout);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t// pid - Picture index\r\n\t\t\t// gid - Gallery index\r\n\t\t\t_parseItemIndexFromURL = function () {\r\n\t\t\t\tvar hash = _getHash(),\r\n\t\t\t\t\tparams = {};\r\n\r\n\t\t\t\tif (hash.length < 5) { // pid=1\r\n\t\t\t\t\treturn params;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar i, vars = hash.split('&');\r\n\t\t\t\tfor (i = 0; i < vars.length; i++) {\r\n\t\t\t\t\tif (!vars[i]) {\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvar pair = vars[i].split('=');\r\n\t\t\t\t\tif (pair.length < 2) {\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tparams[pair[0]] = pair[1];\r\n\t\t\t\t}\r\n\t\t\t\tif (_options.galleryPIDs) {\r\n\t\t\t\t\t// detect custom pid in hash and search for it among the items collection\r\n\t\t\t\t\tvar searchfor = params.pid;\r\n\t\t\t\t\tparams.pid = 0; // if custom pid cannot be found, fallback to the first item\r\n\t\t\t\t\tfor (i = 0; i < _items.length; i++) {\r\n\t\t\t\t\t\tif (_items[i].pid === searchfor) {\r\n\t\t\t\t\t\t\tparams.pid = i;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tparams.pid = parseInt(params.pid, 10) - 1;\r\n\t\t\t\t}\r\n\t\t\t\tif (params.pid < 0) {\r\n\t\t\t\t\tparams.pid = 0;\r\n\t\t\t\t}\r\n\t\t\t\treturn params;\r\n\t\t\t},\r\n\t\t\t_updateHash = function () {\r\n\r\n\t\t\t\tif (_hashAnimCheckTimeout) {\r\n\t\t\t\t\tclearTimeout(_hashAnimCheckTimeout);\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t\tif (_numAnimations || _isDragging) {\r\n\t\t\t\t\t// changing browser URL forces layout/paint in some browsers, which causes noticable lag during animation\r\n\t\t\t\t\t// that's why we update hash only when no animations running\r\n\t\t\t\t\t_hashAnimCheckTimeout = setTimeout(_updateHash, 500);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (_hashChangedByScript) {\r\n\t\t\t\t\tclearTimeout(_hashChangeTimeout);\r\n\t\t\t\t} else {\r\n\t\t\t\t\t_hashChangedByScript = true;\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t\tvar pid = (_currentItemIndex + 1);\r\n\t\t\t\tvar item = _getItemAt(_currentItemIndex);\r\n\t\t\t\tif (item.hasOwnProperty('pid')) {\r\n\t\t\t\t\t// carry forward any custom pid assigned to the item\r\n\t\t\t\t\tpid = item.pid;\r\n\t\t\t\t}\r\n\t\t\t\tvar newHash = _initialHash + '&' + 'gid=' + _options.galleryUID + '&' + 'pid=' + pid;\r\n\r\n\t\t\t\tif (!_historyChanged) {\r\n\t\t\t\t\tif (_windowLoc.hash.indexOf(newHash) === -1) {\r\n\t\t\t\t\t\t_urlChangedOnce = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// first time - add new hisory record, then just replace\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar newURL = _windowLoc.href.split('#')[0] + '#' + newHash;\r\n\r\n\t\t\t\tif (_supportsPushState) {\r\n\r\n\t\t\t\t\tif ('#' + newHash !== window.location.hash) {\r\n\t\t\t\t\t\thistory[_historyChanged ? 'replaceState' : 'pushState']('', document.title, newURL);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif (_historyChanged) {\r\n\t\t\t\t\t\t_windowLoc.replace(newURL);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t_windowLoc.hash = newHash;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\r\n\r\n\t\t\t\t_historyChanged = true;\r\n\t\t\t\t_hashChangeTimeout = setTimeout(function () {\r\n\t\t\t\t\t_hashChangedByScript = false;\r\n\t\t\t\t}, 60);\r\n\t\t\t};\r\n\r\n\r\n\r\n\r\n\r\n\t\t_registerModule('History', {\r\n\r\n\r\n\r\n\t\t\tpublicMethods: {\r\n\t\t\t\tinitHistory: function () {\r\n\r\n\t\t\t\t\tframework.extend(_options, _historyDefaultOptions, true);\r\n\r\n\t\t\t\t\tif (!_options.history) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t\t_windowLoc = window.location;\r\n\t\t\t\t\t_urlChangedOnce = false;\r\n\t\t\t\t\t_closedFromURL = false;\r\n\t\t\t\t\t_historyChanged = false;\r\n\t\t\t\t\t_initialHash = _getHash();\r\n\t\t\t\t\t_supportsPushState = ('pushState' in history);\r\n\r\n\r\n\t\t\t\t\tif (_initialHash.indexOf('gid=') > -1) {\r\n\t\t\t\t\t\t_initialHash = _initialHash.split('&gid=')[0];\r\n\t\t\t\t\t\t_initialHash = _initialHash.split('?gid=')[0];\r\n\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t\t_listen('afterChange', self.updateURL);\r\n\t\t\t\t\t_listen('unbindEvents', function () {\r\n\t\t\t\t\t\tframework.unbind(window, 'hashchange', self.onHashChange);\r\n\t\t\t\t\t});\r\n\r\n\r\n\t\t\t\t\tvar returnToOriginal = function () {\r\n\t\t\t\t\t\t_hashReseted = true;\r\n\t\t\t\t\t\tif (!_closedFromURL) {\r\n\r\n\t\t\t\t\t\t\tif (_urlChangedOnce) {\r\n\t\t\t\t\t\t\t\thistory.back();\r\n\t\t\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\t\t\tif (_initialHash) {\r\n\t\t\t\t\t\t\t\t\t_windowLoc.hash = _initialHash;\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\tif (_supportsPushState) {\r\n\r\n\t\t\t\t\t\t\t\t\t\t// remove hash from url without refreshing it or scrolling to top\r\n\t\t\t\t\t\t\t\t\t\thistory.pushState('', document.title, _windowLoc.pathname + _windowLoc.search);\r\n\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\t_windowLoc.hash = '';\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t_cleanHistoryTimeouts();\r\n\t\t\t\t\t};\r\n\r\n\r\n\t\t\t\t\t_listen('unbindEvents', function () {\r\n\t\t\t\t\t\tif (_closedByScroll) {\r\n\t\t\t\t\t\t\t// if PhotoSwipe is closed by scroll, we go \"back\" before the closing animation starts\r\n\t\t\t\t\t\t\t// this is done to keep the scroll position\r\n\t\t\t\t\t\t\treturnToOriginal();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t\t_listen('destroy', function () {\r\n\t\t\t\t\t\tif (!_hashReseted) {\r\n\t\t\t\t\t\t\treturnToOriginal();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t\t_listen('firstUpdate', function () {\r\n\t\t\t\t\t\t_currentItemIndex = _parseItemIndexFromURL().pid;\r\n\t\t\t\t\t});\r\n\r\n\r\n\r\n\r\n\t\t\t\t\tvar index = _initialHash.indexOf('pid=');\r\n\t\t\t\t\tif (index > -1) {\r\n\t\t\t\t\t\t_initialHash = _initialHash.substring(0, index);\r\n\t\t\t\t\t\tif (_initialHash.slice(-1) === '&') {\r\n\t\t\t\t\t\t\t_initialHash = _initialHash.slice(0, -1);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t\tsetTimeout(function () {\r\n\t\t\t\t\t\tif (_isOpen) { // hasn't destroyed yet\r\n\t\t\t\t\t\t\tframework.bind(window, 'hashchange', self.onHashChange);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}, 40);\r\n\r\n\t\t\t\t},\r\n\t\t\t\tonHashChange: function () {\r\n\r\n\t\t\t\t\tif (_getHash() === _initialHash) {\r\n\r\n\t\t\t\t\t\t_closedFromURL = true;\r\n\t\t\t\t\t\tself.close();\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (!_hashChangedByScript) {\r\n\r\n\t\t\t\t\t\t_hashChangedByHistory = true;\r\n\t\t\t\t\t\tself.goTo(_parseItemIndexFromURL().pid);\r\n\t\t\t\t\t\t_hashChangedByHistory = false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t},\r\n\t\t\t\tupdateURL: function () {\r\n\r\n\t\t\t\t\t// Delay the update of URL, to avoid lag during transition, \r\n\t\t\t\t\t// and to not to trigger actions like \"refresh page sound\" or \"blinking favicon\" to often\r\n\r\n\t\t\t\t\t_cleanHistoryTimeouts();\r\n\r\n\r\n\t\t\t\t\tif (_hashChangedByHistory) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (!_historyChanged) {\r\n\t\t\t\t\t\t_updateHash(); // first time\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t_historyUpdateTimeout = setTimeout(_updateHash, 800);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\t\t});\r\n\r\n\r\n\t\t/*>>history*/\r\n\t\tframework.extend(self, publicMethods);\r\n\t};\r\n\treturn PhotoSwipe;\r\n});\r\n\r\n/*! PhotoSwipe Default UI - 4.1.3 - 2019-01-08\r\n* http://photoswipe.com\r\n* Copyright (c) 2019 Dmitry Semenov; */\r\n/**\r\n*\r\n* UI on top of main sliding area (caption, arrows, close button, etc.).\r\n* Built just using public methods/properties of PhotoSwipe.\r\n* \r\n*/\r\n(function (root, factory) {\r\n\tif (typeof define === 'function' && define.amd) {\r\n\t\tdefine(factory);\r\n\t} else if (typeof exports === 'object') {\r\n\t\tmodule.exports = factory();\r\n\t} else {\r\n\t\troot.PhotoSwipeUI_Default = factory();\r\n\t}\r\n})(this, function () {\r\n\r\n\t'use strict';\r\n\r\n\r\n\r\n\tvar PhotoSwipeUI_Default =\r\n\t\tfunction (pswp, framework) {\r\n\r\n\t\t\tvar ui = this;\r\n\t\t\tvar _overlayUIUpdated = false,\r\n\t\t\t\t_controlsVisible = true,\r\n\t\t\t\t_fullscrenAPI,\r\n\t\t\t\t_controls,\r\n\t\t\t\t_captionContainer,\r\n\t\t\t\t_fakeCaptionContainer,\r\n\t\t\t\t_indexIndicator,\r\n\t\t\t\t_shareButton,\r\n\t\t\t\t_shareModal,\r\n\t\t\t\t_shareModalHidden = true,\r\n\t\t\t\t_initalCloseOnScrollValue,\r\n\t\t\t\t_isIdle,\r\n\t\t\t\t_listen,\r\n\r\n\t\t\t\t_loadingIndicator,\r\n\t\t\t\t_loadingIndicatorHidden,\r\n\t\t\t\t_loadingIndicatorTimeout,\r\n\r\n\t\t\t\t_galleryHasOneSlide,\r\n\r\n\t\t\t\t_options,\r\n\t\t\t\t_defaultUIOptions = {\r\n\t\t\t\t\tbarsSize: { top: 44, bottom: 'auto' },\r\n\t\t\t\t\tcloseElClasses: ['item', 'caption', 'zoom-wrap', 'ui', 'top-bar'],\r\n\t\t\t\t\ttimeToIdle: 4000,\r\n\t\t\t\t\ttimeToIdleOutside: 1000,\r\n\t\t\t\t\tloadingIndicatorDelay: 1000, // 2s\r\n\r\n\t\t\t\t\taddCaptionHTMLFn: function (item, captionEl /*, isFake */) {\r\n\t\t\t\t\t\tif (!item.title) {\r\n\t\t\t\t\t\t\tcaptionEl.children[0].innerHTML = '';\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tcaptionEl.children[0].innerHTML = item.title;\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\tcloseEl: true,\r\n\t\t\t\t\tcaptionEl: true,\r\n\t\t\t\t\tfullscreenEl: true,\r\n\t\t\t\t\tzoomEl: true,\r\n\t\t\t\t\tshareEl: true,\r\n\t\t\t\t\tcounterEl: true,\r\n\t\t\t\t\tarrowEl: true,\r\n\t\t\t\t\tpreloaderEl: true,\r\n\r\n\t\t\t\t\ttapToClose: false,\r\n\t\t\t\t\ttapToToggleControls: true,\r\n\r\n\t\t\t\t\tclickToCloseNonZoomable: true,\r\n\r\n\t\t\t\t\tshareButtons: [\r\n\t\t\t\t\t\t{ id: 'facebook', label: 'Share on Facebook', url: 'https://www.facebook.com/sharer/sharer.php?u={{url}}' },\r\n\t\t\t\t\t\t{ id: 'twitter', label: 'Tweet', url: 'https://twitter.com/intent/tweet?text={{text}}&url={{url}}' },\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tid: 'pinterest', label: 'Pin it', url: 'http://www.pinterest.com/pin/create/button/' +\r\n\t\t\t\t\t\t\t\t'?url={{url}}&media={{image_url}}&description={{text}}'\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{ id: 'download', label: 'Download image', url: '{{raw_image_url}}', download: true }\r\n\t\t\t\t\t],\r\n\t\t\t\t\tgetImageURLForShare: function ( /* shareButtonData */) {\r\n\t\t\t\t\t\treturn pswp.currItem.src || '';\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetPageURLForShare: function ( /* shareButtonData */) {\r\n\t\t\t\t\t\treturn window.location.href;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetTextForShare: function ( /* shareButtonData */) {\r\n\t\t\t\t\t\treturn pswp.currItem.title || '';\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\tindexIndicatorSep: ' / ',\r\n\t\t\t\t\tfitControlsWidth: 1200\r\n\r\n\t\t\t\t},\r\n\t\t\t\t_blockControlsTap,\r\n\t\t\t\t_blockControlsTapTimeout;\r\n\r\n\r\n\r\n\t\t\tvar _onControlsTap = function (e) {\r\n\t\t\t\tif (_blockControlsTap) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t\te = e || window.event;\r\n\r\n\t\t\t\tif (_options.timeToIdle && _options.mouseUsed && !_isIdle) {\r\n\t\t\t\t\t// reset idle timer\r\n\t\t\t\t\t_onIdleMouseMove();\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t\tvar target = e.target || e.srcElement,\r\n\t\t\t\t\tuiElement,\r\n\t\t\t\t\tclickedClass = target.getAttribute('class') || '',\r\n\t\t\t\t\tfound;\r\n\r\n\t\t\t\tfor (var i = 0; i < _uiElements.length; i++) {\r\n\t\t\t\t\tuiElement = _uiElements[i];\r\n\t\t\t\t\tif (uiElement.onTap && clickedClass.indexOf('pswp__' + uiElement.name) > -1) {\r\n\t\t\t\t\t\tuiElement.onTap();\r\n\t\t\t\t\t\tfound = true;\r\n\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (found) {\r\n\t\t\t\t\tif (e.stopPropagation) {\r\n\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t}\r\n\t\t\t\t\t_blockControlsTap = true;\r\n\r\n\t\t\t\t\t// Some versions of Android don't prevent ghost click event \r\n\t\t\t\t\t// when preventDefault() was called on touchstart and/or touchend.\r\n\t\t\t\t\t// \r\n\t\t\t\t\t// This happens on v4.3, 4.2, 4.1, \r\n\t\t\t\t\t// older versions strangely work correctly, \r\n\t\t\t\t\t// but just in case we add delay on all of them)\t\r\n\t\t\t\t\tvar tapDelay = framework.features.isOldAndroid ? 600 : 30;\r\n\t\t\t\t\t_blockControlsTapTimeout = setTimeout(function () {\r\n\t\t\t\t\t\t_blockControlsTap = false;\r\n\t\t\t\t\t}, tapDelay);\r\n\t\t\t\t}\r\n\r\n\t\t\t},\r\n\t\t\t\t_fitControlsInViewport = function () {\r\n\t\t\t\t\treturn !pswp.likelyTouchDevice || _options.mouseUsed || screen.width > _options.fitControlsWidth;\r\n\t\t\t\t},\r\n\t\t\t\t_togglePswpClass = function (el, cName, add) {\r\n\t\t\t\t\tframework[(add ? 'add' : 'remove') + 'Class'](el, 'pswp__' + cName);\r\n\t\t\t\t},\r\n\r\n\t\t\t\t// add class when there is just one item in the gallery\r\n\t\t\t\t// (by default it hides left/right arrows and 1ofX counter)\r\n\t\t\t\t_countNumItems = function () {\r\n\t\t\t\t\tvar hasOneSlide = (_options.getNumItemsFn() === 1);\r\n\r\n\t\t\t\t\tif (hasOneSlide !== _galleryHasOneSlide) {\r\n\t\t\t\t\t\t_togglePswpClass(_controls, 'ui--one-slide', hasOneSlide);\r\n\t\t\t\t\t\t_galleryHasOneSlide = hasOneSlide;\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t_toggleShareModalClass = function () {\r\n\t\t\t\t\t_togglePswpClass(_shareModal, 'share-modal--hidden', _shareModalHidden);\r\n\t\t\t\t},\r\n\t\t\t\t_toggleShareModal = function () {\r\n\r\n\t\t\t\t\t_shareModalHidden = !_shareModalHidden;\r\n\r\n\r\n\t\t\t\t\tif (!_shareModalHidden) {\r\n\t\t\t\t\t\t_toggleShareModalClass();\r\n\t\t\t\t\t\tsetTimeout(function () {\r\n\t\t\t\t\t\t\tif (!_shareModalHidden) {\r\n\t\t\t\t\t\t\t\tframework.addClass(_shareModal, 'pswp__share-modal--fade-in');\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}, 30);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tframework.removeClass(_shareModal, 'pswp__share-modal--fade-in');\r\n\t\t\t\t\t\tsetTimeout(function () {\r\n\t\t\t\t\t\t\tif (_shareModalHidden) {\r\n\t\t\t\t\t\t\t\t_toggleShareModalClass();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}, 300);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (!_shareModalHidden) {\r\n\t\t\t\t\t\t_updateShareURLs();\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t},\r\n\r\n\t\t\t\t_openWindowPopup = function (e) {\r\n\t\t\t\t\te = e || window.event;\r\n\t\t\t\t\tvar target = e.target || e.srcElement;\r\n\r\n\t\t\t\t\tpswp.shout('shareLinkClick', e, target);\r\n\r\n\t\t\t\t\tif (!target.href) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (target.hasAttribute('download')) {\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\twindow.open(target.href, 'pswp_share', 'scrollbars=yes,resizable=yes,toolbar=no,' +\r\n\t\t\t\t\t\t'location=yes,width=550,height=420,top=100,left=' +\r\n\t\t\t\t\t\t(window.screen ? Math.round(screen.width / 2 - 275) : 100));\r\n\r\n\t\t\t\t\tif (!_shareModalHidden) {\r\n\t\t\t\t\t\t_toggleShareModal();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t},\r\n\t\t\t\t_updateShareURLs = function () {\r\n\t\t\t\t\tvar shareButtonOut = '',\r\n\t\t\t\t\t\tshareButtonData,\r\n\t\t\t\t\t\tshareURL,\r\n\t\t\t\t\t\timage_url,\r\n\t\t\t\t\t\tpage_url,\r\n\t\t\t\t\t\tshare_text;\r\n\r\n\t\t\t\t\tfor (var i = 0; i < _options.shareButtons.length; i++) {\r\n\t\t\t\t\t\tshareButtonData = _options.shareButtons[i];\r\n\r\n\t\t\t\t\t\timage_url = _options.getImageURLForShare(shareButtonData);\r\n\t\t\t\t\t\tpage_url = _options.getPageURLForShare(shareButtonData);\r\n\t\t\t\t\t\tshare_text = _options.getTextForShare(shareButtonData);\r\n\r\n\t\t\t\t\t\tshareURL = shareButtonData.url.replace('{{url}}', encodeURIComponent(page_url))\r\n\t\t\t\t\t\t\t.replace('{{image_url}}', encodeURIComponent(image_url))\r\n\t\t\t\t\t\t\t.replace('{{raw_image_url}}', image_url)\r\n\t\t\t\t\t\t\t.replace('{{text}}', encodeURIComponent(share_text));\r\n\r\n\t\t\t\t\t\tshareButtonOut += '' +\r\n\t\t\t\t\t\t\tshareButtonData.label + '';\r\n\r\n\t\t\t\t\t\tif (_options.parseShareButtonOut) {\r\n\t\t\t\t\t\t\tshareButtonOut = _options.parseShareButtonOut(shareButtonData, shareButtonOut);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t_shareModal.children[0].innerHTML = shareButtonOut;\r\n\t\t\t\t\t_shareModal.children[0].onclick = _openWindowPopup;\r\n\r\n\t\t\t\t},\r\n\t\t\t\t_hasCloseClass = function (target) {\r\n\t\t\t\t\tfor (var i = 0; i < _options.closeElClasses.length; i++) {\r\n\t\t\t\t\t\tif (framework.hasClass(target, 'pswp__' + _options.closeElClasses[i])) {\r\n\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t_idleInterval,\r\n\t\t\t\t_idleTimer,\r\n\t\t\t\t_idleIncrement = 0,\r\n\t\t\t\t_onIdleMouseMove = function () {\r\n\t\t\t\t\tclearTimeout(_idleTimer);\r\n\t\t\t\t\t_idleIncrement = 0;\r\n\t\t\t\t\tif (_isIdle) {\r\n\t\t\t\t\t\tui.setIdle(false);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t_onMouseLeaveWindow = function (e) {\r\n\t\t\t\t\te = e ? e : window.event;\r\n\t\t\t\t\tvar from = e.relatedTarget || e.toElement;\r\n\t\t\t\t\tif (!from || from.nodeName === 'HTML') {\r\n\t\t\t\t\t\tclearTimeout(_idleTimer);\r\n\t\t\t\t\t\t_idleTimer = setTimeout(function () {\r\n\t\t\t\t\t\t\tui.setIdle(true);\r\n\t\t\t\t\t\t}, _options.timeToIdleOutside);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t_setupFullscreenAPI = function () {\r\n\t\t\t\t\tif (_options.fullscreenEl && !framework.features.isOldAndroid) {\r\n\t\t\t\t\t\tif (!_fullscrenAPI) {\r\n\t\t\t\t\t\t\t_fullscrenAPI = ui.getFullscreenAPI();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (_fullscrenAPI) {\r\n\t\t\t\t\t\t\tframework.bind(document, _fullscrenAPI.eventK, ui.updateFullscreen);\r\n\t\t\t\t\t\t\tui.updateFullscreen();\r\n\t\t\t\t\t\t\tframework.addClass(pswp.template, 'pswp--supports-fs');\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tframework.removeClass(pswp.template, 'pswp--supports-fs');\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t_setupLoadingIndicator = function () {\r\n\t\t\t\t\t// Setup loading indicator\r\n\t\t\t\t\tif (_options.preloaderEl) {\r\n\r\n\t\t\t\t\t\t_toggleLoadingIndicator(true);\r\n\r\n\t\t\t\t\t\t_listen('beforeChange', function () {\r\n\r\n\t\t\t\t\t\t\tclearTimeout(_loadingIndicatorTimeout);\r\n\r\n\t\t\t\t\t\t\t// display loading indicator with delay\r\n\t\t\t\t\t\t\t_loadingIndicatorTimeout = setTimeout(function () {\r\n\r\n\t\t\t\t\t\t\t\tif (pswp.currItem && pswp.currItem.loading) {\r\n\r\n\t\t\t\t\t\t\t\t\tif (!pswp.allowProgressiveImg() || (pswp.currItem.img && !pswp.currItem.img.naturalWidth)) {\r\n\t\t\t\t\t\t\t\t\t\t// show preloader if progressive loading is not enabled, \r\n\t\t\t\t\t\t\t\t\t\t// or image width is not defined yet (because of slow connection)\r\n\t\t\t\t\t\t\t\t\t\t_toggleLoadingIndicator(false);\r\n\t\t\t\t\t\t\t\t\t\t// items-controller.js function allowProgressiveImg\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t_toggleLoadingIndicator(true); // hide preloader\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t}, _options.loadingIndicatorDelay);\r\n\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\t_listen('imageLoadComplete', function (index, item) {\r\n\t\t\t\t\t\t\tif (pswp.currItem === item) {\r\n\t\t\t\t\t\t\t\t_toggleLoadingIndicator(true);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t_toggleLoadingIndicator = function (hide) {\r\n\t\t\t\t\tif (_loadingIndicatorHidden !== hide) {\r\n\t\t\t\t\t\t_togglePswpClass(_loadingIndicator, 'preloader--active', !hide);\r\n\t\t\t\t\t\t_loadingIndicatorHidden = hide;\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t_applyNavBarGaps = function (item) {\r\n\t\t\t\t\tvar gap = item.vGap;\r\n\r\n\t\t\t\t\tif (_fitControlsInViewport()) {\r\n\r\n\t\t\t\t\t\tvar bars = _options.barsSize;\r\n\t\t\t\t\t\tif (_options.captionEl && bars.bottom === 'auto') {\r\n\t\t\t\t\t\t\tif (!_fakeCaptionContainer) {\r\n\t\t\t\t\t\t\t\t_fakeCaptionContainer = framework.createEl('pswp__caption pswp__caption--fake');\r\n\t\t\t\t\t\t\t\t_fakeCaptionContainer.appendChild(framework.createEl('pswp__caption__center'));\r\n\t\t\t\t\t\t\t\t_controls.insertBefore(_fakeCaptionContainer, _captionContainer);\r\n\t\t\t\t\t\t\t\tframework.addClass(_controls, 'pswp__ui--fit');\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (_options.addCaptionHTMLFn(item, _fakeCaptionContainer, true)) {\r\n\r\n\t\t\t\t\t\t\t\tvar captionSize = _fakeCaptionContainer.clientHeight;\r\n\t\t\t\t\t\t\t\tgap.bottom = parseInt(captionSize, 10) || 44;\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tgap.bottom = bars.top; // if no caption, set size of bottom gap to size of top\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tgap.bottom = bars.bottom === 'auto' ? 0 : bars.bottom;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// height of top bar is static, no need to calculate it\r\n\t\t\t\t\t\tgap.top = bars.top;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tgap.top = gap.bottom = 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t_setupIdle = function () {\r\n\t\t\t\t\t// Hide controls when mouse is used\r\n\t\t\t\t\tif (_options.timeToIdle) {\r\n\t\t\t\t\t\t_listen('mouseUsed', function () {\r\n\r\n\t\t\t\t\t\t\tframework.bind(document, 'mousemove', _onIdleMouseMove);\r\n\t\t\t\t\t\t\tframework.bind(document, 'mouseout', _onMouseLeaveWindow);\r\n\r\n\t\t\t\t\t\t\t_idleInterval = setInterval(function () {\r\n\t\t\t\t\t\t\t\t_idleIncrement++;\r\n\t\t\t\t\t\t\t\tif (_idleIncrement === 2) {\r\n\t\t\t\t\t\t\t\t\tui.setIdle(true);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}, _options.timeToIdle / 2);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t_setupHidingControlsDuringGestures = function () {\r\n\r\n\t\t\t\t\t// Hide controls on vertical drag\r\n\t\t\t\t\t_listen('onVerticalDrag', function (now) {\r\n\t\t\t\t\t\tif (_controlsVisible && now < 0.95) {\r\n\t\t\t\t\t\t\tui.hideControls();\r\n\t\t\t\t\t\t} else if (!_controlsVisible && now >= 0.95) {\r\n\t\t\t\t\t\t\tui.showControls();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\t// Hide controls when pinching to close\r\n\t\t\t\t\tvar pinchControlsHidden;\r\n\t\t\t\t\t_listen('onPinchClose', function (now) {\r\n\t\t\t\t\t\tif (_controlsVisible && now < 0.9) {\r\n\t\t\t\t\t\t\tui.hideControls();\r\n\t\t\t\t\t\t\tpinchControlsHidden = true;\r\n\t\t\t\t\t\t} else if (pinchControlsHidden && !_controlsVisible && now > 0.9) {\r\n\t\t\t\t\t\t\tui.showControls();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\t_listen('zoomGestureEnded', function () {\r\n\t\t\t\t\t\tpinchControlsHidden = false;\r\n\t\t\t\t\t\tif (pinchControlsHidden && !_controlsVisible) {\r\n\t\t\t\t\t\t\tui.showControls();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t};\r\n\r\n\r\n\r\n\t\t\tvar _uiElements = [\r\n\t\t\t\t{\r\n\t\t\t\t\tname: 'caption',\r\n\t\t\t\t\toption: 'captionEl',\r\n\t\t\t\t\tonInit: function (el) {\r\n\t\t\t\t\t\t_captionContainer = el;\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tname: 'share-modal',\r\n\t\t\t\t\toption: 'shareEl',\r\n\t\t\t\t\tonInit: function (el) {\r\n\t\t\t\t\t\t_shareModal = el;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tonTap: function () {\r\n\t\t\t\t\t\t_toggleShareModal();\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tname: 'button--share',\r\n\t\t\t\t\toption: 'shareEl',\r\n\t\t\t\t\tonInit: function (el) {\r\n\t\t\t\t\t\t_shareButton = el;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tonTap: function () {\r\n\t\t\t\t\t\t_toggleShareModal();\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tname: 'button--zoom',\r\n\t\t\t\t\toption: 'zoomEl',\r\n\t\t\t\t\tonTap: pswp.toggleDesktopZoom\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tname: 'counter',\r\n\t\t\t\t\toption: 'counterEl',\r\n\t\t\t\t\tonInit: function (el) {\r\n\t\t\t\t\t\t_indexIndicator = el;\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tname: 'button--close',\r\n\t\t\t\t\toption: 'closeEl',\r\n\t\t\t\t\tonTap: pswp.close\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tname: 'button--arrow--left',\r\n\t\t\t\t\toption: 'arrowEl',\r\n\t\t\t\t\tonTap: pswp.prev\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tname: 'button--arrow--right',\r\n\t\t\t\t\toption: 'arrowEl',\r\n\t\t\t\t\tonTap: pswp.next\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tname: 'button--fs',\r\n\t\t\t\t\toption: 'fullscreenEl',\r\n\t\t\t\t\tonTap: function () {\r\n\t\t\t\t\t\tif (_fullscrenAPI.isFullscreen()) {\r\n\t\t\t\t\t\t\t_fullscrenAPI.exit();\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t_fullscrenAPI.enter();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tname: 'preloader',\r\n\t\t\t\t\toption: 'preloaderEl',\r\n\t\t\t\t\tonInit: function (el) {\r\n\t\t\t\t\t\t_loadingIndicator = el;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t];\r\n\r\n\t\t\tvar _setupUIElements = function () {\r\n\t\t\t\tvar item,\r\n\t\t\t\t\tclassAttr,\r\n\t\t\t\t\tuiElement;\r\n\r\n\t\t\t\tvar loopThroughChildElements = function (sChildren) {\r\n\t\t\t\t\tif (!sChildren) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tvar l = sChildren.length;\r\n\t\t\t\t\tfor (var i = 0; i < l; i++) {\r\n\t\t\t\t\t\titem = sChildren[i];\r\n\t\t\t\t\t\tclassAttr = item.className;\r\n\r\n\t\t\t\t\t\tfor (var a = 0; a < _uiElements.length; a++) {\r\n\t\t\t\t\t\t\tuiElement = _uiElements[a];\r\n\r\n\t\t\t\t\t\t\tif (classAttr.indexOf('pswp__' + uiElement.name) > -1) {\r\n\r\n\t\t\t\t\t\t\t\tif (_options[uiElement.option]) { // if element is not disabled from options\r\n\r\n\t\t\t\t\t\t\t\t\tframework.removeClass(item, 'pswp__element--disabled');\r\n\t\t\t\t\t\t\t\t\tif (uiElement.onInit) {\r\n\t\t\t\t\t\t\t\t\t\tuiElement.onInit(item);\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t//item.style.display = 'block';\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\tframework.addClass(item, 'pswp__element--disabled');\r\n\t\t\t\t\t\t\t\t\t//item.style.display = 'none';\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\t\tloopThroughChildElements(_controls.children);\r\n\r\n\t\t\t\tvar topBar = framework.getChildByClass(_controls, 'pswp__top-bar');\r\n\t\t\t\tif (topBar) {\r\n\t\t\t\t\tloopThroughChildElements(topBar.children);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\r\n\r\n\r\n\t\t\tui.init = function () {\r\n\r\n\t\t\t\t// extend options\r\n\t\t\t\tframework.extend(pswp.options, _defaultUIOptions, true);\r\n\r\n\t\t\t\t// create local link for fast access\r\n\t\t\t\t_options = pswp.options;\r\n\r\n\t\t\t\t// find pswp__ui element\r\n\t\t\t\t_controls = framework.getChildByClass(pswp.scrollWrap, 'pswp__ui');\r\n\r\n\t\t\t\t// create local link\r\n\t\t\t\t_listen = pswp.listen;\r\n\r\n\r\n\t\t\t\t_setupHidingControlsDuringGestures();\r\n\r\n\t\t\t\t// update controls when slides change\r\n\t\t\t\t_listen('beforeChange', ui.update);\r\n\r\n\t\t\t\t// toggle zoom on double-tap\r\n\t\t\t\t_listen('doubleTap', function (point) {\r\n\t\t\t\t\tvar initialZoomLevel = pswp.currItem.initialZoomLevel;\r\n\t\t\t\t\tif (pswp.getZoomLevel() !== initialZoomLevel) {\r\n\t\t\t\t\t\tpswp.zoomTo(initialZoomLevel, point, 333);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tpswp.zoomTo(_options.getDoubleTapZoom(false, pswp.currItem), point, 333);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// Allow text selection in caption\r\n\t\t\t\t_listen('preventDragEvent', function (e, isDown, preventObj) {\r\n\t\t\t\t\tvar t = e.target || e.srcElement;\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tt &&\r\n\t\t\t\t\t\tt.getAttribute('class') && e.type.indexOf('mouse') > -1 &&\r\n\t\t\t\t\t\t(t.getAttribute('class').indexOf('__caption') > 0 || (/(SMALL|STRONG|EM)/i).test(t.tagName))\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tpreventObj.prevent = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// bind events for UI\r\n\t\t\t\t_listen('bindEvents', function () {\r\n\t\t\t\t\tframework.bind(_controls, 'pswpTap click', _onControlsTap);\r\n\t\t\t\t\tframework.bind(pswp.scrollWrap, 'pswpTap', ui.onGlobalTap);\r\n\r\n\t\t\t\t\tif (!pswp.likelyTouchDevice) {\r\n\t\t\t\t\t\tframework.bind(pswp.scrollWrap, 'mouseover', ui.onMouseOver);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// unbind events for UI\r\n\t\t\t\t_listen('unbindEvents', function () {\r\n\t\t\t\t\tif (!_shareModalHidden) {\r\n\t\t\t\t\t\t_toggleShareModal();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (_idleInterval) {\r\n\t\t\t\t\t\tclearInterval(_idleInterval);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tframework.unbind(document, 'mouseout', _onMouseLeaveWindow);\r\n\t\t\t\t\tframework.unbind(document, 'mousemove', _onIdleMouseMove);\r\n\t\t\t\t\tframework.unbind(_controls, 'pswpTap click', _onControlsTap);\r\n\t\t\t\t\tframework.unbind(pswp.scrollWrap, 'pswpTap', ui.onGlobalTap);\r\n\t\t\t\t\tframework.unbind(pswp.scrollWrap, 'mouseover', ui.onMouseOver);\r\n\r\n\t\t\t\t\tif (_fullscrenAPI) {\r\n\t\t\t\t\t\tframework.unbind(document, _fullscrenAPI.eventK, ui.updateFullscreen);\r\n\t\t\t\t\t\tif (_fullscrenAPI.isFullscreen()) {\r\n\t\t\t\t\t\t\t_options.hideAnimationDuration = 0;\r\n\t\t\t\t\t\t\t_fullscrenAPI.exit();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t_fullscrenAPI = null;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\r\n\t\t\t\t// clean up things when gallery is destroyed\r\n\t\t\t\t_listen('destroy', function () {\r\n\t\t\t\t\tif (_options.captionEl) {\r\n\t\t\t\t\t\tif (_fakeCaptionContainer) {\r\n\t\t\t\t\t\t\t_controls.removeChild(_fakeCaptionContainer);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tframework.removeClass(_captionContainer, 'pswp__caption--empty');\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (_shareModal) {\r\n\t\t\t\t\t\t_shareModal.children[0].onclick = null;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tframework.removeClass(_controls, 'pswp__ui--over-close');\r\n\t\t\t\t\tframework.addClass(_controls, 'pswp__ui--hidden');\r\n\t\t\t\t\tui.setIdle(false);\r\n\t\t\t\t});\r\n\r\n\r\n\t\t\t\tif (!_options.showAnimationDuration) {\r\n\t\t\t\t\tframework.removeClass(_controls, 'pswp__ui--hidden');\r\n\t\t\t\t}\r\n\t\t\t\t_listen('initialZoomIn', function () {\r\n\t\t\t\t\tif (_options.showAnimationDuration) {\r\n\t\t\t\t\t\tframework.removeClass(_controls, 'pswp__ui--hidden');\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\t_listen('initialZoomOut', function () {\r\n\t\t\t\t\tframework.addClass(_controls, 'pswp__ui--hidden');\r\n\t\t\t\t});\r\n\r\n\t\t\t\t_listen('parseVerticalMargin', _applyNavBarGaps);\r\n\r\n\t\t\t\t_setupUIElements();\r\n\r\n\t\t\t\tif (_options.shareEl && _shareButton && _shareModal) {\r\n\t\t\t\t\t_shareModalHidden = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t_countNumItems();\r\n\r\n\t\t\t\t_setupIdle();\r\n\r\n\t\t\t\t_setupFullscreenAPI();\r\n\r\n\t\t\t\t_setupLoadingIndicator();\r\n\t\t\t};\r\n\r\n\t\t\tui.setIdle = function (isIdle) {\r\n\t\t\t\t_isIdle = isIdle;\r\n\t\t\t\t_togglePswpClass(_controls, 'ui--idle', isIdle);\r\n\t\t\t};\r\n\r\n\t\t\tui.update = function () {\r\n\t\t\t\t// Don't update UI if it's hidden\r\n\t\t\t\tif (_controlsVisible && pswp.currItem) {\r\n\r\n\t\t\t\t\tui.updateIndexIndicator();\r\n\r\n\t\t\t\t\tif (_options.captionEl) {\r\n\t\t\t\t\t\t_options.addCaptionHTMLFn(pswp.currItem, _captionContainer);\r\n\r\n\t\t\t\t\t\t_togglePswpClass(_captionContainer, 'caption--empty', !pswp.currItem.title);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t_overlayUIUpdated = true;\r\n\r\n\t\t\t\t} else {\r\n\t\t\t\t\t_overlayUIUpdated = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!_shareModalHidden) {\r\n\t\t\t\t\t_toggleShareModal();\r\n\t\t\t\t}\r\n\r\n\t\t\t\t_countNumItems();\r\n\t\t\t};\r\n\r\n\t\t\tui.updateFullscreen = function (e) {\r\n\r\n\t\t\t\tif (e) {\r\n\t\t\t\t\t// some browsers change window scroll position during the fullscreen\r\n\t\t\t\t\t// so PhotoSwipe updates it just in case\r\n\t\t\t\t\tsetTimeout(function () {\r\n\t\t\t\t\t\tpswp.setScrollOffset(0, framework.getScrollY());\r\n\t\t\t\t\t}, 50);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// toogle pswp--fs class on root element\r\n\t\t\t\tframework[(_fullscrenAPI.isFullscreen() ? 'add' : 'remove') + 'Class'](pswp.template, 'pswp--fs');\r\n\t\t\t};\r\n\r\n\t\t\tui.updateIndexIndicator = function () {\r\n\t\t\t\tif (_options.counterEl) {\r\n\t\t\t\t\t_indexIndicator.innerHTML = (pswp.getCurrentIndex() + 1) +\r\n\t\t\t\t\t\t_options.indexIndicatorSep +\r\n\t\t\t\t\t\t_options.getNumItemsFn();\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tui.onGlobalTap = function (e) {\r\n\t\t\t\te = e || window.event;\r\n\t\t\t\tvar target = e.target || e.srcElement;\r\n\r\n\t\t\t\tif (_blockControlsTap) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (e.detail && e.detail.pointerType === 'mouse') {\r\n\r\n\t\t\t\t\t// close gallery if clicked outside of the image\r\n\t\t\t\t\tif (_hasCloseClass(target)) {\r\n\t\t\t\t\t\tpswp.close();\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (framework.hasClass(target, 'pswp__img')) {\r\n\t\t\t\t\t\tif (pswp.getZoomLevel() === 1 && pswp.getZoomLevel() <= pswp.currItem.fitRatio) {\r\n\t\t\t\t\t\t\tif (_options.clickToCloseNonZoomable) {\r\n\t\t\t\t\t\t\t\tpswp.close();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tpswp.toggleDesktopZoom(e.detail.releasePoint);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\t// tap anywhere (except buttons) to toggle visibility of controls\r\n\t\t\t\t\tif (_options.tapToToggleControls) {\r\n\t\t\t\t\t\tif (_controlsVisible) {\r\n\t\t\t\t\t\t\tui.hideControls();\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tui.showControls();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// tap to close gallery\r\n\t\t\t\t\tif (_options.tapToClose && (framework.hasClass(target, 'pswp__img') || _hasCloseClass(target))) {\r\n\t\t\t\t\t\tpswp.close();\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t\tui.onMouseOver = function (e) {\r\n\t\t\t\te = e || window.event;\r\n\t\t\t\tvar target = e.target || e.srcElement;\r\n\r\n\t\t\t\t// add class when mouse is over an element that should close the gallery\r\n\t\t\t\t_togglePswpClass(_controls, 'ui--over-close', _hasCloseClass(target));\r\n\t\t\t};\r\n\r\n\t\t\tui.hideControls = function () {\r\n\t\t\t\tframework.addClass(_controls, 'pswp__ui--hidden');\r\n\t\t\t\t_controlsVisible = false;\r\n\t\t\t};\r\n\r\n\t\t\tui.showControls = function () {\r\n\t\t\t\t_controlsVisible = true;\r\n\t\t\t\tif (!_overlayUIUpdated) {\r\n\t\t\t\t\tui.update();\r\n\t\t\t\t}\r\n\t\t\t\tframework.removeClass(_controls, 'pswp__ui--hidden');\r\n\t\t\t};\r\n\r\n\t\t\tui.supportsFullscreen = function () {\r\n\t\t\t\tvar d = document;\r\n\t\t\t\treturn !!(d.exitFullscreen || d.mozCancelFullScreen || d.webkitExitFullscreen || d.msExitFullscreen);\r\n\t\t\t};\r\n\r\n\t\t\tui.getFullscreenAPI = function () {\r\n\t\t\t\tvar dE = document.documentElement,\r\n\t\t\t\t\tapi,\r\n\t\t\t\t\ttF = 'fullscreenchange';\r\n\r\n\t\t\t\tif (dE.requestFullscreen) {\r\n\t\t\t\t\tapi = {\r\n\t\t\t\t\t\tenterK: 'requestFullscreen',\r\n\t\t\t\t\t\texitK: 'exitFullscreen',\r\n\t\t\t\t\t\telementK: 'fullscreenElement',\r\n\t\t\t\t\t\teventK: tF\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t} else if (dE.mozRequestFullScreen) {\r\n\t\t\t\t\tapi = {\r\n\t\t\t\t\t\tenterK: 'mozRequestFullScreen',\r\n\t\t\t\t\t\texitK: 'mozCancelFullScreen',\r\n\t\t\t\t\t\telementK: 'mozFullScreenElement',\r\n\t\t\t\t\t\teventK: 'moz' + tF\r\n\t\t\t\t\t};\r\n\r\n\r\n\r\n\t\t\t\t} else if (dE.webkitRequestFullscreen) {\r\n\t\t\t\t\tapi = {\r\n\t\t\t\t\t\tenterK: 'webkitRequestFullscreen',\r\n\t\t\t\t\t\texitK: 'webkitExitFullscreen',\r\n\t\t\t\t\t\telementK: 'webkitFullscreenElement',\r\n\t\t\t\t\t\teventK: 'webkit' + tF\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t} else if (dE.msRequestFullscreen) {\r\n\t\t\t\t\tapi = {\r\n\t\t\t\t\t\tenterK: 'msRequestFullscreen',\r\n\t\t\t\t\t\texitK: 'msExitFullscreen',\r\n\t\t\t\t\t\telementK: 'msFullscreenElement',\r\n\t\t\t\t\t\teventK: 'MSFullscreenChange'\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (api) {\r\n\t\t\t\t\tapi.enter = function () {\r\n\t\t\t\t\t\t// disable close-on-scroll in fullscreen\r\n\t\t\t\t\t\t_initalCloseOnScrollValue = _options.closeOnScroll;\r\n\t\t\t\t\t\t_options.closeOnScroll = false;\r\n\r\n\t\t\t\t\t\tif (this.enterK === 'webkitRequestFullscreen') {\r\n\t\t\t\t\t\t\tpswp.template[this.enterK](Element.ALLOW_KEYBOARD_INPUT);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\treturn pswp.template[this.enterK]();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t};\r\n\t\t\t\t\tapi.exit = function () {\r\n\t\t\t\t\t\t_options.closeOnScroll = _initalCloseOnScrollValue;\r\n\r\n\t\t\t\t\t\treturn document[this.exitK]();\r\n\r\n\t\t\t\t\t};\r\n\t\t\t\t\tapi.isFullscreen = function () { return document[this.elementK]; };\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn api;\r\n\t\t\t};\r\n\r\n\r\n\r\n\t\t};\r\n\treturn PhotoSwipeUI_Default;\r\n\r\n\r\n});\r\n\r\n\r\n\r\nvar Gallery = (function () {\n\r\n function Gallery() {\n\r\n this.galleryElements = document.querySelectorAll('[data-gallery]');\n\r\n this.galleryInstances = {};\n\r\n this.pswpElement = null;\n\r\n this.namePrefix = 'gallery_';\n\r\n if (!this.galleryElements.length)\n\r\n return;\n\r\n this.injectPhotoswipeMarkup();\n\r\n Helpers.scopedLoop(this.galleryElements, function (galleryElement, i, context) {\n\r\n var galleryId = i + 1;\n\r\n context.setup(galleryElement, galleryId);\n\r\n }, this);\n\r\n this.maybeOpenGallery();\n\r\n }\n\r\n Gallery.prototype.injectPhotoswipeMarkup = function () {\n\r\n var photoswipeMarkup = \"\\n\\t\\t\\t
\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t
\\n\\t\\t\\t
\\n\\t\\t\";\n\r\n document.body.insertAdjacentHTML('beforeend', photoswipeMarkup);\n\r\n this.pswpElement = document.querySelector('.pswp');\n\r\n };\n\r\n Gallery.prototype.setup = function (galleryElement, galleryId) {\n\r\n var galleryItems = galleryElement.querySelectorAll('[data-gallery-item]');\n\r\n if (!galleryItems.length)\n\r\n return;\n\r\n galleryElement.setAttribute('data-gallery', galleryId.toString());\n\r\n Helpers.scopedLoop(galleryItems, function (galleryItem, i, context) {\n\r\n galleryItem.addEventListener('click', function (e) {\n\r\n context.openGallery(galleryId, i);\n\r\n e.preventDefault();\n\r\n });\n\r\n }, this);\n\r\n };\n\r\n Gallery.prototype.openGallery = function (galleryId, slideIndex) {\n\r\n var slides = this.getSlides(galleryId);\n\r\n if (!slides.length)\n\r\n return;\n\r\n var name = this.namePrefix + galleryId;\n\r\n var options = {\n\r\n getThumbBoundsFn: function (slideIndex) {\n\r\n var pageYScroll = window.pageYOffset || document.documentElement.scrollTop;\n\r\n var rect = slides[slideIndex].thumbnailElement.getBoundingClientRect();\n\r\n return { x: rect.left, y: rect.top + pageYScroll, w: rect.width };\n\r\n },\n\r\n index: slideIndex,\n\r\n galleryUID: galleryId,\n\r\n bgOpacity: 0.7\n\r\n };\n\r\n this.galleryInstances[name] = new PhotoSwipe(this.pswpElement, PhotoSwipeUI_Default, slides, options);\n\r\n this.galleryInstances[name].init();\n\r\n };\n\r\n Gallery.prototype.getSlides = function (galleryId) {\n\r\n var galleryItems = document.querySelectorAll('[data-gallery=\"' + galleryId + '\"] [data-gallery-item]');\n\r\n if (!galleryItems.length)\n\r\n return;\n\r\n var slides = [];\n\r\n Helpers.scopedLoop(galleryItems, function (galleryItem, i, context) {\n\r\n var size = galleryItem.getAttribute('data-gallery-item');\n\r\n var source = galleryItem.getAttribute('href');\n\r\n var thumbnailElement = galleryItem.querySelector('[data-gallery-item-thumbnail]');\n\r\n var thumbnailSource = thumbnailElement.getAttribute('src');\n\r\n var slide = {\n\r\n src: source,\n\r\n msrc: thumbnailSource,\n\r\n w: parseInt(size.split('x')[0]),\n\r\n h: parseInt(size.split('x')[1]),\n\r\n thumbnailElement: thumbnailElement\n\r\n };\n\r\n slides.push(slide);\n\r\n }, this);\n\r\n return slides;\n\r\n };\n\r\n Gallery.prototype.getHash = function () {\n\r\n var hash = window.location.hash.substring(1);\n\r\n var params = {};\n\r\n if (hash.length < 5)\n\r\n return params;\n\r\n var vars = hash.split('&');\n\r\n for (var i = 0; i < vars.length; i++) {\n\r\n if (!vars[i])\n\r\n continue;\n\r\n var pair = vars[i].split('=');\n\r\n if (pair.length < 2)\n\r\n continue;\n\r\n params[pair[0]] = pair[1];\n\r\n }\n\r\n if (params.gid) {\n\r\n params.gid = parseInt(params.gid, 10);\n\r\n }\n\r\n return params;\n\r\n };\n\r\n Gallery.prototype.maybeOpenGallery = function () {\n\r\n var hashData = this.getHash();\n\r\n if (hashData.pid && hashData.gid) {\n\r\n this.openGallery(hashData.gid, hashData.pid);\n\r\n }\n\r\n };\n\r\n return Gallery;\n\r\n}());\n\r\nnew Gallery();\n\r\n"]}