ru-se.com

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

companion.bundle.min.js.map (122816B)


      1 {"version":3,"sources":["HoverFX.js","countup.js","progressbar.js","video-bg.js","libs/jquery.backstretch.js","scripts.js"],"names":["$","window","initHoverFX","options","isUI","resizeEvent","defaults","item","opts","instanceName","className","classElements","supportRGBA","getDimms","elem","width","height","Math","abs","parseFloat","outerHeight","genRGBA","hex","alpha","indexOf","rgba","opacity","toFixed","rgb","values","exec","length","r","round","g","b","toString","substring","toUpperCase","convertRGBDecimalToHex","replace","m","result","alhpaToHex","val","floor","css","parseInt","join","background","filter","zoom","fallback","each","self","params","inner","overlay","initial","type","transitionProp","easeType","source","target","ml","mr","mt","floatVal","applyTransition","prop","easeCSS","duration","includeTiming","transitionValue","effectDelay","-webkit-transition","-moz-transition","-o-transition","transition","attr","this","unbind","split","i","setParams","find","getInner","contentType","overlayColor","innerColor","removeAttr","mb","float","margin-left","margin-right","margin-top","margin-bottom","ease","oldWebkit","toLowerCase","prefixes","getEaseType","effectEasing","icon","parent","captionWrap","addClass","wrap","add","effectType","loaded","initialDims","on","imageDims","outerWidth","background-color","overlayAlpha","showCaption","hideCaption","isMobile","Android","navigator","userAgent","match","BlackBerry","iOS","Opera","Windows","any","document","_isMobile","link","bind","openPage","location","assign","open","direction","setTimeout","insertBefore","captionType","position","z-index","captionHeight","start","jQuery","root","factory","define","amd","exports","module","require","CountUp","startVal","endVal","decimals","version","useEasing","useGrouping","separator","decimal","easingFn","t","c","d","pow","formattingFn","num","x1","rgx","x","x2","test","numerals","w","prefix","suffix","onUpdate","key","hasOwnProperty","lastTime","vendors","requestAnimationFrame","cancelAnimationFrame","ensureNumber","n","isNaN","callback","element","currTime","Date","getTime","timeToCall","max","id","clearTimeout","initialize","initialized","error","getElementById","Number","dec","countDown","frameVal","printValue","value","tagName","textContent","innerHTML","count","timestamp","startTime","progress","remaining","rAF","pauseResume","paused","reset","update","newEndVal","fn","LineProgressbar","extend","min","stop","ShowProgressCount","color","backgroundColor","text","radius","index","el","html","progressFill","progressBar","progressText","borderRadius","animate","step","progressTo","next","videoSize","videoElement","$videoElement","$header","videoWidth","videoHeight","marginLeft","left","addEventListener","querySelector","__cpVideoElementFirstPlayed","iframeVideo","undefined","YOUTUBE_REGEXP","backstretch","images","returnValues","args","arguments","scrollTop","scrollTo","eachIndex","$this","obj","data","returnValue","apply","Array","prototype","slice","call","destroy","cssBackgroundImage","url","Backstretch","expr","transitionDuration","animateFirst","alignX","alignY","preload","preloadSize","resolutionRefreshRate","resolutionChangeRatioThreshold","isVideoSource","isVideo","replaceTagsInUrl","cache","styles","top","overflow","margin","padding","zIndex","itemWrapper","display","border","maxWidth","optimalSizeImages","templateReplacer","src","$container","containerWidth","containerHeight","chosenImages","isArray","arr","tmp","j","widthInsertSort","chosen","imageSizes","testWidth","image","devicePixelRatio","deviceOrientation","getDeviceOrientation","wrapperOrientation","getWindowOrientation","lastAllowedImage","pixelRatio","windowOrientation","orientation","selectBest","push","sources","startAt","batchSize","countLoaded","Image","caching","complete","last","processImagesArray","processed","processOptions","required","centeredX","centeredY","console","log","speed","resolutionChangeRatioTreshold","fadeFirst","fade","processAlignOptions","container","firstShow","isBody","body","$window","$root","supportsFixedPosition","originalImages","alwaysTestWindowResolution","$existing","children","first","$wrap","bypassCss","appendTo","show","proxy","resize","pageYOffset","that","$resTest","newContainerWidth","newContainerHeight","changeRatioW","_lastResizeContainerWidth","changeRatioH","_lastResizeContainerHeight","_currentImage","_selectAnotherResolutionTimeout","bgCSS","right","bottom","rootWidth","innerWidth","rootHeight","innerHeight","bgWidth","bgHeight","$itemWrapper","evt","Event","relatedTarget","not","trigger","err","newIndex","overrideOptions","$oldItemWrapper","oldVideoWrapper","videoWrapper","evtOptions","selectedImage","_cycleTimeout","VideoWrapper","$item","$video","append","e","$wrapper","imgWidth","naturalWidth","imgHeight","naturalHeight","getOption","opt","transitionEasing","bringInNextImage","remove","cycle","play","random","$new","$old","fadeIn","easing","fadeInNew","fadeOut","transitionParts","animProp","newCssStart","newCssAnim","oldCssAnim","performTransition","new","old","alt","current","unshift","prev","pause","resume","callNext","lastFrameTimeout","off","loop","player","getDuration","getCurrentTime","preserveBackground","removeData","init","setVideoElement","video","videoType","loadYoutubeAPI","ytId","encodeURIComponent","origin","__ytStartMuted","mute","src_to_load","__manuallyStopped","ytReady","_initYoutube","one","poster","sourceItem","canPlayType","YT","$tmpParent","hasParent","parentNode","Player","events","onReady","detach","_updateYoutubeSize","onStateChange","event","PlayerState","PLAYING","ENDED","PAUSED","BUFFERING","CUED","onPlaybackQualityChange","onError","hasError","ytPlayer","getPlaybackQuality","playVideo","pauseVideo","seekTo","currentTime","seconds","setCurrentTime","ytAPILoadInt","setInterval","ua","platform","wkmatch","wkversion","ffmatch","ffversion","operammobilematch","matchMedia","matches","screen","omversion","ieversion","iematch","operamini","contentSwap","contentswap-effect","overflowEnabled","name","operationType","hasls","additionalWrapperClasses","useSameTemplate","ready","contentSwapTimeout"],"mappings":"CAAA,SAAAA,GAEAC,OAAAC,YAAA,SAAAC,EAAAC,EAAAC,GACA,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAuCA,SAAAC,EAAAC,GAKA,MAJA,CACAC,MAAA,OACAC,OAAAC,KAAAC,IAAAC,WAAAnB,EAAAc,GAAAM,aAAA,MAgCA,SAAAC,EAAAC,EAAAC,EAAAT,GAEA,IAAA,GAAAQ,EAAAE,QAAA,OAAA,EAAAF,EAAAE,QAAA,UAAA,EAAAF,EAAAE,QAAA,QACA,MAAA,CACAC,KAAAH,GAiCA,IA7BAI,EAAAH,GAAAA,EAAA,KAAAI,QAAA,GAAA,EA8BAL,GAHAA,EAzBA,SAAAM,GAGA,IACAC,EADA,8DACAC,KAAAF,GAQA,KAHAC,GAFAA,EACA,8EACAC,KAAAF,GAGAC,GAAA,OAAAD,EACA,GAAA,GAAAC,EAAAE,OACA,OAAAH,EAEA,IAAAI,EAAAf,KAAAgB,MAAAd,WAAAU,EAAA,KACAK,EAAAjB,KAAAgB,MAAAd,WAAAU,EAAA,KACAM,EAAAlB,KAAAgB,MAAAd,WAAAU,EAAA,KAIA,OAHAA,EAAA,KACAH,EAAAG,EAAA,IAEA,KAAAG,EAAA,OAAAI,SAAA,IAAAC,UAAA,GAAAC,eAAAJ,EAAA,OAAAE,SAAA,IAAAC,UAAA,GAAAC,eAAAH,EAAA,OAAAC,SAAA,IAAAC,UAAA,GAAAC,cAGAC,CAAAjB,IAGAkB,QADA,mCACA,SAAAC,EAAAT,EAAAE,EAAAC,GACA,OAAAH,EAAAA,EAAAE,EAAAA,EAAAC,EAAAA,IAGA,IAAAO,EAAA,4CAAAZ,KAAAR,GAEA,SAAAqB,EAAAC,GAEA,OAAA3B,KAAA4B,MADA,IAAAD,GACAR,SAAA,IAGA,QAAA,IAAA,GAAAM,EACA,OAAA9B,GACA,KAAA,EACAE,EAAAgC,IAAA,mBAAA,QAAA,CAAAC,SAAAL,EAAA,GAAA,IAAAK,SAAAL,EAAA,GAAA,IAAAK,SAAAL,EAAA,GAAA,KAAAM,KAAA,KAAA,IAAAtB,EAAA,KACA,MACA,KAAA,EACAZ,EAAAgC,IAAA,CACAG,WAAA,cACAC,OAAA,6DAAAP,EAAAjB,GAAAgB,EAAA,GAAAF,QAAA,IAAA,IAAA,iBAAAG,EAAAjB,GAAAgB,EAAA,GAAAF,QAAA,IAAA,IAAA,KACAW,KAAA,IAMA,OAAAT,EAAA,CACAjB,KAAA,QAAA,CAAAsB,SAAAL,EAAA,GAAA,IAAAK,SAAAL,EAAA,GAAA,IAAAK,SAAAL,EAAA,GAAA,KAAAM,KAAA,KAAA,IAAAtB,EAAA,IACA0B,SAAAT,EAAAjB,GAAAgB,EAAA,GAAAF,QAAA,IAAA,KACA,KA5IAjC,EAAAP,EAAA,uBACAY,GAAA,GAGAJ,EAAAL,GA6NAE,cAAAA,EAKA,WACAL,IAEAO,EAAA8C,KAAA,WAEA,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EA7LAC,EAAAC,EACAC,EACAC,EACAC,EAEAC,EAwOA,SAAAC,EAAAtD,EAAAuD,EAAAC,EAAAC,EAAAC,GAQAC,GAPAJ,GAAA,OAOA,KALAd,EAAAmB,YAAA,MAMA5D,EAAAgC,IAAA,CACA6B,qBAAAF,EACAG,kBAAAH,EACAI,gBAAAJ,EACAK,WAAAL,IAEAD,IAKAF,EAJAA,EAAAxD,EAKAiE,KAAA,QALAjE,EAKAiE,KAAA,SAAAT,KApEAhB,EAAAtD,EAAAgF,OACAC,OAAA,YACA3B,EAAAR,IAAA,CACA/B,MAAA,GACAC,OAAA,KAIAuC,EA9OA,SAAAzC,GAEAJ,EAAAV,EAAAc,GAAAiE,KAAA,SACApE,EAAAD,EAAAwE,MAAA,KACA,IAAA,IAAAC,EAAA,EAAAA,GAAA5E,EAAAwB,OAAAoD,IACA,IAAA,IAAAd,KAAA7D,EACAG,EAAAwE,KAAAd,IACA5D,EAAA4D,GAKA,OAAA7D,GAAAF,GAAAG,GAkOA2E,CAAA9B,GACAE,EAhOA,SAAA1C,EAAA6C,GAEA,IAAAH,EACA,OAAAG,GACA,IAAA,UACAH,EAAAxD,EAAAc,GAAAuE,KAAA,eACA,MACA,IAAA,YACA7B,EAAAxD,EAAAc,GAAAuE,KAAA,iBACA,MACA,IAAA,UACA7B,EAAAxD,EAAAc,GAAAuE,KAAA,eAGA,OAAA7B,EAkNA8B,CAAAhC,EAAAC,EAAAgC,aACA7B,EAAAJ,EAAA+B,KAAA,kBACA5B,EAAAH,EAAA+B,KAAA,YACA9B,EAAAiC,aAAAhC,EAAAV,IAAA,oBACAS,EAAAkC,WAAAjC,EAAAV,IAAA,oBACAU,EAAAkC,WAAA,SACAjC,EAAAiC,WAAA,SACAhC,EAAAgC,WAAA,SA9MA3B,EAgNAT,EA/MAU,GADAF,EAgNAJ,GA/MAZ,IAAA,eACAmB,EAAAH,EAAAhB,IAAA,gBACAoB,EAAAJ,EAAAhB,IAAA,cACA6C,EAAA7B,EAAAhB,IAAA,iBACAqB,EAAAL,EAAAhB,IAAA,SACAgB,EAAAhB,IAAA,CACA8C,MAAA,OACAC,cAAA,MACAC,eAAA,MACAC,aAAA,MACAC,gBAAA,QAEAjC,EAAAjB,IAAA,CACA8C,MAAAzB,EACA0B,cAAA7B,EACA8B,eAAA7B,EACA8B,aAAA7B,EACA8B,gBAAAL,IAgMA9E,EAAAyC,GAEAO,EAnHA,SAAAoC,GAEA,IACApC,EADAS,EAAA,GAEA4B,GAAA,EAEA,OAAAD,EAAAE,eACA,IAAA,gBACAtC,EAAA,4CACAqC,EAAA,mCACA,MACA,IAAA,WACArC,EAAA,4CACAqC,EAAA,mCACA,MACA,IAAA,aACArC,EAAA,2CACAqC,EAAA,uCACA,MACA,IAAA,aACArC,EAAA,2CACA,MACA,IAAA,mBACAA,EAAA,4CACAqC,EAAA,mCACA,MACA,IAAA,mBACArC,EAAA,2CACA,MACA,IAAA,gBACAA,EAAA,2CACAqC,EAAA,uCACA,MACA,IAAA,gBACArC,EAAA,2CACA,MACA,IAAA,eACAA,EAAA,4CACAqC,EAAA,uCACA,MACA,IAAA,eAEAA,EADArC,EAAA,2CAEA,MACA,IAAA,OACAA,EAAA,OACA,MACA,IAAA,UACAA,EAAA,UACA,MACA,IAAA,cACAA,EAAA,cACA,MACA,IAAA,WACAA,EAAA,WAIAqC,IACArC,EAAAqC,GAIA,IADA,IAAAE,EAAA,CAAA,WAAA,QAAA,MAAA,IACAjB,EAAA,EAAAA,EAAAiB,EAAArE,OAAAoD,IACAb,GAAA8B,EAAAjB,GAAA,8BAAAtB,EAAA,IAGA,OAAAS,EAgDA+B,CAAA9C,EAAA+C,cACA3C,EAAAJ,EAAAgC,YAEAgB,EAAA/C,EAAA6B,KAAA,oBA5CAvE,EAAAd,EADAuG,EA8CAA,IA3CAC,SACA1D,IAAA,CACA/B,MAAAD,EAAAC,QACAC,OAAAF,EAAAE,WA0CA4C,EADA,WAAAD,EACA,MAEA,SAEAD,EAAAZ,IAAA,QAAA,SAOAW,EALA,WAAAE,GACA,GAAAL,EAAA+B,KAAA,iBAAAtD,SACA0E,EAAAzG,EAAA,WAAA0G,SAAA,wBACAlD,EAAAmD,KAAAF,IAEAnD,EAAA+B,KAAA,kBAEA/B,EAAA+B,KAAA,aAEAuB,IAAApD,GAAAV,IAAA,UAAA,SA4BAQ,EAAAoD,SAAAnD,EAAAsD,YAEA,IAAAC,GAAA,EAEA,EAAApD,EAAA1C,WAEA8F,GAAA,EACAC,EAAAlG,EAAA6C,GACAJ,EAAAR,IAAA,CACA/B,MAAAgG,EAAAhG,QAIA,WAAA4C,GACAS,EAAAZ,EAAAI,EAAAC,EAAAN,EAAAmB,aAAA,IAIAhB,EAAAsD,GAAA,OAAA,WACA,IAAAC,EAAApG,EAAAb,EAAAgF,OAEA1B,EAAAR,IAAA,CACA/B,MAAAkG,EAAAlG,QAGA,WAAA4C,GACAH,EAAAV,IAAA,CACAiD,aAAA,EACAF,cAAA5E,KAAAC,IAAA+F,EAAAlG,MAAAyC,EAAA0D,cAAA,IAGA,WAAAvD,GACAS,EAAAZ,EAAAI,EAAAC,EAAAN,EAAAmB,eAKAlB,EAAAV,IAAA,CACAqE,mBAAA9F,EAAAkC,EAAAiC,aAAAjC,EAAA6D,cAAA3F,OAGA,WAAAkC,GACAS,EAAAX,EAAA,UAAAI,EAAAN,EAAAmB,aAAA,GAOA,IA0CAqC,EA4CAM,EAAAC,EAtFAC,EAAA,CACAC,QAAA,WACA,OAAAC,UAAAC,UAAAC,MAAA,aAEAC,WAAA,WACA,OAAAH,UAAAC,UAAAC,MAAA,gBAEAE,IAAA,WACA,OAAAJ,UAAAC,UAAAC,MAAA,sBAEAG,MAAA,WACA,OAAAL,UAAAC,UAAAC,MAAA,gBAEAI,QAAA,WACA,OAAAN,UAAAC,UAAAC,MAAA,cAEAK,IAAA,WACA,SAAAT,EAAAC,WAAAD,EAAAK,cAAAL,EAAAM,OAAAN,EAAAO,SAAAP,EAAAQ,WAAA,iBAAAE,YAIAC,EAAAX,EAAAS,MAGAzE,EAAA4E,OACA,GAAAD,GAGA5E,EAAA8E,KAAA,gBAAA,WACA,SAAA7E,EAAA8E,SACApI,OAAAqI,SAAAC,OAAAhF,EAAA,MAEAtD,OAAAuI,KAAAjF,EAAA,KAAA,aAOA,WAAAI,IACAL,EAAA2B,OAAA,YACA3B,EAAAoD,SAAA,uBACAK,EAAAlG,EAAA6C,GAEA,EAAAA,EAAA1C,UACAwC,EAAAV,IAAA,CAEAiD,aAAA,EACAF,cAAA5E,KAAAC,IAAA6F,EAAAhG,MAAAyC,EAAA0D,cAAA,KAMA,WAAAvD,IACAL,EAAAoD,SAAA,WAEA,OAAAnD,EAAAkF,WACA3B,EASArD,EAAAX,IAAA,CACAiD,cAAAvC,EAAApC,cAAA,EAAA,KACAM,QAAA,IAVAgH,WAAA,WACAjF,EAAAX,IAAA,CACAiD,cAAAvC,EAAApC,cAAA,EAAA,KACAM,QAAA,KAEA,IASAgH,WAAA,WACAjF,EAAAkF,aAAAjF,IAEA,KAGAgF,WAAA,WACAjF,EAAAX,IAAA,CACApB,QAAA,KAEA,IA6BA4F,EAtBA,QAAA/D,EAAAqF,aAEA,OAAArF,EAAAkF,UACAhF,EAAAX,IAAA,CACA+F,SAAA,WACAC,UAAA,OAIArF,EAAAX,IAAA,CACAiD,aAAA,QAGA3B,EAAAX,EAAA,SAAAI,EAAAN,EAAAmB,aAAA,GAEA2C,EAAA,WAEA5D,EAAAX,IAAA,CACAiD,cAAAvC,EAAApC,cAAA,OAEA,OAAAmC,EAAAkF,WAAAhF,EAAAX,IAAA,aAAA,IAEA,WACAW,EAAAX,IAAA,CACAiD,aAAA,QAEA,OAAAxC,EAAAkF,WAAAhF,EAAAX,IAAA,cAAAU,EAAApC,cAAA,SAGAgD,EAAAX,EAAA,SAAAI,EAAAN,EAAAmB,aAAA,GACAN,EAAAV,EAAA,SAAAG,EAAAN,EAAAmB,aAAA,GAGA2C,EAAA,WA1ZA,IAAArG,EAAAF,EA4ZAyC,EAAAwF,eAAAvF,EAAApC,gBA5ZAJ,EA6ZAuC,EAAAwF,cA7ZAjI,EA6ZA0C,EA5ZA,QAAAxC,GAAA,aAAAA,GAAAF,EAAAgC,IAAA,SAAAC,SAAA/B,GAAA,OA+ZA,OAAAuC,EAAAkF,WAAA,QAAAlF,EAAAqF,YAEAnF,EAAAX,IAAA,CACAiD,aAAA,SAGAtC,EAAAX,IAAA,CACAiD,cAAAvC,EAAApC,gBAEAsC,EAAAZ,IAAA,CACAiD,cAAAvC,EAAApC,cACA4E,gBAAAxC,EAAApC,kBAMA,WACA,OAAAmC,EAAAkF,UACAhF,EAAAX,IAAA,CACAiD,cAAAvC,EAAApC,cAAA,EAAA,QAGAqC,EAAAX,IAAA,CACAiD,aAAA,QAEArC,EAAAZ,IAAA,CACAiD,aAAA,MACAC,gBAAA,YASA,GAAAkC,GACA5E,EAAAoD,SAAA,SACA,WAAA/C,GACA0D,KAMA,WAAA1D,GACAL,EAAA8E,KAAA,qBAAAf,GACAe,KAAA,qBAAAd,KAjTA0B,IAxOA,CAqiBAC,QCriBA,SAAAC,EAAAC,GACA,mBAAAC,QAAAA,OAAAC,IACAD,OAAAD,GACA,iBAAAG,QACAC,OAAAD,QAAAH,EAAAK,QAAAF,EAAAC,QAEAL,EAAAO,QAAAN,IANA,CAQAnE,KAAA,SAAAwE,EAAAF,EAAAC,GAkQA,OAlPA,SAAAxF,EAAA2F,EAAAC,EAAAC,EAAArF,EAAApE,GAEA,IAAAmD,EAAA0B,KAoBA,GAnBA1B,EAAAuG,QAAA,WACA,MAAA,SAIAvG,EAAAnD,QAAA,CACA2J,WAAA,EACAC,aAAA,EACAC,UAAA,IACAC,QAAA,IACAC,SAyEA,SAAAC,EAAAhI,EAAAiI,EAAAC,GACA,OAAAD,GAAA,EAAAnJ,KAAAqJ,IAAA,GAAA,GAAAH,EAAAE,IAAA,KAAA,KAAAlI,GAzEAoI,aA8CA,SAAAC,GAGA,IAAAC,EAAAC,EAKA,GAPAF,EAAAA,EAAA7I,QAAA2B,EAAAsG,UAGAe,GAFAH,GAAA,IAEAtF,MAAA,KACAuF,EAAAE,EAAA,GACAC,EAAA,EAAAD,EAAA5I,OAAAuB,EAAAnD,QAAA8J,QAAAU,EAAA,GAAA,GACAD,EAAA,eACApH,EAAAnD,QAAA4J,YACA,KAAAW,EAAAG,KAAAJ,IACAA,EAAAA,EAAAjI,QAAAkI,EAAA,KAAApH,EAAAnD,QAAA6J,UAAA,MAIA1G,EAAAnD,QAAA2K,SAAA/I,SACA0I,EAAAA,EAAAjI,QAAA,SAAA,SAAAuI,GACA,OAAAzH,EAAAnD,QAAA2K,UAAAC,KAEAH,EAAAA,EAAApI,QAAA,SAAA,SAAAuI,GACA,OAAAzH,EAAAnD,QAAA2K,UAAAC,MAGA,OAAAzH,EAAAnD,QAAA6K,OAAAP,EAAAG,EAAAtH,EAAAnD,QAAA8K,QAnEAD,OAAA,GACAC,OAAA,GACAH,SAAA,GACAI,UAAA,GAIA/K,GAAA,iBAAAA,EACA,IAAA,IAAAgL,KAAA7H,EAAAnD,QACAA,EAAAiL,eAAAD,IAAA,OAAAhL,EAAAgL,KACA7H,EAAAnD,QAAAgL,GAAAhL,EAAAgL,IAKA,KAAA7H,EAAAnD,QAAA6J,YAAA1G,EAAAnD,QAAA4J,aAAA,GAOA,IAFA,IAAAsB,EAAA,EACAC,EAAA,CAAA,SAAA,MAAA,KAAA,KACAX,EAAA,EAAAA,EAAAW,EAAAvJ,SAAA9B,OAAAsL,wBAAAZ,EACA1K,OAAAsL,sBAAAtL,OAAAqL,EAAAX,GAAA,yBACA1K,OAAAuL,qBACAvL,OAAAqL,EAAAX,GAAA,yBAAA1K,OAAAqL,EAAAX,GAAA,+BAkDA,SAAAc,EAAAC,GACA,MAAA,iBAAAA,IAAAC,MAAAD,GAjDAzL,OAAAsL,wBACAtL,OAAAsL,sBAAA,SAAAK,EAAAC,GACA,IAAAC,GAAA,IAAAC,MAAAC,UACAC,EAAAhL,KAAAiL,IAAA,EAAA,IAAAJ,EAAAT,IACAc,EAAAlM,OAAAyI,WAAA,WACAkD,EAAAE,EAAAG,IAEAA,GAEA,OADAZ,EAAAS,EAAAG,EACAE,IAGAlM,OAAAuL,uBACAvL,OAAAuL,qBAAA,SAAAW,GACAC,aAAAD,KAsCA7I,EAAA+I,WAAA,WACA,QAAA/I,EAAAgJ,cAEAhJ,EAAAiJ,MAAA,GACAjJ,EAAA+G,EAAA,iBAAAtG,EAAAkE,SAAAuE,eAAAzI,GAAAA,EACAT,EAAA+G,GAIA/G,EAAAoG,SAAA+C,OAAA/C,GACApG,EAAAqG,OAAA8C,OAAA9C,GAEA8B,EAAAnI,EAAAoG,WAAA+B,EAAAnI,EAAAqG,SACArG,EAAAsG,SAAA3I,KAAAiL,IAAA,EAAAtC,GAAA,GACAtG,EAAAoJ,IAAAzL,KAAAqJ,IAAA,GAAAhH,EAAAsG,UACAtG,EAAAiB,SAAA,IAAAkI,OAAAlI,IAAA,IACAjB,EAAAqJ,UAAArJ,EAAAoG,SAAApG,EAAAqG,OACArG,EAAAsJ,SAAAtJ,EAAAoG,SACApG,EAAAgJ,aAAA,IAIAhJ,EAAAiJ,MAAA,uBAAA7C,EAAA,gBAAAC,EAAA,qBACA,MAjBArG,EAAAiJ,MAAA,2CAsBAjJ,EAAAuJ,WAAA,SAAAC,GACApK,EAAAY,EAAAnD,QAAAoK,aAAAuC,GAOA,UAAAxJ,EAAA+G,EAAA0C,QACA/H,KAAAqF,EAAAyC,MAAApK,EAEA,SAAAY,EAAA+G,EAAA0C,SAAA,UAAAzJ,EAAA+G,EAAA0C,QACA/H,KAAAqF,EAAA2C,YAAAtK,EAGAsC,KAAAqF,EAAA4C,UAAAvK,GAIAY,EAAA4J,MAAA,SAAAC,GAEA7J,EAAA8J,YACA9J,EAAA8J,UAAAD,GAIAE,GADA/J,EAAA6J,UAAAA,GACA7J,EAAA8J,UACA9J,EAAAgK,UAAAhK,EAAAiB,SAAA8I,EAGA/J,EAAAnD,QAAA2J,UACAxG,EAAAqJ,UACArJ,EAAAsJ,SAAAtJ,EAAAoG,SAAApG,EAAAnD,QAAA+J,SAAAmD,EAAA,EAAA/J,EAAAoG,SAAApG,EAAAqG,OAAArG,EAAAiB,UAEAjB,EAAAsJ,SAAAtJ,EAAAnD,QAAA+J,SAAAmD,EAAA/J,EAAAoG,SAAApG,EAAAqG,OAAArG,EAAAoG,SAAApG,EAAAiB,UAGAjB,EAAAqJ,UACArJ,EAAAsJ,SAAAtJ,EAAAoG,UAAApG,EAAAoG,SAAApG,EAAAqG,SAAA0D,EAAA/J,EAAAiB,UAEAjB,EAAAsJ,SAAAtJ,EAAAoG,UAAApG,EAAAqG,OAAArG,EAAAoG,WAAA2D,EAAA/J,EAAAiB,UAKAjB,EAAAqJ,UACArJ,EAAAsJ,SAAAtJ,EAAAsJ,SAAAtJ,EAAAqG,OAAArG,EAAAqG,OAAArG,EAAAsJ,SAEAtJ,EAAAsJ,SAAAtJ,EAAAsJ,SAAAtJ,EAAAqG,OAAArG,EAAAqG,OAAArG,EAAAsJ,SAIAtJ,EAAAsJ,SAAA3L,KAAAgB,MAAAqB,EAAAsJ,SAAAtJ,EAAAoJ,KAAApJ,EAAAoJ,IAGApJ,EAAAuJ,WAAAvJ,EAAAsJ,UAEAtJ,EAAAnD,QAAA+K,UACA5H,EAAAnD,QAAA+K,SAAA5H,EAAAsJ,UAIAS,EAAA/J,EAAAiB,SACAjB,EAAAiK,IAAAhC,sBAAAjI,EAAA4J,OAEA5J,EAAAsI,UAAAtI,EAAAsI,YAIAtI,EAAA0F,MAAA,SAAA4C,GACAtI,EAAA+I,eACA/I,EAAAsI,SAAAA,EACAtI,EAAAiK,IAAAhC,sBAAAjI,EAAA4J,SAGA5J,EAAAkK,YAAA,WACAlK,EAAAmK,QAIAnK,EAAAmK,QAAA,SACAnK,EAAA8J,UACA9J,EAAAiB,SAAAjB,EAAAgK,UACAhK,EAAAoG,SAAApG,EAAAsJ,SACArB,sBAAAjI,EAAA4J,SAPA5J,EAAAmK,QAAA,EACAjC,qBAAAlI,EAAAiK,OAUAjK,EAAAoK,MAAA,WACApK,EAAAmK,QAAA,SACAnK,EAAA8J,UACA9J,EAAAgJ,aAAA,EACAhJ,EAAA+I,eACAb,qBAAAlI,EAAAiK,KACAjK,EAAAuJ,WAAAvJ,EAAAoG,YAIApG,EAAAqK,OAAA,SAAAC,GACAtK,EAAA+I,eAEAZ,EADAmC,EAAAnB,OAAAmB,KAKAtK,EAAAiJ,MAAA,GACAqB,IAAAtK,EAAAsJ,WACApB,qBAAAlI,EAAAiK,KACAjK,EAAAmK,QAAA,SACAnK,EAAA8J,UACA9J,EAAAoG,SAAApG,EAAAsJ,SACAtJ,EAAAqG,OAAAiE,EACAtK,EAAAqJ,UAAArJ,EAAAoG,SAAApG,EAAAqG,OACArG,EAAAiK,IAAAhC,sBAAAjI,EAAA4J,SAXA5J,EAAAiJ,MAAA,oDAAAqB,IAeAtK,EAAA+I,cAAA/I,EAAAuJ,WAAAvJ,EAAAoG,aChQA,SAAA1J,gBAIAA,EAAA6N,GAAAC,gBAAA,SAAA3N,GAkBA,OAhBAA,EAAAH,EAAA+N,OAAA,CACAC,IAAA,EACA9B,IAAA,IACA+B,KAAA,GACAC,mBAAA,EACA3J,SAAA,IACA4J,MAAA,UACAC,gBAAA,UACAnD,OAAA,IACAoD,KAAA,WACAC,OAAA,MACAtN,OAAA,OACAD,MAAA,QACAZ,GAEAH,EAAAG,QAAAA,EACA6E,KAAA3B,KAAA,SAAAkL,EAAAC,GAEAxO,EAAAwO,GAAAC,KAAA,+HAIA,IAAAC,EAAA1O,EAAAwO,GAAAnJ,KAAA,cACAsJ,EAAA3O,EAAAwO,GAAAnJ,KAAA,gBACAuJ,EAAA5O,EAAAwO,GAAAnJ,KAAA,gBAGAqJ,EAAA5L,IAAA,CACAsL,gBAAAjO,EAAAgO,MACAnN,OAAAb,EAAAa,OACA6N,aAAA1O,EAAAmO,SAEAK,EAAA7L,IAAA,CACA/B,MAAAZ,EAAAY,MACAqN,gBAAAjO,EAAAiO,gBACAS,aAAA1O,EAAAmO,SAGAM,EAAAH,KAAAtO,EAAAkO,MAGAK,EAAAI,QACA,CACA/N,MAAAZ,EAAA8N,KAAA,KAEA,CACAc,KAAA,SAAApE,GACAxK,EAAA+N,mBACAlO,EAAAwO,GAAAnJ,KAAA,iBAAAgJ,KAAApN,KAAAgB,MAAA0I,GAAAxK,EAAA8K,SAGA1G,SAAApE,EAAAoE,cAMAvE,EAAA6N,GAAAmB,WAAA,SAAAC,GAEA,IAAA9O,EAAAH,EAAAG,QAEA,OAAA6E,KAAA3B,KAAA,SAAAkL,EAAAC,GAEA,IAAAE,EAAA1O,EAAAwO,GAAAnJ,KAAA,cACArF,EAAAwO,GAAAnJ,KAAA,gBAEAqJ,EAAAI,QACA,CACA/N,MAAAkO,EAAA,KAEA,CACAF,KAAA,SAAApE,GACAxK,EAAA+N,mBACAlO,EAAAwO,GAAAnJ,KAAA,iBAAAgJ,KAAApN,KAAAgB,MAAA0I,GAAAxK,EAAA8K,SAGA1G,SAAApE,EAAAoE,cAlFA,CAyFA0E,QChGA,WASA,SAAAiG,EAAAC,GACA,IAAAC,EAAAnG,OAAAkG,GACAE,EAAApG,OAAA,gCACAqG,EAAAD,EAAAtO,QACAwO,EAAAF,EAAArO,UAEAsO,EAAArO,KAAAiL,IAAAoD,EAAAC,IAEA,GAAAA,EAAA,EACAD,EAAA,GAAA,EAAAC,EAEAA,EAAA,EAAAD,EAAA,GAGAE,GAAA,IAAAF,EAAAD,EAAAtO,SAEAqO,EAAAtM,IAAA,CACA/B,MAAAuO,EACAtO,OAAAuO,EACA7N,QAAA,EACA+N,KAAAD,IA3BAvP,OAAAyP,iBAAA,SAAA,WACA,IAAAP,EAAAlH,SAAA0H,cAAA,iCAAA1H,SAAA0H,cAAA,iCACAR,GACAD,EAAAC,KAkCAlG,OAAA,WACA,IAAAkG,EAAAlH,SAAA0H,cAAA,iCAAA1H,SAAA0H,cAAA,iCACAR,GACAD,EAAAC,KAIAS,6BAAA,EAEA3H,SAAAyH,iBAAA,gCAAA,WACA,IAAAP,EAAAlH,SAAA0H,cAAA,gCAEAR,EACAD,EAAAC,GAIAlH,SAAA0H,cAAA,qBAAAD,iBAAA,OAAA,WACA,IAAAG,EAAA5H,SAAA0H,cAAA,iCACAR,EAAAlH,SAAA0H,cAAA,iCAAAE,EAEAV,IAAAS,8BACAA,6BAAA,EACAV,EAAAC,QA9DA,CAoEAlG,QC5DA,SAAAjJ,EAAAC,EAAA6P,gBAIA,IAAAC,EAAA,6HAKA/P,EAAA6N,GAAAmC,YAAA,SAAAC,EAAA9P,GACA,IAUA+P,EAVAC,EAAAC,UA2DA,OArDA,IAAApQ,EAAAC,GAAAoQ,aACApQ,EAAAqQ,SAAA,EAAA,GAKAtL,KAAA3B,KAAA,SAAAkN,GACA,IAAAC,EAAAxQ,EAAAgF,MACAyL,EAAAD,EAAAE,KAAA,eAGA,GAAAD,EAAA,CAGA,GAAA,iBAAAN,EAAA,IACA,mBAAAM,EAAAN,EAAA,IAAA,CAGA,IAAAQ,EAAAF,EAAAN,EAAA,IAAAS,MAAAH,EAAAI,MAAAC,UAAAC,MAAAC,KAAAb,EAAA,IASA,aAPAQ,EADAA,IAAAF,EACAX,EAEAa,KAAAb,KACAI,EAAAA,GAAA,IACAK,GAAAI,IAOAxQ,EAAAH,EAAA+N,OAAA0C,EAAAtQ,QAAAA,GAGAsQ,EAAArF,eAAA,YACAqF,EAAAQ,SAAA,KAKAhB,GAAAA,GAAA,IAAAA,EAAAlO,WACAmP,EAAAV,EAAA1N,IAAA,sBACA,SAAAoO,EACAjB,EAAA,CAAA,CAAAkB,IAAAX,EAAA1N,IAAA,mBAAAN,QAAA,gBAAA,MAEAxC,EAAAuM,MAAA,kGAIAkE,EAAA,IAAAW,EAAApM,KAAAiL,EAAA9P,GAAA,IACAqQ,EAAAE,KAAA,cAAAD,KAGAP,EAAA,IAAAA,EAAAnO,OAAAmO,EAAA,GAAAA,EAAAlL,MAIAhF,EAAAgQ,YAAA,SAAAC,EAAA9P,GAEA,OAAAH,EAAA,QACAgQ,YAAAC,EAAA9P,GACAuQ,KAAA,gBAIA1Q,EAAAqR,KAAA,KAAArB,YAAA,SAAAlP,GACA,OAAAd,EAAAc,GAAA4P,KAAA,iBAAAZ,GAMA9P,EAAA6N,GAAAmC,YAAA1P,SAAA,CACAiE,SAAA,IACAO,WAAA,OACAwM,mBAAA,EACAC,cAAA,EACAC,OAAA,GACAC,OAAA,GACAhE,QAAA,EACAzE,MAAA,EACA0I,QAAA,EACAC,YAAA,EACAC,sBAAA,KACAC,+BAAA,IAmMA,SAAAC,EAAAhO,GACA,OAAAiM,EAAAlF,KAAA/G,EAAAqN,MAAArN,EAAAiO,QA3LA,IAoIAC,EA6DAC,EAjMAC,EAAA,CACAvL,KAAA,CACA8I,KAAA,EACA0C,IAAA,EACAC,SAAA,SACAC,OAAA,EACAC,QAAA,EACAtR,OAAA,OACAD,MAAA,OACAwR,QAAA,QAEAC,YAAA,CACA3J,SAAA,WACA4J,QAAA,OACAJ,OAAA,EACAC,QAAA,EACAI,OAAA,OACA3R,MAAA,OACAC,OAAA,OACAuR,QAAA,QAEAhS,KAAA,CACAsI,SAAA,WACAwJ,OAAA,EACAC,QAAA,EACAI,OAAA,OACA3R,MAAA,OACAC,OAAA,OACA2R,SAAA,SAeAC,GAyFAZ,EAAA,SAAAb,EAAA0B,GAEA,GAAA,iBAAA1B,EACAA,EAAAA,EAAA3O,QAAA,sBAAAqQ,QACA,GAAA1B,aAAAN,MACA,IAAA,IAAA1L,EAAA,EAAAA,EAAAgM,EAAApP,OAAAoD,IACAgM,EAAAhM,GAAA2N,IACA3B,EAAAhM,GAAA2N,IAAAd,EAAAb,EAAAhM,GAAA2N,IAAAD,GAEA1B,EAAAhM,GAAA6M,EAAAb,EAAAhM,GAAA0N,GAKA,OAAA1B,GAGA,SAAA4B,EAAA9C,GAgBA,IAfA,IA0BA1P,EA1BAyS,EAAAD,EAAAhS,QACAkS,EAAAF,EAAA/R,SAEAkS,EAAA,GAEAL,EAAA,SAAAlL,EAAAwD,GACA,MAAA,UAAAA,EACA6H,EAEA,WAAA7H,EACA8H,EAEAtL,GAGAxC,EAAA,EAAAA,EAAA8K,EAAAlO,OAAAoD,IACAnF,EAAAmT,QAAAlD,EAAA9K,KACA8K,EAAA9K,GAzHA,SAAAiO,GACA,IAAA,IAAAjO,EAAA,EAAAA,EAAAiO,EAAArR,OAAAoD,IAAA,CAGA,IAFA,IAAAkO,EAAAD,EAAAjO,GACAmO,EAAAnO,EACAiO,EAAAE,EAAA,IAAAvQ,SAAAqQ,EAAAE,EAAA,GAAAvS,MAAA,IAAAgC,SAAAsQ,EAAAtS,MAAA,KACAqS,EAAAE,GAAAF,EAAAE,EAAA,KACAA,EAEAF,EAAAE,GAAAD,EAGA,OAAAD,EA8GAG,CAAAtD,EAAA9K,IACAqO,EAzGA,SAAAR,EAAAC,EAAAQ,GAYA,IAVA,IAQAC,EAEAC,EAVAC,EAAA3T,EAAA2T,kBAAA,EACAC,EAAAC,IAEAC,GADAC,IACAhB,EAAAC,EACA,WACAA,EAAAD,EAAA,YAAA,UAEAiB,EAAA,EAGAX,EAAA,EAAAA,EAAAG,EAAA1R,UAMA4R,EADA,iBAHAA,EAAAF,EAAAH,IAIAG,EAAAH,GAAA,CAAAnC,IAAAwC,GAGAA,GAAAO,YAAA,SAAAP,EAAAO,YAAA/S,WAAAwS,EAAAO,cAAAN,GAMAD,EAAAE,mBAAAF,EAAAE,oBAAAA,GAMAF,EAAAQ,mBAAAR,EAAAQ,oBAAAN,GAMAF,EAAAS,aAAAT,EAAAS,cAAAL,IASAE,EAAAX,EAMAI,EAAAV,EACA,SAAAW,EAAAO,aACAlB,GAAAY,KAIAD,EAAA5S,OAAA2S,KAhDAJ,KAsDA,OAAAG,EAAAxS,KAAA+M,IAAAsF,EAAAW,IAuCAI,CAAArB,EAAAC,EAAAhD,EAAA9K,IACA+N,EAAAoB,KAAAd,KAGA,iBAAAvD,EAAA9K,KACA8K,EAAA9K,GAAA,CAAAgM,IAAAlB,EAAA9K,MAGA5E,EAAAP,EAAA+N,OAAA,GAAAkC,EAAA9K,KACAgM,IAAAa,EAAAzR,EAAA4Q,IAAA0B,GACAK,EAAAoB,KAAA/T,IAGA,OAAA2S,IAUAxB,GAEAO,EAAA,GAqBA,SAAAP,EAAA6C,EAAAC,EAAAtH,EAAAuH,EAAA7I,GAEA,QAAA,IAAA2I,EAAA,CAGAvU,EAAAmT,QAAAoB,KACAA,EAAA,CAAAA,IAGAnE,UAAArO,OAAA,GAAA,mBAAAqO,UAAAA,UAAArO,OAAA,KACA6J,EAAAwE,UAAAA,UAAArO,OAAA,IAGAyS,EAAA,mBAAAA,GAAAA,EAAAA,EAAA,EACAtH,EAAA,mBAAAA,IAAAA,GAAAA,EAAA,EAAAqH,EAAAxS,OAAAd,KAAA+M,IAAAd,EAAAqH,EAAAxS,QACA0S,EAAA,mBAAAA,GAAAA,EAAAA,EAAA,EAEAD,GAAAD,EAAAxS,SAEAmL,EADAsH,EAAA,GAGAC,EAAA,IACAA,EAAAvH,GAEAuH,EAAAxT,KAAA+M,IAAAyG,EAAAvH,GAEA,IAAA+B,EAAAsF,EAAAxD,MAAAyD,EAAAC,EAAAvH,EAAAuH,GAKA,GAJAF,EAAAA,EAAAxD,MAAAyD,EAAAC,GACAvH,EAAAqH,EAAAxS,OAwBA,IAfA,IAaA4R,EAbAe,EAAA,EAEA5N,EAAA,aACA4N,IACAxH,IAIApL,EAAAyS,EAAA3I,GAAAqD,GACAyC,EAAAzC,EAAA,EAAA,EAAAwF,EAAA7I,KAMAzG,EAAA,EAAAA,EAAAoP,EAAAxS,OAAAoD,IAEA2M,EAAAyC,EAAApP,OAWAwO,EAAA,IAAAgB,OACA7B,IAAAyB,EAAApP,GAAAgM,KAEAwC,EAtFA,SAAAA,GACA,IAAA,IAAAxO,EAAA,EAAAA,EAAA8M,EAAAlQ,OAAAoD,IACA,GAAA8M,EAAA9M,GAAA2N,MAAAa,EAAAb,IACA,OAAAb,EAAA9M,GAIA,OADA8M,EAAAqC,KAAAX,GACAA,EA+EAiB,CAAAjB,IAEAkB,SACA/N,IAEA9G,EAAA2T,GAAA3M,GAAA,aAAAF,SAzCAhF,EAAAyS,EAAA3I,GAAA,MAvCA,SAAA9J,EAAAyS,EAAA3I,EAAAkJ,GACA,mBAAAlJ,GACAA,EAAAoF,KAAAuD,EAAAO,GAwFA,IAAAC,EAAA,SAAA9E,GAEA,IADA,IAAA+E,EAAA,GACA7P,EAAA,EAAAA,EAAA8K,EAAAlO,OAAAoD,IACA,iBAAA8K,EAAA9K,GACA6P,EAAAV,KAAA,CAAAnD,IAAAlB,EAAA9K,KAEAnF,EAAAmT,QAAAlD,EAAA9K,IACA6P,EAAAV,KAAAS,EAAA9E,EAAA9K,KAGA6P,EAAAV,KAAAW,EAAAhF,EAAA9K,KAGA,OAAA6P,GAIAC,EAAA,SAAA9U,EAAA+U,GA6CA,OAxCA/U,EAAAgV,WAAAhV,EAAAiV,aACAnV,EAAAoV,SAAApV,EAAAoV,QAAAC,KACArV,EAAAoV,QAAAC,IAAA,2FAEAnV,EAAAgV,YACAhV,EAAAqR,OAAA,IAEArR,EAAAiV,YACAjV,EAAAsR,OAAA,KAKAtR,EAAAoV,QAAAzF,IAEA7P,EAAAoV,SAAApV,EAAAoV,QAAAC,KACArV,EAAAoV,QAAAC,IAAA,8EAGAnV,EAAAmR,mBAAAnR,EAAAoV,MACApV,EAAA2E,WAAA,QAIA3E,EAAAqV,gCAAA1F,IACA7P,EAAAoV,QAAAC,IAAA,6CACAnV,EAAA0R,+BAAA1R,EAAAqV,+BAKArV,EAAAsV,YAAA3F,IACA3P,EAAAoR,aAAApR,EAAAsV,WAGAtV,EAAAuV,OAAA5F,IACA3P,EAAAmR,mBAAAnR,EAAAuV,KACAvV,EAAA2E,WAAA,QAGA6Q,EAAAxV,IAIAwV,EAAA,SAAAxV,EAAA+U,GAqCA,MApCA,SAAA/U,EAAAqR,OACArR,EAAAqR,OAAA,EAEA,WAAArR,EAAAqR,OACArR,EAAAqR,OAAA,GAEA,UAAArR,EAAAqR,OACArR,EAAAqR,OAAA,EAGArR,EAAAqR,SAAA1B,IAAAoF,IACA/U,EAAAqR,OAAArQ,WAAAhB,EAAAqR,QACA7F,MAAAxL,EAAAqR,UACArR,EAAAqR,OAAA,KAKA,QAAArR,EAAAsR,OACAtR,EAAAsR,OAAA,EAEA,WAAAtR,EAAAsR,OACAtR,EAAAsR,OAAA,GAEA,WAAAtR,EAAAsR,OACAtR,EAAAsR,OAAA,EAGAtR,EAAAqR,SAAA1B,IAAAoF,IACA/U,EAAAsR,OAAAtQ,WAAAhB,EAAAsR,QACA9F,MAAAxL,EAAAsR,UACAtR,EAAAsR,OAAA,KAKAtR,GAKAiR,EAAA,SAAAwE,EAAA3F,EAAA9P,GACA6E,KAAA7E,QAAAH,EAAA+N,OAAA,GAAA/N,EAAA6N,GAAAmC,YAAA1P,SAAAH,GAAA,IAEA6E,KAAA6Q,WAAA,EAGAZ,EAAAjQ,KAAA7E,SAAA,GAMA6E,KAAAiL,OAAA8E,EAAA/U,EAAAmT,QAAAlD,GAAAA,EAAA,CAAAA,IAKAjL,KAAA7E,QAAAsN,SACAzI,KAAAyI,QAAA,GAMAzI,KAAA7E,QAAA6I,OAAAhE,KAAAiL,OAAAlO,SAEAiD,KAAA7E,QAAA6I,MAAAhE,KAAAiL,OAAAlO,OAAA,GAEAiD,KAAA7E,QAAA6I,MAAA,IAEAhE,KAAA7E,QAAA6I,MAAA,GAIAhE,KAAA8Q,OAAAF,IAAA3N,SAAA8N,KAQAC,EAAAhW,EAAAC,GACA+E,KAAA+N,WAAA/S,EAAA4V,GACA5Q,KAAAiR,MAAAjR,KAAA8Q,OAAAI,EAAAF,EAAAhW,EAAAiI,UAAAjD,KAAA+N,WAEA/N,KAAAmR,eAAAnR,KAAAiL,OACAjL,KAAAiL,OAAA2C,EACA5N,KAAA7E,QAAAiW,2BAAAJ,EAAAhR,KAAAiR,MACAjR,KAAAmR,gBAMAzE,EAAA1M,KAAAiL,OAAAjL,KAAA7E,QAAA6I,OAAA,EAAAhE,KAAA7E,QAAAuR,SAAA,GAGA2E,EAAArR,KAAA+N,WAAAuD,SAAA,gBAAAC,QACAvR,KAAAwR,MAAAH,EAAAtU,OAAAsU,EACArW,EAAA,mCACA8C,IAAAkC,KAAA7E,QAAAsW,UAAA,GAAAvE,EAAAvL,MACA+P,SAAA1R,KAAA+N,YAEA/N,KAAA7E,QAAAsW,YAGAzR,KAAA8Q,SAGAjN,EAAA7D,KAAA+N,WAAAjQ,IAAA,YACAyP,EAAAvN,KAAA+N,WAAAjQ,IAAA,UAEAkC,KAAA+N,WAAAjQ,IAAA,CACA+F,SAAA,WAAAA,EAAA,WAAAA,EACA0J,OAAA,SAAAA,EAAA,EAAAA,IAIAvN,KAAAwR,MAAA1T,IAAA,CAAAyP,QAAA,UAIAvN,KAAAwR,MAAA1T,IAAA,CACA+F,SAAA7D,KAAA8Q,QAAAI,EAAA,QAAA,cAMAlR,KAAAuJ,MAAAvJ,KAAA7E,QAAA6I,MACAhE,KAAA2R,KAAA3R,KAAAuJ,OAGAyH,EAAAhP,GAAA,qBAAAhH,EAAA4W,MAAA5R,KAAA6R,OAAA7R,OACAgC,GAAA,gCAAAhH,EAAA4W,MAAA,WAEA5R,KAAA8Q,QAAA,IAAA7V,EAAA6W,cACA7W,EAAAqQ,SAAA,EAAA,GACAtL,KAAA6R,WAEA7R,QAoHAoM,EAAAN,UAAA,CAEA+F,OAAA,WACA,IAGA,IA6BAE,EA7BAC,EAAAhS,KAAA7E,QAAAiW,2BAAApW,EAAAC,GAAA+E,KAAAiR,MACAgB,EAAAD,EAAAjW,QACAmW,EAAAF,EAAAhW,SACAmW,EAAAF,GAAAjS,KAAAoS,2BAAA,GACAC,EAAAH,GAAAlS,KAAAsS,4BAAA,GACAzF,EAAA7M,KAAA7E,QAAA0R,gCAAA,EAGAoF,IAAAjS,KAAAoS,2BACAF,IAAAlS,KAAAsS,8BACArW,KAAAC,IAAAiW,EAAA,IAAAtF,GAAAlG,MAAAwL,IACAlW,KAAAC,IAAAmW,EAAA,IAAAxF,GAAAlG,MAAA0L,MAEArS,KAAAoS,0BAAAH,EACAjS,KAAAsS,2BAAAJ,EAGAlS,KAAAiL,OAAA2C,EAAAoE,EAAAhS,KAAAmR,gBAGAnR,KAAA7E,QAAAuR,SACAA,EAAA1M,KAAAiL,QAAAjL,KAAAuJ,MAAA,GAAAvJ,KAAAiL,OAAAlO,OAAAiD,KAAA7E,QAAAuR,SAIA,IAAA1M,KAAAiL,OAAAlO,QACAiD,KAAAuS,cAAApG,MAAAnM,KAAAiL,OAAA,GAAAkB,MAGA4F,EAAA/R,KACAoH,aAAA2K,EAAAS,iCACAT,EAAAS,gCAAA9O,WAAA,WACAqO,EAAAJ,KAAA,IACA3R,KAAA7E,QAAAyR,yBAIA,IAAA6F,EAAA,CAAAhI,KAAA,EAAA0C,IAAA,EAAAuF,MAAA,OAAAC,OAAA,QACAC,EAAA5S,KAAA8Q,OAAA9Q,KAAAiR,MAAAlV,QAAAiE,KAAAiR,MAAA4B,aACAC,EAAA9S,KAAA8Q,OAAA7V,EAAA8X,aAAA/S,KAAAiR,MAAAjV,SAAAgE,KAAAiR,MAAA8B,cACAC,EAAAJ,EACAK,EAAAD,EAAAhT,KAAAkT,aAAAxH,KAAA,SACAyH,EAAAnY,EAAAoY,MAAA,qBAAA,CACAC,cAAArT,KAAA+N,WAAA,KAGAvB,GAAAxM,KAAAuS,cAAA/F,SAAA1B,EAAA9K,KAAA7E,QAAA6E,KAAAuS,eAAA/F,OACAC,GAAAzM,KAAAuS,cAAA9F,SAAA3B,EAAA9K,KAAA7E,QAAA6E,KAAAuS,eAAA9F,OAGAqG,GAAAG,EACAR,EAAAtF,MAAA8F,EAAAH,GAAArG,GAGAuG,GADAC,EAAAH,GACA9S,KAAAkT,aAAAxH,KAAA,SAEA+G,EAAAhI,OAAAuI,EAAAJ,GAAApG,GAGAxM,KAAA7E,QAAAsW,WAEAzR,KAAAwR,MACA1T,IAAA,CAAA/B,MAAA6W,EAAA5W,OAAA8W,IACAzS,KAAA,sBAAAiT,IAAA,eACAjV,KAAA,WACArD,EAAAgF,MACAK,KAAA,oBACAvC,IAAA,CAAA/B,MAAAiX,EAAAhX,OAAAiX,IACAnV,IAAA2U,KAIAzS,KAAA+N,WAAAwF,QAAAJ,EAAAnT,MACA,MAAAwT,IAKA,OAAAxT,MAIA2R,KAAA,SAAA8B,EAAAC,GAGA,KAAAzX,KAAAC,IAAAuX,GAAAzT,KAAAiL,OAAAlO,OAAA,GAAA,CAKA,IAAAgV,EAAA/R,KACA2T,EAAA5B,EAAAP,MAAAnR,KAAA,sBAAAqB,SAAA,cACAkS,EAAA7B,EAAA8B,aACAC,EAAA,CAAAT,cAAAtB,EAAAhE,WAAA,IAGAgE,EAAAhE,WAAAwF,QAAAvY,EAAAoY,MAAA,qBAAAU,GAAA,CAAA/B,EAAA0B,IAGAzT,KAAAuJ,MAAAkK,EACA,IAAAM,EAAAhC,EAAA9G,OAAAwI,GAGArM,aAAA2K,EAAAiC,sBAIAjC,EAAA8B,aAEA,IAAA9G,EAAAD,EAAAiH,GA8GA,OA7GAhH,GACAgF,EAAA8B,aAAA,IAAAI,EAAAF,GACAhC,EAAAmC,MAAAnC,EAAA8B,aAAAM,OAAArW,IAAA,iBAAA,SAEAiU,EAAAmC,MAAAlZ,EAAA,WAGA+W,EAAAmB,aAAAlY,EAAA,kCACAoZ,OAAArC,EAAAmC,OAEAlU,KAAA7E,QAAAsW,UACAM,EAAAmB,aAAApV,IAAA,CACA2P,QAAA,UAGAsE,EAAAmB,aAAApV,IAAAoP,EAAAM,aACAuE,EAAAmC,MAAApW,IAAAoP,EAAA3R,OAGAwW,EAAAmC,MAAA9Q,KAAA2J,EAAA,UAAA,OAAA,SAAAsH,GACA,IACAC,EADAtZ,EAAAgF,MACAwB,SACArG,EAAAmZ,EAAA5I,KAAA,WAEAgI,IACAvY,EAAAH,EAAA+N,OAAA,GAAA5N,EAAAuY,IAGA,IAAAa,EAAAvU,KAAAwU,cAAAxU,KAAAsK,YAAAtK,KAAAjE,MACA0Y,EAAAzU,KAAA0U,eAAA1U,KAAAuK,aAAAvK,KAAAhE,OAGAsY,EAAA5I,KAAA,QAAA6I,EAAAE,GAEA,IAAAE,EAAA,SAAAC,GACA,OAAAzZ,EAAAyZ,KAAA9J,EACA3P,EACA4W,EAAA5W,SADAyZ,IAIA9U,EAAA6U,EAAA,cACAE,EAAAF,EAAA,oBACArI,EAAAqI,EAAA,sBAGAG,EAAA,WAEAlB,IACAA,EAAA3K,OACA2K,EAAA3H,WAGA0H,EAAAoB,UAGAhD,EAAAtJ,QAAA,EAAAsJ,EAAA9G,OAAAlO,QACAgV,EAAAiD,QAIAjD,EAAA5W,QAAAsW,WAAAM,EAAAjB,QACAiB,EAAAhE,WAAAjQ,IAAA,mBAAA,QAKA9C,EAAA,CAAA,QAAA,SAAAqD,KAAA,WACA0T,EAAAhE,WAAAwF,QAAAvY,EAAAoY,MAAA,eAAApT,KAAA8T,GAAA,CAAA/B,EAAA0B,MAGA1G,GACAgF,EAAA8B,aAAAoB,QAIAlD,EAAAlB,YAAAkB,EAAA5W,QAAAoR,eAAAD,IAAAxM,GAEAwU,EAAA3C,OACAmD,KAnTA,SAAA3Z,GAEA,IAAA2E,EAAA3E,EAAA2E,YAAA,QAIAA,EADA,iBAAAA,IAAA,EAAAA,EAAAtD,QAAA,KACAsD,EAAAI,MAAA,KAGAJ,aAAA+L,QACA/L,EAAAA,EAAA7D,KAAAgB,MAAAhB,KAAAiZ,UAAApV,EAAA/C,OAAA,MAGA,IAAAoY,EAAAha,EAAA,IACAia,EAAAja,EAAA,KAAAH,EAAA,IAEA,OAAA8E,EAAA1C,WAAA+D,eAEA,QACA,IAAA,OACAgU,EAAAE,OAAA,CACA9V,SAAApE,EAAAoE,SACAsQ,SAAA1U,EAAA0U,SACAyF,OAAAna,EAAAma,QAAAxK,IAEA,MAEA,IAAA,YACA,IAAA,cAEA,IAAAyK,EAAA,WACAJ,EAAAE,OAAA,CACA9V,SAAApE,EAAAoE,SAAA,EACAsQ,SAAA1U,EAAA0U,SACAyF,OAAAna,EAAAma,QAAAxK,KAIAsK,EAAArY,OACAqY,EAAAI,QAAA,CACAjW,SAAApE,EAAAoE,SAAA,EACAsQ,SAAA0F,EACAD,OAAAna,EAAAma,QAAAxK,IAGAyK,IAGA,MAEA,IAAA,WACA,IAAA,YACA,IAAA,YACA,IAAA,aACA,IAAA,SACA,IAAA,UACA,IAAA,WACA,IAAA,YACA,IAAA,YACA,IAAA,aACA,IAAA,aACA,IAAA,cACA,IAAA,UACA,IAAA,WACA,IAAA,YACA,IAAA,aAEA,IAAAE,EAAA3V,EAAA6C,MAAA,wBAEA+S,EAAA,SAAAD,EAAA,GAAA,QACA,UAAAA,EAAA,GAAA,OACA,SAAAA,EAAA,GAAA,MACA,OAAAA,EAAA,GAAA,SACA,QAEAE,EAAA,CACAlI,QAAA,IACAmI,EAAA,GACAD,EAAAD,GAAA,QACAE,EAAAF,GAAA,EAEAP,EACArX,IAAA6X,GACA7L,QAAA8L,EAAA,CACArW,SAAApE,EAAAoE,SACAsQ,SAAA,WACAsF,EAAArX,IAAA4X,EAAA,IACAva,EAAA0U,SAAAjE,MAAA5L,KAAAoL,YAEAkK,OAAAna,EAAAma,QAAAxK,IAGA,SAAA2K,EAAA,IAAAL,EAAArY,UACA8Y,EAAA,IACAH,GAAA,OAEAN,EACAtL,QAAA+L,EAAA,CACAtW,SAAApE,EAAAoE,SACAsQ,SAAA,WACAuF,EAAAtX,IAAA,UAAA,SAEAwX,OAAAna,EAAAma,QAAAxK,MAgNAgL,CAAA,CACAC,IAAAzB,EACA0B,IAAArC,EACA7T,WAAAA,EACAP,SAAA+M,EACAgJ,OAAAT,EACAhF,SAAAiF,IAKA/C,EAAAlB,WAAA,EAGAkB,EAAAF,WAGAE,EAAAmB,aAAAxB,SAAAK,EAAAP,OAEAO,EAAAmC,MAAAnU,KAAA,MAAAgU,EAAAkC,KAAA,IACAlE,EAAAmB,aAAAxH,KAAA,UAAAqI,GAEAhH,GACAgF,EAAAmC,MAAAnU,KAAA,MAAAgU,EAAA5H,KAGA4F,EAAAQ,cAAAwB,EAEAhC,IAGAmE,QAAA,WACA,OAAAlW,KAAAuJ,OAGAU,KAAA,WACA,IAAAkB,EAAAU,MAAAC,UAAAC,MAAAC,KAAAZ,UAAA,GAEA,OADAD,EAAAgL,QAAAnW,KAAAuJ,MAAAvJ,KAAAiL,OAAAlO,OAAA,EAAAiD,KAAAuJ,MAAA,EAAA,GACAvJ,KAAA2R,KAAA/F,MAAA5L,KAAAmL,IAGAiL,KAAA,WACA,IAAAjL,EAAAU,MAAAC,UAAAC,MAAAC,KAAAZ,UAAA,GAEA,OADAD,EAAAgL,QAAA,IAAAnW,KAAAuJ,MAAAvJ,KAAAiL,OAAAlO,OAAA,EAAAiD,KAAAuJ,MAAA,GACAvJ,KAAA2R,KAAA/F,MAAA5L,KAAAmL,IAGAkL,MAAA,WAQA,OANArW,KAAAyI,QAAA,EAEAzI,KAAA6T,cACA7T,KAAA6T,aAAAwC,QAGArW,MAGAsW,OAAA,WASA,OAPAtW,KAAAyI,QAAA,EAEAzI,KAAA6T,cACA7T,KAAA6T,aAAAoB,OAGAjV,KAAAgV,QACAhV,MAGAgV,MAAA,WAEA,IAIAzV,EACAwN,EAEAwJ,EAcAC,EA+BA,OApDA,EAAAxW,KAAAiL,OAAAlO,SAEAqK,aAAApH,KAAAgU,eAEAzU,EAAAS,KAAAuS,eAAAvS,KAAAuS,cAAAhT,UAAAS,KAAA7E,QAAAoE,SAGAgX,EAAA,WACAvW,KAAAkU,MAAAuC,IAAA,UAGAzW,KAAAyI,QACAzI,KAAAiK,SAPA8C,EAAAD,EAAA9M,KAAAuS,kBAeAvS,KAAAuS,cAAAmE,OACAF,EAAA,EAEAxW,KAAAkU,MACAlS,GAAA,gBAAA,WACA,IAAA2U,EAAA3b,EAAAgF,MAAA0L,KAAA,UAEAtE,aAAAoP,GACAA,EAAA9S,WAAA,WACAiT,EAAAN,QACAM,EAAAxC,OAAAZ,QAAA,UACA,KAAAoD,EAAAC,cAAAD,EAAAE,qBAEA7U,GAAA,cAAA,WACAoF,aAAAoP,MAKAxW,KAAAkU,MAAAlS,GAAA,8BAAAhH,EAAA4W,MAAA2E,EAAAvW,QAGA+M,IAAA/M,KAAAuS,cAAAhT,SAEAS,KAAAkU,MAAAlS,GAAA,cAAAhH,EAAA4W,MAAA2E,EAAAvW,OAIAA,KAAAgU,cAAAtQ,WAAA1I,EAAA4W,MAAA2E,EAAAvW,MAAAT,IAIAS,MAGAiM,QAAA,SAAA6K,GAEA9b,EAAAC,GAAAwb,IAAA,oDAGAzW,KAAA6T,cACA7T,KAAA6T,aAAA5H,UAIA7E,aAAApH,KAAAgU,eAGA8C,GACA9W,KAAAwR,MAAAuD,SAEA/U,KAAA+N,WAAAgJ,WAAA,iBAuBA,IAAA9C,EAAA,WAAAjU,KAAAgX,KAAApL,MAAA5L,KAAAoL,YAUA6I,EAAAnI,UAAAkL,KAAA,SAAA7b,GAMA,SAAA8b,IACAlF,EAAAoC,OAAAA,EACApC,EAAAmF,MAAA/C,EAAA,GANA,IAAApC,EAAA/R,KAWAmX,EAAA,QASA,GAPAhc,EAAAgR,eAAAN,QACAd,EAAAlF,KAAA1K,EAAAgR,OACAgL,EAAA,WAKA,aAFApF,EAAApT,KAAAwY,GAEA,CAGAlD,EAAAmD,iBAEArF,EAAAsF,KAAAlc,EAAAgR,IAAAxJ,MAAAoI,GAAA,GACA+C,EAAA,iCAAAiE,EAAAsF,KACA,sIAEAC,mBAAArc,EAAAqI,SAAAiU,QAEAxF,EAAAyF,iBAAArc,EAAAsc,MAAAtc,EAAAsc,OAAA3M,EAEAqJ,EAAAnZ,EAAA,cACA+E,KAAA,CAAA2X,YAAA5J,IACAhQ,IAAA,CAAA4P,OAAA,EAAAL,OAAA,EAAAC,QAAA,IACA5B,KAAA,SAAAqG,GAEA5W,EAAAub,MACAvC,EAAAnS,GAAA,aAAA,WACA+P,EAAA4F,mBACA5F,EAAAkD,SAKAlD,EAAA6F,SAAA,EAEAX,IAEAhc,EAAA,IACA8W,EAAA8F,eACA1D,EAAAZ,QAAA,gBAEAvY,EAAAC,GAAA6c,IAAA,mBAAA,WACA/F,EAAA8F,eACA1D,EAAAZ,QAAA,qBAKA,CAeA,IAFA,IAVAY,EAAAnZ,EAAA,WACAqE,KAAA,YAAA,GACAA,KAAA,YAAA,GACAA,KAAA,SAAAlE,EAAAub,MACArX,KAAA,UAAAlE,EAAAsc,MAAAtc,EAAAsc,OAAA3M,GAGAzL,KAAA,UAAA,QACAA,KAAA,SAAAlE,EAAA4c,QAAA,IAEAxI,EAAApU,EAAAgR,eAAAN,MAAA1Q,EAAAgR,IAAA,CAAAhR,EAAAgR,KAEAhM,EAAA,EAAAA,EAAAoP,EAAAxS,OAAAoD,IAAA,CACA,IAAA6X,EAAAzI,EAAApP,GACA,iBAAA,IACA6X,EAAA,CAAAlK,IAAAkK,IAEAhd,EAAA,YACA+E,KAAA,MAAAiY,EAAAlK,KAGA/N,KAAA,OAAAiY,EAAArZ,MAAA,MACA+S,SAAAyC,GAGAA,EAAA,GAAA8D,aAAA1I,EAAAxS,OAGAoX,EAAAZ,QAAA,eAFAY,EAAAZ,QAAA,aAKA0D,MAKAhD,EAAAnI,UAAA+L,aAAA,WACA,IAAA9F,EAAA/R,KAEAkY,EAAAjd,EAAA,GAEA8W,EAAAoC,OACApU,KAAA,MAAAgS,EAAAoC,OAAApU,KAAA,gBACAW,WAAA,eAGA,IAEAyX,EAFAC,IAAArG,EAAAoC,OAAA,GAAAkE,WACAD,IACAD,EAAAnd,EAAA,SAAA8C,IAAA,UAAA,mBAAA4T,SAAAzO,SAAA8N,MACAgB,EAAAoC,OAAAzC,SAAAyG,IAGA,IAAAxB,EAAA,IAAAuB,EAAAI,OAAAvG,EAAAmF,MAAA,CACAqB,OAAA,CACAC,QAAA,WAEAzG,EAAAyF,gBACAb,EAAAc,OAGAW,IAEArG,EAAAoC,OAAA,GAAAkE,aAAAF,EAAA,IACApG,EAAAoC,OAAAsE,SAEAN,EAAApD,UAGAhD,EAAA6F,SAAA,EACA7F,EAAA2G,qBACA3G,EAAAoC,OAAAZ,QAAA,YAEAoF,cAAA,SAAAC,GACA,OAAAA,EAAAlN,MACA,KAAAwM,EAAAW,YAAAC,QACA/G,EAAAoC,OAAAZ,QAAA,WACA,MACA,KAAA2E,EAAAW,YAAAE,MACAhH,EAAAoC,OAAAZ,QAAA,SACA,MACA,KAAA2E,EAAAW,YAAAG,OACAjH,EAAAoC,OAAAZ,QAAA,SACA,MACA,KAAA2E,EAAAW,YAAAI,UACAlH,EAAAoC,OAAAZ,QAAA,WACA,MACA,KAAA2E,EAAAW,YAAAK,KACAnH,EAAAoC,OAAAZ,QAAA,aAIA4F,wBAAA,WACApH,EAAA2G,qBACA3G,EAAAoC,OAAAZ,QAAA,WAEA6F,QAAA,SAAA5F,GACAzB,EAAAsH,UAAA,EACAtH,EAAAoC,OAAAZ,QAAA,CAAA5U,KAAA,QAAA4I,MAAAiM,QAOA,OAFAzB,EAAAuH,SAAA3C,EAEA5E,GAGAkC,EAAAnI,UAAA4M,mBAAA,WACA,IAAA3G,EAAA/R,KAEA,OAAA+R,EAAAuH,SAAAC,sBAAA,UACA,IAAA,QACAxH,EAAAmF,MAAA5M,WAAA,IACAyH,EAAAmF,MAAA3M,YAAA,IACA,MACA,IAAA,SACAwH,EAAAmF,MAAA5M,WAAA,IACAyH,EAAAmF,MAAA3M,YAAA,IACA,MACA,QACA,IAAA,QACAwH,EAAAmF,MAAA5M,WAAA,IACAyH,EAAAmF,MAAA3M,YAAA,IACA,MACA,IAAA,QACAwH,EAAAmF,MAAA5M,WAAA,KACAyH,EAAAmF,MAAA3M,YAAA,IACA,MACA,IAAA,SACAwH,EAAAmF,MAAA5M,WAAA,KACAyH,EAAAmF,MAAA3M,YAAA,KACA,MACA,IAAA,UACAwH,EAAAmF,MAAA5M,WAAA,KACAyH,EAAAmF,MAAA3M,YAAA,KAIA,OAAAwH,GAGAkC,EAAAnI,UAAAmJ,KAAA,WACA,IAAAlD,EAAA/R,KAaA,OAXA+R,EAAA4F,mBAAA,EAEA,YAAA5F,EAAApT,KACAoT,EAAA6F,UACA7F,EAAAoC,OAAAZ,QAAA,QACAxB,EAAAuH,SAAAE,aAGAzH,EAAAmF,MAAAjC,OAGAlD,GAGAkC,EAAAnI,UAAAuK,MAAA,WACA,IAAAtE,EAAA/R,KAYA,OAVA+R,EAAA4F,mBAAA,EAEA,YAAA5F,EAAApT,KACAoT,EAAA6F,SACA7F,EAAAuH,SAAAG,aAGA1H,EAAAmF,MAAAb,QAGAtE,GAGAkC,EAAAnI,UAAA7C,KAAA,WACA,IAAA8I,EAAA/R,KAcA,OAZA+R,EAAA4F,mBAAA,EAEA,YAAA5F,EAAApT,KACAoT,EAAA6F,UACA7F,EAAAuH,SAAAG,aACA1H,EAAAuH,SAAAI,OAAA,KAGA3H,EAAAmF,MAAAb,QACAtE,EAAAmF,MAAAyC,YAAA,GAGA5H,GAGAkC,EAAAnI,UAAAG,QAAA,WASA,OARAjM,KAEAsZ,UAFAtZ,KAGAsZ,SAAArN,UAHAjM,KAMAmU,OAAAY,SANA/U,MAWAiU,EAAAnI,UAAA+K,eAAA,SAAA+C,GAGA,MAAA,YAFA5Z,KAEArB,KAFAqB,KAOAkX,MAAAyC,YAPA3Z,KAGA4X,QAHA5X,KAIAsZ,SAAAzC,iBAMA,GAGA5C,EAAAnI,UAAA+N,eAAA,SAAAD,GACA,IAAA7H,EAAA/R,KAUA,MARA,YAAA+R,EAAApT,KACAoT,EAAA6F,SACA7F,EAAAuH,SAAAI,OAAAE,GAAA,GAGA7H,EAAAmF,MAAAyC,YAAAC,EAGA7H,GAGAkC,EAAAnI,UAAA8K,YAAA,WAGA,MAAA,YAFA5W,KAEArB,KAFAqB,KAOAkX,MAAA3X,SAPAS,KAGA4X,QAHA5X,KAIAsZ,SAAA1C,cAMA,GAOA3C,EAAAmD,eAAA,WACA,IAMA0C,EANA7e,EAAA,KAGAD,EAAA,iDAAA+B,QACA/B,EAAA,4EAAA0W,SAAA,QAEAoI,EAAAC,YAAA,WACA9e,EAAA,IAAAA,EAAA,GAAA6G,SACA9G,EAAAC,GAAAsY,QAAA,oBACAnM,aAAA0S,KAEA,MAGA,IA6CAE,EACAC,EAEAC,EACAC,EACAC,EACAC,EACAC,EApDAxL,EAAA,WAEA,GAAA,eAAA7T,EAAA,CACA,GAAAA,EAAAsf,WAAA,2BAAAC,QACA,MAAA,WACA,GAAAvf,EAAAsf,WAAA,4BAAAC,QACA,MAAA,YAIA,OAAAC,OAAAze,OAAAye,OAAA1e,MACA,WAMA,aAGAiT,EAAA,WACA,OAAA/T,EAAA8X,YAAA9X,EAAA4X,WACA,WAEA5X,EAAA4X,WAAA5X,EAAA8X,YACA,YAGA,UAgBA7B,GACA8I,EAAAvX,UAAAC,UACAuX,EAAAxX,UAAAwX,SAEAC,EAAAF,EAAArX,MAAA,yBACAwX,IAAAD,GAAAA,EAAA,GACAE,EAAAJ,EAAArX,MAAA,oBACA0X,IAAAD,GAAAA,EAAA,GACAE,EAAAN,EAAArX,MAAA,wBACA+X,IAAAJ,GAAAA,EAAA,GAEAK,KADAC,EAAAZ,EAAArX,MAAA,mBACAiY,EAAA,OAIA,EAAAX,EAAAzd,QAAA,YAAA,EAAAyd,EAAAzd,QAAA,UAAA,EAAAyd,EAAAzd,QAAA,UAAA2d,GAAAA,EAAA,KAGAlf,EAAA4f,WAAA,uBAAA,GAAAzd,SAAA4O,KAAA/Q,EAAA4f,YACAP,GAAAI,EAAA,OAGA,EAAAV,EAAAxd,QAAA,YAAA2d,GAAAA,EAAA,KAGAE,GAAAA,EAAA,GAGA,oBAAApf,GAAAkf,GAAAA,EAAA,MAGA,EAAAH,EAAAxd,QAAA,WAAA,EAAAwd,EAAAxd,QAAA,uBAGAme,GAAAA,GAAA,IAz+CA,CA6+CA1W,OAAAhJ,QCr/CA,WACA,IAAA6f,EAAA,CACAC,qBAAA,CACAlZ,WAAA,GACAtB,YAAA,UACAya,gBAAA,QACAtb,YAAA,MACA4B,aAAA,OACAd,aAAA,SACAC,WAAA,SACA4C,SAAA,OACA4X,KAAA,GACArX,YAAA,SACAsX,cAAA,OACAC,MAAA,OACAC,yBAAA,GACA3X,UAAA,SACA4X,gBAAA,SAKApX,OAAAhB,UAAAqY,MAAA,WAEA,IAAAC,EAAA7X,WAAA,WACAzI,OAAAC,aACAA,YAAA4f,IAEA,IAEA7W,OAAAhJ,QAAA4W,OAAA,SAAAwC,GACAjN,aAAAmU,GACAA,EAAA7X,WAAA,WACAzI,OAAAC,aACAA,YAAA4f,EAAA,KAAAzG,IAEA,SApCA,CA2CApQ","file":"companion.bundle.min.js","sourcesContent":["(function($) {\n\n    window.initHoverFX = function(options, isUI, resizeEvent) {\n        var defaults, item, opts, params, instanceName, className, classElements, doesCSS3, supportRGBA;\n        item = $('.contentswap-effect');\n        supportRGBA = true;\n        doesCSS3 = true;\n\n        opts = options;\n\n        function setParams(elem) {\n\n            className = $(elem).attr('class');\n            classElements = className.split(\" \");\n            for (var i = 0; i <= item.length; i++) {\n                for (var prop in opts) {\n                    if (classElements[i] === prop) {\n                        instanceName = prop;\n                    }\n                }\n            }\n\n            return opts ? params = opts[instanceName] : params = defaults[instanceName];\n        }\n\n        function getInner(elem, type) {\n\n            var inner;\n            switch (type) {\n                case \"overlay\":\n                    inner = $(elem).find('.swap-inner');\n                    break;\n                case \"imageSwap\":\n                    inner = $(elem).find('.second-image');\n                    break;\n                case \"caption\":\n                    inner = $(elem).find('.swap-inner');\n                    break;\n            }\n            return inner;\n        }\n\n        function getDimms(elem) {\n            var dims = {\n                width: '100%',\n                height: Math.abs(parseFloat($(elem).outerHeight(false)))\n            };\n            return dims\n        }\n\n        function moveCSSProps(source, target) {\n            var ml = source.css('margin-left');\n            var mr = source.css('margin-right');\n            var mt = source.css('margin-top');\n            var mb = source.css('margin-bottom');\n            var floatVal = source.css('float');\n            source.css({\n                'float': 'none',\n                'margin-left': '0px',\n                'margin-right': '0px',\n                'margin-top': '0px',\n                'margin-bottom': '0px'\n            })\n            target.css({\n                'float': floatVal,\n                'margin-left': ml,\n                'margin-right': mr,\n                'margin-top': mt,\n                'margin-bottom': mb\n            })\n\n        }\n\n        function setCaptionHeight(height, elem) {\n            if (height != 'auto' || height != 'undefined') elem.css('height', parseInt(height) + 'px');\n        }\n\n        function genRGBA(hex, alpha, elem) {\n            //          with both longhand and shorthand support (accepts both #fff or #fffff)\n            if (hex.indexOf('#') == -1 || hex.indexOf('rgb(') > -1 || hex.indexOf('rgba') > -1) {\n                return {\n                    rgba: hex\n                };\n            }\n            var opacity;\n            alpha ? opacity = (alpha / 100).toFixed(2) : opacity = 1;\n\n            function convertRGBDecimalToHex(rgb) {\n\n                // check for RGB\n                var regexRGB = /rgb *\\( *([0-9]{1,3}) *, *([0-9]{1,3}) *, *([0-9]{1,3}) *\\)/;\n                var values = regexRGB.exec(rgb);\n\n                // check for RGBA\n                if (!values) {\n                    var regexRGBA = /rgba *\\( *([0-9]{1,3}) *, *([0-9]{1,3}) *, *([0-9]{1,3}) *, *(0.+[0-9]) *\\)/;\n                    values = regexRGBA.exec(rgb);\n                }\n\n                if (!values) return rgb;\n                if (values.length != 5) {\n                    return rgb; // fall back to what was given.              \n                }\n                var r = Math.round(parseFloat(values[1]));\n                var g = Math.round(parseFloat(values[2]));\n                var b = Math.round(parseFloat(values[3]));\n                if (values[4]) {\n                    opacity = values[4];\n                }\n                return \"#\" + (r + 0x10000).toString(16).substring(3).toUpperCase() + (g + 0x10000).toString(16).substring(3).toUpperCase() + (b + 0x10000).toString(16).substring(3).toUpperCase();\n            }\n\n            hex = convertRGBDecimalToHex(hex);\n\n            var shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n            hex = hex.replace(shorthandRegex, function(m, r, g, b) {\n                return r + r + g + g + b + b;\n            });\n\n            var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n\n            function alhpaToHex(val) {\n                var num = val * 255;\n                return Math.floor(num).toString(16);\n            }\n\n            if (typeof(elem) !== 'undefined' && result) {\n                switch (supportRGBA) {\n                    case true:\n                        elem.css('background-color', 'rgba(' + [parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16)].join(\",\") + ',' + opacity + ')');\n                        break;\n                    case false:\n                        elem.css({\n                            'background': 'transparent',\n                            'filter': 'progid:DXImageTransform.Microsoft.gradient(startColorstr=#' + alhpaToHex(opacity) + result[0].replace('#', '') + ',endColorstr=#' + alhpaToHex(opacity) + result[0].replace('#', '') + ');',\n                            'zoom': 1\n                        });\n                        break;\n                }\n            }\n\n            return result ? {\n                rgba: 'rgba(' + [parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16)].join(\",\") + ',' + opacity + ')',\n                fallback: alhpaToHex(opacity) + result[0].replace('#', '')\n            } : null;\n        }\n\n        function getEaseType(ease) {\n            //    Add more ease types - work in progress\n            var easeCSS = \"\";\n            var easeType;\n            var oldWebkit = false;\n\n            switch (ease.toLowerCase()) {\n                case 'easeinoutback':\n                    easeType = 'cubic-bezier(0.680, -0.550, 0.265, 1.550)';\n                    oldWebkit = 'cubic-bezier(0.680, 0, 0.265, 1)';\n                    break;\n                case 'quick-in':\n                    easeType = \"cubic-bezier(0.315, -0.185, 0.000, 1.270)\";\n                    oldWebkit = \"cubic-bezier(0.315, 0, 0.000, 1)\";\n                    break;\n                case 'accelerate':\n                    easeType = \"cubic-bezier(0.885, 0.420, 0.000, 1.270)\";\n                    oldWebkit = \"cubic-bezier(0.885, 0.420, 0.000, 1)\";\n                    break;\n                case 'super-fast':\n                    easeType = \"cubic-bezier(0.000, 0.870, 0.000, 0.890)\";\n                    break;\n                case 'ease-in-out-back':\n                    easeType = \"cubic-bezier(0.680, -0.550, 0.265, 1.550)\";\n                    oldWebkit = \"cubic-bezier(0.680, 0, 0.265, 1)\";\n                    break;\n                case 'ease-in-out-expo':\n                    easeType = \"cubic-bezier(1.000, 0.000, 0.000, 1.000)\";\n                    break;\n                case 'ease-out-back':\n                    easeType = \"cubic-bezier(0.175, 0.885, 0.320, 1.275)\";\n                    oldWebkit = \"cubic-bezier(0.175, 0.885, 0.320, 1)\";\n                    break;\n                case 'ease-out-circ':\n                    easeType = \"cubic-bezier(0.075, 0.820, 0.165, 1.000)\";\n                    break;\n                case 'ease-in-back':\n                    easeType = \"cubic-bezier(0.600, -0.280, 0.735, 0.045)\";\n                    oldWebkit = \"cubic-bezier(0.600, 0, 0.735, 0.045)\";\n                    break;\n                case 'ease-in-circ':\n                    easeType = \"cubic-bezier(0.600, 0.040, 0.980, 0.335)\";\n                    oldWebkit = \"cubic-bezier(0.600, 0.040, 0.980, 0.335)\";\n                    break;\n                case 'ease':\n                    easeType = \"ease\";\n                    break;\n                case \"ease-in\":\n                    easeType = \"ease-in\";\n                    break;\n                case \"ease-in-out\":\n                    easeType = \"ease-in-out\";\n                    break;\n                case \"ease-out\":\n                    easeType = \"ease-out\";\n                    break;\n            }\n\n            if (oldWebkit) {\n                easeType = oldWebkit;\n                // easeCSS += \"-webkit-transition-timing-function:\" + oldWebkit + \";\";\n            }\n            var prefixes = [\"-webkit-\", \"-moz-\", \"-o-\", \"\"];\n            for (var i = 0; i < prefixes.length; i++) {\n                easeCSS += prefixes[i] + \"transition-timing-function:\" + easeType + \";\"\n            }\n\n            return easeCSS;\n\n\n        };\n\n\n        function centerIcon(icon) {\n            var elem = $(icon);\n            elem\n                .parent()\n                .css({\n                    'width': elem.width(),\n                    'height': elem.height()\n                })\n        }\n        options.resizeEvent = resizeEvent ? true : false;\n\n\n        start(options);\n\n        function start(options) {\n            var addEffects = $();\n\n            item.each(function() {\n\n                var self, params, inner, overlay, initial, dims, type, transitionProp, easeType, icon;\n                self = $(this);\n                self.unbind('.hoverfx');\n                self.css({\n                    \"width\": \"\",\n                    \"height\": \"\"\n                });\n\n\n                params = setParams(self);\n                inner = getInner(self, params.contentType);\n                initial = self.find('.initial-image');\n                overlay = self.find('.overlay');\n                params.overlayColor = inner.css('background-color');\n                params.innerColor = inner.css('background-color');\n                inner.removeAttr('style');\n                overlay.removeAttr('style');\n                initial.removeAttr('style');\n\n                moveCSSProps(initial, self);\n\n                dims = getDimms(self);\n                //console.log(dims);\n                easeType = getEaseType(params.effectEasing);\n                type = params.contentType;\n\n                icon = inner.find('.swap-icons img');\n                centerIcon(icon);\n                if (type == 'overlay') {\n                    transitionProp = 'all';\n                } else {\n                    transitionProp = 'margin';\n                }\n                initial.css('float', 'none');\n\n                if (type == \"caption\") {\n                    if (self.find('.caption-wrap').length == 0) {\n                        var captionWrap = $('<div />').addClass('caption-wrap overlay');\n                        inner.wrap(captionWrap);\n                    }\n                    overlay = self.find('.caption-wrap');\n                } else {\n                    overlay = self.find('.overlay');\n                }\n                overlay.add(inner).css('display', 'block');\n\n\n\n                function applyTransition(elem, prop, easeCSS, duration, includeTiming) {\n                    var property = prop ? prop : \"all\";\n                    var customEase = \"\";\n                    var dur = params.effectDelay + \"ms\";\n                    var delay = \"\";\n\n\n\n                    var transitionValue = property + \" \" + dur;\n                    elem.css({\n                        '-webkit-transition': transitionValue,\n                        '-moz-transition': transitionValue,\n                        '-o-transition': transitionValue,\n                        'transition': transitionValue\n                    })\n                    if (includeTiming) {\n                        applyTiming(elem, easeCSS);\n                    }\n                }\n\n                function applyTiming(elem, easeCSS) {\n                    elem.attr('style', elem.attr('style') + easeCSS);\n                }\n\n                self.addClass(params.effectType);\n\n                var loaded = false;\n\n                if (initial.height() > 0) {\n\n                    loaded = true;\n                    var initialDims = getDimms(initial);\n                    self.css({\n                        'width': initialDims.width/*,\n                        'height': initialDims.height*/\n                    });\n\n                    if (type == \"overlay\") {\n                        applyTransition(inner, transitionProp, easeType, params.effectDelay, true);\n                    }\n                }\n\n                initial.on('load', function() {\n                    var imageDims = getDimms($(this));\n\n                    self.css({\n                        'width': imageDims.width/*,\n                        'height': imageDims.height*/\n                    });\n                    if (type == 'overlay') {\n                        inner.css({\n                            'margin-top': 0 / 2,\n                            'margin-left': Math.abs(imageDims.width - inner.outerWidth()) / 2\n                        });\n                    }\n                    if (type == \"overlay\") {\n                        applyTransition(inner, transitionProp, easeType, params.effectDelay);\n                    }\n\n                });\n\n                inner.css({\n                    'background-color': genRGBA(params.overlayColor, params.overlayAlpha).rgba\n                });\n\n                if (type == \"overlay\") {\n                    applyTransition(overlay, 'opacity', easeType, params.effectDelay, true);\n                }\n\n\n\n                var showCaption, hideCaption;\n\n                var isMobile = {\n                    Android: function() {\n                        return navigator.userAgent.match(/Android/i);\n                    },\n                    BlackBerry: function() {\n                        return navigator.userAgent.match(/BlackBerry/i);\n                    },\n                    iOS: function() {\n                        return navigator.userAgent.match(/iPhone|iPad|iPod/i);\n                    },\n                    Opera: function() {\n                        return navigator.userAgent.match(/Opera Mini/i);\n                    },\n                    Windows: function() {\n                        return navigator.userAgent.match(/IEMobile/i);\n                    },\n                    any: function() {\n                        return !!(isMobile.Android() || isMobile.BlackBerry() || isMobile.iOS() || isMobile.Opera() || isMobile.Windows() || (\"ontouchstart\" in document));\n                    }\n                };\n\n               var _isMobile =  isMobile.any();\n\n\n                if (params.link) {\n                    if (_isMobile == true) {\n\n                    } else {\n                        self.bind('click.hoverfx', function() {\n                            if (params.openPage === 'same') {\n                                window.location.assign(params['link']);\n                            } else {\n                                window.open(params['link'], '_blank');\n                            }\n                        });\n                    }\n                }\n\n\n                if (type == 'overlay') {\n                    self.unbind('.caption');\n                    self.addClass('contentswap-overlay');\n                    var initialDims = getDimms(initial);\n                    //console.log(dims.width + \" .. \" +  inner.outerWidth());\n                    if (initial.height() > 0) {\n                        inner.css({\n                            // 'margin-top': Math.abs(initialDims.height - inner.outerHeight()) / 2,\n                            'margin-top': 0 / 2,\n                            'margin-left': Math.abs(initialDims.width - inner.outerWidth()) / 2\n                        });\n                    }\n\n                }\n\n                if (type == 'caption') {\n                    self.addClass('caption');\n\n                    if (params.direction == 'top') {\n                        if (!loaded) {\n                            setTimeout(function() {\n                                overlay.css({\n                                    'margin-top': (-inner.outerHeight() - 1) + 'px',\n                                    'opacity': 1\n                                });\n                            }, 10);\n\n                        } else {\n                            overlay.css({\n                                'margin-top': (-inner.outerHeight() - 1) + 'px',\n                                'opacity': 1\n                            });\n                        }\n\n                        setTimeout(function() {\n                            overlay.insertBefore(initial);\n\n                        }, 10);\n                    } else {\n\n                        setTimeout(function() {\n                            overlay.css({\n                                'opacity': 1\n                            });\n                        }, 10);\n                    }\n                    //else applyTransition(initial,transitionProp);\n                    var showCaption, hideCaption;\n\n\n                    //work in progress\n                    if (params.captionType == \"over\") {\n\n                        if (params.direction == 'top') {\n                            overlay.css({\n                                'position': 'absolute',\n                                'z-index': 9991\n\n                            });\n                        } else {\n                            overlay.css({\n                                'margin-top': '1px'\n                            });\n                        }\n                        applyTransition(overlay, 'margin', easeType, params.effectDelay, true);\n\n                        showCaption = function() {\n\n                            overlay.css({\n                                'margin-top': (-inner.outerHeight()) + 'px'\n                            });\n                            if (params.direction == 'top') overlay.css('margin-top', 0);\n                        };\n                        hideCaption = function() {\n                            overlay.css({\n                                'margin-top': \"0px\"\n                            });\n                            if (params.direction == 'top') overlay.css('margin-top', (-inner.outerHeight()) + 'px');\n                        }\n                    } else {\n                        applyTransition(overlay, \"margin\", easeType, params.effectDelay, true);\n                        applyTransition(initial, \"margin\", easeType, params.effectDelay, true);\n\n\n                        showCaption = function() {\n\n                            if (params.captionHeight <= inner.outerHeight()) {\n                                setCaptionHeight(params.captionHeight, inner);\n                            }\n\n                            if (params.direction == 'top' && params.captionType != 'over') {\n\n                                overlay.css({\n                                    'margin-top': '0px'\n                                });\n                            } else {\n                                overlay.css({\n                                    'margin-top': -inner.outerHeight()\n                                })\n                                initial.css({\n                                    'margin-top': -inner.outerHeight(),\n                                    'margin-bottom': inner.outerHeight()\n                                })\n\n                            }\n                        }\n\n                        hideCaption = function() {\n                            if (params.direction == 'top') {\n                                overlay.css({\n                                    'margin-top': (-inner.outerHeight() - 1) + 'px'\n                                })\n                            } else {\n                                overlay.css({\n                                    'margin-top': '1px'\n                                })\n                                initial.css({\n                                    'margin-top': '0px',\n                                    'margin-bottom': '0px'\n                                })\n                            }\n                        }\n                    }\n\n\n                }\n\n                if (_isMobile == true) {\n                    self.addClass('hover');\n                    if (type == \"caption\") {\n                        showCaption();\n                    } else {\n\n                    }\n\n                } else {\n                    if (type == \"caption\") {\n                        self.bind('mouseenter.hoverfx', showCaption)\n                            .bind('mouseleave.hoverfx', hideCaption);\n                    }\n\n                }\n\n\n\n\n            });\n        }\n\n    }\n})(jQuery);\n","(function (root, factory) {\n    if (typeof define === 'function' && define.amd) {\n        define(factory);\n    } else if (typeof exports === 'object') {\n        module.exports = factory(require, exports, module);\n    } else {\n        root.CountUp = factory();\n    }\n}(this, function (require, exports, module) {\n\n    /*\n\n        countUp.js\n        by @inorganik\n\n    */\n\n// target = id of html element or var of previously selected html element where counting occurs\n// startVal = the value you want to begin at\n// endVal = the value you want to arrive at\n// decimals = number of decimal places, default 0\n// duration = duration of animation in seconds, default 2\n// options = optional object of options (see below)\n\n    var CountUp = function (target, startVal, endVal, decimals, duration, options) {\n\n        var self = this;\n        self.version = function () {\n            return '1.9.1';\n        };\n\n        // default options\n        self.options = {\n            useEasing: true, // toggle easing\n            useGrouping: true, // 1,000,000 vs 1000000\n            separator: ',', // character to use as a separator\n            decimal: '.', // character to use as a decimal\n            easingFn: easeOutExpo, // optional custom easing function, default is Robert Penner's easeOutExpo\n            formattingFn: formatNumber, // optional custom formatting function, default is formatNumber above\n            prefix: '', // optional text before the result\n            suffix: '', // optional text after the result\n            numerals: [], // optionally pass an array of custom numerals for 0-9\n            onUpdate: false\n        };\n\n        // extend default options with passed options object\n        if (options && typeof options === 'object') {\n            for (var key in self.options) {\n                if (options.hasOwnProperty(key) && options[key] !== null) {\n                    self.options[key] = options[key];\n                }\n            }\n        }\n\n        if (self.options.separator === '') self.options.useGrouping = false;\n\n        // make sure requestAnimationFrame and cancelAnimationFrame are defined\n        // polyfill for browsers without native support\n        // by Opera engineer Erik Möller\n        var lastTime = 0;\n        var vendors = ['webkit', 'moz', 'ms', 'o'];\n        for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {\n            window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];\n            window.cancelAnimationFrame =\n                window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame'];\n        }\n        if (!window.requestAnimationFrame) {\n            window.requestAnimationFrame = function (callback, element) {\n                var currTime = new Date().getTime();\n                var timeToCall = Math.max(0, 16 - (currTime - lastTime));\n                var id = window.setTimeout(function () {\n                        callback(currTime + timeToCall);\n                    },\n                    timeToCall);\n                lastTime = currTime + timeToCall;\n                return id;\n            };\n        }\n        if (!window.cancelAnimationFrame) {\n            window.cancelAnimationFrame = function (id) {\n                clearTimeout(id);\n            };\n        }\n\n        function formatNumber(num) {\n            num = num.toFixed(self.decimals);\n            num += '';\n            var x, x1, x2, rgx;\n            x = num.split('.');\n            x1 = x[0];\n            x2 = x.length > 1 ? self.options.decimal + x[1] : '';\n            rgx = /(\\d+)(\\d{3})/;\n            if (self.options.useGrouping) {\n                while (rgx.test(x1)) {\n                    x1 = x1.replace(rgx, '$1' + self.options.separator + '$2');\n                }\n            }\n            // optional numeral substitution\n            if (self.options.numerals.length) {\n                x1 = x1.replace(/[0-9]/g, function (w) {\n                    return self.options.numerals[+w];\n                })\n                x2 = x2.replace(/[0-9]/g, function (w) {\n                    return self.options.numerals[+w];\n                })\n            }\n            return self.options.prefix + x1 + x2 + self.options.suffix;\n        }\n\n        // Robert Penner's easeOutExpo\n        function easeOutExpo(t, b, c, d) {\n            return c * (-Math.pow(2, -10 * t / d) + 1) * 1024 / 1023 + b;\n        }\n\n        function ensureNumber(n) {\n            return (typeof n === 'number' && !isNaN(n));\n        }\n\n        self.initialize = function () {\n            if (self.initialized) return true;\n\n            self.error = '';\n            self.d = (typeof target === 'string') ? document.getElementById(target) : target;\n            if (!self.d) {\n                self.error = '[CountUp] target is null or undefined'\n                return false;\n            }\n            self.startVal = Number(startVal);\n            self.endVal = Number(endVal);\n            // error checks\n            if (ensureNumber(self.startVal) && ensureNumber(self.endVal)) {\n                self.decimals = Math.max(0, decimals || 0);\n                self.dec = Math.pow(10, self.decimals);\n                self.duration = Number(duration) * 1000 || 4000;\n                self.countDown = (self.startVal > self.endVal);\n                self.frameVal = self.startVal;\n                self.initialized = true;\n                return true;\n            }\n            else {\n                self.error = '[CountUp] startVal (' + startVal + ') or endVal (' + endVal + ') is not a number';\n                return false;\n            }\n        };\n\n        // Print value to target\n        self.printValue = function (value) {\n            var result = self.options.formattingFn(value);\n            // var sizeKeeper = self.options.formattingFn(endVal);\n\n            // sizeKeeper = '<span style=\"visibility: hidden;display: block;line-height: 0px;height: 0px;overflow: hidden;\">'+sizeKeeper+'</span>';\n\n            // result = sizeKeeper+result;\n\n            if (self.d.tagName === 'INPUT') {\n                this.d.value = result;\n            }\n            else if (self.d.tagName === 'text' || self.d.tagName === 'tspan') {\n                this.d.textContent = result;\n            }\n            else {\n                this.d.innerHTML = result;\n            }\n        };\n\n        self.count = function (timestamp) {\n\n            if (!self.startTime) {\n                self.startTime = timestamp;\n            }\n\n            self.timestamp = timestamp;\n            var progress = timestamp - self.startTime;\n            self.remaining = self.duration - progress;\n\n            // to ease or not to ease\n            if (self.options.useEasing) {\n                if (self.countDown) {\n                    self.frameVal = self.startVal - self.options.easingFn(progress, 0, self.startVal - self.endVal, self.duration);\n                } else {\n                    self.frameVal = self.options.easingFn(progress, self.startVal, self.endVal - self.startVal, self.duration);\n                }\n            } else {\n                if (self.countDown) {\n                    self.frameVal = self.startVal - ((self.startVal - self.endVal) * (progress / self.duration));\n                } else {\n                    self.frameVal = self.startVal + (self.endVal - self.startVal) * (progress / self.duration);\n                }\n            }\n\n            // don't go past endVal since progress can exceed duration in the last frame\n            if (self.countDown) {\n                self.frameVal = (self.frameVal < self.endVal) ? self.endVal : self.frameVal;\n            } else {\n                self.frameVal = (self.frameVal > self.endVal) ? self.endVal : self.frameVal;\n            }\n\n            // decimal\n            self.frameVal = Math.round(self.frameVal * self.dec) / self.dec;\n\n            // format and print value\n            self.printValue(self.frameVal);\n\n            if (self.options.onUpdate) {\n                self.options.onUpdate(self.frameVal);\n            }\n\n            // whether to continue\n            if (progress < self.duration) {\n                self.rAF = requestAnimationFrame(self.count);\n            } else {\n                if (self.callback) self.callback();\n            }\n        };\n        // start your animation\n        self.start = function (callback) {\n            if (!self.initialize()) return;\n            self.callback = callback;\n            self.rAF = requestAnimationFrame(self.count);\n        };\n        // toggles pause/resume animation\n        self.pauseResume = function () {\n            if (!self.paused) {\n                self.paused = true;\n                cancelAnimationFrame(self.rAF);\n            } else {\n                self.paused = false;\n                delete self.startTime;\n                self.duration = self.remaining;\n                self.startVal = self.frameVal;\n                requestAnimationFrame(self.count);\n            }\n        };\n        // reset to startVal so animation can be run again\n        self.reset = function () {\n            self.paused = false;\n            delete self.startTime;\n            self.initialized = false;\n            if (self.initialize()) {\n                cancelAnimationFrame(self.rAF);\n                self.printValue(self.startVal);\n            }\n        };\n        // pass a new endVal and start animation\n        self.update = function (newEndVal) {\n            if (!self.initialize()) return;\n            newEndVal = Number(newEndVal);\n            if (!ensureNumber(newEndVal)) {\n                self.error = '[CountUp] update() - new endVal is not a number: ' + newEndVal;\n                return;\n            }\n            self.error = '';\n            if (newEndVal === self.frameVal) return;\n            cancelAnimationFrame(self.rAF);\n            self.paused = false;\n            delete self.startTime;\n            self.startVal = self.frameVal;\n            self.endVal = newEndVal;\n            self.countDown = (self.startVal > self.endVal);\n            self.rAF = requestAnimationFrame(self.count);\n        };\n\n        // format startVal on initialization\n        if (self.initialize()) self.printValue(self.startVal);\n    };\n\n    return CountUp;\n\n}));","/**\n * jQuery Line Progressbar\n * Author: KingRayhan<rayhan095@gmail.com>\n * Author URL: http://rayhan.info\n * Version: 1.0.0\n */\n\n(function ($) {\n    'use strict';\n\n\n    $.fn.LineProgressbar = function (options) {\n\n         options = $.extend({\n             min: 0,\n             max: 100,\n             stop: 50,\n             ShowProgressCount: true,\n             duration: 2000,\n             color: '#654ea3',\n             backgroundColor: '#f5f5f5',\n             suffix: '%',\n             text: 'Category',\n             radius: '0px',\n             height: '10px',\n             width: '100%'\n        }, options);\n\n        $.options = options;\n        return this.each(function (index, el) {\n            // Markup\n            $(el).html('<div class=\"progressbar\"><div class=\"counterText\"></div><div class=\"percentCount\"></div><div class=\"proggress\"></div></div>');\n\n\n\n            var progressFill = $(el).find('.proggress');\n            var progressBar = $(el).find('.progressbar');\n            var progressText = $(el).find('.counterText');\n\n\n            progressFill.css({\n                backgroundColor: options.color,\n                height: options.height,\n                borderRadius: options.radius\n            });\n            progressBar.css({\n                width: options.width,\n                backgroundColor: options.backgroundColor,\n                borderRadius: options.radius\n            });\n\n            progressText.html(options.text);\n\n            // Progressing\n            progressFill.animate(\n                {\n                    width: options.stop + \"%\"\n                },\n                {\n                    step: function (x) {\n                        if (options.ShowProgressCount) {\n                            $(el).find(\".percentCount\").text(Math.round(x) + options.suffix);\n                        }\n                    },\n                    duration: options.duration\n                }\n            );\n            ////////////////////////////////////////////////////////////////////\n        });\n    }\n    $.fn.progressTo = function (next) {\n\n        var options = $.options;\n\n        return this.each(function (index, el) {\n\n            var progressFill = $(el).find('.proggress');\n            var progressBar = $(el).find('.progressbar');\n\n            progressFill.animate(\n                {\n                    width: next + \"%\"\n                },\n                {\n                    step: function (x) {\n                        if (options.ShowProgressCount) {\n                            $(el).find(\".percentCount\").text(Math.round(x) + options.suffix);\n                        }\n                    },\n                    duration: options.duration\n                }\n            );\n            ////////////////////////////////////////////////////////////////////\n        });\n    }\n\n})(jQuery);\n","(function ($) {\n\n    window.addEventListener('resize', function () {\n        var videoElement = document.querySelector('video#wp-custom-header-video') || document.querySelector('iframe#wp-custom-header-video');\n        if (videoElement) {\n            videoSize(videoElement);\n        }\n    });\n\n    function videoSize(videoElement, animate) {\n        var $videoElement = jQuery(videoElement);\n        var $header = jQuery(\".header-homepage.cp-video-bg\");\n        var videoWidth = $header.width(),\n            videoHeight = $header.height();\n\n            videoWidth = Math.max(videoWidth,videoHeight);            \n\n        if (videoWidth < videoHeight * 16 / 9) {\n            videoWidth = 16 / 9 * videoHeight;\n        } else {\n            videoHeight = videoWidth * 9 / 16;\n        }\n\n        var marginLeft = -0.5 * (videoWidth - $header.width());\n\n        $videoElement.css({\n            width: videoWidth,\n            height: videoHeight,\n            \"opacity\": 1,\n            \"left\": marginLeft\n        });\n\n        if (animate === false) {\n            return;\n        }\n\n\n    }\n\n    jQuery(function () {\n        var videoElement = document.querySelector('video#wp-custom-header-video') || document.querySelector('iframe#wp-custom-header-video');\n        if (videoElement) {\n            videoSize(videoElement, false);\n        }\n    });\n\n    __cpVideoElementFirstPlayed = false;\n\n    document.addEventListener('wp-custom-header-video-loaded', function () {\n        var videoElement = document.querySelector('video#wp-custom-header-video');\n\n        if (videoElement) {\n            videoSize(videoElement);\n            return;\n        }\n\n        document.querySelector('#wp-custom-header').addEventListener('play', function () {\n            var iframeVideo = document.querySelector('iframe#wp-custom-header-video');\n            var videoElement = document.querySelector('video#wp-custom-header-video') || iframeVideo;\n          \n            if (videoElement && !__cpVideoElementFirstPlayed) {\n                __cpVideoElementFirstPlayed = true;\n                videoSize(videoElement);\n            }\n          \n        });\n\n    });\n})(jQuery);","/*\n * Backstretch\n * http://srobbin.com/jquery-plugins/backstretch/\n *\n * Copyright (c) 2013 Scott Robbin\n * Licensed under the MIT license.\n */\n\n;(function ($, window, undefined) {\n  'use strict';\n\n  /** @const */\n  var YOUTUBE_REGEXP = /^.*(youtu\\.be\\/|youtube\\.com\\/v\\/|youtube\\.com\\/embed\\/|youtube\\.com\\/watch\\?v=|youtube\\.com\\/watch\\?.*\\&v=)([^#\\&\\?]*).*/i;\n  \n  /* PLUGIN DEFINITION\n   * ========================= */\n\n  $.fn.backstretch = function (images, options) {\n    var args = arguments;\n\n    /*\n     * Scroll the page one pixel to get the right window height on iOS\n     * Pretty harmless for everyone else\n    */\n    if ($(window).scrollTop() === 0 ) {\n      window.scrollTo(0, 0);\n    }\n\n    var returnValues;\n    \n    this.each(function (eachIndex) {\n      var $this = $(this)\n        , obj = $this.data('backstretch');\n\n      // Do we already have an instance attached to this element?\n      if (obj) {\n\n        // Is this a method they're trying to execute?\n        if (typeof args[0] === 'string' &&\n            typeof obj[args[0]] === 'function') {\n              \n          // Call the method\n          var returnValue = obj[args[0]].apply(obj, Array.prototype.slice.call(args, 1));\n          if (returnValue === obj) { // If a method is chaining\n            returnValue = undefined;\n          }\n          if (returnValue !== undefined) {\n            returnValues = returnValues || [];\n            returnValues[eachIndex] = returnValue;\n          }\n          \n          return; // Nothing further to do\n        }\n\n        // Merge the old options with the new\n        options = $.extend(obj.options, options);\n\n        // Remove the old instance\n        if ( obj.hasOwnProperty('destroy') ) {\n          obj.destroy(true);\n        }\n      }\n\n      // We need at least one image\n      if (!images || (images && images.length === 0)) {\n        var cssBackgroundImage = $this.css('background-image');\n        if (cssBackgroundImage && cssBackgroundImage !== 'none') {\n          images = [ { url: $this.css('backgroundImage').replace(/url\\(|\\)|\"|'/g,\"\") } ];\n        } else {\n          $.error('No images were supplied for Backstretch, or element must have a CSS-defined background image.');\n        }\n      }\n\n      obj = new Backstretch(this, images, options || {});\n      $this.data('backstretch', obj);\n    });\n    \n    return returnValues ? returnValues.length === 1 ? returnValues[0] : returnValues : this;\n  };\n\n  // If no element is supplied, we'll attach to body\n  $.backstretch = function (images, options) {\n    // Return the instance\n    return $('body')\n            .backstretch(images, options)\n            .data('backstretch');\n  };\n\n  // Custom selector\n  $.expr[':'].backstretch = function(elem) {\n    return $(elem).data('backstretch') !== undefined;\n  };\n\n  /* DEFAULTS\n   * ========================= */\n\n  $.fn.backstretch.defaults = {\n    duration: 5000                // Amount of time in between slides (if slideshow)\n    , transition: 'fade'          // Type of transition between slides\n    , transitionDuration: 0       // Duration of transition between slides\n    , animateFirst: true          // Animate the transition of first image of slideshow in?\n    , alignX: 0.5                 // The x-alignment for the image, can be 'left'|'center'|'right' or any number between 0.0 and 1.0\n    , alignY: 0.5                 // The y-alignment for the image, can be 'top'|'center'|'bottom' or any number between 0.0 and 1.0\n    , paused: false               // Whether the images should slide after given duration\n    , start: 0                    // Index of the first image to show\n    , preload: 2                  // How many images preload at a time?\n    , preloadSize: 1              // How many images can we preload in parallel?\n    , resolutionRefreshRate: 2500 // How long to wait before switching resolution?\n    , resolutionChangeRatioThreshold: 0.1 // How much a change should it be before switching resolution?\n  };\n\n  /* STYLES\n   *\n   * Baked-in styles that we'll apply to our elements.\n   * In an effort to keep the plugin simple, these are not exposed as options.\n   * That said, anyone can override these in their own stylesheet.\n   * ========================= */\n  var styles = {\n    wrap: {\n      left: 0\n      , top: 0\n      , overflow: 'hidden'\n      , margin: 0\n      , padding: 0\n      , height: '100%'\n      , width: '100%'\n      , zIndex: -999999\n    }\n    , itemWrapper: {\n      position: 'absolute'\n      , display: 'none'\n      , margin: 0\n      , padding: 0\n      , border: 'none'\n      , width: '100%'\n      , height: '100%'\n      , zIndex: -999999\n    }\n    , item: {\n      position: 'absolute'\n      , margin: 0\n      , padding: 0\n      , border: 'none'\n      , width: '100%'\n      , height: '100%'\n      , maxWidth: 'none'\n    }\n  };\n\n  /* Given an array of different options for an image,\n   * choose the optimal image for the container size.\n   *\n   * Given an image template (a string with {{ width }} and/or\n   * {{height}} inside) and a container object, returns the\n   * image url with the exact values for the size of that\n   * container.\n   *\n   * Returns an array of urls optimized for the specified resolution.\n   *\n   */\n  var optimalSizeImages = (function () {\n\n    /* Sorts the array of image sizes based on width */\n    var widthInsertSort = function (arr) {\n      for (var i = 1; i < arr.length; i++) {\n        var tmp = arr[i],\n            j = i;\n        while (arr[j - 1] && parseInt(arr[j - 1].width, 10) > parseInt(tmp.width, 10)) {\n          arr[j] = arr[j - 1];\n          --j;\n        }\n        arr[j] = tmp;\n      }\n\n      return arr;\n    };\n\n    /* Given an array of various sizes of the same image and a container width,\n     * return the best image.\n     */\n    var selectBest = function (containerWidth, containerHeight, imageSizes) {\n\n      var devicePixelRatio = window.devicePixelRatio || 1;\n      var deviceOrientation = getDeviceOrientation();\n      var windowOrientation = getWindowOrientation();\n      var wrapperOrientation = (containerHeight > containerWidth) ?\n        'portrait' :\n        (containerWidth > containerHeight ? 'landscape' : 'square');\n\n      var lastAllowedImage = 0;\n      var testWidth;\n\n      for (var j = 0, image; j < imageSizes.length; j++) {\n\n          image = imageSizes[j];\n\n          // In case a new image was pushed in, process it:\n          if (typeof image === 'string') {\n              image = imageSizes[j] = { url: image };\n          }\n\n          if (image.pixelRatio && image.pixelRatio !== 'auto' && parseFloat(image.pixelRatio) !== devicePixelRatio) {\n              // We disallowed choosing this image for current device pixel ratio,\n              // So skip this one.\n              continue;\n          }\n\n          if (image.deviceOrientation && image.deviceOrientation !== deviceOrientation) {\n              // We disallowed choosing this image for current device orientation,\n              // So skip this one.\n              continue;\n          }\n\n          if (image.windowOrientation && image.windowOrientation !== deviceOrientation) {\n              // We disallowed choosing this image for current window orientation,\n              // So skip this one.\n              continue;\n          }\n\n          if (image.orientation && image.orientation !== wrapperOrientation) {\n              // We disallowed choosing this image for current element's orientation,\n              // So skip this one.\n              continue;\n          }\n\n          // Mark this one as the last one we investigated\n          // which does not violate device pixel ratio rules.\n          // We may choose this one later if there's no match.\n          lastAllowedImage = j;\n\n          // For most images, we match the specified width against element width,\n          // And enforcing a limit depending on the \"pixelRatio\" property if specified.\n          // But if a pixelRatio=\"auto\", then we consider the width as the physical width of the image,\n          // And match it while considering the device's pixel ratio.\n          testWidth = containerWidth;\n          if (image.pixelRatio === 'auto') {\n              containerWidth *= devicePixelRatio;\n          }\n\n          // Stop when the width of the image is larger or equal to the container width\n          if (image.width >= testWidth) {\n              break;\n          }\n      }\n\n      // Use the image located at where we stopped\n      return imageSizes[Math.min(j, lastAllowedImage)];\n    };\n    \n    var replaceTagsInUrl = function (url, templateReplacer) {\n        \n        if (typeof url === 'string') {\n            url = url.replace(/{{(width|height)}}/g, templateReplacer);\n        } else if (url instanceof Array) {\n            for (var i = 0; i < url.length; i++) {\n                if (url[i].src) {\n                    url[i].src = replaceTagsInUrl(url[i].src, templateReplacer);\n                } else {\n                    url[i] = replaceTagsInUrl(url[i], templateReplacer);\n                }\n            }\n        }\n        \n        return url;\n    };\n\n    return function ($container, images) {\n      var containerWidth = $container.width(),\n          containerHeight = $container.height();\n\n      var chosenImages = [];\n\n      var templateReplacer = function (match, key) {\n        if (key === 'width') {\n          return containerWidth;\n        }\n        if (key === 'height') {\n          return containerHeight;\n        }\n        return match;\n      };\n\n      for (var i = 0; i < images.length; i++) {\n        if ($.isArray(images[i])) {\n          images[i] = widthInsertSort(images[i]);\n          var chosen = selectBest(containerWidth, containerHeight, images[i]);\n          chosenImages.push(chosen);\n        } else {\n          // In case a new image was pushed in, process it:\n          if (typeof images[i] === 'string') {\n              images[i] = { url: images[i] };\n          }\n\n          var item = $.extend({}, images[i]);\n          item.url = replaceTagsInUrl(item.url, templateReplacer);\n          chosenImages.push(item);\n        }\n      }\n      return chosenImages;\n    };\n\n  })();\n  \n  var isVideoSource = function (source) {\n    return YOUTUBE_REGEXP.test(source.url) || source.isVideo;\n  };\n\n  /* Preload images */\n  var preload = (function (sources, startAt, count, batchSize, callback) {\n    // Plugin cache\n    var cache = [];\n\n    // Wrapper for cache\n    var caching = function(image){\n      for (var i = 0; i < cache.length; i++) {\n        if (cache[i].src === image.src) {\n          return cache[i];\n        }\n      }\n      cache.push(image);\n      return image;\n    };\n\n    // Execute callback\n    var exec = function(sources, callback, last){\n      if (typeof callback === 'function') {\n        callback.call(sources, last);\n      }\n    };\n\n    // Closure to hide cache\n    return function preload (sources, startAt, count, batchSize, callback){\n      // Check input data\n      if (typeof sources === 'undefined') {\n        return;\n      }\n      if (!$.isArray(sources)) {\n        sources = [sources];\n      }\n\n      if (arguments.length < 5 && typeof arguments[arguments.length - 1] === 'function') {\n        callback = arguments[arguments.length - 1];\n      }\n\n      startAt = (typeof startAt === 'function' || !startAt) ? 0 : startAt;\n      count = (typeof count === 'function' || !count || count < 0) ? sources.length : Math.min(count, sources.length);\n      batchSize = (typeof batchSize === 'function' || !batchSize) ? 1 : batchSize;\n\n      if (startAt >= sources.length) {\n          startAt = 0;\n          count = 0;\n      }\n      if (batchSize < 0) {\n          batchSize = count;\n      }\n      batchSize = Math.min(batchSize, count);\n\n      var next = sources.slice(startAt + batchSize, count - batchSize);\n      sources = sources.slice(startAt, batchSize);\n      count = sources.length;\n\n      // If sources array is empty\n      if (!count) {\n        exec(sources, callback, true);\n        return;\n      }\n\n      // Image loading callback\n      var countLoaded = 0;\n\n      var loaded = function() {\n        countLoaded++;\n        if (countLoaded !== count) {\n          return;\n        }\n\n        exec(sources, callback, !next);\n        preload(next, 0, 0, batchSize, callback);\n      };\n\n      // Loop sources to preload\n      var image;\n\n      for (var i = 0; i < sources.length; i++) {\n        \n        if (isVideoSource(sources[i])) {\n          \n          // Do not preload videos. There are issues with that.\n          // First - we need to keep an instance of the preloaded and use that exactly, not a copy.\n          // Second - there are memory issues.\n          // If there will be a requirement from users - I'll try to implement this.\n\n          continue;\n            \n        } else {\n      \n          image = new Image();\n          image.src = sources[i].url;\n\n          image = caching(image);\n\n          if (image.complete) {\n            loaded();\n          } else {\n            $(image).on('load error', loaded);\n          }\n            \n        }\n        \n      }\n    };\n  })();\n\n  /* Process images array */\n  var processImagesArray = function (images) {\n    var processed = [];\n    for (var i = 0; i < images.length; i++) {\n      if (typeof images[i] === 'string') {\n        processed.push({ url: images[i] });\n      }\n      else if ($.isArray(images[i])) {\n        processed.push(processImagesArray(images[i]));\n      }\n      else {\n        processed.push(processOptions(images[i]));\n      }\n    }\n    return processed;\n  };\n\n  /* Process options */\n  var processOptions = function (options, required) {\n\n    // Convert old options\n\n    // centeredX/centeredY are deprecated\n    if (options.centeredX || options.centeredY) {\n      if (window.console && window.console.log) {\n        window.console.log('jquery.backstretch: `centeredX`/`centeredY` is deprecated, please use `alignX`/`alignY`');\n      }\n      if (options.centeredX) {\n        options.alignX = 0.5;\n      }\n      if (options.centeredY) {\n        options.alignY = 0.5;\n      }\n    }\n\n    // Deprecated spec\n    if (options.speed !== undefined) {\n\n      if (window.console && window.console.log) {\n        window.console.log('jquery.backstretch: `speed` is deprecated, please use `transitionDuration`');\n      }\n\n      options.transitionDuration = options.speed;\n      options.transition = 'fade';\n    }\n\n    // Typo\n    if (options.resolutionChangeRatioTreshold !== undefined) {\n      window.console.log('jquery.backstretch: `treshold` is a typo!');\n      options.resolutionChangeRatioThreshold = options.resolutionChangeRatioTreshold;\n    }\n\n    // Current spec that needs processing\n\n    if (options.fadeFirst !== undefined) {\n      options.animateFirst = options.fadeFirst;\n    }\n\n    if (options.fade !== undefined) {\n      options.transitionDuration = options.fade;\n      options.transition = 'fade';\n    }\n\n    return processAlignOptions(options);\n  };\n\n  /* Process align options */\n  var processAlignOptions = function (options, required) {\n    if (options.alignX === 'left') {\n      options.alignX = 0.0;\n    }\n    else if (options.alignX === 'center') {\n      options.alignX = 0.5;\n    }\n    else if (options.alignX === 'right') {\n      options.alignX = 1.0;\n    }\n    else {\n      if (options.alignX !== undefined || required) {\n        options.alignX = parseFloat(options.alignX);\n        if (isNaN(options.alignX)) {\n          options.alignX = 0.5;\n        }\n      }\n    }\n\n    if (options.alignY === 'top') {\n      options.alignY = 0.0;\n    }\n    else if (options.alignY === 'center') {\n      options.alignY = 0.5;\n    }\n    else if (options.alignY === 'bottom') {\n      options.alignY = 1.0;\n    }\n    else {\n      if (options.alignX !== undefined || required) {\n        options.alignY = parseFloat(options.alignY);\n        if (isNaN(options.alignY)) {\n          options.alignY = 0.5;\n        }\n      }\n    }\n\n    return options;\n  };\n\n  /* CLASS DEFINITION\n   * ========================= */\n  var Backstretch = function (container, images, options) {\n    this.options = $.extend({}, $.fn.backstretch.defaults, options || {});\n\n    this.firstShow = true;\n\n    // Process options\n    processOptions(this.options, true);\n\n    /* In its simplest form, we allow Backstretch to be called on an image path.\n     * e.g. $.backstretch('/path/to/image.jpg')\n     * So, we need to turn this back into an array.\n     */\n    this.images = processImagesArray($.isArray(images) ? images : [images]);\n\n    /**\n     * Paused-Option\n     */\n    if (this.options.paused) {\n        this.paused = true;\n    }\n\n    /**\n     * Start-Option (Index)\n     */\n    if (this.options.start >= this.images.length)\n    {\n        this.options.start = this.images.length - 1;\n    }\n    if (this.options.start < 0)\n    {\n        this.options.start = 0;\n    }\n\n    // Convenience reference to know if the container is body.\n    this.isBody = container === document.body;\n\n    /* We're keeping track of a few different elements\n     *\n     * Container: the element that Backstretch was called on.\n     * Wrap: a DIV that we place the image into, so we can hide the overflow.\n     * Root: Convenience reference to help calculate the correct height.\n     */\n    var $window = $(window);\n    this.$container = $(container);\n    this.$root = this.isBody ? supportsFixedPosition ? $window : $(document) : this.$container;\n\n    this.originalImages = this.images;\n    this.images = optimalSizeImages(\n        this.options.alwaysTestWindowResolution ? $window : this.$root, \n        this.originalImages);\n\n    /**\n     * Pre-Loading.\n     * This is the first image, so we will preload a minimum of 1 images.\n     */\n    preload(this.images, this.options.start || 0, this.options.preload || 1);\n\n    // Don't create a new wrap if one already exists (from a previous instance of Backstretch)\n    var $existing = this.$container.children(\".backstretch\").first();\n    this.$wrap = $existing.length ? $existing : \n        $('<div class=\"backstretch\"></div>')\n        .css(this.options.bypassCss ? {} : styles.wrap)\n        .appendTo(this.$container);\n\n    if (!this.options.bypassCss) {\n        \n        // Non-body elements need some style adjustments\n        if (!this.isBody) {\n          // If the container is statically positioned, we need to make it relative,\n          // and if no zIndex is defined, we should set it to zero.\n          var position = this.$container.css('position')\n            , zIndex = this.$container.css('zIndex');\n\n          this.$container.css({\n              position: position === 'static' ? 'relative' : position\n            , zIndex: zIndex === 'auto' ? 0 : zIndex\n          });\n\n          // Needs a higher z-index\n          this.$wrap.css({zIndex: -999998});\n        }\n\n        // Fixed or absolute positioning?\n        this.$wrap.css({\n            position: this.isBody && supportsFixedPosition ? 'fixed' : 'absolute'\n        });\n    \n    }\n\n    // Set the first image\n    this.index = this.options.start;\n    this.show(this.index);\n\n    // Listen for resize\n    $window.on('resize.backstretch', $.proxy(this.resize, this))\n           .on('orientationchange.backstretch', $.proxy(function () {\n              // Need to do this in order to get the right window height\n              if (this.isBody && window.pageYOffset === 0) {\n                window.scrollTo(0, 1);\n                this.resize();\n              }\n           }, this));\n  };\n\n  var performTransition = function (options) {\n\n    var transition = options.transition || 'fade';\n\n    // Look for multiple options\n    if (typeof transition === 'string' && transition.indexOf('|') > -1) {\n      transition = transition.split('|');\n    }\n\n    if (transition instanceof Array) {\n      transition = transition[Math.round(Math.random() * (transition.length - 1))];\n    }\n    \n    var $new = options['new'];\n    var $old = options['old'] ? options['old'] : $([]);\n\n    switch (transition.toString().toLowerCase()) {\n\n      default:\n      case 'fade':\n        $new.fadeIn({\n          duration: options.duration,\n          complete: options.complete,\n          easing: options.easing || undefined\n        });\n        break;\n        \n      case 'fadeinout':\n      case 'fade_in_out':\n            \n        var fadeInNew = function () {\n            $new.fadeIn({\n              duration: options.duration / 2,\n              complete: options.complete,\n              easing: options.easing || undefined\n            });\n        };\n        \n        if ($old.length) {\n            $old.fadeOut({\n              duration: options.duration / 2,\n              complete: fadeInNew,\n              easing: options.easing || undefined\n            });\n        } else {\n            fadeInNew();\n        }\n        \n        break;\n\n      case 'pushleft':\n      case 'push_left':\n      case 'pushright':\n      case 'push_right':\n      case 'pushup':\n      case 'push_up':\n      case 'pushdown':\n      case 'push_down':\n      case 'coverleft':\n      case 'cover_left':\n      case 'coverright':\n      case 'cover_right':\n      case 'coverup':\n      case 'cover_up':\n      case 'coverdown':\n      case 'cover_down':\n\n        var transitionParts = transition.match(/^(cover|push)_?(.*)$/);\n\n        var animProp = transitionParts[2] === 'left' ? 'right' :\n            transitionParts[2] === 'right' ? 'left' :\n                transitionParts[2] === 'down' ? 'top' :\n                    transitionParts[2] === 'up' ? 'bottom' :\n                        'right';\n\n        var newCssStart = {\n          'display': ''\n        }, newCssAnim = {};\n        newCssStart[animProp] = '-100%';\n        newCssAnim[animProp] = 0;\n\n        $new\n            .css(newCssStart)\n            .animate(newCssAnim, {\n              duration: options.duration,\n              complete: function () {\n                $new.css(animProp, '');\n                options.complete.apply(this, arguments);\n              },\n              easing: options.easing || undefined\n            });\n\n        if (transitionParts[1] === 'push' && $old.length) {\n            var oldCssAnim = {};\n            oldCssAnim[animProp] = '100%';\n\n            $old\n                .animate(oldCssAnim, {\n                  duration: options.duration,\n                  complete: function () {\n                    $old.css('display', 'none');\n                  },\n                  easing: options.easing || undefined\n                });\n        }\n\n        break;\n    }\n\n  };\n\n  /* PUBLIC METHODS\n   * ========================= */\n  Backstretch.prototype = {\n\n      resize: function () {\n        try {\n\n          // Check for a better suited image after the resize\n          var $resTest = this.options.alwaysTestWindowResolution ? $(window) : this.$root;\n          var newContainerWidth = $resTest.width();\n          var newContainerHeight = $resTest.height();\n          var changeRatioW = newContainerWidth / (this._lastResizeContainerWidth || 0);\n          var changeRatioH = newContainerHeight / (this._lastResizeContainerHeight || 0);\n          var resolutionChangeRatioThreshold = this.options.resolutionChangeRatioThreshold || 0.0;\n\n          // check for big changes in container size\n          if ((newContainerWidth !== this._lastResizeContainerWidth ||\n               newContainerHeight !== this._lastResizeContainerHeight) &&\n              ((Math.abs(changeRatioW - 1) >= resolutionChangeRatioThreshold || isNaN(changeRatioW)) ||\n              (Math.abs(changeRatioH - 1) >= resolutionChangeRatioThreshold || isNaN(changeRatioH)))) {\n\n            this._lastResizeContainerWidth = newContainerWidth;\n            this._lastResizeContainerHeight = newContainerHeight;\n\n            // Big change: rebuild the entire images array\n            this.images = optimalSizeImages($resTest, this.originalImages);\n\n            // Preload them (they will be automatically inserted on the next cycle)\n            if (this.options.preload) {\n              preload(this.images, (this.index + 1) % this.images.length, this.options.preload);\n            }\n\n            // In case there is no cycle and the new source is different than the current\n            if (this.images.length === 1 &&\n                this._currentImage.url !== this.images[0].url) {\n\n              // Wait a little an update the image being showed\n              var that = this;\n              clearTimeout(that._selectAnotherResolutionTimeout);\n              that._selectAnotherResolutionTimeout = setTimeout(function () {\n                that.show(0);\n              }, this.options.resolutionRefreshRate);\n            }\n          }\n\n          var bgCSS = {left: 0, top: 0, right: 'auto', bottom: 'auto'}\n            , rootWidth = this.isBody ? this.$root.width() : this.$root.innerWidth()\n            , rootHeight = this.isBody ? ( window.innerHeight ? window.innerHeight : this.$root.height() ) : this.$root.innerHeight()\n            , bgWidth = rootWidth\n            , bgHeight = bgWidth / this.$itemWrapper.data('ratio')\n            , evt = $.Event('backstretch.resize', {\n              relatedTarget: this.$container[0]\n            })\n            , bgOffset\n            , alignX = this._currentImage.alignX === undefined ? this.options.alignX : this._currentImage.alignX\n            , alignY = this._currentImage.alignY === undefined ? this.options.alignY : this._currentImage.alignY;\n\n            // Make adjustments based on image ratio\n            if (bgHeight >= rootHeight) {\n                bgCSS.top = -(bgHeight - rootHeight) * alignY;\n            } else {\n                bgHeight = rootHeight;\n                bgWidth = bgHeight * this.$itemWrapper.data('ratio');\n                bgOffset = (bgWidth - rootWidth) / 2;\n                bgCSS.left = -(bgWidth - rootWidth) * alignX;\n            }\n\n            if (!this.options.bypassCss) {\n\n                this.$wrap\n                    .css({width: rootWidth, height: rootHeight})\n                    .find('>.backstretch-item').not('.deleteable')\n                    .each(function () {\n                        var $wrapper = $(this);\n                        $wrapper.find('img,video,iframe')\n                                .css({width: bgWidth, height: bgHeight})\n                                .css(bgCSS);\n                    });\n            }\n\n            this.$container.trigger(evt, this);\n        } catch(err) {\n            // IE7 seems to trigger resize before the image is loaded.\n            // This try/catch block is a hack to let it fail gracefully.\n        }\n\n        return this;\n      }\n\n      // Show the slide at a certain position\n    , show: function (newIndex, overrideOptions) {\n\n        // Validate index\n        if (Math.abs(newIndex) > this.images.length - 1) {\n          return;\n        }\n\n        // Vars\n        var that = this\n          , $oldItemWrapper = that.$wrap.find('>.backstretch-item').addClass('deleteable')\n          , oldVideoWrapper = that.videoWrapper\n          , evtOptions = { relatedTarget: that.$container[0] };\n\n        // Trigger the \"before\" event\n        that.$container.trigger($.Event('backstretch.before', evtOptions), [that, newIndex]);\n\n        // Set the new frame index\n        this.index = newIndex;\n        var selectedImage = that.images[newIndex];\n\n        // Pause the slideshow\n        clearTimeout(that._cycleTimeout);\n\n        // New image\n\n        delete that.videoWrapper; // Current item may not be a video\n\n        var isVideo = isVideoSource(selectedImage);\n        if (isVideo) {\n          that.videoWrapper = new VideoWrapper(selectedImage);\n          that.$item = that.videoWrapper.$video.css('pointer-events', 'none');\n        } else {\n          that.$item = $('<img />');\n        }\n\n        that.$itemWrapper = $('<div class=\"backstretch-item\">')\n            .append(that.$item);\n\n        if (this.options.bypassCss) {\n            that.$itemWrapper.css({\n              'display': 'none'\n            });\n        } else {\n          that.$itemWrapper.css(styles.itemWrapper);\n          that.$item.css(styles.item);\n        }\n\n        that.$item.bind(isVideo ? 'canplay' : 'load', function (e) {\n            var $this = $(this)\n              , $wrapper = $this.parent()\n              , options = $wrapper.data('options');\n              \n            if (overrideOptions) {\n              options = $.extend({}, options, overrideOptions);\n            }\n\n            var imgWidth = this.naturalWidth || this.videoWidth || this.width\n              , imgHeight = this.naturalHeight || this.videoHeight || this.height;\n\n            // Save the ratio\n            $wrapper.data('ratio', imgWidth / imgHeight);\n\n            var getOption = function (opt) {\n              return options[opt] !== undefined ?\n                options[opt] :\n                that.options[opt];\n            };\n\n            var transition = getOption('transition');\n            var transitionEasing = getOption('transitionEasing');\n            var transitionDuration = getOption('transitionDuration');\n\n            // Show the image, then delete the old one\n            var bringInNextImage = function () {\n              \n              if (oldVideoWrapper) {\n                oldVideoWrapper.stop();\n                oldVideoWrapper.destroy();\n              }\n              \n              $oldItemWrapper.remove();\n\n              // Resume the slideshow\n              if (!that.paused && that.images.length > 1) {\n                that.cycle();\n              }\n\n              // Now we can clear the background on the element, to spare memory\n              if (!that.options.bypassCss && !that.isBody) {\n                that.$container.css('background-image', 'none');\n              }\n\n              // Trigger the \"after\" and \"show\" events\n              // \"show\" is being deprecated\n              $(['after', 'show']).each(function () {\n                that.$container.trigger($.Event('backstretch.' + this, evtOptions), [that, newIndex]);\n              });\n              \n              if (isVideo) {\n                that.videoWrapper.play();\n              }\n            };\n\n            if ((that.firstShow && !that.options.animateFirst) || !transitionDuration || !transition) {\n                // Avoid transition on first show or if there's no transitionDuration value\n                $wrapper.show();\n                bringInNextImage();\n            } else {\n\n                performTransition({\n                    'new': $wrapper,\n                    old: $oldItemWrapper,\n                    transition: transition,\n                    duration: transitionDuration,\n                    easing: transitionEasing,\n                    complete: bringInNextImage\n                });\n\n            }\n\n            that.firstShow = false;\n\n            // Resize\n            that.resize();\n        });\n\n        that.$itemWrapper.appendTo(that.$wrap);\n\n        that.$item.attr('alt', selectedImage.alt || '');\n        that.$itemWrapper.data('options', selectedImage);\n\n        if (!isVideo) {\n          that.$item.attr('src', selectedImage.url);\n        }\n        \n        that._currentImage = selectedImage;\n\n        return that;\n      }\n\n    , current: function () {\n        return this.index;\n      }\n\n    , next: function () {\n        var args = Array.prototype.slice.call(arguments, 0);\n        args.unshift(this.index < this.images.length - 1 ? this.index + 1 : 0);\n        return this.show.apply(this, args);\n      }\n\n    , prev: function () {\n        var args = Array.prototype.slice.call(arguments, 0);\n        args.unshift(this.index === 0 ? this.images.length - 1 : this.index - 1);\n        return this.show.apply(this, args);\n      }\n\n    , pause: function () {\n        // Pause the slideshow\n        this.paused = true;\n        \n        if (this.videoWrapper) {\n          this.videoWrapper.pause();\n        }\n        \n        return this;\n      }\n\n    , resume: function () {\n        // Resume the slideshow\n        this.paused = false;\n        \n        if (this.videoWrapper) {\n          this.videoWrapper.play();\n        }\n        \n        this.cycle();\n        return this;\n      }\n\n    , cycle: function () {\n        // Start/resume the slideshow\n        if(this.images.length > 1) {\n          // Clear the timeout, just in case\n          clearTimeout(this._cycleTimeout);\n\n          var duration = (this._currentImage && this._currentImage.duration) || this.options.duration;\n          var isVideo = isVideoSource(this._currentImage);\n          \n          var callNext = function () {\n            this.$item.off('.cycle');\n            \n            // Check for paused slideshow\n            if (!this.paused) {\n              this.next();\n            }\n          };\n\n          // Special video handling\n          if (isVideo) {\n\n            // Leave video at last frame\n            if (!this._currentImage.loop) {\n              var lastFrameTimeout = 0;\n\n              this.$item\n                .on('playing.cycle', function () {\n                  var player = $(this).data('player');\n\n                  clearTimeout(lastFrameTimeout);\n                  lastFrameTimeout = setTimeout(function () {\n                    player.pause();\n                    player.$video.trigger('ended');\n                  }, (player.getDuration() - player.getCurrentTime()) * 1000);\n                })\n                .on('ended.cycle', function () {\n                  clearTimeout(lastFrameTimeout);\n                });\n            }\n\n            // On error go to next\n            this.$item.on('error.cycle initerror.cycle', $.proxy(callNext, this));\n          }\n\n          if (isVideo && !this._currentImage.duration) {\n            // It's a video - playing until end\n            this.$item.on('ended.cycle', $.proxy(callNext, this));\n            \n          } else {\n            // Cycling according to specified duration\n            this._cycleTimeout = setTimeout($.proxy(callNext, this), duration);\n          }\n          \n        }\n        return this;\n      }\n\n    , destroy: function (preserveBackground) {\n        // Stop the resize events\n        $(window).off('resize.backstretch orientationchange.backstretch');\n\n        // Stop any videos\n        if (this.videoWrapper) {\n          this.videoWrapper.destroy();\n        }\n        \n        // Clear the timeout\n        clearTimeout(this._cycleTimeout);\n\n        // Remove Backstretch\n        if(!preserveBackground) {\n          this.$wrap.remove();\n        }\n        this.$container.removeData('backstretch');\n      }\n  };\n    \n /**\n  * Video Abstraction Layer\n  *\n  * Static methods:\n  * > VideoWrapper.loadYoutubeAPI() -> Call in order to load the Youtube API. \n  *                                   An 'youtube_api_load' event will be triggered on $(window) when the API is loaded.\n  *\n  * Generic:\n  * > player.type -> type of the video\n  * > player.video / player.$video -> contains the element holding the video\n  * > player.play() -> plays the video\n  * > player.pause() -> pauses the video\n  * > player.setCurrentTime(position) -> seeks to a position by seconds\n  * \n  * Youtube:\n  * > player.ytId will contain the youtube ID if the source is a youtube url\n  * > player.ytReady is a flag telling whether the youtube source is ready for playback\n  * */\n\n  var VideoWrapper = function () { this.init.apply(this, arguments); };\n\n  /**\n   * @param {Object} options\n   * @param {String|Array<String>|Array<{{src: String, type: String?}}>} options.url\n   * @param {Boolean} options.loop=false\n   * @param {Boolean?} options.mute=true\n   * @param {String?} options.poster\n   * loop, mute, poster\n   */\n  VideoWrapper.prototype.init = function (options) {\n\n    var that = this;\n    \n    var $video;\n\n    var setVideoElement = function () {\n      that.$video = $video;\n      that.video = $video[0];\n    };\n    \n    // Determine video type\n    \n    var videoType = 'video';\n    \n    if (!(options.url instanceof Array) &&\n      YOUTUBE_REGEXP.test(options.url)) {\n      videoType = 'youtube';\n    }\n    \n    that.type = videoType;\n\n    if (videoType === 'youtube') {\n\n      // Try to load the API in the meantime\n      VideoWrapper.loadYoutubeAPI();\n\n      that.ytId = options.url.match(YOUTUBE_REGEXP)[2];\n      var src = 'https://www.youtube.com/embed/' + that.ytId +\n        '?rel=0&autoplay=0&showinfo=0&controls=0&modestbranding=1' +\n        '&cc_load_policy=0&disablekb=1&iv_load_policy=3&loop=0' +\n        '&enablejsapi=1&origin=' + encodeURIComponent(window.location.origin);\n\n      that.__ytStartMuted = !!options.mute || options.mute === undefined;\n\n      $video = $('<iframe />')\n        .attr({ 'src_to_load': src })\n        .css({ 'border': 0, 'margin': 0, 'padding': 0 })\n        .data('player', that);\n        \n      if (options.loop) {\n        $video.on('ended.loop', function () {\n          if (!that.__manuallyStopped) {\n           that.play();\n          }\n        });\n      }\n\n      that.ytReady = false;\n\n      setVideoElement();\n\n      if (window['YT']) {\n        that._initYoutube();\n        $video.trigger('initsuccess');\n      } else {\n        $(window).one('youtube_api_load', function () {\n          that._initYoutube();\n          $video.trigger('initsuccess');\n        });\n      }\n      \n    }\n    else {\n      // Traditional <video> tag with multiple sources\n      \n      $video = $('<video>')\n        .prop('autoplay', false)\n        .prop('controls', false)\n        .prop('loop', !!options.loop)\n        .prop('muted', !!options.mute || options.mute === undefined)\n        \n        // Let the first frames be available before playback, as we do transitions\n        .prop('preload', 'auto')\n        .prop('poster', options.poster || '');\n        \n      var sources = (options.url instanceof Array) ? options.url : [options.url];\n\n      for (var i = 0; i < sources.length; i++) {\n        var sourceItem = sources[i];\n        if (typeof(sourceItem) === 'string') {\n          sourceItem = { src: sourceItem };\n        }\n        $('<source>')\n          .attr('src', sourceItem.src)\n          // Make sure to not specify type if unknown - \n          //   so the browser will try to autodetect.\n          .attr('type', sourceItem.type || null)\n          .appendTo($video);\n      }\n      \n      if (!$video[0].canPlayType || !sources.length) {\n        $video.trigger('initerror');\n      } else {\n        $video.trigger('initsuccess');\n      }\n\n      setVideoElement();\n    }\n\n  };\n\n  VideoWrapper.prototype._initYoutube = function () {\n    var that = this;\n    \n    var YT = window['YT'];\n\n    that.$video\n      .attr('src', that.$video.attr('src_to_load'))\n      .removeAttr('src_to_load');\n\n    // It won't init if it's not in the DOM, so we emulate that\n    var hasParent = !!that.$video[0].parentNode;\n    if (!hasParent) {\n      var $tmpParent = $('<div>').css('display', 'none !important').appendTo(document.body);\n      that.$video.appendTo($tmpParent);\n    }\n\n    var player = new YT.Player(that.video, {\n      events: {\n        'onReady': function () {\n\n          if (that.__ytStartMuted) {\n            player.mute();\n          }\n\n          if (!hasParent) {\n            // Restore parent to old state - without interrupting any changes\n            if (that.$video[0].parentNode === $tmpParent[0]) {\n              that.$video.detach();\n            }\n            $tmpParent.remove();\n          }\n\n          that.ytReady = true;\n          that._updateYoutubeSize();\n          that.$video.trigger('canplay');\n        },\n        'onStateChange': function (event) {\n          switch (event.data) {\n            case YT.PlayerState.PLAYING:\n              that.$video.trigger('playing');\n              break;\n            case YT.PlayerState.ENDED:\n              that.$video.trigger('ended');\n              break;\n            case YT.PlayerState.PAUSED:\n              that.$video.trigger('pause');\n              break;\n            case YT.PlayerState.BUFFERING:\n              that.$video.trigger('waiting');\n              break;\n            case YT.PlayerState.CUED:\n              that.$video.trigger('canplay');\n              break;\n          }\n        },\n        'onPlaybackQualityChange': function () {\n          that._updateYoutubeSize();\n          that.$video.trigger('resize');\n        },\n        'onError': function (err) {\n          that.hasError = true;\n          that.$video.trigger({ 'type': 'error', 'error': err });\n        }\n      }\n    });\n\n    that.ytPlayer = player;\n\n    return that;\n  };    \n    \n  VideoWrapper.prototype._updateYoutubeSize = function () {\n    var that = this;\n\n    switch (that.ytPlayer.getPlaybackQuality() || 'medium') {\n      case 'small':\n        that.video.videoWidth = 426;\n        that.video.videoHeight = 240;\n        break;\n      case 'medium':\n        that.video.videoWidth = 640;\n        that.video.videoHeight = 360;\n        break;\n      default:\n      case 'large':\n        that.video.videoWidth = 854;\n        that.video.videoHeight = 480;\n        break;\n      case 'hd720':\n        that.video.videoWidth = 1280;\n        that.video.videoHeight = 720;\n        break;\n      case 'hd1080':\n        that.video.videoWidth = 1920;\n        that.video.videoHeight = 1080;\n        break;\n      case 'highres':\n        that.video.videoWidth = 2560;\n        that.video.videoHeight = 1440;\n        break;\n    }\n\n    return that;\n  };\n\n  VideoWrapper.prototype.play = function () {\n    var that = this;\n\n    that.__manuallyStopped = false;\n    \n    if (that.type === 'youtube') {\n      if (that.ytReady) {\n        that.$video.trigger('play');\n        that.ytPlayer.playVideo();\n      }\n    } else {\n      that.video.play();\n    }\n\n    return that;\n  };\n\n  VideoWrapper.prototype.pause = function () {\n    var that = this;\n\n    that.__manuallyStopped = false;\n    \n    if (that.type === 'youtube') {\n      if (that.ytReady) {\n        that.ytPlayer.pauseVideo();\n      }\n    } else {\n      that.video.pause();\n    }\n\n    return that;\n  };\n\n  VideoWrapper.prototype.stop = function () {\n    var that = this;\n\n    that.__manuallyStopped = true;\n    \n    if (that.type === 'youtube') {\n      if (that.ytReady) {\n        that.ytPlayer.pauseVideo();\n        that.ytPlayer.seekTo(0);\n      }\n    } else {\n      that.video.pause();\n      that.video.currentTime = 0;\n    }\n\n    return that;\n  };\n\n  VideoWrapper.prototype.destroy = function () {\n    var that = this;\n\n    if (that.ytPlayer) {\n      that.ytPlayer.destroy();\n    }\n\n    that.$video.remove();\n\n    return that;\n  };\n\n  VideoWrapper.prototype.getCurrentTime = function (seconds) {\n    var that = this;\n\n    if (that.type === 'youtube') {\n      if (that.ytReady) {\n        return that.ytPlayer.getCurrentTime();\n      }\n    } else {\n      return that.video.currentTime;\n    }\n\n    return 0;\n  };\n\n  VideoWrapper.prototype.setCurrentTime = function (seconds) {\n    var that = this;\n\n    if (that.type === 'youtube') {\n      if (that.ytReady) {\n        that.ytPlayer.seekTo(seconds, true);\n      }\n    } else {\n      that.video.currentTime = seconds;\n    }\n\n    return that;\n  };\n\n  VideoWrapper.prototype.getDuration = function () {\n    var that = this;\n\n    if (that.type === 'youtube') {\n      if (that.ytReady) {\n        return that.ytPlayer.getDuration();\n      }\n    } else {\n      return that.video.duration;\n    }\n\n    return 0;\n  };\n\n  /**\n   * This will load the youtube API (if not loaded yet)\n   * Use $(window).one('youtube_api_load', ...) to listen for API loaded event\n   */\n  VideoWrapper.loadYoutubeAPI = function () {\n    if (window['YT']) {\n      return;\n    }\n    if (!$('script[src*=www\\\\.youtube\\\\.com\\\\/iframe_api]').length) {\n      $('<script type=\"text/javascript\" src=\"https://www.youtube.com/iframe_api\">').appendTo('body');\n    }\n    var ytAPILoadInt = setInterval(function () {\n      if (window['YT'] && window['YT'].loaded) {\n        $(window).trigger('youtube_api_load');\n        clearTimeout(ytAPILoadInt);\n      }\n    }, 50);\n  };\n\n  var getDeviceOrientation = function () {\n\n    if ('matchMedia' in window) {\n      if (window.matchMedia(\"(orientation: portrait)\").matches) {\n         return 'portrait';\n      } else if (window.matchMedia(\"(orientation: landscape)\").matches) {\n         return 'landscape';\n      }\n    }\n\n    if (screen.height > screen.width) {\n      return 'portrait';\n    }\n\n    // Even square devices have orientation,\n    //   but a desktop browser may be too old for `matchMedia`.\n    // Defaulting to `landscape` for the VERY rare case of a square desktop screen is good enough.\n    return 'landscape';\n  };\n\n  var getWindowOrientation = function () {\n    if (window.innerHeight > window.innerWidth) {\n      return 'portrait';\n    }\n    if (window.innerWidth > window.innerHeight) {\n      return 'landscape';\n    }\n\n    return 'square';\n  };\n\n  /* SUPPORTS FIXED POSITION?\n   *\n   * Based on code from jQuery Mobile 1.1.0\n   * http://jquerymobile.com/\n   *\n   * In a nutshell, we need to figure out if fixed positioning is supported.\n   * Unfortunately, this is very difficult to do on iOS, and usually involves\n   * injecting content, scrolling the page, etc.. It's ugly.\n   * jQuery Mobile uses this workaround. It's not ideal, but works.\n   *\n   * Modified to detect IE6\n   * ========================= */\n\n  var supportsFixedPosition = (function () {\n    var ua = navigator.userAgent\n      , platform = navigator.platform\n        // Rendering engine is Webkit, and capture major version\n      , wkmatch = ua.match( /AppleWebKit\\/([0-9]+)/ )\n      , wkversion = !!wkmatch && wkmatch[ 1 ]\n      , ffmatch = ua.match( /Fennec\\/([0-9]+)/ )\n      , ffversion = !!ffmatch && ffmatch[ 1 ]\n      , operammobilematch = ua.match( /Opera Mobi\\/([0-9]+)/ )\n      , omversion = !!operammobilematch && operammobilematch[ 1 ]\n      , iematch = ua.match( /MSIE ([0-9]+)/ )\n      , ieversion = !!iematch && iematch[ 1 ];\n\n    return !(\n      // iOS 4.3 and older : Platform is iPhone/Pad/Touch and Webkit version is less than 534 (ios5)\n      ((platform.indexOf( \"iPhone\" ) > -1 || platform.indexOf( \"iPad\" ) > -1  || platform.indexOf( \"iPod\" ) > -1 ) && wkversion && wkversion < 534) ||\n\n      // Opera Mini\n      (window.operamini && ({}).toString.call( window.operamini ) === \"[object OperaMini]\") ||\n      (operammobilematch && omversion < 7458) ||\n\n      //Android lte 2.1: Platform is Android and Webkit version is less than 533 (Android 2.2)\n      (ua.indexOf( \"Android\" ) > -1 && wkversion && wkversion < 533) ||\n\n      // Firefox Mobile before 6.0 -\n      (ffversion && ffversion < 6) ||\n\n      // WebOS less than 3\n      (\"palmGetResource\" in window && wkversion && wkversion < 534) ||\n\n      // MeeGo\n      (ua.indexOf( \"MeeGo\" ) > -1 && ua.indexOf( \"NokiaBrowser/8.5.0\" ) > -1) ||\n\n      // IE6\n      (ieversion && ieversion <= 6)\n    );\n  }());\n\n}(jQuery, window));","(function ($) {\n    var contentSwap = {\n        \"contentswap-effect\": {\n            \"effectType\": \"\",\n            \"contentType\": \"overlay\",\n            \"overflowEnabled\": \"false\",\n            \"effectDelay\": \"800\",\n            \"effectEasing\": \"Ease\",\n            \"overlayColor\": \"490A3D\",\n            \"innerColor\": \"ffffff\",\n            \"openPage\": \"same\",\n            \"name\": \"\",\n            \"captionType\": \"490A3D\",\n            \"operationType\": \"edit\",\n            \"hasls\": \"true\",\n            \"additionalWrapperClasses\": \"\",\n            \"direction\": \"bottom\",\n            \"useSameTemplate\": \"true\"\n        }\n    };\n\n\n    jQuery(document).ready(function () {\n\n        var contentSwapTimeout = setTimeout(function () {\n            if (window.initHoverFX) {\n                initHoverFX(contentSwap);\n            }\n        }, 10);\n\n        jQuery(window).resize(function (e) {\n            clearTimeout(contentSwapTimeout);\n            contentSwapTimeout = setTimeout(function () {\n                if (window.initHoverFX) {\n                    initHoverFX(contentSwap, null, e);\n                }\n            }, 150);\n\n        });\n\n    });\n\n\n})(jQuery);\n"]}