{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/Typescript/Base/Tornado.ts","webpack:///./src/Typescript/Base/Forms.ts","webpack:///./src/Typescript/Base/DataTable.ts","webpack:///./src/Typescript/Base/Navigation-Menu.ts","webpack:///./src/Typescript/custom-scripts.ts","webpack:///./node_modules/tiny-slider/src/helpers/Object.keys.js","webpack:///./node_modules/tiny-slider/src/helpers/childNode.remove.js","webpack:///./src/Typescript/Base/Utilities.ts","webpack:///./node_modules/tiny-slider/src/helpers/raf.js","webpack:///./node_modules/tiny-slider/src/helpers/caf.js","webpack:///./node_modules/tiny-slider/src/helpers/extend.js","webpack:///./node_modules/tiny-slider/src/helpers/checkStorageValue.js","webpack:///./node_modules/tiny-slider/src/helpers/setLocalStorage.js","webpack:///./node_modules/tiny-slider/src/helpers/getBody.js","webpack:///./node_modules/tiny-slider/src/helpers/docElement.js","webpack:///./node_modules/tiny-slider/src/helpers/setFakeBody.js","webpack:///./node_modules/tiny-slider/src/helpers/resetFakeBody.js","webpack:///./node_modules/tiny-slider/src/helpers/addCSSRule.js","webpack:///./node_modules/tiny-slider/src/helpers/getCssRulesLength.js","webpack:///./node_modules/tiny-slider/src/helpers/forEach.js","webpack:///./node_modules/tiny-slider/src/helpers/classListSupport.js","webpack:///./node_modules/tiny-slider/src/helpers/hasClass.js","webpack:///./node_modules/tiny-slider/src/helpers/addClass.js","webpack:///./node_modules/tiny-slider/src/helpers/removeClass.js","webpack:///./node_modules/tiny-slider/src/helpers/hasAttr.js","webpack:///./node_modules/tiny-slider/src/helpers/getAttr.js","webpack:///./node_modules/tiny-slider/src/helpers/isNodeList.js","webpack:///./node_modules/tiny-slider/src/helpers/setAttrs.js","webpack:///./node_modules/tiny-slider/src/helpers/removeAttrs.js","webpack:///./node_modules/tiny-slider/src/helpers/arrayFromNodeList.js","webpack:///./node_modules/tiny-slider/src/helpers/hideElement.js","webpack:///./node_modules/tiny-slider/src/helpers/showElement.js","webpack:///./node_modules/tiny-slider/src/helpers/isVisible.js","webpack:///./node_modules/tiny-slider/src/helpers/whichProperty.js","webpack:///./node_modules/tiny-slider/src/helpers/getEndProperty.js","webpack:///./node_modules/tiny-slider/src/helpers/passiveOption.js","webpack:///./node_modules/tiny-slider/src/helpers/addEvents.js","webpack:///./node_modules/tiny-slider/src/helpers/removeEvents.js","webpack:///./node_modules/tiny-slider/src/helpers/events.js","webpack:///./node_modules/tiny-slider/src/tiny-slider.js","webpack:///./node_modules/tiny-slider/src/helpers/calc.js","webpack:///./node_modules/tiny-slider/src/helpers/percentageLayout.js","webpack:///./node_modules/tiny-slider/src/helpers/mediaquerySupport.js","webpack:///./node_modules/tiny-slider/src/helpers/has3DTransforms.js","webpack:///./node_modules/tiny-slider/src/helpers/getSlideId.js","webpack:///./node_modules/tiny-slider/src/helpers/createStyleSheet.js","webpack:///./node_modules/tiny-slider/src/helpers/jsTransform.js","webpack:///./node_modules/tiny-slider/src/helpers/removeCSSRule.js","webpack:///./node_modules/tiny-slider/src/helpers/toDegree.js","webpack:///./node_modules/tiny-slider/src/helpers/getTouchDirection.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","Tornado","selector","document","querySelector","querySelectorAll","pageDirection","startDirection","endDirection","body","classList","contains","getComputedStyle","direction","event","func","setInterval","addEventListener","getElements","forEach","element","filter","result","parentNode","matches","options","Array","children","sibling","nextElementSibling","previousElementSibling","siblings","push","length","keys","attr","setAttribute","reference","elementString","createRange","createContextualFragment","insertBefore","nextSibling","innerHTML","appendChild","origDisplay","display","style","eleHeight","scrollHeight","elePadding","parseInt","padding","scrollPosition","window","scrollY","pageYOffset","boundsTop","getBoundingClientRect","top","viewport","innerHeight","bounds","clientHeight","time","getHeight","overflow","height","keyframes","animate","duration","setTimeout","lazy","add","backgroundImage","bgData","getAttribute","setBackground","ele","replace","remove","sliderDetact","parentsUntil","inView","sliderItems","from","item","setMediaImages","newResault","lazydata","elementTop","offsetTop","b","preventDefault","scrollTarget","target","getElement","startTime","targetPosition","startPosition","requestAnimationFrame","smothlyScroll","currentTime","timeElapsed","scrollToTarget","animation","ease","scrollTo","smothScroll","targetOffset","parentDetactor","otherSiblings","getSiblings","hasAttribute","timerWraper","timerSeconds","timerMinutes","timerHours","timerDays","timerDate","date","countDownDate","Date","getTime","updateCount","now","distance","days","Math","floor","hours","minutes","seconds","clearInterval","setAttributes","onclick","blank","close","autoplay","hoverPause","controls","infinite","arrowKeys","mouseDrag","touch","sliders","sliderDirection","responsiveHandler","576","responsive","small","768","medium","1200","large","1366","xlarge","TnOptions","container","items","slideBy","autoWidth","autoHeight","center","autoplayTimeout","autoplayHoverPause","autoplayButton","playButton","nav","pagination","navContainer","controlsContainer","speed","axis","flow","animateIn","animateOut","animateDelay","animateNormal","swipeAngle","nested","loop","rewind","fixedWidth","viewportMax","onInit","controlsText","autoplayText","autoplayDirection","navAsThumbnails","autoplayButtonOutput","TnSlider","tns","uniuqClass","closest","Options","active","hashOpen","onChange","btn","tab","onShow","onHide","index","firstTab","location","hash","substr","TabActivate","panelID","thePanel","sibPanel","panel","nextPanel","getNextSibling","thisParent","slideUp","siblingPanel","slideDown","trigger","popup","theID","insertAdjacentHTML","lightbox","lightSlider","group","images","img","image","appendIn","slider","firstWidth","clientWidth","parentTns","onload","innerWidth","width","colorsOptions","colors","background","primary","primaryHover","primaryReverse","secondary","secondaryHover","secondaryReverse","info","gray","dark","success","danger","warning","disable","infoLight","grayLight","darkLight","successLight","dangerLight","warningLight","headlines","typography","lightReverse","darkReverse","fontOptions","font","rtl","normalWeight","mediumWeight","strongWeight","rtlFont","icons","size","sizeMedium","sizeSmall","lineHeight","formOptions","forms","edgeRadius","border","darkerBG","alertColor","heightS","heightL","textArea","paddingL","gutter","shadow","btnShadow","tablesOptions","tables","headBG","stripedBG","componentsOps","components","darkerBg","color","activeBg","activeColor","designOptions","fonts","include","fontLoader","head","del","themes","cookiesOutput","cookiesHandler","cookies","split","pair","splice","join","cookie","JSON","stringify","design","parse","themeName","themeOps","max","documentElement","menus","DataTable","Forms","input","currentPlaceholder","theValue","toLowerCase","theType","errorMsg","test","insertAfter","checkForRedierct","formData","FormData","validate","append","files","theUrl","theAction","theMethod","fetch","method","then","response","json","catch","error","console","href","fileUploader","filePath","type","progressValue","Progress","radialMeter","MeterCalc","getTotalLength","strokeDashoffset","selectWraper","selectList","multipleSelect","selectedOption","arrowIcon","selectedValue","removeOption","option","removeAttribute","dispatchEvent","Event","textContent","filterInput","lastSelectedItem","newItem","insBefore","currentValue","keyCode","charCode","labelValue","toString","optionValue","includes","elementParent","parent","text","multiple","fileType","fileUrl","filesList","URL","createObjectURL","file","videoCheck","changeFile","dataTransfer","itemClone","cloneNode","repeater","newButton","placeholder","advancedSelect","advancedUploader","maxRate","iconName","rateElement","getPrevSiblings","getNextSiblings","domReady","progress","fixSizes","rating","tableParent","Label_Translate","english","arabic","perPage","search","sortable","data","editable","source","labels","tableLabels","tableRows","rowLength","headRow","label","row","column","perPageHTML","searchHTML","tableNav","paginationTemplate","navigation","getPrevSibling","setPage","rows","start","end","createPagination","paginationList","pagesNumber","ceil","setNewPage","thisPage","perPageNumber","paginationHandlers","perPageControl","keyboard_key","filteredData","tdIndex","deactiveOther","sortBy","tableBody","rowSiblings","siblingValue","isNaN","parseFloat","Menus","SubMenu","position","MenuID","toggleButton","MenuList","list","MenuCopy","Megamenu","postion","liveEvent","button","nextSib","childs","SubMenuList","SubMenuBtn","toggle","slideToggle","parentSiblings","siblingList","nestedList","Element","this","removeChild","thisButton","parentTag","lazyLoading","sticky","tooltipX","startTip","offsetLeft","endTip","right","tooltipTop","tooltipBottom","offsetHeight","animName","animDelay","animDuration","activateView","animationName","animationDuration","animationDelay","scrollSpy","dateCounter","tabs","accordion","dropdown","raf","webkitRequestAnimationFrame","mozRequestAnimationFrame","msRequestAnimationFrame","cb","caf","cancelAnimationFrame","mozCancelAnimationFrame","id","clearTimeout","extend","obj","copy","arguments","undefined","checkStorageValue","indexOf","setLocalStorage","storage","access","setItem","e","getBody","doc","createElement","fake","docElement","setFakeBody","docOverflow","resetFakeBody","addCSSRule","sheet","rules","insertRule","addRule","getCssRulesLength","cssRules","arr","callback","scope","classListSupport","hasClass","el","str","className","addClass","removeClass","hasAttr","getAttr","isNodeList","setAttrs","els","attrs","removeAttrs","attrLength","j","arrayFromNodeList","nl","hideElement","forceHide","showElement","isVisible","whichProperty","props","Props","charAt","toUpperCase","prefix","prop","getEndProperty","propIn","propOut","endProp","supportsPassive","passiveOption","passive","addEvents","preventScrolling","removeEvents","removeEventListener","Events","topics","on","eventName","fn","off","emit","edgePadding","controlsPosition","prevButton","nextButton","navPosition","autoplayPosition","autoplayResetOnVisibility","lazyload","lazyloadSelector","preventActionWhenRunning","preventScrollOnTouch","freezable","useLocalStorage","win","KEYS","ENTER","SPACE","LEFT","RIGHT","tnsStorage","localStorageAccess","browserInfo","navigator","userAgent","uid","localStorage","getItem","removeItem","CALC","div","val","vals","offsetWidth","calc","PERCENTAGELAYOUT","supported","wrapper","outer","abs","left","count","percentageLayout","CSSMQ","rule","styleSheet","cssText","createTextNode","currentStyle","mediaquerySupport","TRANSFORM","HAS3DTRANSFORMS","tf","has3d","cssTF","slice","getPropertyValue","has3DTransforms","TRANSITIONDURATION","TRANSITIONDELAY","ANIMATIONDURATION","ANIMATIONDELAY","TRANSITIONEND","ANIMATIONEND","supportConsoleWarn","warn","tnsList","optionsElements","nodeName","carousel","responsiveTem","updateOptions","middleWrapper","breakpointZone","horizontal","outerWrapper","innerWrapper","containerParent","containerHTML","outerHTML","slideItems","slideCount","windowWidth","getWindowWidth","isOn","setBreakpointZone","slidePositions","imgsComplete","liveregionCurrent","itemsMax","media","getOption","getViewportWidth","fixedWidthViewportWidth","slideItemsOut","cloneCount","bp","tem","min","apply","getItemsMax","hasOption","slideCountNew","hasRightDeadZone","rightBoundary","getRightBoundary","updateIndexBeforeTransform","transformAttr","transformPrefix","transformPostfix","getIndexMax","getStartIndex","indexCached","indexMin","getCurrentSlide","indexMax","moveDirectionExpected","running","events","newContainerClasses","slideId","tnsId","disabled","freeze","getFreeze","frozen","controlsEvents","onControlsClick","getEvent","keyIndex","navEvents","onTransitionEnd","getTarget","navIndex","navClicked","Number","targetIndexBase","pages","goTo","navCurrentIndex","animating","stopAutoplay","curElement","activeElement","setFocus","navItems","hoverEvents","stopAutoplayTimer","autoplayHoverPaused","setAutoplayTimer","visibilityEvent","hidden","autoplayVisibilityPaused","docmentKeydownEvent","touchEvents","onPanStart","onPanMove","onPanEnd","dragEvents","hasControls","hasNav","hasAutoplay","hasTouch","hasMouseDrag","slideActiveClass","imgCompleteClass","imgEvents","imgLoaded","imgCompleted","preventScroll","prevIsButton","nextIsButton","controlsContainerHTML","prevButtonHTML","nextButtonHTML","navContainerHTML","getPages","pagesCached","getCurrentNavIndex","navCurrentIndexCached","navActiveClass","navStr","navStrCurrent","autoplayTimer","autoplayUserPaused","autoplayButtonHTML","autoplayHtmlStrings","translateInit","rafIndex","initPosition","lastPosition","panStart","getDist","a","x","y","resetVariblesWhenDisable","fragmentBefore","createDocumentFragment","fragmentAfter","num","cloneFirst","firstChild","cloneLast","initStructure","fontSize","slide","marginLeft","getSlideMarginLeft","getTransitionDurationStyle","getInnerWrapperStyles","getContainerWidth","getSlideWidthStyle","getSlideGutterStyle","getAnimationDurationStyle","update_carousel_transition_duration","opts","middleWrapperStr","innerWrapperStr","containerStr","slideStr","itemsBP","fixedWidthBP","speedBP","edgePaddingBP","autoHeightBP","gutterBP","initSheet","initSliderTransform","updateIndex","leftEdge","rightEdge","transformCore","postfix","to","tick","unit","positionTick","resetDuration","doContainerTransform","getContainerTransformValue","moveElement","updateContentWrapperHeight","eve","animateSlide","version","getInfo","play","startAutoplay","pause","updateSliderHeight","updateInnerWrapperHeight","refresh","destroy","ownerNode","onResize","toggleAutoplay","htmlList","prevEl","parentEl","firstElementChild","rebuild","condition","ind","getAbsIndex","absIndex","getInsertPosition","pos","gap","getClientWidth","rect","ww","edgePaddingTem","gutterTem","fixedWidthTem","speedTem","gutterTemUnit","itemsTem","dividend","getCSSPrefix","substring","imgs","src","imgsLoadedCheck","getImageArray","initSliderTransformStyleCheck","doContainerTransformSilent","initTools","initEvents","stylesApplicationCheck","toFixed","initSliderTransformCore","setSlidePositions","updateSlideStatus","getLiveRegionStr","txt","navHtml","hiddenStr","updateNavVisibility","isButton","updateControlsStatus","disableUI","resizeTasks","doAutoHeight","doLazyLoad","disableSlider","freezeSlider","additionalUpdates","bpChanged","breakpointZoneTem","needContainerTransform","indChanged","itemsChanged","disableTem","freezeTem","arrowKeysTem","controlsTem","navTem","touchTem","mouseDragTem","autoplayTem","autoplayHoverPauseTem","autoplayResetOnVisibilityTem","indexTem","autoHeightTem","controlsTextTem","centerTem","autoplayTextTem","classN","enableUI","enableSlider","margin","unfreezeSlider","html","len","updateLiveRegion","updateGallerySlidePositions","autoheightTem","deleteRule","removeRule","removeCSSRule","vp","getVisibleSlideRange","rangestart","rangeend","point","cell","stopPropagation","srcset","navPrev","navCurrent","updateNavStatus","getMaxSlideHeight","slideStart","slideRange","heights","maxHeight","wp","attr2","base","range","getLowerCaseNodeName","isAriaDisabled","disEnableElement","prevDisabled","nextDisabled","disablePrev","disableNext","getCenterGap","denominator","number","classOut","classIn","isOut","render","sliderMoved","strTrans","propertyName","targetIndex","indexGap","factor","dir","passEventObject","targetIn","updateAutoplayButton","action","focus","isTouchEvent","changedTouches","srcElement","preventDefaultBehavior","returnValue","getMoveDirectionExpected","angle","atan2","PI","$","clientX","clientY","panUpdate","err","dist","preventClick","indexMoved","moved","rough","displayIndex"],"mappings":"aACE,IAAIA,EAAmB,GAGvB,SAASC,EAAoBC,GAG5B,GAAGF,EAAiBE,GACnB,OAAOF,EAAiBE,GAAUC,QAGnC,IAAIC,EAASJ,EAAiBE,GAAY,CACzCG,EAAGH,EACHI,GAAG,EACHH,QAAS,IAUV,OANAI,EAAQL,GAAUM,KAAKJ,EAAOD,QAASC,EAAQA,EAAOD,QAASF,GAG/DG,EAAOE,GAAI,EAGJF,EAAOD,QAKfF,EAAoBQ,EAAIF,EAGxBN,EAAoBS,EAAIV,EAGxBC,EAAoBU,EAAI,SAASR,EAASS,EAAMC,GAC3CZ,EAAoBa,EAAEX,EAASS,IAClCG,OAAOC,eAAeb,EAASS,EAAM,CAAEK,YAAY,EAAMC,IAAKL,KAKhEZ,EAAoBkB,EAAI,SAAShB,GACX,oBAAXiB,QAA0BA,OAAOC,aAC1CN,OAAOC,eAAeb,EAASiB,OAAOC,YAAa,CAAEC,MAAO,WAE7DP,OAAOC,eAAeb,EAAS,aAAc,CAAEmB,OAAO,KAQvDrB,EAAoBsB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQrB,EAAoBqB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,iBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKX,OAAOY,OAAO,MAGvB,GAFA1B,EAAoBkB,EAAEO,GACtBX,OAAOC,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOrB,EAAoBU,EAAEe,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRzB,EAAoB6B,EAAI,SAAS1B,GAChC,IAAIS,EAAST,GAAUA,EAAOqB,WAC7B,WAAwB,OAAOrB,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAH,EAAoBU,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRZ,EAAoBa,EAAI,SAASiB,EAAQC,GAAY,OAAOjB,OAAOkB,UAAUC,eAAe1B,KAAKuB,EAAQC,IAGzG/B,EAAoBkC,EAAI,GAIjBlC,EAAoBA,EAAoBmC,EAAI,G,gFCtErD,WAGMC,EAAU,CAwCZ,WAAgB,SAAAC,GAAY,OAAAC,SAASC,cAAcF,IAGnD,YAAgB,SAAAA,GAAY,OAAAC,SAASE,iBAAiBH,IAGtD,UAAc,SAAAN,GAEV,IAAIU,EAAgB,MAChBC,EAAiB,OACjBC,EAAe,QASnB,OAPKL,SAASM,KAAKC,UAAUC,SAAS,cAAaL,EAAgBM,iBAAiBT,SAASM,MAAMI,WAE7E,QAAlBP,IACAC,EAAiB,QACjBC,EAAe,QAGH,SAAZZ,EACOW,EACY,OAAZX,EACAY,EAEAF,GAKf,UAAc,SAACJ,EAAUY,EAAOC,GAE5B,GAAiB,OAAbb,EACgBc,aAAY,WAEC,iBAAf,EACNd,EAASe,iBAAiBH,EAAOC,GAGjCd,EAAQiB,YAAYhB,GAAUiB,SAAQ,SAAAC,GAAW,OAAAA,EAAQH,iBAAiBH,EAAOC,QAEtF,MAKX,aAAiB,SAACK,EAASC,GAUnB,IAAIC,EARR,GAAwB,iBAAd,EAiBN,OARArB,EAAQiB,YAAYE,GAASD,SAAQ,SAAAC,GACjC,KAAgBA,GAAWA,IAAYjB,SAAUiB,EAAUA,EAAQG,WAC/D,GAAIH,EAAQI,QAAQH,GAAS,CACzBC,EAASF,EACT,UAILE,EAhBP,KAAgBF,GAAWA,IAAYjB,SAAUiB,EAAUA,EAAQG,WAC/D,GAAIH,EAAQI,QAAQH,GAChB,OAAOD,GAmBvB,YAAgB,SAACK,GAEb,GAAwB,OAApBA,EAAQL,QACR,OAAOM,MAAM7B,UAAUwB,OAAOjD,KAAKqD,EAAQL,QAAQG,WAAWI,UAAU,SAAAC,GACpE,OAAIH,EAAQJ,OACTO,EAAQJ,QAAQC,EAAQJ,QAAgBO,OAA3C,EAD2BA,IAAYH,EAAQL,YAO3D,eAAmB,SAACK,GAChB,GAAwB,OAApBA,EAAQL,QAAkB,CAE1B,IAAIQ,EAAUH,EAAQL,QAAQS,mBAE9B,GAAIJ,EAAQJ,QAA6B,OAAnBI,EAAQJ,QACV,OAAZO,GAAoBA,EAAQJ,QAAQC,EAAQJ,QAAS,OAAOO,IAM5E,eAAmB,SAACH,GAChB,GAAwB,OAApBA,EAAQL,SAAuC,OAAnBK,EAAQJ,OAAiB,CAErD,IAAIO,EAAUH,EAAQL,QAAQU,uBAE9B,GAAgB,OAAZF,GAAoBA,EAAQJ,QAAQC,EAAQJ,QAAS,OAAOO,IAKxE,gBAAoB,SAACH,GAKjB,IAHA,IAAIM,EAAW,GACXH,EAAUH,EAAQL,QAAQS,mBAEvBD,GAECH,EAAQJ,QAAUO,EAAQJ,QAAQC,EAAQJ,SAASU,EAASC,KAAKJ,GAErEA,EAAUA,EAAQC,mBAGtB,GAAIE,EAASE,OAAS,EAAG,OAAOF,GAIpC,gBAAoB,SAACN,GAKjB,IAHA,IAAIM,EAAW,GACXH,EAAUH,EAAQL,QAAQU,uBAEvBF,GAECH,EAAQJ,QAAUO,EAAQJ,QAAQC,EAAQJ,SAASU,EAASC,KAAKJ,GAErEA,EAAUA,EAAQE,uBAGtB,GAAIC,EAASE,OAAS,EAAG,OAAOF,GAIpC,cAAkB,SAACX,EAASK,GACR,OAAZL,GACAzC,OAAOuD,KAAKT,GAASN,SAAQ,SAAUgB,GACnCf,EAAQgB,aAAaD,EAAMV,EAAQU,QAM/C,YAAgB,SAACf,EAASiB,GAEtB,IAAIC,EAAgBlB,EACS,iBAAlBkB,GAA4C,OAAdD,IAErCC,EADYnC,SAASoC,cACCC,yBAAyBpB,IAGnDiB,WAAWd,WAAWkB,aAAaH,EAAeD,EAAUK,cAIhE,UAAc,SAACtB,EAASiB,GAEpB,IAAIC,EAAgBlB,EACS,iBAAlBkB,GAA4C,OAAdD,IAErCC,EADYnC,SAASoC,cACCC,yBAAyBpB,IAGnDiB,WAAWd,WAAWkB,aAAaH,EAAeD,IAItD,SAAa,SAACjB,EAASiB,GAEI,iBAAZjB,GAAsC,OAAdiB,EAC/BA,EAAUM,WAAavB,EACF,OAAdiB,GACPA,EAAUO,YAAYxB,IAK9B,UAAc,SAACA,GAEX,IAAIyB,EAAcjC,iBAAiBQ,GAAS0B,QACzB,QAAfD,IAAuBzB,EAAQ2B,MAAMD,QAAU,SAEnD,IAAIE,EAAY5B,EAAQ6B,aACpBC,EAAaC,SAASvC,iBAAiBQ,GAASgC,QAAQ,KAAO,EAEnE,MADoB,SAAhBP,IAAwBzB,EAAQ2B,MAAMD,QAAU,QAC7CE,EAAYE,GAIvB,OAAW,SAAC9B,GAER,IAAIiC,EAAiBC,OAAOC,SAAWD,OAAOE,YAC1CC,EAAYrC,EAAQsC,wBAAwBC,IAAMN,EAClDO,EAAiBP,EAAjBO,EAAwCP,EAAiBC,OAAOO,YAChEC,EAAeL,EAAfK,EAAkCL,EAAYrC,EAAQ2C,aAE1D,OAAID,GAAiBF,GAAgBE,GAAiBF,GAAmBE,GAAcF,GAAmBE,GAAcF,GAQ5H,YAAgB,SAACxC,EAAQ4C,GAErB,IAAInB,EAAczB,EAAQ2B,MAAMD,SAAWlC,iBAAiBQ,GAAS0B,QACjEE,EAAY/C,EAAQgE,UAAU7C,GAGlC,GAFK4C,IAAMA,EAAO,KAEdnB,GAA+B,SAAhBA,EAAyB,CAExCzB,EAAQ2B,MAAMmB,SAAW,SACzB9C,EAAQ2B,MAAMoB,OAASnB,EAAY,KAEnC,IAAIoB,EAAY,CACZ,CAAED,OAAQnB,EAAY,MACtB,CAAEmB,OAAQ,QAEd/C,EAAQiD,QAAQD,EAAW,CAACE,SAAUN,IAEtCO,YAAW,WACPnD,EAAQ2B,MAAMD,QAAU,OACxB1B,EAAQ2B,MAAMoB,OAAS,KACvB/C,EAAQ2B,MAAMmB,SAAW,OAC3BF,QAIF5C,EAAQ2B,MAAMmB,SAAW,SACzB9C,EAAQ2B,MAAMD,QAAU,QACxB1B,EAAQ2B,MAAMoB,OAAS,EAEvBI,YAAW,WAEP,IAAIH,EAAY,CACZ,CAAED,OAAQ,OACV,CAAEA,OAAQnB,EAAY,OAE1B5B,EAAQiD,QAAQD,EAAW,CAACE,SAAUN,MACxC,GAEFO,YAAW,WACPnD,EAAQ2B,MAAMoB,OAAS,KACvB/C,EAAQ2B,MAAMmB,SAAW,OAC3BF,IAKV,QAAY,SAAC5C,EAAQ4C,GAEjB,IAAInB,EAAczB,EAAQ2B,MAAMD,QAC5BE,EAAY/C,EAAQgE,UAAU7C,GAGlC,GAFK4C,IAAMA,EAAO,KAEE,SAAhBnB,EAAwB,CAExBzB,EAAQ2B,MAAMmB,SAAW,SACzB9C,EAAQ2B,MAAMoB,OAASnB,EAAY,KAEnC,IAAIoB,EAAY,CACZ,CAAED,OAAQnB,EAAY,MACtB,CAAEmB,OAAQ,QAEd/C,EAAQiD,QAAQD,EAAW,CAACE,SAAUN,IAEtCO,YAAW,WACPnD,EAAQ2B,MAAMD,QAAU,OACxB1B,EAAQ2B,MAAMoB,OAAS,KACvB/C,EAAQ2B,MAAMmB,SAAW,OAC3BF,KAKV,UAAc,SAAC5C,EAAQ4C,GAEnB,IAAInB,EAAczB,EAAQ2B,MAAMD,SAAWlC,iBAAiBQ,GAAS0B,QACjEE,EAAY/C,EAAQgE,UAAU7C,GAC7B4C,IAAMA,EAAO,KAEdnB,GAA+B,SAAhBA,IAEfzB,EAAQ2B,MAAMmB,SAAW,SACzB9C,EAAQ2B,MAAMD,QAAU,QACxB1B,EAAQ2B,MAAMoB,OAAS,EAEvBI,YAAW,WAEP,IAAIH,EAAY,CACZ,CAAED,OAAQ,OACV,CAAEA,OAAQnB,EAAY,OAE1B5B,EAAQiD,QAAQD,EAAW,CAACE,SAAUN,MACxC,GAEFO,YAAW,WACPnD,EAAQ2B,MAAMoB,OAAS,KACvB/C,EAAQ2B,MAAMmB,SAAW,OAC3BF,KAKV,cAAkB,SAAC9D,EAASsE,IAEQtE,EAAX,iBAAf,EAAqC,CAACA,GAAuBD,EAAQiB,YAAYhB,GAAY,eAE1FiB,SAAQ,SAAAC,GACb,IAAGA,EAAQV,UAAUC,SAAS,UAA9B,CAEI6D,IACApD,EAAQV,UAAU+D,IAAI,cACtBrD,EAAQ2B,MAAM2B,gBAAkB,u6BAGpC,IAAIC,EAASvD,EAAQwD,aAAa,YAE9BC,EAAgB,SAAAC,GACTH,SAAsD,KAAXA,GAA4B,MAAXA,EAC3DvD,EAAQ2B,MAAM2B,gBAAkB,IAGhCC,GADAA,EAASA,EAAOI,QAAQ,IAAI,QACZA,QAAQ,IAAI,OACxBP,GAAMpD,EAAQV,UAAUsE,OAAO,cACnC5D,EAAQ2B,MAAM2B,gBAAkB,QAAUC,EAAS,OAI3DM,EAAehF,EAAQiF,aAAa9D,EAAQ,cAE5CoD,IACe,KAAXG,GAA4B,MAAXA,GAAgBvD,EAAQV,UAAUsE,OAAO,cAE9D1B,OAAOrC,iBAAiB,UAAU,SAAAH,GAC9B,GAAIb,EAAQkF,OAAO/D,GACf,GAAI6D,EAAc,CACd,IAAIG,EAAcH,EAAa5E,iBAAiB,cAChDqB,MAAM2D,KAAKD,GAAajE,SAAQ,SAAAmE,GAAQ,OAAAT,YAExCA,QAMZL,GAAQvE,EAAQkF,OAAO/D,GAElB6D,GAAcJ,IACXL,GACRK,IAGJzD,EAAQV,UAAU+D,IAAI,eAK9B,YAAgB,SAACvE,IAEmBA,EAAX,iBAAf,EAAqC,CAACA,GAAuBD,EAAQiB,YAAYhB,GAAY,oBAE1FiB,SAAQ,SAAAC,GACb,IAAGA,EAAQV,UAAUC,SAAS,UAA9B,CAEAS,EAAQgB,aAAa,MAAO,k6BAE5B,IAAImD,EAAiB,WAEjB,IAAIC,EAAavF,EAAQkF,OAAO/D,GAC5BqE,EAAWrE,EAAQwD,aAAa,iBAEhCY,GAAYpE,EAAQgB,aAAa,MAAMqD,IAG/CF,IAEA,IAAIN,EAAehF,EAAQiF,aAAa9D,EAAQ,cAGhDkC,OAAOrC,iBAAiB,UAAU,SAAAH,GAC9B,GAAImE,EAAc,CACd,IAAIG,EAAcH,EAAa5E,iBAAiB,mBAChDqB,MAAM2D,KAAKD,GAAajE,SAAQ,SAAAmE,GAC5B,IAAIG,EAAWrE,EAAQwD,aAAa,iBAChCxD,EAAQgB,aAAa,MAAMqD,WAGnCF,OAKStF,EAAQkF,OAAO/D,KACb6D,GAAcM,IAGjCnE,EAAQV,UAAU+D,IAAI,eAK9B,OAAW,SAACvE,IAEwBA,EAAX,iBAAf,EAAqC,CAACA,GAAuBD,EAAQiB,YAAYhB,GAAY,kBAE1FiB,SAAQ,SAAAC,GACb,IAAGA,EAAQV,UAAUC,SAAS,UAA9B,CAEA,IAAI+E,EAAatE,EAAQuE,UAEzBrC,OAAOrC,iBAAiB,UAAU,SAAAH,GAE1B4E,EAAa,KAAMA,EAAatE,EAAQuE,UAAU,IAElDrC,OAAOC,SAAWmC,EAClBtE,EAAQV,UAAU+D,IAAI,aAEtBrD,EAAQV,UAAUsE,OAAO,gBAIjC5D,EAAQV,UAAU+D,IAAI,eAK9B,UAAc,CACV,KAAS,SAACtF,EAAGyG,EAAGtH,EAAGC,GAEf,OADAY,GAAKZ,EAAI,GACD,EAAUD,EAAI,EAAIa,EAAIA,EAAIyG,GAE1BtH,EAAI,KADZa,GACsBA,EAAI,GAAK,GAAKyG,IAK5C,YAAgB,SAACnE,GAEb,IAAIvB,EAAWuB,EAAQvB,SACSuB,EAAQvB,SAAnB,iBAAf,EAA6C,CAACA,GAA+BD,EAAQiB,YAAYhB,GAAY,iBAEnHuB,EAAQvB,SAASiB,SAAQ,SAAAC,GAClBA,EAAQV,UAAUC,SAAS,aAC9BS,EAAQH,iBAAiB,SAAS,SAAAH,GAC9BA,EAAM+E,iBAGN,IAAIC,EAAe1E,EAAQwD,aAAa,SAAWxD,EAAQwD,aAAa,eACpEN,EAAW7C,EAAQ6C,UAAYlD,EAAQwD,aAAa,kBAAoB,IACxEmB,EAAS9F,EAAQ+F,WAAWvE,EAAQsE,QAAUD,GAC9CG,EAAY,KACZC,EAAiBH,EAAOrC,wBAAwBC,IAChDwC,EAAgB7C,OAAOE,aAAeF,OAAOC,QAWjD6C,uBARA,SAASC,EAAcC,GACD,OAAdL,IAAoBA,EAAYK,GACpC,IAAIC,EAAcD,EAAcL,EAC5BO,EAAiBvG,EAAQwG,UAAUC,KAAKH,EAAaJ,EAAeD,EAAgB5B,GACxFhB,OAAOqD,SAAS,EAAGH,GACfD,EAAcjC,GAAU8B,sBAAsBC,SAM1DjF,EAAQV,UAAU+D,IAAI,gBAK9B,UAAc,SAAChD,GAEX,IAAIvB,EAAWuB,EAAQvB,UACSA,EAAX,iBAAf,EAAqC,CAACA,GAAuBD,EAAQiB,YAAYhB,IAE9EiB,SAAQ,SAAAC,GACVA,EAAQV,UAAUC,SAAS,YAE9BS,EAAQf,iBAAiB,wBAAwBc,SAAQ,SAAAC,GACrDnB,EAAQ2G,YAAY,CAChBxF,QAAQA,EACRkD,SAAS7C,EAAQ6C,WAGrB,IAAIwB,EAAiBrE,EAAQsE,QAAU3E,EAAQwD,aAAa,SAAWxD,EAAQwD,aAAa,eAExFiC,EADiB5G,EAAQ+F,WAAWF,GACJH,UAAY,IAC5CmB,EAAiB1F,EAAQG,WAE7B+B,OAAOrC,iBAAiB,UAAU,SAAAH,GAE9B,GAAIwC,OAAOC,SAAWsD,EAElB,GAAIC,EAAetF,QAAQ,MAAO,CAC9B,IAAIuF,EAAgB9G,EAAQ+G,YAAY,CAAC5F,QAAQ0F,IACjDA,EAAepG,UAAU+D,IAAI,UAC7BsC,EAAc5F,SAAQ,SAAAC,GAAW,OAAAA,EAAQV,UAAUsE,OAAO,kBACvD,GAAI5D,EAAQ6F,aAAa,gBAAkB7F,EAAQ6F,aAAa,QAAS,CAC5E7F,EAAQV,UAAU+D,IAAI,UACJxE,EAAQ+G,YAAY,CAAC5F,QAAQA,IACnCD,SAAQ,SAAAC,GAAW,OAAAA,EAAQV,UAAUsE,OAAO,iBACrD,CACC+B,EAAgB9G,EAAQ+G,YAAY,CAAC5F,QAAQA,IACjDA,EAAQV,UAAU+D,IAAI,UACtBsC,EAAc5F,SAAQ,SAAAC,GAAW,OAAAA,EAAQV,UAAUsE,OAAO,kBAI9D,GAAI8B,EAAetF,QAAQ,MAAO,CAC1BuF,EAAgB9G,EAAQ+G,YAAY,CAAC5F,QAAQ0F,IACjDA,EAAepG,UAAUsE,OAAO,eAC7B,GAAI5D,EAAQ6F,aAAa,eAC5B7F,EAAQV,UAAUsE,OAAO,cACtB,CACU5D,EAAQG,WACdb,UAAUsE,OAAO,iBAMxC5D,EAAQV,UAAU+D,IAAI,eAK9B,YAAgB,SAAChD,GAEb,IAAIvB,EAAWuB,EAAQvB,UACSA,EAAX,iBAAf,EAAqC,CAACA,GAAuBD,EAAQiB,YAAYhB,GAAY,kBAE1FiB,SAAQ,SAAA+F,GACb,IAAGA,EAAYxG,UAAUC,SAAS,UAAlC,CACA,IAAIwG,EAAgBD,EAAY9G,cAAc,YAC1CgH,EAAgBF,EAAY9G,cAAc,YAC1CiH,EAAgBH,EAAY9G,cAAc,UAC1CkH,EAAgBJ,EAAY9G,cAAc,SAC1CmH,EAAgB9F,EAAQ+F,MAAQN,EAAYtC,aAAa,aACzD6C,EAAgB,IAAIC,KAAKH,GAAWI,UAEpCC,EAAc5G,aAAY,WAE1B,IAAI6G,GAAM,IAAIH,MAAOC,UAEjBG,EAAWL,EAAgBI,EAE3BE,EAAOC,KAAKC,MAAMH,EAAW,OAC7BI,EAAQF,KAAKC,MAAOH,EAAW,MAAyB,MACxDK,EAAUH,KAAKC,MAAOH,EAAW,KAAoB,KACrDM,EAAUJ,KAAKC,MAAOH,EAAW,IAAe,KAEpDX,EAAaxE,UAAYyF,EACzBhB,EAAazE,UAAYwF,EACzBd,EAAW1E,UAAYuF,EACvBZ,EAAU3E,UAAYoF,EAGlBD,EAAW,IACXO,cAAcT,GACkB,OAA7B3H,EAAQY,UAAU,QACjBqG,EAAYvE,UAAY,0DAExBuE,EAAYvE,UAAY,qDAGjC,KAEHuE,EAAYxG,UAAU+D,IAAI,eAKlC,SAAa,SAAAvE,IAEuBA,EAAX,iBAAf,EAAqC,CAACA,GAAuBD,EAAQiB,YAAYhB,IAE9EiB,SAAQ,SAAAC,GACVA,EAAQV,UAAUC,SAAS,aAE9BV,EAAQqI,cAAclH,EAAQ,CAC1B,SAAW,EACX,KAAO,SACP,eAAe,UAInBA,EAAQH,iBAAiB,SAAS,SAAAH,G,QAE9BA,EAAM+E,iBAEgC,QAAtC,EAAA5F,EAAQ+F,WAAW,2BAAmB,SAAEtF,UAAUsE,OAAO,UAEX,QAA9C,EAAA/E,EAAQiF,aAAapE,EAAMiF,OAAO,oBAAY,SAAErF,UAAU+D,IAAI,aAIlEnB,OAAOiF,QAAU,SAAAC,GACRA,EAAMzC,OAAOvE,QAAQ,cAAiBgH,EAAMzC,OAAOvE,QAAQ,gBAC5DvB,EAAQiB,YAAY,oBAAoBC,SAAQ,SAAAsH,GAAS,OAAAA,EAAM/H,UAAUsE,OAAO,cAKxF5D,EAAQV,UAAU+D,IAAI,gBAK9B,OAAW,SAACvE,EAAUuB,GAEcvB,EAAX,iBAAf,EAAqC,CAACA,GAAuBD,EAAQiB,YAAYhB,GAGnFuB,IAASA,EAAU,IACnBA,EAAQ3B,eAAe,cAAe2B,EAAQiH,UAAW,GACzDjH,EAAQ3B,eAAe,gBAAe2B,EAAQkH,YAAa,GAC3DlH,EAAQ3B,eAAe,cAAe2B,EAAQmH,UAAa,GAC3DnH,EAAQ3B,eAAe,cAAe2B,EAAQoH,UAAW,GACzDpH,EAAQ3B,eAAe,eAAe2B,EAAQqH,WAAY,GAC1DrH,EAAQ3B,eAAe,eAAe2B,EAAQsH,WAAc,GAC5DtH,EAAQ3B,eAAe,WAAe2B,EAAQuH,OAAQ,GAG1D,IAAIC,EAAU,GA8Ed,OA3EA/I,EAASiB,SAAQ,SAAAC,G,gBAET8H,GAAkBzH,aAAO,EAAPA,EAASZ,aAAa,EACxCqI,GAAgD,OAA7BjJ,EAAQY,UAAU,UAAkBqI,EAAkB,WACzEA,GAAgD,OAA7BjJ,EAAQY,UAAU,UAAkBqI,EAAkB,YAG7E,IAAIC,EAAwB,CACxBC,KAA0B,QAAnB,EAAA3H,aAAO,EAAPA,EAAS4H,kBAAU,eAAEC,QAAU,GACtCC,KAA0B,QAAnB,EAAA9H,aAAO,EAAPA,EAAS4H,kBAAU,eAAEG,SAAU,GACtCC,MAA0B,QAAnB,EAAAhI,aAAO,EAAPA,EAAS4H,kBAAU,eAAEK,QAAU,GACtCC,MAA0B,QAAnB,EAAAlI,aAAO,EAAPA,EAAS4H,kBAAU,eAAEO,SAAU,KAGrCnI,aAAO,EAAPA,EAAS4H,cAAYF,GAAoB,GAG9C,IAAIU,EAAmB,CACnBC,UAAa1I,EAEb2I,MAAatI,EAAQsI,OAAc,EACnCC,QAAavI,EAAQuI,SAAc,EACnCC,UAAaxI,EAAQwI,YAAc,EACnCC,WAAazI,EAAQyI,aAAc,EACnCC,OAAa1I,EAAQ0I,SAAc,EACnCd,WAAaF,IAAsB,EAEnCT,SAAqBjH,EAAQiH,SAC7B0B,gBAAqB3I,EAAQ6C,UAAc,IAC3C+F,mBAAqB5I,EAAQkH,WAC7B2B,eAAqB7I,EAAQ8I,aAAc,EAE3CC,IAAoB/I,EAAQgJ,aAAqB,EACjDC,aAAoBjJ,EAAQiJ,eAAqB,EACjD9B,SAAoBnH,EAAQmH,SAC5B+B,kBAAoBlJ,EAAQkJ,oBAAqB,EAEjDvL,KAAaqC,EAAQgF,WAAiB,WACtCmE,MAAanJ,EAAQmJ,OAAiB,IACtCC,KAAapJ,EAAQqJ,MAAiB,aACtCC,UAAatJ,EAAQsJ,WAAiB,aACtCC,WAAavJ,EAAQuJ,YAAiB,cACtCC,aAAgBxJ,EAAQwJ,eAAiB,EACzCC,cAAgBzJ,EAAQyJ,eAAiB,aAEzCnC,UAAgBtH,EAAQsH,UACxBC,MAAgBvH,EAAQuH,MACxBmC,WAAgB1J,EAAQ0J,YAAgB,GACxCC,OAAgB3J,EAAQ2J,SAAgB,EACxCC,KAAgB5J,EAAQoH,SACxBC,UAAgBrH,EAAQqH,UACxBwC,OAAgB7J,EAAQ6J,SAAgB,EACxCC,WAAgB9J,EAAQ8J,aAAgB,EACxCC,YAAgB/J,EAAQ+J,cAAgB,EACxCC,OAAgBhK,EAAQgK,SAAW,EACnCC,aAAgBjK,EAAQiK,cAAgB,CAAC,GAAG,IAC5CC,aAAgBlK,EAAQkK,cAAgB,CAAC,GAAG,IAC5CC,kBAAqB1C,EACrB2C,gBAAqBpK,EAAQoK,kBAAmB,EAChDC,qBAAuBrK,EAAQ8I,aAAc,GAI7CwB,EAAW,EAAAC,IAAInC,GAGhBkC,GAAU9C,EAAQjH,KAAK+J,IAGvBtK,aAAO,EAAPA,EAASwK,cAAyC,QAA7B,EAAA7K,EAAQ8K,QAAQ,qBAAa,SAAExL,UAAU+D,IAAI,GAAGhD,EAAQwK,aAG5E7K,EAAQV,UAAUC,SAAS,SAAqC,QAA7B,EAAAS,EAAQ8K,QAAQ,qBAAa,SAAExL,UAAU+D,IAAI,iBAGjFwE,GAIX,KAAS,SAAC/I,EAAUuB,GAEgBvB,EAAX,iBAAf,EAAqC,CAACA,GAAuBD,EAAQiB,YAAYhB,GAGvF,IAAIiM,EAAU,CACVC,QAAW3K,aAAO,EAAPA,EAAS2K,SAAY,EAChCC,UAAW5K,aAAO,EAAPA,EAAS4K,YAAY,EAChCC,UAAW7K,aAAO,EAAPA,EAAS6K,WAAY,SAAUC,EAAMC,EAAMzL,GAAS,OAAOA,GACtE0L,QAAWhL,aAAO,EAAPA,EAASgL,SAAY,SAAUF,EAAMC,EAAMzL,GAAS,OAAOA,GACtE2L,QAAWjL,aAAO,EAAPA,EAASiL,SAAY,SAAUH,EAAMC,EAAMzL,GAAS,OAAOA,IA8B1Eb,EAASiB,SAAQ,SAACC,EAAQuL,GAEnBvL,EAAQV,UAAUC,SAAS,aA5Bd,SAAAS,G,QAEZwL,EAAWxL,EAAQI,QAAQ,iBAAmBJ,EAAQwD,aAAa,YAAwB,KAGjE,iBAAnBuH,EAAc,OAErBS,EAAWxL,EAAQI,QAAQ,gBAAe2K,EAAQC,OAAO,GAAC,KAAOhL,EAAQwD,aAAa,YAAwB,KAC7E,iBAAnBuH,EAAc,SAE5BS,EAAWT,EAAQC,QAIpBD,EAAQE,UAAc/I,OAAOuJ,SAASC,KAAKC,OAAO,KAAIH,EAAWtJ,OAAOuJ,SAASC,KAAKC,OAAO,IAE5FH,IAEAA,EAAWA,EAAS7H,QAAQ,KAAM,IAEA,QAAlC,EAAA9E,EAAQ+F,WAAW,IAAI4G,UAAW,SAAElM,UAAU+D,IAAI,UACwB,QAA1E,EAAAxE,EAAQ+F,WAAW,cAAc4G,EAAQ,OAAQ,UAAyB,SAAElM,UAAU+D,IAAI,WAU9FuI,CAAY5L,GAGZnB,EAAQqI,cAAclH,EAAQ,CAC1B,SAAW,EACX,KAAO,SACP,eAAe,UAInBA,EAAQH,iBAAiB,SAAS,SAAAH,GAE9B,IAAImM,EAAW7L,EAAQwD,aAAa,YAChCsI,EAAWjN,EAAQ+F,WAAW,IAAIiH,EAAQlI,QAAQ,KAAM,KAGzDoH,EAAQG,UAAUH,EAAQG,SAASlL,EAAQ8L,GAG9CjN,EAAQ+G,YAAY,CAAC5F,QAAQA,EAASC,OAAO,YAAYF,SAAQ,SAAAS,GAE7DA,EAAQlB,UAAUsE,OAAO,UAEzB,IAAImI,EAAWvL,EAAQgD,aAAa,YAEpCuI,OADIA,EAAWlN,EAAQ+F,WAAW,IAAImH,EAASpI,QAAQ,KAAM,OAC7DoI,EAAUzM,UAAUsE,OAAO,UAExBmH,EAAQO,QAAQP,EAAQO,OAAO9K,EAAQuL,MAI9C/L,EAAQV,UAAU+D,IAAI,UACtByI,EAASxM,UAAU+D,IAAI,UAGpB0H,EAAQM,QAAQN,EAAQM,OAAOrL,EAAQ8L,MAI9C9L,EAAQV,UAAU+D,IAAI,eAK9B,UAAc,SAACvE,EAAUuB,GAEWvB,EAAX,iBAAf,EAAqC,CAACA,GAAuBD,EAAQiB,YAAYhB,GAGvF,IAAIiM,EAAU,CACVG,UAAa7K,aAAO,EAAPA,EAAS6K,WAAY,SAAUC,EAAMa,EAAQrM,GAAS,OAAOA,GAC1E0L,QAAahL,aAAO,EAAPA,EAASiL,SAAY,SAAUH,EAAMa,EAAQrM,GAAS,OAAOA,GAC1E2L,QAAajL,aAAO,EAAPA,EAASgL,SAAY,SAAUF,EAAMa,EAAQrM,GAAS,OAAOA,IAI9Eb,EAASiB,SAAQ,SAAAC,G,MAEb,IAAGA,EAAQV,UAAUC,SAAS,UAA9B,CAGA,IAAI0M,EAAcpN,EAAQqN,eAAe,CAAClM,QAAQA,EAASC,OAAO,uBAC9DkM,EAActN,EAAQiF,aAAa9D,EAAS,mBAGhDnB,EAAQqI,cAAclH,EAAQ,CAC1B,SAAW,EACX,KAAO,SACP,eAAe,UAIhBmM,EAAW/L,QAAQ,kCAC6B,QAA5C,EAACvB,EAAQiF,aAAa9D,EAAS,qBAAa,eAAEhB,cAAc,aAC3DmN,EAAW7M,UAAU+D,IAAI,WAKjCrD,EAAQH,iBAAiB,SAAS,SAAAH,GAC9BA,EAAM+E,iBAGF0H,EAAW7M,UAAUC,SAAS,WAE9B4M,EAAW7M,UAAUsE,OAAO,UAE5B/E,EAAQuN,QAAQH,EAAU,KAEvBlB,EAAQO,QAAQP,EAAQO,OAAOtL,EAASiM,KAG3CpN,EAAQ+G,YAAY,CAAC5F,QAAQmM,IAAapM,SAAQ,SAACS,GAE/CA,EAAQlB,UAAUsE,OAAO,UACzB,IAAIyI,EAAe7L,EAAQxB,cAAc,sBAErCqN,GAAcxN,EAAQuN,QAAQC,EAAa,QAGnDxN,EAAQyN,UAAUL,EAAU,KAE5BE,EAAW7M,UAAU+D,IAAI,UAEtB0H,EAAQM,QAAQN,EAAQG,SAASlL,EAASiM,IAI9ClB,EAAQG,UAAUH,EAAQG,SAASlL,EAASiM,MAInDjM,EAAQV,UAAU+D,IAAI,eAK9B,MAAU,SAACvE,EAAUuB,GAEevB,EAAX,iBAAf,EAAqC,CAACA,GAAuBD,EAAQiB,YAAYhB,GAGvF,IAAIiM,EAAU,CACVE,UAAW5K,aAAO,EAAPA,EAAS4K,YAAY,EAChCI,QAAWhL,aAAO,EAAPA,EAASgL,SAAY,SAAUkB,EAAUC,EAAQ7M,GAAS,OAAOA,GAC5E2L,QAAWjL,aAAO,EAAPA,EAASiL,SAAY,SAAUiB,EAAUC,EAAQ7M,GAAS,OAAOA,IAGhFb,EAASiB,SAAQ,SAAAC,G,QAEb,IAAGA,EAAQV,UAAUC,SAAS,UAA9B,CAGA,IAAIkN,EAAQzM,EAAQwD,aAAa,MAMjC,GAHAxD,EAAQ0M,mBAAmB,aAAc,4DAGrC3B,EAAQE,SACM/I,OAAOuJ,SAASC,KAAKC,OAAO,IAC3Bc,GAAOzM,EAAQV,UAAU+D,IAAI,UAEzC0H,EAAQM,QAAQN,EAAQM,OAAO,KAAMrL,GAIG,QAA/C,EAAAnB,EAAQiB,YAAY,iBAAiB2M,EAAK,aAAK,SAAE1M,SAAQ,SAAAwM,GAErD1N,EAAQqI,cAAcqF,EAAQ,CAC1B,SAAW,EACX,KAAO,SACP,eAAe,UAGnBA,EAAQ1M,iBAAiB,SAAS,SAAAH,GAC9BA,EAAM+E,iBAEN5F,EAAQ+F,WAAW,IAAI6H,GAASnN,UAAU+D,IAAI,UAE3C0H,EAAQM,QAAQN,EAAQM,OAAO3L,EAAMiF,OAAQ3E,SAKjB,QAAvC,EAAAA,EAAQhB,cAAc,yBAAiB,SAAEa,iBAAiB,SAAS,SAAAH,GAC/DA,EAAM+E,iBAEN/E,EAAMiF,OAAOxE,WAAWb,UAAUsE,OAAO,UAEtCmH,EAAQO,QAAQP,EAAQM,OAAO,KAAOrL,MAI7CA,EAAQf,iBAAiB,gBAAgBc,SAAQ,SAAAwM,GAC7CA,EAAQ1M,iBAAiB,SAAS,SAAAH,GAC9BA,EAAM+E,iBAEN8H,EAAQzB,QAAQ,cAAcxL,UAAUsE,OAAO,UAE5CmH,EAAQO,QAAQP,EAAQM,OAAO3L,EAAMiF,OAAS3E,SAKzDA,EAAQV,UAAU+D,IAAI,eAK9B,SAAa,SAAAvE,G,MAKT,IAHgCA,EAAX,iBAAf,EAAqC,CAACA,GAAuBD,EAAQiB,YAAYhB,IAG3E+B,QAAU,EAAG,CAErB9B,SAASM,KAAKqN,mBAAmB,YAAa,wkBAe9C,IAAIC,EAAe9N,EAAQ+F,WAAW,mBAElCgI,EADeD,EAAS3N,cAAc,kBACVA,cAAc,oBAGN,QAAxC,EAAA2N,EAAS3N,cAAc,yBAAiB,SAAEa,iBAAiB,SAAS,SAAAH,GAChEA,EAAMiF,OAAOxE,WAAWb,UAAUsE,OAAO,UACzC+I,EAAS3N,cAAc,kBAAkBuC,UAAY,sCACrDqL,EAAcD,EAAS3N,cAAc,uBAK7CF,EAASiB,SAAQ,SAAAC,GAEVA,EAAQV,UAAUC,SAAS,YAG9BS,EAAQH,iBAAiB,SAAS,SAAAH,G,QAC9BA,EAAM+E,iBAEN,IAAIoI,EAAQ7M,EAAQwD,aAAa,cAC7BsJ,EAAS,GAEb,GAAG9M,EAAQ6F,aAAa,cAAe,CAEW,QAA9C,EAAAhH,EAAQiB,YAAY,gBAAgB+M,EAAK,aAAK,SAAE9M,SAAQ,SAAAgN,GAEpDD,EAAOlM,KAAKmM,EAAIvJ,aAAa,kBAE7BsJ,EAAO/M,SAAQ,SAAAiN,GACXnO,EAAQoO,SAAS,89BAA89BD,EAAK,gCAAiCJ,SAI5gC/N,EAAQqO,OAAON,EAAa,CACzC/D,WAAa,EACbC,YAAa,EACbxB,UAAa,EACb+B,YAAa,SAGjByD,EAAOlM,KAAKZ,EAAQwD,aAAa,kBAEjCsJ,EAAO/M,SAAQ,SAAAiN,GACXnO,EAAQoO,SAAS,89BAA89BD,EAAK,gCAAiCJ,MAI7hCD,EAASrN,UAAU+D,IAAI,UAEY,QAAnC,EAAAuJ,EAAY3N,iBAAiB,cAAM,SAAEc,SAAQ,SAAAgN,GAEzC,IAAII,EAAaP,EAAY5N,cAAc,aAAaoO,YACpDC,EAAYxO,EAAQiF,aAAa8I,EAAa,cAElDG,EAAIO,OAAS,WACTP,EAAI5M,WAAWwB,MAAM2B,gBAAkB,KACvCyJ,EAAIK,YAAcD,IAAaA,EAAaJ,EAAIK,aAE7CD,EAAajL,OAAOqL,YAAcF,IAAWA,EAAU1L,MAAM6L,MAAQL,EAAW,aAM/FnN,EAAQV,UAAU+D,IAAI,eAK9B,OAAW,SAAAhD,G,iOAYHoN,GAAgB,kEAEC,QAAf,EAAApN,aAAO,EAAPA,EAASqN,cAAM,eAAEC,YAAa,eAA6B,QAA7B,EAActN,aAAO,EAAPA,EAASqN,cAAM,eAAEC,YAAa,IAAE,+DAE7D,QAAf,EAAAtN,aAAO,EAAPA,EAASqN,cAAM,eAAEE,SAAgB,oBAAkC,QAAlC,EAAmBvN,aAAO,EAAPA,EAASqN,cAAM,eAAEE,SAAU,IAAE,oBAClE,QAAf,EAAAvN,aAAO,EAAPA,EAASqN,cAAM,eAAEG,cAAgB,oBAAkC,QAAlC,EAAmBxN,aAAO,EAAPA,EAASqN,cAAM,eAAEG,cAAe,IAAE,oBACvE,QAAf,EAAAxN,aAAO,EAAPA,EAASqN,cAAM,eAAEI,gBAAgB,sBAAoC,QAApC,EAAqBzN,aAAO,EAAPA,EAASqN,cAAM,eAAEI,gBAAiB,IAAE,iEAE3E,QAAf,EAAAzN,aAAO,EAAPA,EAASqN,cAAM,eAAEK,WAAkB,sBAAoC,QAApC,EAAqB1N,aAAO,EAAPA,EAASqN,cAAM,eAAEK,WAAY,IAAE,oBACxE,QAAf,EAAA1N,aAAO,EAAPA,EAASqN,cAAM,eAAEM,gBAAkB,sBAAoC,QAApC,EAAqB3N,aAAO,EAAPA,EAASqN,cAAM,eAAEM,gBAAiB,IAAE,oBAC7E,QAAf,EAAA3N,aAAO,EAAPA,EAASqN,cAAM,eAAEO,kBAAkB,wBAAsC,QAAtC,EAAuB5N,aAAO,EAAPA,EAASqN,cAAM,eAAEO,kBAAmB,IAAE,qEAEjF,QAAf,EAAA5N,aAAO,EAAPA,EAASqN,cAAM,eAAEQ,MAAU,iBAA+B,QAA/B,EAAgB7N,aAAO,EAAPA,EAASqN,cAAM,eAAEQ,MAAO,IAAE,oBACtD,QAAf,EAAA7N,aAAO,EAAPA,EAASqN,cAAM,eAAES,MAAU,iBAA+B,QAA/B,EAAgB9N,aAAO,EAAPA,EAASqN,cAAM,eAAES,MAAO,IAAE,oBACtD,QAAf,EAAA9N,aAAO,EAAPA,EAASqN,cAAM,eAAEU,MAAU,iBAA+B,QAA/B,EAAgB/N,aAAO,EAAPA,EAASqN,cAAM,eAAEU,MAAO,IAAE,oBACtD,QAAf,EAAA/N,aAAO,EAAPA,EAASqN,cAAM,eAAEW,SAAU,oBAAkC,QAAlC,EAAmBhO,aAAO,EAAPA,EAASqN,cAAM,eAAEW,SAAU,IAAE,oBAC5D,QAAf,EAAAhO,aAAO,EAAPA,EAASqN,cAAM,eAAEY,QAAU,mBAAiC,QAAjC,EAAkBjO,aAAO,EAAPA,EAASqN,cAAM,eAAEY,QAAS,IAAE,oBAC1D,QAAf,EAAAjO,aAAO,EAAPA,EAASqN,cAAM,eAAEa,SAAU,oBAAkC,QAAlC,EAAmBlO,aAAO,EAAPA,EAASqN,cAAM,eAAEa,SAAU,IAAE,oBAC5D,QAAf,EAAAlO,aAAO,EAAPA,EAASqN,cAAM,eAAEc,SAAU,oBAAkC,QAAlC,EAAmBnO,aAAO,EAAPA,EAASqN,cAAM,eAAEc,SAAU,IAAE,oEAE5D,QAAf,EAAAnO,aAAO,EAAPA,EAASqN,cAAM,eAAEe,WAAe,iBAA+B,QAA/B,EAAgBpO,aAAO,EAAPA,EAASqN,cAAM,eAAEe,WAAY,IAAE,oBAChE,QAAf,EAAApO,aAAO,EAAPA,EAASqN,cAAM,eAAEgB,WAAe,iBAA+B,QAA/B,EAAgBrO,aAAO,EAAPA,EAASqN,cAAM,eAAEgB,WAAY,IAAE,oBAChE,QAAf,EAAArO,aAAO,EAAPA,EAASqN,cAAM,eAAEiB,WAAe,iBAA+B,QAA/B,EAAgBtO,aAAO,EAAPA,EAASqN,cAAM,eAAEiB,WAAY,IAAE,oBAChE,QAAf,EAAAtO,aAAO,EAAPA,EAASqN,cAAM,eAAEkB,cAAe,oBAAkC,QAAlC,EAAmBvO,aAAO,EAAPA,EAASqN,cAAM,eAAEkB,cAAe,IAAE,oBACtE,QAAf,EAAAvO,aAAO,EAAPA,EAASqN,cAAM,eAAEmB,aAAe,mBAAiC,QAAjC,EAAkBxO,aAAO,EAAPA,EAASqN,cAAM,eAAEmB,aAAc,IAAE,oBACpE,QAAf,EAAAxO,aAAO,EAAPA,EAASqN,cAAM,eAAEoB,cAAe,oBAAkC,QAAlC,EAAmBzO,aAAO,EAAPA,EAASqN,cAAM,eAAEoB,cAAe,IAAE,yEAEtE,QAAf,EAAAzO,aAAO,EAAPA,EAASqN,cAAM,eAAEqB,WAAc,sBAAoC,QAApC,EAAqB1O,aAAO,EAAPA,EAASqN,cAAM,eAAEqB,WAAY,IAAE,oBACpE,QAAf,EAAA1O,aAAO,EAAPA,EAASqN,cAAM,eAAEsB,YAAc,uBAAqC,QAArC,EAAsB3O,aAAO,EAAPA,EAASqN,cAAM,eAAEsB,YAAa,IAAE,oBACtE,QAAf,EAAA3O,aAAO,EAAPA,EAASqN,cAAM,eAAEuB,cAAc,oBAAkC,QAAlC,EAAmB5O,aAAO,EAAPA,EAASqN,cAAM,eAAEuB,cAAe,IAAE,oBACrE,QAAf,EAAA5O,aAAO,EAAPA,EAASqN,cAAM,eAAEwB,aAAc,mBAAiC,QAAjC,EAAkB7O,aAAO,EAAPA,EAASqN,cAAM,eAAEwB,aAAc,IAAE,cAapFC,GAAc,0DAVJ,W,gBACV,KAAgB,QAAb,EAAA9O,aAAO,EAAPA,EAAS+O,YAAI,eAAEC,MAAoC,OAA7BxQ,EAAQY,UAAU,QAMnC,MAAO,IALE,QAAb,EAAAY,aAAO,EAAPA,EAAS+O,YAAI,eAAEC,IAAIzB,WAAevN,EAAQ+O,KAAKxB,QAAUvN,EAAQ+O,KAAKC,IAAIzB,UAC7D,QAAb,EAAAvN,aAAO,EAAPA,EAAS+O,YAAI,eAAEC,IAAItB,aAAe1N,EAAQ+O,KAAKxB,QAAUvN,EAAQ+O,KAAKC,IAAItB,YAC7D,QAAb,EAAA1N,aAAO,EAAPA,EAAS+O,YAAI,eAAEC,IAAIC,gBAAejP,EAAQ+O,KAAKE,aAAgBjP,EAAQ+O,KAAKC,IAAIC,eACnE,QAAb,EAAAjP,aAAO,EAAPA,EAAS+O,YAAI,eAAEC,IAAIE,gBAAelP,EAAQ+O,KAAKG,aAAgBlP,EAAQ+O,KAAKC,IAAIE,eACnE,QAAb,EAAAlP,aAAO,EAAPA,EAAS+O,YAAI,eAAEC,IAAIG,gBAAenP,EAAQ+O,KAAKI,aAAgBnP,EAAQ+O,KAAKC,IAAIG,cAMlFC,GAAS,gEAEI,QAAb,EAAApP,aAAO,EAAPA,EAAS+O,YAAI,eAAExB,SAAW,kBAAkBvN,EAAQ+O,KAAKxB,QAAU,IAAE,oBACxD,QAAb,EAAAvN,aAAO,EAAPA,EAAS+O,YAAI,eAAErB,WAAW,oBAAoB1N,EAAQ+O,KAAKrB,UAAY,IAAE,oBAC5D,QAAb,EAAA1N,aAAO,EAAPA,EAAS+O,YAAI,eAAEM,OAAW,gBAAgBrP,EAAQ+O,KAAKM,MAAQ,IAAE,8DAEpD,QAAb,EAAArP,aAAO,EAAPA,EAAS+O,YAAI,eAAEO,MAAa,iBAAiBtP,EAAQ+O,KAAKO,KAAO,IAAE,oBACtD,QAAb,GAAAtP,aAAO,EAAPA,EAAS+O,YAAI,iBAAEQ,YAAa,iBAAiBvP,EAAQ+O,KAAKQ,WAAa,IAAE,oBAC5D,QAAb,GAAAvP,aAAO,EAAPA,EAAS+O,YAAI,iBAAES,WAAa,iBAAiBxP,EAAQ+O,KAAKS,UAAY,IAAE,+DAE3D,QAAb,GAAAxP,aAAO,EAAPA,EAAS+O,YAAI,iBAAEU,YAAa,iBAAiBzP,EAAQ+O,KAAKU,WAAa,IAAE,gEAE5D,QAAb,GAAAzP,aAAO,EAAPA,EAAS+O,YAAI,iBAAEE,cAAe,mBAAmBjP,EAAQ+O,KAAKE,aAAe,IAAE,oBAClE,QAAb,GAAAjP,aAAO,EAAPA,EAAS+O,YAAI,iBAAEG,cAAe,mBAAmBlP,EAAQ+O,KAAKG,aAAe,IAAE,oBAClE,QAAb,GAAAlP,aAAO,EAAPA,EAAS+O,YAAI,iBAAEI,cAAe,mBAAmBnP,EAAQ+O,KAAKI,aAAe,IAAE,cAGjFO,GAAc,mBACE,QAAd,GAAA1P,aAAO,EAAPA,EAAS2P,aAAK,iBAAErC,YAAa,cAActN,EAAQ2P,MAAMrC,WAAa,IAAE,oBAC1D,QAAd,GAAAtN,aAAO,EAAPA,EAAS2P,aAAK,iBAAEhB,YAAa,iBAAiB3O,EAAQ2P,MAAMhB,WAAa,IAAE,oBAC7D,QAAd,GAAA3O,aAAO,EAAPA,EAAS2P,aAAK,iBAAEC,YAAa,kBAAkB5P,EAAQ2P,MAAMC,WAAa,IAAE,oBAC9D,QAAd,GAAA5P,aAAO,EAAPA,EAAS2P,aAAK,iBAAEE,QAAa,kBAAkB7P,EAAQ2P,MAAME,OAAS,IAAE,oBAC1D,QAAd,GAAA7P,aAAO,EAAPA,EAAS2P,aAAK,iBAAEG,UAAa,qBAAqB9P,EAAQ2P,MAAMG,SAAW,IAAE,oBAC/D,QAAd,GAAA9P,aAAO,EAAPA,EAAS2P,aAAK,iBAAEI,YAAa,iBAAiB/P,EAAQ2P,MAAMI,WAAa,IAAE,oBAC7D,QAAd,GAAA/P,aAAO,EAAPA,EAAS2P,aAAK,iBAAEjN,QAAa,kBAAkB1C,EAAQ2P,MAAMjN,OAAS,IAAE,oBAC1D,QAAd,GAAA1C,aAAO,EAAPA,EAAS2P,aAAK,iBAAEK,SAAa,wBAAwBhQ,EAAQ2P,MAAMK,QAAU,IAAE,oBACjE,QAAd,GAAAhQ,aAAO,EAAPA,EAAS2P,aAAK,iBAAEM,SAAa,wBAAwBjQ,EAAQ2P,MAAMM,QAAU,IAAE,oBACjE,QAAd,GAAAjQ,aAAO,EAAPA,EAAS2P,aAAK,iBAAEO,UAAa,yBAAyBlQ,EAAQ2P,MAAMO,SAAW,IAAE,oBACnE,QAAd,GAAAlQ,aAAO,EAAPA,EAAS2P,aAAK,iBAAEhO,SAAa,mBAAmB3B,EAAQ2P,MAAMhO,QAAU,IAAE,oBAC5D,QAAd,GAAA3B,aAAO,EAAPA,EAAS2P,aAAK,iBAAEQ,UAAa,yBAAyBnQ,EAAQ2P,MAAMQ,SAAW,IAAE,oBACnE,QAAd,GAAAnQ,aAAO,EAAPA,EAAS2P,aAAK,iBAAES,QAAa,kBAAkBpQ,EAAQ2P,MAAMS,OAAS,IAAE,oBAC1D,QAAd,GAAApQ,aAAO,EAAPA,EAAS2P,aAAK,iBAAEU,QAAa,kBAAkBrQ,EAAQ2P,MAAMU,OAAS,IAAE,oBAC1D,QAAd,GAAArQ,aAAO,EAAPA,EAAS2P,aAAK,iBAAEW,WAAa,uBAAuBtQ,EAAQ2P,MAAMW,UAAY,IAAE,cAGlFC,GAAgB,mBACC,QAAf,GAAAvQ,aAAO,EAAPA,EAASwQ,cAAM,iBAAElD,YAAY,sBAAsBtN,EAAQwQ,OAAOlD,WAAa,IAAE,oBAClE,QAAf,GAAAtN,aAAO,EAAPA,EAASwQ,cAAM,iBAAE7O,SAAY,mBAAmB3B,EAAQwQ,OAAO7O,QAAU,IAAE,oBAC5D,QAAf,GAAA3B,aAAO,EAAPA,EAASwQ,cAAM,iBAAEX,QAAY,kBAAkB7P,EAAQwQ,OAAOX,OAAS,IAAE,oBAC1D,QAAf,GAAA7P,aAAO,EAAPA,EAASwQ,cAAM,iBAAEC,QAAY,mBAAmBzQ,EAAQwQ,OAAOC,OAAS,IAAE,oBAC3D,QAAf,GAAAzQ,aAAO,EAAPA,EAASwQ,cAAM,iBAAEE,WAAY,mBAAmB1Q,EAAQwQ,OAAOE,UAAY,IAAE,cAG/EC,GAAgB,mBACK,QAAnB,GAAA3Q,aAAO,EAAPA,EAAS4Q,kBAAU,iBAAEtD,YAAc,0BAA0BtN,EAAQ4Q,WAAWtD,WAAa,IAAE,oBAC5E,QAAnB,GAAAtN,aAAO,EAAPA,EAAS4Q,kBAAU,iBAAEC,UAAc,yBAAyB7Q,EAAQ4Q,WAAWC,SAAW,IAAE,oBACzE,QAAnB,GAAA7Q,aAAO,EAAPA,EAAS4Q,kBAAU,iBAAEE,OAAc,qBAAqB9Q,EAAQ4Q,WAAWE,MAAQ,IAAE,oBAClE,QAAnB,GAAA9Q,aAAO,EAAPA,EAAS4Q,kBAAU,iBAAEG,UAAc,yBAAyB/Q,EAAQ4Q,WAAWG,SAAW,IAAE,oBACzE,QAAnB,GAAA/Q,aAAO,EAAPA,EAAS4Q,kBAAU,iBAAEI,aAAc,4BAA4BhR,EAAQ4Q,WAAWI,YAAc,IAAE,oBAC/E,QAAnB,GAAAhR,aAAO,EAAPA,EAAS4Q,kBAAU,iBAAEf,QAAc,sBAAsB7P,EAAQ4Q,WAAWf,OAAS,IAAE,oBACpE,QAAnB,GAAA7P,aAAO,EAAPA,EAAS4Q,kBAAU,iBAAEhB,YAAc,sBAAsB5P,EAAQ4Q,WAAWhB,WAAa,IAAE,oBACxE,QAAnB,GAAA5P,aAAO,EAAPA,EAAS4Q,kBAAU,iBAAEjP,SAAc,uBAAuB3B,EAAQ4Q,WAAWjP,QAAU,IAAE,oBACtE,QAAnB,GAAA3B,aAAO,EAAPA,EAAS4Q,kBAAU,iBAAEP,QAAc,sBAAsBrQ,EAAQ4Q,WAAWP,OAAS,IAAE,cAGzFY,GAAgB,iJAGVjR,aAAO,EAAPA,EAASqN,QAAQD,GAAgB,IAAE,uEAEnCpN,aAAO,EAAPA,EAAS+O,MAAMD,GAAc,IAAE,oEAE/B9O,aAAO,EAAPA,EAAS2P,OAAOD,GAAc,IAAE,qEAEhC1P,aAAO,EAAPA,EAASwQ,QAAQD,GAAgB,IAAE,yEAEnCvQ,aAAO,EAAPA,EAAS4Q,YAAYD,GAAgB,IAAE,oFAzHhC,W,UACTO,EAAQ,GAMZ,OAJiB,QAAb,EAAAlR,aAAO,EAAPA,EAAS+O,YAAI,eAAEoC,UAAwC,OAA7B3S,EAAQY,UAAU,SAAkBY,EAAQ+O,KAAKoC,QAAQzR,SAAQ,SAAAqP,GAAQ,OAAAmC,EAAM3Q,KAAK,4CAA4CwO,EAAI,iCAE5I,QAAlB,EAAa,QAAb,EAAA/O,aAAO,EAAPA,EAAS+O,YAAI,eAAEC,WAAG,eAAEmC,UAAwC,OAA7B3S,EAAQY,UAAU,SAAkBY,EAAQ+O,KAAKC,IAAImC,QAAQzR,SAAQ,SAAAqP,GAAQ,OAAAmC,EAAM3Q,KAAK,4CAA4CwO,EAAI,gCAEpKmC,EAsHTE,GAEoD,QAAtD,GAAA1S,SAAS2S,KAAK1S,cAAc,kCAA0B,WAAE4E,WACxC,QAAb,GAAAvD,aAAO,EAAPA,EAAS+O,YAAI,iBAAEoC,WAA6B,QAAtB,GAAiB,QAAjB,GAAInR,aAAO,EAAPA,EAAS+O,YAAI,iBAAEC,WAAG,iBAAEmC,WAASzS,SAAS2S,KAAKzS,iBAAiB,kBAAkBc,SAAQ,SAAA4R,GAAO,OAAAA,EAAI/N,YAC9H7E,SAAS2S,KAAKhF,mBAAmB,YAAY4E,KAIjD,cAAkB,SAACxS,EAAS8S,GAEQ9S,EAAX,iBAAf,EAAqC,CAACA,GAAuBD,EAAQiB,YAAYhB,GAGvF,IAAI+S,EAAgB,GAChBC,EAAiB,SAACC,GAClBF,EAAgB,GAEhBE,EAAQC,MAAM,WAAWjS,SAAQ,SAACkS,GAC9BA,EAAOA,EAAKD,MAAM,WAClBH,EAAcI,EAAK,IAAMA,EAAKC,OAAO,GAAGC,KAAK,SAKlDP,EAAgB,UACfE,EAAe/S,SAASqT,QAEpBP,EAAc,mBAGd9S,SAASqT,OAAS,iBAAiBC,KAAKC,UAAUV,EAAgB,SAAE,WACpEE,EAAe/S,SAASqT,SAHxBvT,EAAQ0T,OAAOF,KAAKG,MAAMX,EAAc,oBAShD/S,EAASiB,SAAQ,SAAAC,GAEVA,EAAQV,UAAUC,SAAS,cAG9BS,EAAQH,iBAAiB,SAAS,SAAAH,GAC9BA,EAAM+E,iBAEN,IAAIgO,EAAYzS,EAAQwD,aAAa,cACjCkP,EAAYd,EAAOa,GAEpBC,IAEC3T,SAASqT,OAAS,iBAAiBC,KAAKC,UAAUI,GAAS,UAE3DZ,EAAe/S,SAASqT,QACxBvT,EAAQ0T,OAAOF,KAAKG,MAAMX,EAAc,uBAKhD7R,EAAQV,UAAU+D,IAAI,iBAK9B,SAAa,CACT,MAAU,WAAM,OAAAuD,KAAK+L,IAAI5T,SAAS6T,gBAAgBxF,aAAe,EAAGlL,OAAOqL,YAAc,IACzF,OAAW,WAAM,OAAA3G,KAAK+L,IAAI5T,SAAS6T,gBAAgBjQ,cAAgB,EAAGT,OAAOO,aAAe,MAIpG,UAAe5D,EAGf,KACA,WAGA,KACA,WAGA,KACA,WAIAqD,OAAOrD,QAAUqD,OAAOrD,SAAWA,EACnCqD,OAAOrD,QAAQmR,MAAQ9N,OAAOrD,QAAQmR,OAAS,UAC/C9N,OAAOrD,QAAQgU,MAAQ3Q,OAAOrD,QAAQgU,OAAS,UAC/C3Q,OAAOrD,QAAQiU,UAAY5Q,OAAOrD,QAAQiU,WAAa,UAGvD,M,8EC5xCA,WAkBMC,EAAQ,CAEV,YAAgB,SAAAC,GACZ,IAAIC,EAAqBD,EAAMxP,aAAa,eAE5CwP,EAAMnT,iBAAiB,SAAS,SAAAH,GAAS,OAAAsT,EAAMhS,aAAa,cAAe,OAE3EgS,EAAMnT,iBAAiB,QAAQ,SAAAH,GAAS,OAAAsT,EAAMhS,aAAa,cAAeiS,OAG9E,SAAa,SAAAnU,G,UAET,IAAIA,EAASsB,QAAQ,SAArB,CAEA,IACI8S,EAAyB,QAAjB,EAAGpU,EAAShB,aAAK,eAAEqV,cAC3BC,EAAWtU,EAAS0E,aAAa,QAEjC6P,EAAkB,oDACW,OAA7B,UAAQ5T,UAAU,UAAkB4T,EAAW,yCAEpC,SAAXD,GAPW,gDAOqBE,KAAKJ,KACrCG,EAAW,gDACsB,OAA7B,UAAQ5T,UAAU,UAAkB4T,EAAW,4CACnDH,EAAW,MAGVA,GAAwB,IAAZA,GAcbpU,EAASQ,UAAUsE,OAAO,SAE1B9E,EAASQ,UAAU+D,IAAI,WAElBvE,EAASqB,WAAWC,QAAQ,kBAA+CtB,EAASqB,WAEzF,UAAQ+L,eAAe,CAAClM,QAAQlB,EAASmB,OAAO,kBAAkB2D,SAEJ,QAA9D,YAAQE,aAAahF,EAAU,6BAA+B,SAAEQ,UAAUsE,OAAO,eApBjF9E,EAASQ,UAAU+D,IAAI,SAElBvE,EAASqB,WAAWC,QAAQ,kBAA+CtB,EAASqB,WAEpF,UAAQ+L,eAAe,CAAClM,QAAQlB,EAASmB,OAAO,mBAEjD,UAAQsT,YAAY,iCAAiCF,EAAQ,OAAQvU,GAGX,QAA9D,YAAQgF,aAAahF,EAAU,6BAA+B,SAAEQ,UAAU+D,IAAI,gBAetF,aAAiB,SAAArD,GAEbA,EAAQH,iBAAiB,UAAU,SAAAH,GAE/B,IAAI8T,EAAmBxT,EAAQwD,aAAa,iBAAmB9D,EAAMiF,OAAO3F,cAAc,qBAC1F,GAAIwU,EAAkB,IAAIC,EAAW,IAAIC,SAiBzC,GAfAhU,EAAMiF,OAAO1F,iBAAiB,+CAA+Cc,SAAQ,SAAAC,GAE7EA,EAAQI,QAAQ,WAEpB2S,EAAMY,SAAS3T,GAEXwT,IACGxT,EAAQI,QAAQ,iBACfqT,EAASG,OAAO5T,EAAQwD,aAAa,QAASxD,EAAQ6T,MAAM,IAE5DJ,EAASG,OAAO5T,EAAQwD,aAAa,QAASxD,EAAQlC,YAK9D4B,EAAMiF,OAAOvE,QAAQ,cAAe,OAAOV,EAAM+E,iBAErD,GAAI+O,EAAkB,CAClB,IAAIM,EAAS9T,EAAQwD,aAAa,iBAAmB9D,EAAMiF,OAAO3F,cAAc,6BAA6BlB,MACzGiW,EAAY/T,EAAQwD,aAAa,UACjCwQ,EAAYhU,EAAQwD,aAAa,UAErCyQ,MAAMF,EAAW,CAACG,OAAQF,EAAU3U,KAAMoU,IAEzCU,MAAK,SAAAC,GAAY,OAAAA,EAASC,UAAQC,OAAM,SAAAC,GAAS,OAAAC,QAAQD,MAAM,SAAUA,MAEzEJ,MAAK,SAAAC,GAAY,OAAAlS,OAAOuJ,SAASgJ,KAAOX,UAKrD,aAAiB,SAAAY,GACVA,EAAapV,UAAUC,SAAS,YAEnCmV,EAAa7U,iBAAiB,UAAU,SAAAH,GAGpC,IADA,IAAIiV,EAAW,GACN9X,EAAI,EAAGA,EAAI6X,EAAab,MAAMhT,SAAUhE,EAAG8X,EAAS/T,KAAK8T,EAAab,MAAMhX,GAAGO,MAExFsX,EAAavU,WAAWa,aAAa,YAAY2T,MAGrDD,EAAapV,UAAU+D,IAAI,YAG/B,SAAa,SAACvE,EAAUuB,GAEYvB,EAAX,iBAAf,EAAqC,CAACA,GAAuB,UAAQgB,YAAYhB,GAGvF,IAAIiM,GACQ1K,aAAO,EAAPA,EAASuU,OAAQ,MADzB7J,EAEQ1K,aAAO,EAAPA,EAAS8Q,MAFjBpG,EAGa1K,aAAO,EAAPA,EAASsN,WAI1B7O,EAASiB,SAAQ,SAAAC,G,UAET6U,EAAgB7U,EAAQwD,aAAa,cAUzC,GARoB,OAAhBuH,IAEA/K,EAAQuB,UAAY,qCAAqC,UAAQ9B,UAAU,SAAQ,IAAIoV,EAAa,KAAI9J,EAAmB,oBAAoBA,EAAqB,IAAE,KAAK8J,EAAa,UAE5J,QAA5B,EAAA7U,EAAQhB,cAAc,cAAM,SAAE4E,SAC9B,UAAQqJ,SAAS,kDAAkD4H,EAAa,0BAAyB9J,EAAc,SAASA,EAAa,IAAI,IAAE,sCAAuC/K,IAG1K,UAAhB+K,EAA0B,CAE1B/K,EAAQuB,UAAY,8BAA8BsT,EAAa,UAE/D7U,EAAQV,UAAU+D,IAAI,UACM,QAA5B,EAAArD,EAAQhB,cAAc,cAAM,SAAE4E,SAC9B,IAAIkR,EAAWD,EAAclR,QAAQ,KAAK,IAC1C,UAAQsJ,SAAS,yFAC4B6H,EAAQ,sHAC5C9U,GAGb,GAAoB,UAAhB+K,EAA0B,CAE1B/K,EAAQuB,UAAY,8BAA8BsT,EAAa,UAE/D7U,EAAQV,UAAU+D,IAAI,UACM,QAA5B,EAAArD,EAAQhB,cAAc,cAAM,SAAE4E,SAC9B,UAAQqJ,SAAS,yIACalC,EAAmB,WAAWA,EAAkB,IAAI,IAAE,iGACzDA,EAAc,WAAWA,EAAa,IAAI,IAAE,2HAC9D/K,GAET,IAAI+U,EAAc/U,EAAQhB,cAAc,iBAGpCgW,EAFcD,EAAYE,mBAEE,IADZJ,EAAclR,QAAQ,KAAK,KACQ,KAEvDoR,EAAYpT,MAAMuT,iBAAmBtO,KAAK+L,IAAI,EAAGqC,QAK7D,eAAmB,SAAAlW,IAEiBA,EAAX,iBAAf,EAAqC,CAACA,GAAuB,UAAQgB,YAAYhB,IAE9EiB,SAAQ,SAACC,EAASuL,GACvB,IAAGvL,EAAQV,UAAUC,SAAS,UAA9B,CAEAS,EAAQ2B,MAAMD,QAAU,OAaxB,UAAQ6R,YAXY,qqBAWcvT,GAElC,IAAImV,EAAe,UAAQjJ,eAAe,CAAClM,QAAQA,EAAQC,OAAO,oBAC9D8S,EAAQ,UAAQjP,aAAa9D,EAAS,YACtCoV,EAAaD,EAAanW,cAAc,iBACxCqW,EAAiBrV,EAAQ6F,aAAa,YACtCyP,EAAiBH,EAAanW,cAAc,oBAC5CuW,EAAYJ,EAAanW,cAAc,gBAExCgB,EAAQV,UAAUC,SAAS,WAAYwT,aAAK,EAALA,EAAOzT,UAAUC,SAAS,YAChE4V,EAAanW,cAAc,iBAAiBM,UAAU+D,IAAI,UAE3DrD,EAAQV,UAAUC,SAAS,WAAYwT,aAAK,EAALA,EAAOzT,UAAUC,SAAS,YAChE4V,EAAanW,cAAc,iBAAiBM,UAAU+D,IAAI,SAE9D,IAAImS,EAAgB,CAACxV,EAAQlC,OAEvB2X,EAAe,WACjBH,EAAerW,iBAAiB,QAAQc,SAAQ,SAAAmE,GAC5CA,EAAKrE,iBAAiB,SAAS,SAAAH,GAExB8V,IACCxV,EAAQf,iBAAiB,UAAUc,SAAQ,SAAA2V,GACnCA,EAAO5X,OAASoG,EAAKV,aAAa,eAAekS,EAAOC,gBAAgB,eAEhF3V,EAAQ4V,cAAc,IAAIC,MAAM,YAEpCnW,EAAMiF,OAAOf,gBAYzB,GAPA5D,EAAQf,iBAAiB,UAAUc,SAAQ,SAAC2V,EAAQnK,IAEpC,GAATA,GAAcmK,EAAO7P,aAAa,eAAasP,EAAanW,cAAc,oBAAoB8W,YAAcJ,EAAOI,aAEtH,UAAQ7I,SAAS,mBAAmByI,EAAOlS,aAAa,SAAQ,qDAAqDkS,EAAOI,YAAW,QAAQV,MAG/IC,EAAgB,CAEhBC,EAAe/T,UAAY,qBAAqBvB,EAAQlC,MAAK,gCAAgCwX,EAAeQ,YAAW,UAEvH,IAAIC,EAAcZ,EAAanW,cAAc,oBAE7CsW,EAAehW,UAAU+D,IAAI,iBAE7B0S,EAAY/W,cAAc,SAASgC,aAAa,cAAc,OAE9D,UAAQiM,SAAS8I,EAAYxU,UAAW+T,GAExCS,EAAYnS,SACZ6R,IAEAH,EAAetW,cAAc,SAASa,iBAAiB,SAAS,SAAAH,GAAS,OAAA0V,EAAW9V,UAAU+D,IAAI,aAClGiS,EAAetW,cAAc,SAASa,iBAAiB,QAAQ,SAAAH,GAAS,OAAA0V,EAAW9V,UAAUsE,OAAO,kBAGpG0R,EAAezV,iBAAiB,SAAS,SAAAH,GAAS,OAAA0V,EAAW9V,UAAU+D,IAAI,aAC3EkS,EAAU1V,iBAAiB,SAAS,SAAAH,GAAS,OAAA0V,EAAW9V,UAAU+D,IAAI,aACtE8R,EAAatV,iBAAiB,YAAY,SAAAH,GAAS,OAAA0V,EAAW9V,UAAUsE,OAAO,aAGnFwR,EAAWnW,iBAAiB,MAAMc,SAAQ,SAACmE,EAAKqH,GACvCrH,EAAK5E,UAAUC,SAAS,kBAAkB2E,EAAKrE,iBAAiB,SAAS,SAAAH,GAG1E,GAFA8V,EAAgBtR,EAAKV,aAAa,cAE9B6R,EAQG,CAEH,IAAIW,EAAmBV,EAAetW,cAAc,qBAChDiX,EAAU,qBAAqBT,EAAa,gCAAgCtR,EAAK4R,YAAW,UAC5FE,EACA,UAAQzC,YAAY0C,EAASD,IAE7BA,EAAmBV,EAAetW,cAAc,SAChD,UAAQkX,UAAUD,EAASD,IAE/BP,IAEGD,IACCxV,EAAQf,iBAAiB,UAAUc,SAAQ,SAAA2V,GACnCA,EAAO5X,OAAS0X,GAAeE,EAAO1U,aAAa,YAAY,MAEvEhB,EAAQ4V,cAAc,IAAIC,MAAM,iBAtBpCP,EAAeQ,YAAc5R,EAAK4R,YAE/BN,IACCxV,EAAQlC,MAAQ0X,EAChBxV,EAAQ4V,cAAc,IAAIC,MAAM,kBAwBhDV,EAAanW,cAAc,wBAAwBa,iBAAiB,SAAS,SAAAH,GAEzE0V,EAAWnW,iBAAiB,MAAMc,SAAQ,SAACmE,EAAKqH,G,MACxC4K,EAAezW,EAAMiF,OAAO7G,MAEhC,GAAmB,IADA4B,EAAM0W,SAAW1W,EAAM2W,WACF,IAAhBF,EACpBjS,EAAK5E,UAAUsE,OAAO,cACnB,CAEH,IAAI0S,EAAcpS,EAAK4R,YAAYS,WAC/BC,EAA6C,QAAlC,EAAGtS,EAAKV,aAAa,qBAAa,eAAE+S,WAE9CrS,EAAK5E,UAAUC,SAAS,mBACrB+W,EAAWG,SAASN,IAAiBK,EAAYC,SAASN,GACvDA,GAAcjS,EAAK5E,UAAUsE,OAAO,UAEpCuS,GAAcjS,EAAK5E,UAAU+D,IAAI,kBAOxDrD,EAAQV,UAAU+D,IAAI,eAI9B,SAAa,SAAArD,GACT,IAAI0W,EAAgB,UAAQ5S,aAAa9D,EAAS,YAC/C0W,GAAiBA,EAAcpX,UAAUC,SAAS,UAAUS,EAAQV,UAAU+D,IAAI,SAClFqT,GAAiBA,EAAcpX,UAAUC,SAAS,UAAUS,EAAQV,UAAU+D,IAAI,UAGzF,iBAAqB,SAAA2P,GACjB,IAAGA,EAAM1T,UAAUC,SAAS,WAA5B,CAEA,IAAIoX,EAAS3D,EAAM7S,WACfyW,EAASD,EAAOnT,aAAa,cAAgB,oCAC7CqT,EAAW7D,EAAMxP,aAAa,YAE7BmT,EAAOvW,QAAQ,oBAAoBuW,EAAOrX,UAAU+D,IAAI,mBAE7D,UAAQkQ,YAAY,SAASqD,EAAI,iCAAkC5D,GAiDnEA,EAAMnT,iBAAiB,UAAU,SAAAH,GAAS,OA/CvB,SAACmU,GAOhB,IALA,IAEIiD,EACAC,EAHApC,EAAW,GACXqC,EAAYL,EAAO3X,cAAc,UAI5BnC,EAAI,EAAGA,EAAIgX,EAAMhT,SAAUhE,EAChC8X,EAAS/T,KAAKiT,EAAMhX,GAAGO,MACvB0Z,EAAWjD,EAAMhX,GAAG+X,KAAK5C,MAAM,KAC/B+E,EAAUE,IAAIC,gBAAgBrD,EAAMhX,IAGxCma,EAAUzV,UAAY,GAEtBoT,EAAS5U,SAAQ,SAAAoX,G,MAGb,GADA,UAAQlK,SAAS,OAAOkK,EAAI,QAASH,GACrB,OAAbH,IAEoB,UAAhBC,EAAS,KACRH,EAAOhV,MAAM2B,gBAAkB,OAAOyT,EAAO,IAC7CJ,EAAOrX,UAAU+D,IAAI,cAEjBsT,EAAOrX,UAAUC,SAAS,gBAC1BoX,EAAOrX,UAAUsE,OAAO,cACK,QAA7B,EAAA+S,EAAO3X,cAAc,gBAAQ,SAAE4E,WAInB,UAAhBkT,EAAS,IAAgB,CACzBH,EAAOrX,UAAU+D,IAAI,cACrB,IAAI+T,EAAa,UAAQlL,eAAe,CAAClM,QAAQgT,EAAO/S,OAAO,UAE5DmX,GAAYA,EAAWxT,SAC1B,UAAQ2P,YAAY,gCAAgCwD,EAAO,iBAAiBD,EAAS,GAAE,aAAc9D,GAEjG2D,EAAOrX,UAAUC,SAAS,gBAC1BoX,EAAOrX,UAAUsE,OAAO,cACxB+S,EAAOhV,MAAM2B,gBAAkB,UAQT+T,CAAW3X,EAAMiF,OAAOkP,UAElEb,EAAMnT,iBAAiB,aAAa,SAAAH,GAAS,OAAAiX,EAAOrX,UAAU+D,IAAI,gBAClE2P,EAAMnT,iBAAiB,aAAa,SAAAH,GAAS,OAAAiX,EAAOrX,UAAUsE,OAAO,gBAErEoP,EAAMnT,iBAAiB,QAAQ,SAAAH,GAE3B,IACImU,EADOnU,EAAM4X,aACAzD,MACjBb,EAAMa,MAAQA,KAGlBb,EAAM1T,UAAU+D,IAAI,aAGxB,SAAa,SAAAvE,GACT,IAAIkB,EAAUlB,EAASE,cAAc,aAElCgB,EAAQV,UAAUC,SAAS,YAE9B,UAAQ2H,cAAclH,EAAQ,CAC1B,SAAW,EACX,KAAO,SACP,eAAe,UAGnBA,EAAQH,iBAAiB,SAAS,SAAAH,GAC9BA,EAAM+E,iBAEN,IAAI8S,EAAY,UAAQzT,aAAapE,EAAMiF,OAAQ,kBAAkB6S,WAAU,GAC3EC,EAAW,UAAQ3T,aAAapE,EAAMiF,OAAQ,kBAC9C+S,EAAYH,EAAUvY,cAAc,aAExC0Y,EAAUpY,UAAUsE,OAAO,YAC3B8T,EAAUpY,UAAUsE,OAAO,WAC3B8T,EAAUpY,UAAU+D,IAAI,eACxBqU,EAAUpY,UAAU+D,IAAI,YAExBkU,EAAUtY,iBAAiB,yBAAyBc,SAAQ,SAAAC,G,QAExDA,EAAQlC,MAAQ,KACZkC,EAAQI,QAAQ,kBAAkB2S,EAAM4E,YAAY3X,GAEpDA,EAAQI,QAAQ,YAChBJ,EAAQV,UAAUsE,OAAO,UACyC,QAAlE,YAAQsI,eAAe,CAAClM,QAAQA,EAAQC,OAAO,2BAAmB,SAAE2D,SACpEmP,EAAM6E,eAAe5X,IAGrBA,EAAQG,WAAWC,QAAQ,iBAC3BJ,EAAQV,UAAUsE,OAAO,UACzBmP,EAAM2B,aAAa1U,IAGnBA,EAAQG,WAAWC,QAAQ,wBAC3BJ,EAAQV,UAAUsE,OAAO,WACzB5D,EAAQV,UAAUsE,OAAO,cACzB5D,EAAQV,UAAUsE,OAAO,cACzB5D,EAAQ2V,gBAAgB,YACM,QAA9B,EAAA3V,EAAQhB,cAAc,gBAAQ,SAAE4E,SAChCmP,EAAM8E,iBAAiB7X,IAGxBA,EAAQG,WAAWC,QAAQ,cAC1BJ,EAAQH,iBAAiB,QAAQ,SAAAH,GAAS,OAAAqT,EAAMY,SAASjU,EAAMiF,cAIvE,UAAQsI,SAASsK,EAAWE,MAGhCzX,EAAQV,UAAU+D,IAAI,YAG1B,OAAW,SAAArD,GAEP,IAAGA,EAAQV,UAAUC,SAAS,UAA9B,CAOA,IALA,IAAIyT,EAAQhT,EAAQhB,cAAc,SAC9B8Y,EAAc/V,SAASiR,EAAMxP,aAAa,SAAW,EACrDoT,EAAOkB,EAAU,GAAQA,EAAO,KAAOA,EACvCC,EAAW/X,EAAQwD,aAAa,cAAgB,UAE3C3G,EAAI,EAAGib,GAAWjb,EAAGA,IAAK,UAAQ0W,YAAY,uCAAuCwE,EAAQ,mEAAoE/E,GAE1K,UAAQO,YAAY,sBAAsBqD,EAAI,UAAW5W,EAAQhB,cAAc,0BAE1DgB,EAAQf,iBAAiB,cAE/Bc,SAAQ,SAACiY,EAAazM,GAC7BxJ,SAASiR,EAAMlV,OAAO,GAAKyN,GAAOyM,EAAY1Y,UAAU+D,IAAI,UAEhE2U,EAAYnY,iBAAiB,cAAc,SAAAH,G,QAE4B,QAAnE,YAAQuY,gBAAgB,CAACjY,QAAQgY,EAAa/X,OAAO,sBAAc,SAAEF,SAAQ,SAAA2D,GAAO,OAAAA,EAAIpE,UAAU+D,IAAI,aACnC,QAAnE,YAAQ6U,gBAAgB,CAAClY,QAAQgY,EAAa/X,OAAO,sBAAc,SAAEF,SAAQ,SAAA2D,GAAO,OAAAA,EAAIpE,UAAUsE,OAAO,aACzGlE,EAAMiF,OAAOrF,UAAU+D,IAAI,UAE3B2U,EAAYnY,iBAAiB,cAAc,SAAAH,GACvC,IAAIyW,EAAepU,SAASiR,EAAMlV,SAAW,EAE7CkC,EAAQf,iBAAiB,cAAcc,SAAQ,SAACmE,EAAMrH,GAC9CA,EAAIsZ,EAAa,GAAGjS,EAAK5E,UAAUsE,OAAO,mBAK1DoU,EAAYnY,iBAAiB,SAAS,SAAAH,G,QAElCsT,EAAMlV,MAAQyN,EAAM,EAE+C,QAAnE,YAAQ0M,gBAAgB,CAACjY,QAAQgY,EAAa/X,OAAO,sBAAc,SAAEF,SAAQ,SAAA2D,GAAO,OAAAA,EAAIpE,UAAU+D,IAAI,aACnC,QAAnE,YAAQ6U,gBAAgB,CAAClY,QAAQgY,EAAa/X,OAAO,sBAAc,SAAEF,SAAQ,SAAA2D,GAAO,OAAAA,EAAIpE,UAAUsE,OAAO,aACzGlE,EAAMiF,OAAOrF,UAAU+D,IAAI,UAC3B2U,EAAYnY,iBAAiB,cAAc,SAAAH,GAAS,OAAAA,EAAMiF,OAAOrF,UAAU+D,IAAI,aAE/E2P,EAAM4C,cAAc,IAAIC,MAAM,iBAItC7V,EAAQV,UAAU+D,IAAI,aAK9BtE,SAASc,iBAAiB,oBAAoB,SAAAsY,GAE1C,UAAQrY,YAAY,QAAQC,SAAQ,SAAAC,GAChC,UAAQkH,cAAclH,EAAQ,CAC1B,SAAW,EACX,KAAO,SACP,eAAe,aAIvB,UAAQF,YAAY,iBAAiBC,SAAQ,SAAAC,GAAW,OAAA+S,EAAM4E,YAAY3X,MAE1E,UAAQF,YAAY,kCAAkCC,SAAQ,SAAAC,GAAW,OAAA+S,EAAM2B,aAAa1U,MAE5F+S,EAAMqF,SAAS,2CACfrF,EAAMqF,SAAS,uBAAwB,CAACxD,KAAK,WAC7C7B,EAAMqF,SAAS,uBAAwB,CAACxD,KAAK,WAE7C,UAAQ9U,YAAY,+CAA+CC,SAAQ,SAAAC,GAAW,OAAAA,EAAQH,iBAAiB,QAAQ,SAAAH,GAAS,OAAAqT,EAAMY,SAASjU,EAAMiF,cAIrJoO,EAAM6E,eAAe,uCAErB,UAAQ9X,YAAY,8DAA8DC,SAAQ,SAAAC,GAAW,OAAA+S,EAAMsF,SAASrY,MAEpH,UAAQF,YAAY,yCAAyCC,SAAQ,SAAAC,GAAW,OAAA+S,EAAM8E,iBAAiB7X,MAEvG,UAAQF,YAAY,kBAAkBC,SAAQ,SAAAC,GAAW,OAAA+S,EAAM0E,SAASzX,MAExE,UAAQF,YAAY,mBAAmBC,SAAQ,SAAAC,GAAW,OAAA+S,EAAMuF,OAAOtY,SAI3E,UAAe+S,G,8ECniBf,WACA,OA8XA,UAtWkB,SAACjU,EAAUuB,IAEOvB,EAAX,iBAAf,EAAqC,CAACA,GAAuB,UAAQgB,YAAYhB,IAE9EiB,SAAQ,SAAAC,G,gBACTuY,EAAcvY,EAEdA,EAAQG,WAAWC,QAAQ,uBAAgDmY,EAAcvY,EAAQG,YACrGH,EAAQV,UAAU+D,IAAI,mBAGtB,IAAMmV,EAAkB,SAACC,EAAQC,GAC7B,MAAiC,OAA7B,UAAQjZ,UAAU,QACXgZ,EAEAC,GAKfrY,EAAU,CAENsY,SAAWtY,aAAO,EAAPA,EAASsY,WAAY,EAChCC,QAAWvY,aAAO,EAAPA,EAASuY,UAAY,EAChCC,UAAWxY,aAAO,EAAPA,EAASwY,YAAY,EAGhCC,KAAO,CACHC,UAAwB,QAAb,EAAA1Y,aAAO,EAAPA,EAASyY,YAAI,eAAEC,YAAY,EACtCC,QAAwB,QAAb,EAAA3Y,aAAO,EAAPA,EAASyY,YAAI,eAAEE,UAAY,EACtCC,QAAwB,QAAb,EAAA5Y,aAAO,EAAPA,EAASyY,YAAI,eAAEG,UAAY,IAK9C,IAAIC,EAAclZ,EAAQf,iBAAiB,YACvCka,EAAcnZ,EAAQf,iBAAiB,YACvCma,EAAYD,EAAUtY,OAG1B,GAAIR,EAAQyY,KAAKG,OAAQ,CAES,QAA9B,EAAAjZ,EAAQhB,cAAc,gBAAQ,SAAE4E,SAEhC,UAAQqJ,SAAS,2BAA2BjN,GAG5C,IAFA,IAAIqZ,EAAUrZ,EAAQhB,cAAc,YAE3BnC,EAAI,EAAGwD,EAAQyY,KAAKG,OAAOpY,OAAO,GAAKhE,EAAGA,IAAK,CACpD,IAAIyc,EAAQjZ,EAAQyY,KAAKG,OAAOpc,GAChC,UAAQoQ,SAAS,OAAOqM,EAAK,QAAQD,GAGzCH,EAAclZ,EAAQf,iBAAiB,YAI3C,GAAIoB,EAAQyY,KAAKE,OAAQ,CAES,QAA9B,EAAAhZ,EAAQhB,cAAc,gBAAQ,SAAE4E,SAEhC,UAAQqJ,SAAS,kBAAkBjN,GACvBA,EAAQhB,cAAc,SAOlCma,EAAYnZ,EAAQhB,cAAc,YAIlCqB,EAAQyY,KAAKC,UACbI,EAAUpZ,SAAQ,SAAAwZ,GACdA,EAAIta,iBAAiB,MAAMc,SAAQ,SAAAyZ,GAAU,OAAAA,EAAOxY,aAAa,mBAAkB,SAK3F,IAAIyY,EAAc,GACdpZ,EAAQsY,UAASc,EAAc,6HAEVpZ,EAAQsY,QAAO,KAAKtY,EAAQsY,QAAO,+BAClC,EAAhBtY,EAAQsY,QAAYS,EAAY,kBAAkC,EAAhB/Y,EAAQsY,QAAS,KAAqB,EAAhBtY,EAAQsY,QAAS,YAAc,IAAE,uBACzF,EAAhBtY,EAAQsY,QAAYS,EAAY,kBAAkC,EAAhB/Y,EAAQsY,QAAS,KAAqB,EAAhBtY,EAAQsY,QAAS,YAAc,IAAE,uBACzF,GAAhBtY,EAAQsY,QAAaS,EAAY,kBAAkC,GAAhB/Y,EAAQsY,QAAU,KAAqB,GAAhBtY,EAAQsY,QAAU,YAAc,IAAE,uBAC5F,GAAhBtY,EAAQsY,QAAaS,EAAY,kBAAkC,GAAhB/Y,EAAQsY,QAAU,KAAqB,GAAhBtY,EAAQsY,QAAU,YAAc,IAAE,uBAC5F,GAAhBtY,EAAQsY,QAAaS,EAAY,kBAAkC,GAAhB/Y,EAAQsY,QAAU,KAAqB,GAAhBtY,EAAQsY,QAAU,YAAc,IAAE,uBAC5F,GAAhBtY,EAAQsY,QAAaS,EAAY,kBAAkC,GAAhB/Y,EAAQsY,QAAU,KAAqB,GAAhBtY,EAAQsY,QAAU,YAAc,IAAE,uBAC5F,IAAhBtY,EAAQsY,QAAcS,EAAY,kBAAkC,IAAhB/Y,EAAQsY,QAAW,KAAqB,IAAhBtY,EAAQsY,QAAW,YAAc,IATpF,qCAUPS,EAAS,KAAKA,EAVP,2EAYJZ,EAAgB,WAAY,cAAa,sBAIxE,IAAIkB,EAAa,GACbrZ,EAAQuY,SAAQc,EAAa,oKAEmDlB,EAAgB,kBAAmB,mBAAkB,oCAKzI,IAAImB,EAAW,mFACTtZ,EAAQsY,QACN,yGAEMc,EAAW,2BACP,IAAE,oBAGdpZ,EAAQuY,OACN,0FAEMc,EAAU,oEAEK,IAAE,mBAK/B,UAAQxD,UAAUyD,EAAUpB,GAG5B,IAAIqB,EAAqB,+HAEhBpB,EACD,8EAA8EW,EAAUtY,OAAM,kBAAkBsY,EAAUtY,OAC1H,wEAAwEsY,EAAUtY,OAAM,oBAAoBsY,EAAUtY,QACzH,8GAML,UAAQ0S,YAAYqG,EAAoBrB,GAGxC,IAAIsB,EAAa,UAAQC,eAAe,CAAC9Z,QAAQuY,EAAatY,OAAO,oBACjEoJ,EAAa,UAAQ6C,eAAe,CAAClM,QAAQuY,EAAatY,OAAO,qBAG/D8Z,EAAU,SAACC,EAAMC,EAAOC,G,MAEU,QAApC,EAAAla,EAAQf,iBAAiB,mBAAW,SAAEc,SAAQ,SAAA4R,GAAO,OAAAA,EAAI/N,YAEzD,IAAI,IAAI/G,EAAIod,EAAOC,GAAOrd,EAAGA,IACtBmd,EAAKnd,IAAI,UAAQoQ,SAAS+M,EAAKnd,GAAImD,EAAQhB,cAAc,UAGhEqK,EAAWrK,cAAc,gBAAgB8W,YAAcmE,EAAM,EAC7D5Q,EAAWrK,cAAc,cAAc8W,YAAcoE,EAAI,GAkDvDC,EAAmB,SAACH,EAAMC,EAAOC,G,MAEC,QAApC,EAAAla,EAAQf,iBAAiB,mBAAW,SAAEc,SAAQ,SAAA4R,GAAO,OAAAA,EAAI/N,YAGzD,IAAIwW,EAAiB/Q,EAAWrK,cAAc,eAC1Cqb,EAAiBzT,KAAK0T,KAAKN,EAAKnZ,OAAOR,EAAQsY,SAGnDyB,EAAe7Y,UAAY,KAG3B,IAAI,IAAI1E,EAAI,EAAGwd,EAAY,GAAKxd,EAAGA,IAAK,UAAQoQ,SAAS,eAAiB,GAAHpQ,EAAK,SAAS,IAAE,MAAKA,EAAE,GAAC,QAASud,GAGpGC,EAAc,IACd,UAAQnE,UAAU,iCAAiC,UAAQzW,UAAU,SAAQ,YAAa2a,EAAepb,cAAc,mBACvH,UAAQiO,SAAS,iCAAiC,UAAQxN,UAAU,OAAM,YAAa2a,IAI3FL,EAAQC,EAAKC,EAAMC,GAnEI,W,QAEjBK,EAAa,SAAArW,G,MAEXsW,EAAazY,SAASmC,EAAK4R,aAC3B2E,EAAgBZ,EAAW7a,cAAc,YAAYlB,MAGjB,QAAxC,EAAAoG,EAAK/D,WAAWnB,cAAc,kBAAU,SAAEM,UAAUsE,OAAO,UAC3DM,EAAK5E,UAAU+D,IAAI,UAOnB0W,EAAQZ,EAJqB,GAAZqB,EAAgB,EAAIA,EAASC,EAAcA,EAC3CD,EAASC,EAAc,IAO5CpR,EAAWpK,iBAAiB,kDAAkDc,SAAQ,SAAAmE,GAElFA,EAAKrE,iBAAiB,SAAS,SAAAH,GAC3BA,EAAM+E,iBACN8V,EAAW7a,EAAMiF,cAKyB,QAAlD,EAAA0E,EAAWrK,cAAc,iCAAyB,SAAEa,iBAAiB,SAAS,SAAAH,GAC1EA,EAAM+E,iBAEN,IAAIP,EAAO,UAAQgI,eAAe,CAAClM,QAAQqJ,EAAWrK,cAAc,aAAciB,OAAO,uCACtFiE,GAAMqW,EAAWrW,MAI0B,QAAlD,EAAAmF,EAAWrK,cAAc,iCAAyB,SAAEa,iBAAiB,SAAS,SAAAH,GAC1EA,EAAM+E,iBAEN,IAAIP,EAAO,UAAQ4V,eAAe,CAAC9Z,QAAQqJ,EAAWrK,cAAc,aAAciB,OAAO,uCACrFiE,GAAMqW,EAAWrW,MA6BzBwW,IAIJ,GAAGra,EAAQsY,QAAS,CAEhBwB,EAAiBhB,EAAW,EAAG9Y,EAAQsY,QAAQ,GAG/C,IAAIgC,EAAiBd,EAAW7a,cAAc,YAC9C,UAAM4Y,eAAe+C,GAErBA,EAAe9a,iBAAiB,UAAU,SAAAH,GACtCW,EAAQsY,QAAUjZ,EAAMiF,OAAO7G,MAE/Bqc,EAAiBhB,EAAW,EAAG9Y,EAAQsY,QAAQ,MAKpDtY,EAAQuY,SACkC,QAAzC,EAAAiB,EAAW7a,cAAc,wBAAgB,SAAEa,iBAAiB,SAAS,SAAAH,GAEjE,IAAIyW,EAAezW,EAAMiF,OAAO7G,MAAMyY,WAAWpD,cAC7CyH,EAAelb,EAAM0W,SAAW1W,EAAM2W,SACtCwE,EAAe,GAGA,GAAhBD,GAAqC,IAAhBzE,EAEpB0E,EAAe1B,EAGfA,EAAUpZ,SAAQ,SAACmE,EAAKqH,GAEHrH,EAAK4R,YAAYS,WAAWpD,cAE9BsD,SAASN,IAAe0E,EAAaja,KAAKsD,MAK7D7D,EAAQsY,SAAWkC,EAAaha,OAAS,GAAGsZ,EAAiBU,EAAc,EAAGxa,EAAQsY,QAAQ,GAC7FtY,EAAQsY,SAASoB,EAAQc,EAAc,EAAGA,EAAaha,OAAO,OAKxER,EAAQwY,UACPK,EAAYnZ,SAAQ,SAACuZ,EAAOwB,GAExBxB,EAAMha,UAAU+D,IAAI,cACpB,UAAQ4J,SAAS,kDAAmDqM,GAGpEA,EAAMzZ,iBAAiB,SAAS,SAAAH,G,QAC5BA,EAAM+E,iBAEN,IAAMsW,EAAgB,W,MAEoC,QAAtD,YAAQnV,YAAY,CAAC5F,QAAQsZ,EAAOrZ,OAAO,mBAAW,SAAEF,SAAQ,SAAAS,GAC5DA,EAAQlB,UAAUsE,OAAO,UACzBpD,EAAQlB,UAAUsE,OAAO,YACzBpD,EAAQlB,UAAUsE,OAAO,iBAKjC,GAAI0V,EAAMha,UAAUC,SAAS,YAQtB,CACCyb,EAAS,OAEbD,IAEAzB,EAAMha,UAAU+D,IAAI,UACpBiW,EAAMha,UAAU+D,IAAI,aACpBiW,EAAMha,UAAUsE,OAAO,gBAfe,CACtC,IAAIoX,EAAS,MAEbD,IAEAzB,EAAMha,UAAU+D,IAAI,UACpBiW,EAAMha,UAAU+D,IAAI,YACpBiW,EAAMha,UAAUsE,OAAO,aAY3B,GAAGvD,EAAQsY,QAAS,CAChB,IAAIsC,EAAYjb,EAAQhB,cAAc,SACN,QAAhC,EAAAic,EAAUhc,iBAAiB,aAAK,SAAEc,SAAQ,SAAA4R,GAAO,OAAAA,EAAI/N,YAEjDqX,GAAW9B,EAAUpZ,SAAQ,SAAAwZ,GAAO,OAAA0B,EAAUzZ,YAAY+X,MAI9B,QAApC,EAAAvZ,EAAQf,iBAAiB,mBAAW,SAAEc,SAAQ,SAACwZ,EAAKhO,GAChD,IAAI2P,EAAc,UAAQtV,YAAY,CAAC5F,QAAQuZ,EAAItZ,OAAO,OACtDkW,EAAeoD,EAAIhZ,SAASua,GAAShF,YAEzCoF,EAAYnb,SAAQ,SAAAS,GAChB,IAAI2a,EAAe3a,EAAQD,SAASua,GAAShF,YAGxCsF,MAAMjF,KACPA,EAAekF,WAAWlF,GAC1BgF,EAAeE,WAAWF,IAI1BC,MAAMjF,KACNA,EAAeA,EAAaI,WAC5B4E,EAAeA,EAAa5E,YAInB,OAAVyE,GAAmB7E,GAAgBgF,GAAc,UAAQ5H,YAAYgG,EAAK/Y,GAEhE,QAAVwa,GAAoB7E,GAAgBgF,GAAc,UAAQ5H,YAAYgG,EAAK/Y,SAKtF2Y,EAAYnZ,EAAQf,iBAAiB,YAEjCoB,EAAQsY,SAAWQ,EAAUtY,OAAS,GAAGsZ,EAAiBhB,EAAW,EAAG9Y,EAAQsY,QAAQ,GACvFtY,EAAQsY,SAASoB,EAAQZ,EAAW,EAAGA,EAAUtY,OAAO,c,8ECxXjF,WAOMya,EAAQ,CAEV,WAAe,SAAAxc,IAEqBA,EAAX,iBAAf,EAAqC,CAACA,GAAuB,UAAQgB,YAAY,qBAG9EC,SAAQ,SAAAC,GAEb,GAAIA,EAAQwD,aAAa,aACtBxD,EAAQV,UAAUC,SAAS,UAA9B,CAGAS,EAAQf,iBAAiB,0BAA0Bc,SAAQ,SAAAwb,GACvDA,EAAQjc,UAAU+D,IAAI,iBACtBkY,EAAQpb,WAAWb,UAAU+D,IAAI,iBAEjC,UAAQ6S,UAAU,mFAAoFqF,GAEnGA,EAAQjc,UAAUC,SAAS,cAAagc,EAAQpb,WAAWwB,MAAM6Z,SAAW,aAInF,IAAIC,EAASzb,EAAQwD,aAAa,WAE9BkY,EAAe,UAAQ9W,WAAW,sBAAsB6W,EAAM,MAE9DE,EAAW3b,EAAQf,iBAAiB,0BAKxCF,SAASM,KAAKqN,mBAAmB,YAAa,gCAAgC+O,EAAhC,sKAG9CE,EAAS5b,SAAQ,SAAA6b,GACb,IAAIC,EAAWD,EAAKpE,WAAU,GAC9B,UAAQ5S,WAAW,IAAI6W,EAAM,kBAAkBja,YAAYqa,MAI/D7b,EAAQf,iBAAiB,aAAac,SAAQ,SAAA+b,GAAY,OAAAA,EAAS3b,WAAWwB,MAAMoa,QAAU,YAG9F,UAAQ7U,cAAcwU,EAAa,CAC/B,SAAW,EACX,KAAO,SACP,eAAe,UAInB,UAAQM,UAAUN,EAAc,SAAS,SAAAhc,GACrCA,EAAM+E,iBACN,UAAQG,WAAW,IAAI6W,GAAUnc,UAAU+D,IAAI,aAI/B,UAAQuB,WAAW,IAAI6W,EAAM,mBACnC5b,iBAAiB,SAAS,SAAAH,GACpCA,EAAM+E,iBACN/E,EAAMiF,OAAOxE,WAAWb,UAAUsE,OAAO,aAIzB,UAAQ9D,YAAY,IAAI2b,EAAM,uBACpC1b,SAAQ,SAAAkc,GAClBA,EAAOpc,iBAAiB,SAAS,SAAAH,G,QAC7BA,EAAM+E,iBAEU,UAAQX,aAAamY,EAAQ,gBAA7C,IAGIC,EAAUD,EAAO9b,WAAWnB,cAAc,MAG1Cid,EAAO9b,WAAWb,UAAUC,SAAS,WAElC2c,GAAS,UAAQ9P,QAAQ8P,EAAQ,KAEnB,QAAjB,EAAAD,EAAO9b,kBAAU,SAAEb,UAAUsE,OAAO,YAEf,UAAQgC,YAAY,CAAC5F,QAAQic,EAAO9b,WAAYF,OAAO,YAE7DF,SAAQ,SAAAY,GACnBA,EAASrB,UAAUsE,OAAO,UAE1BjD,EAASJ,SAASR,SAAQ,SAAAoc,IAClBA,EAAO/b,QAAQ,OAAS+b,EAAO/b,QAAQ,cAAgB8b,IAAS,UAAQ9P,QAAQ8P,EAAQ,WAIjGA,GAAS,UAAQ5P,UAAU4P,EAAQ,KAErB,QAAjB,EAAAD,EAAO9b,kBAAU,SAAEb,UAAU+D,IAAI,iBAK7CrD,EAAQV,UAAU+D,IAAI,eAK9B,WAAe,SAAAvE,IAEqBA,EAAX,iBAAf,EAAqC,CAACA,GAAuB,UAAQgB,YAAY,iBAE9EC,SAAQ,SAAAC,GACVA,EAAQV,UAAUC,SAAS,WAC9BS,EAAQf,iBAAiB,WAAWc,SAAQ,SAAAqc,GAExC,IAAIC,EAAa,UAAQvC,eAAe,CAAC9Z,QAAQoc,EAAanc,OAAO,MACrEoc,EAAW/c,UAAU+D,IAAI,WACzBgZ,EAAW/c,UAAU+D,IAAI,yBAEzBgZ,EAAWxc,iBAAiB,SAAS,SAAAH,GAEjCA,EAAM+E,iBAEN,IAAI0H,EAAakQ,EAAWlc,WAE5BgM,EAAW7M,UAAUgd,OAAO,UAC5B,UAAQC,YAAYH,EAAY,KAEhC,UAAQxW,YAAY,CAAC5F,QAAQmM,IAAapM,SAAQ,SAAAyc,GAC9C,IAAIC,EAAcD,EAAexd,cAAc,MAC5Cyd,GAAa,UAAQrQ,QAAQqQ,EAAY,KAC5CD,EAAeld,UAAUsE,OAAO,gBAIxC5D,EAAQV,UAAU+D,IAAI,kBAOtCtE,SAASc,iBAAiB,oBAAoB,SAAAsY,GAC1CmD,EAAMzB,WAAW,oBACjByB,EAAMoB,WAAW,mBAGrB,UAAepB,G,8ECtJf,M,cCAK/d,OAAOuD,OACVvD,OAAOuD,KAAO,SAASvC,GACrB,IAAIuC,EAAO,GACX,IAAK,IAAI1D,KAAQmB,EACXhB,OAAOkB,UAAUC,eAAe1B,KAAKuB,EAAQnB,IAC/C0D,EAAKF,KAAKxD,GAGd,OAAO0D,K,cCRN,WAAY6b,QAAQle,YACvBke,QAAQle,UAAUmF,OAAS,WACtBgZ,KAAKzc,YACNyc,KAAKzc,WAAW0c,YAAYD,S,8ECHlC,WACA,OAqBA7d,SAASc,iBAAiB,oBAAoB,SAAAsY,G,MAEP,QAAnC,YAAQrY,YAAY,uBAAe,SAAEC,SAAQ,SAAAC,GAEzC,UAAQkH,cAAclH,EAAQ,CAC1B,SAAW,EACX,KAAO,SACP,eAAe,aAKvB,UAAQgc,UAAU,eAAgB,SAAS,SAAAtc,GACvCA,EAAM+E,iBACN,IAAIqY,EAAapd,EAAMiF,OAEvB,GAAImY,EAAWjX,aAAa,eAAgB,CAExC,IAAIlB,EAASmY,EAAWtZ,aAAa,eAErC,UAAQoB,WAAW,IAAMD,GAAQf,cAC9B,GAAIkZ,EAAWjX,aAAa,YAAa,CAE5C,IAAIkX,EAAYD,EAAWtZ,aAAa,gBAExCsZ,EAAWhS,QAAQiS,GAAWnZ,cAG9BkZ,EAAW3c,WAAWyD,YAK9B,UAAQH,cAAc,+BAA8B,GACpD,UAAQA,cAAc,yBAAwB,GAG9C,UAAQuZ,YAAY,mBAGpB,UAAQC,OAAO,iBAKI,UAAQnd,YAAY,qEAC1BC,SAAQ,SAAAmd,GACb,IAAIC,EAAWD,EAASE,WACpBC,EAASnb,OAAOqL,WAAa2P,EAAS5a,wBAAwBgb,OAC9DH,EAAW,KAAOE,EAAS,OAC3BH,EAAS5d,UAAU+D,IAAI,kBACvB6Z,EAAS5d,UAAUsE,OAAO,eAC1BsZ,EAAS5d,UAAUsE,OAAO,qBAKlC,UAAQ9D,YAAY,+BAA+BC,SAAQ,SAAAwd,GAC1CA,EAAWhZ,WACV,KACVgZ,EAAWje,UAAU+D,IAAI,kBACzBka,EAAWje,UAAUsE,OAAO,eAKpC,UAAQ9D,YAAY,sCAAsCC,SAAQ,SAAAyd,GAC9CA,EAAcjZ,UAAYiZ,EAAcC,cACvC,KACbD,EAAcle,UAAU+D,IAAI,WAC5Bma,EAAcle,UAAUsE,OAAO,sBAOvC,UAAQ9D,YAAY,gBAAgBC,SAAQ,SAAAC,GACxC,IAAI0d,EAAW1d,EAAQwD,aAAa,kBAChCma,EAAY3d,EAAQwD,aAAa,eAAiB,EAClDoa,EAAe5d,EAAQwD,aAAa,kBAAoB,IAE5D,SAASqa,IAEL7d,EAAQV,UAAU+D,IAAI,eAElBqa,IAAU1d,EAAQ2B,MAAMmc,cAAgBJ,GACxCE,IAAc5d,EAAQ2B,MAAMoc,kBAAoBH,GAChDD,IAAW3d,EAAQ2B,MAAMqc,eAAiBL,GAGlDzb,OAAOrC,iBAAiB,UAAU,SAAAH,GAAS,OAAAme,OAC3C3b,OAAOrC,iBAAiB,QAAQ,SAAAH,GAAS,OAAAme,UAKjD,UAAQrY,YAAY,CAChB1G,SAAW,gBACXoE,SAAW,OAIf,UAAQ+a,UAAU,CACdnf,SAAW,aACXoE,SAAW,OAIf,UAAQgb,YAAY,CAACpf,SAAW,kBAGhC,UAAU,eAGV,UAAQqf,KAAK,yBAGb,UAAQC,UAAU,oCAGlB,UAAQC,SAAS,aAGjB,UAAQ7R,MAAM,cAGd,UAAQG,SAAS,uB,sFCtJjB,EAAMzK,OAECoc,EAAM,EAAItZ,uBAChB,EAAIuZ,6BACJ,EAAIC,0BACJ,EAAIC,yBACJ,SAASC,GAAM,OAAOvb,WAAWub,EAAI,KCNtC,EAAMxc,OAECyc,EAAM,EAAIC,sBAChB,EAAIC,yBACJ,SAASC,GAAKC,aAAaD,ICJzB,SAASE,IAMd,IALA,IAAIC,EAAK7hB,EAAM8hB,EACXva,EAASwa,UAAU,IAAM,GACzBtiB,EAAI,EACJgE,EAASse,UAAUte,OAEhBhE,EAAIgE,EAAQhE,IACjB,GAA6B,QAAxBoiB,EAAME,UAAUtiB,IACnB,IAAKO,KAAQ6hB,EAGPta,KAFJua,EAAOD,EAAI7hB,UAISgiB,IAATF,IACTva,EAAOvH,GAAQ8hB,GAKvB,OAAOva,ECnBF,SAAS0a,EAAmBvhB,GACjC,MAAO,CAAC,OAAQ,SAASwhB,QAAQxhB,IAAU,EAAIuU,KAAKG,MAAM1U,GAASA,ECD9D,SAASyhB,EAAgBC,EAASphB,EAAKN,EAAO2hB,GACnD,GAAIA,EACF,IAAMD,EAAQE,QAAQthB,EAAKN,GAAU,MAAO6hB,IAE9C,OAAO7hB,ECJF,SAAS8hB,IACd,IAAIC,EAAM9gB,SACNM,EAAOwgB,EAAIxgB,KAOf,OALKA,KACHA,EAAOwgB,EAAIC,cAAc,SACpBC,MAAO,GAGP1gB,ECTF,IAAI2gB,EAAajhB,SAAS6T,gBCE1B,SAASqN,EAAa5gB,GAC3B,IAAI6gB,EAAc,GAUlB,OATI7gB,EAAK0gB,OACPG,EAAcF,EAAWre,MAAMmB,SAE/BzD,EAAKsC,MAAMgM,WAAa,GAExBtO,EAAKsC,MAAMmB,SAAWkd,EAAWre,MAAMmB,SAAW,SAClDkd,EAAWxe,YAAYnC,IAGlB6gB,ECXF,SAASC,EAAe9gB,EAAM6gB,GAC/B7gB,EAAK0gB,OACP1gB,EAAKuE,SACLoc,EAAWre,MAAMmB,SAAWod,EAG5BF,EAAWvC,cCNR,SAAS2C,EAAWC,EAAOvhB,EAAUwhB,EAAO/U,GAE/C,eAAgB8U,EACdA,EAAME,WAAWzhB,EAAW,IAAMwhB,EAAQ,IAAK/U,GAC/C8U,EAAMG,QAAQ1hB,EAAUwhB,EAAO/U,GCN9B,SAASkV,EAAkBJ,GAEhC,OADY,eAAgBA,EAASA,EAAMK,SAAWL,EAAMC,OAChDzf,OCDP,SAASd,EAAS4gB,EAAKC,EAAUC,GACtC,IAAK,IAAIhkB,EAAI,EAAGC,EAAI6jB,EAAI9f,OAAQhE,EAAIC,EAAGD,IACrC+jB,EAAS5jB,KAAK6jB,EAAOF,EAAI9jB,GAAIA,GCH1B,IAAIikB,EAAmB,cAAe/hB,SAAS+gB,cAAc,KCEhEiB,EAAWD,EACX,SAAUE,EAAIC,GAAO,OAAOD,EAAG1hB,UAAUC,SAAS0hB,IAClD,SAAUD,EAAIC,GAAO,OAAOD,EAAGE,UAAU5B,QAAQ2B,IAAQ,GCHzDE,EAAWL,EACX,SAAUE,EAAIC,GACPF,EAASC,EAAKC,IAAQD,EAAG1hB,UAAU+D,IAAI4d,IAE9C,SAAUD,EAAIC,GACPF,EAASC,EAAKC,KAAQD,EAAGE,WAAa,IAAMD,ICLnDG,EAAcN,EACd,SAAUE,EAAIC,GACRF,EAASC,EAAKC,IAAQD,EAAG1hB,UAAUsE,OAAOqd,IAEhD,SAAUD,EAAIC,GACRF,EAASC,EAAIC,KAAQD,EAAGE,UAAYF,EAAGE,UAAUvd,QAAQsd,EAAK,MCNjE,SAASI,EAAQL,EAAIjgB,GAC1B,OAAOigB,EAAGnb,aAAa9E,GCDlB,SAASugB,EAAQN,EAAIjgB,GAC1B,OAAOigB,EAAGxd,aAAazC,GCDlB,SAASwgB,EAAWP,GAEzB,YAA0B,IAAZA,EAAG9c,KCAZ,SAASsd,EAASC,EAAKC,GAE5B,GADAD,EAAOF,EAAWE,IAAQA,aAAenhB,MAASmhB,EAAM,CAACA,GACX,oBAA1ClkB,OAAOkB,UAAU8X,SAASvZ,KAAK0kB,GAEnC,IAAK,IAAI7kB,EAAI4kB,EAAI5gB,OAAQhE,KACvB,IAAI,IAAIuB,KAAOsjB,EACbD,EAAI5kB,GAAGmE,aAAa5C,EAAKsjB,EAAMtjB,ICN9B,SAASujB,EAAYF,EAAKC,GAC/BD,EAAOF,EAAWE,IAAQA,aAAenhB,MAASmhB,EAAM,CAACA,GAIzD,IADA,IAAIG,GAFJF,EAASA,aAAiBphB,MAASohB,EAAQ,CAACA,IAErB7gB,OACdhE,EAAI4kB,EAAI5gB,OAAQhE,KACvB,IAAK,IAAIglB,EAAID,EAAYC,KACvBJ,EAAI5kB,GAAG8Y,gBAAgB+L,EAAMG,ICT5B,SAASC,EAAmBC,GAEjC,IADA,IAAIpB,EAAM,GACD9jB,EAAI,EAAGC,EAAIilB,EAAGlhB,OAAQhE,EAAIC,EAAGD,IACpC8jB,EAAI/f,KAAKmhB,EAAGllB,IAEd,OAAO8jB,ECLF,SAASqB,EAAYhB,EAAIiB,GACL,SAArBjB,EAAGrf,MAAMD,UAAsBsf,EAAGrf,MAAMD,QAAU,QCDjD,SAASwgB,EAAYlB,EAAIiB,GACL,SAArBjB,EAAGrf,MAAMD,UAAsBsf,EAAGrf,MAAMD,QAAU,ICDjD,SAASygB,EAAUnB,GACxB,MAA+C,SAAxC9e,OAAO1C,iBAAiBwhB,GAAItf,QCD9B,SAAS0gB,EAAcC,GAC5B,GAAqB,iBAAVA,EAAoB,CAC7B,IAAI1B,EAAM,CAAC0B,GACPC,EAAQD,EAAME,OAAO,GAAGC,cAAgBH,EAAM1W,OAAO,GAC1C,CAAC,SAAU,MAAO,KAAM,KAE9B5L,SAAQ,SAAS0iB,GACT,OAAXA,GAA6B,cAAVJ,GACrB1B,EAAI/f,KAAK6hB,EAASH,MAItBD,EAAQ1B,EAKV,IAFA,IAAIK,EAAKjiB,SAAS+gB,cAAc,eAExBjjB,GADEwlB,EAAMxhB,OACJ,GAAGhE,EAAIwlB,EAAMxhB,OAAQhE,IAAI,CACnC,IAAI6lB,EAAOL,EAAMxlB,GACjB,QAAuBuiB,IAAnB4B,EAAGrf,MAAM+gB,GAAuB,OAAOA,EAG7C,OAAO,EClBF,SAASC,EAAeC,EAAQC,GACrC,IAAIC,GAAU,EAQd,MAPI,UAAUxP,KAAKsP,GACjBE,EAAU,SAAWD,EAAU,MACtB,KAAKvP,KAAKsP,GACnBE,EAAU,IAAMD,EAAU,MACjBD,IACTE,EAAUD,EAAQ1P,cAAgB,OAE7B2P,ECZT,IAAIC,GAAkB,EACtB,IACE,IAAI,EAAOxlB,OAAOC,eAAe,GAAI,UAAW,CAC9CE,IAAK,WACHqlB,GAAkB,KAGtB7gB,OAAOrC,iBAAiB,OAAQ,KAAM,GACtC,MAAO8f,IACF,IAAIqD,IAAgBD,GAAkB,CAAEE,SAAS,GCRjD,SAASC,EAAUlC,EAAI/B,EAAKkE,GACjC,IAAK,IAAIT,KAAQzD,EAAK,CACpB,IAAIvJ,EAAS,CAAC,aAAc,aAAa4J,QAAQoD,IAAS,IAAMS,GAAmBH,EACnFhC,EAAGnhB,iBAAiB6iB,EAAMzD,EAAIyD,GAAOhN,ICHlC,SAAS0N,EAAapC,EAAI/B,GAC/B,IAAK,IAAIyD,KAAQzD,EAAK,CACpB,IAAIvJ,EAAS,CAAC,aAAc,aAAa4J,QAAQoD,IAAS,GAAIM,EAC9DhC,EAAGqC,oBAAoBX,EAAMzD,EAAIyD,GAAOhN,ICLrC,SAAS4N,IACd,MAAO,CACLC,OAAQ,GACRC,GAAI,SAAUC,EAAWC,GACvB9G,KAAK2G,OAAOE,GAAa7G,KAAK2G,OAAOE,IAAc,GACnD7G,KAAK2G,OAAOE,GAAW7iB,KAAK8iB,IAE9BC,IAAK,SAASF,EAAWC,GACvB,GAAI9G,KAAK2G,OAAOE,GACd,IAAK,IAAI5mB,EAAI,EAAGA,EAAI+f,KAAK2G,OAAOE,GAAW5iB,OAAQhE,IACjD,GAAI+f,KAAK2G,OAAOE,GAAW5mB,KAAO6mB,EAAI,CACpC9G,KAAK2G,OAAOE,GAAWvR,OAAOrV,EAAG,GACjC,QAKR+mB,KAAM,SAAUH,EAAW3K,GACzBA,EAAKlE,KAAO6O,EACR7G,KAAK2G,OAAOE,IACd7G,KAAK2G,OAAOE,GAAW1jB,SAAQ,SAAS2jB,GACtCA,EAAG5K,EAAM2K,QCgBZ,IAAI7Y,EAAM,SAASvK,GACxBA,EAAU2e,EAAO,CACftW,UAAW,UACX1K,KAAM,WACNyL,KAAM,aACNd,MAAO,EACP8H,OAAQ,EACRoT,YAAa,EACb1Z,YAAY,EACZtB,WAAW,EACXuB,aAAa,EACbxB,QAAS,EACTG,QAAQ,EACRvB,UAAU,EACVsc,iBAAkB,MAClBxZ,aAAc,CAAC,OAAQ,QACvBf,mBAAmB,EACnBwa,YAAY,EACZC,YAAY,EACZ5a,KAAK,EACL6a,YAAa,MACb3a,cAAc,EACdmB,iBAAiB,EACjB/C,WAAW,EACX8B,MAAO,IACPlC,UAAU,EACV4c,iBAAkB,MAClBlb,gBAAiB,IACjBwB,kBAAmB,UACnBD,aAAc,CAAC,QAAS,QACxBtB,oBAAoB,EACpBC,gBAAgB,EAChBwB,sBAAsB,EACtByZ,2BAA2B,EAC3Bxa,UAAW,aACXC,WAAY,cACZE,cAAe,aACfD,cAAc,EACdI,MAAM,EACNC,QAAQ,EACRpB,YAAY,EACZb,YAAY,EACZmc,UAAU,EACVC,iBAAkB,gBAClBzc,OAAO,EACPD,WAAW,EACXoC,WAAY,GACZC,QAAQ,EACRsa,0BAA0B,EAC1BC,sBAAsB,EACtBC,WAAW,EACXna,QAAQ,EACRoa,iBAAiB,GAChBpkB,GAAW,IAEd,IAAIwf,EAAM9gB,SACN2lB,EAAMxiB,OACNyiB,EAAO,CACLC,MAAO,GACPC,MAAO,GACPC,KAAM,GACNC,MAAO,IAETC,EAAa,GACbC,EAAqB5kB,EAAQokB,gBAEjC,GAAIQ,EAAoB,CAEtB,IAAIC,EAAcC,UAAUC,UACxBC,EAAM,IAAI/e,KAEd,KACE0e,EAAaN,EAAIY,eAEfN,EAAWtF,QAAQ2F,EAAKA,GACxBJ,EAAqBD,EAAWO,QAAQF,IAAQA,EAChDL,EAAWQ,WAAWH,IAEtBJ,GAAqB,EAElBA,IAAsBD,EAAa,IACxC,MAAMrF,GACNsF,GAAqB,EAGnBA,IAEED,EAAmB,QAAKA,EAAmB,SAAME,GACnD,CAAC,KAAM,MAAO,MAAO,MAAO,MAAO,OAAQ,OAAQ,OAAQ,OAAQ,MAAO,OAAOnlB,SAAQ,SAASmE,GAAQ8gB,EAAWQ,WAAWthB,MAGlIohB,aAAqB,OAAIJ,GAI7B,IAAIO,EAAOT,EAAe,GAAI3F,EAAkB2F,EAAe,IAAKzF,EAAgByF,EAAY,KC7H3F,WACL,IAAInF,EAAM9gB,SACNM,EAAOugB,IACPM,EAAcD,EAAY5gB,GAC1BqmB,EAAM7F,EAAIC,cAAc,OACxB5f,GAAS,EAEbb,EAAKmC,YAAYkkB,GACjB,IAIE,IAHA,IAEIC,EAFA1E,EAAM,cACN2E,EAAO,CAAC,OAAS3E,EAAK,YAAcA,EAAK,eAAiBA,GAErDpkB,EAAI,EAAGA,EAAI,EAAGA,IAGrB,GAFA8oB,EAAMC,EAAK/oB,GACX6oB,EAAI/jB,MAAM6L,MAAQmY,EACM,MAApBD,EAAIG,YAAqB,CAC3B3lB,EAASylB,EAAIhiB,QAAQsd,EAAK,IAC1B,OAGJ,MAAOtB,IAIT,OAFAtgB,EAAK0gB,KAAOI,EAAc9gB,EAAM6gB,GAAewF,EAAI9hB,SAE5C1D,EDqG+F4lB,GAAQb,GAC1Gc,EAAmBf,EAAgB,IAAI3F,EAAkB2F,EAAgB,KAAKzF,EAAgByF,EAAY,ME/HzG,WAEL,IAQIgB,EARAnG,EAAM9gB,SACNM,EAAOugB,IACPM,EAAcD,EAAY5gB,GAC1B4mB,EAAUpG,EAAIC,cAAc,OAC5BoG,EAAQrG,EAAIC,cAAc,OAC1BmB,EAAM,GAKVgF,EAAQ/E,UAAY,cACpBgF,EAAMhF,UAAY,WAElB,IAAK,IAAIrkB,EAAI,EAAGA,EAPJ,GAOeA,IACzBokB,GAAO,cAWT,OARAiF,EAAM3kB,UAAY0f,EAClBgF,EAAQzkB,YAAY0kB,GACpB7mB,EAAKmC,YAAYykB,GAEjBD,EAAYpf,KAAKuf,IAAIF,EAAQ3jB,wBAAwB8jB,KAAOF,EAAM3lB,SAAS8lB,IAAiB/jB,wBAAwB8jB,MAAQ,EAE5H/mB,EAAK0gB,KAAOI,EAAc9gB,EAAM6gB,GAAe+F,EAAQriB,SAEhDoiB,EFoG8GM,GAAoBrB,GACrIsB,EAAQvB,EAAgB,IAAI3F,EAAkB2F,EAAgB,KAAKzF,EAAgByF,EAAY,MGlI9F,WACL,IAMIxJ,EANAqE,EAAM9gB,SACNM,EAAOugB,IACPM,EAAcD,EAAY5gB,GAC1BqmB,EAAM7F,EAAIC,cAAc,OACxBne,EAAQke,EAAIC,cAAc,SAC1B0G,EAAO,kEAmBX,OAhBA7kB,EAAMiT,KAAO,WACb8Q,EAAIxE,UAAY,cAEhB7hB,EAAKmC,YAAYG,GACjBtC,EAAKmC,YAAYkkB,GAEb/jB,EAAM8kB,WACR9kB,EAAM8kB,WAAWC,QAAUF,EAE3B7kB,EAAMH,YAAYqe,EAAI8G,eAAeH,IAGvChL,EAAWtZ,OAAO1C,iBAAmB0C,OAAO1C,iBAAiBkmB,GAAKlK,SAAWkK,EAAIkB,aAAuB,SAExGvnB,EAAK0gB,KAAOI,EAAc9gB,EAAM6gB,GAAewF,EAAI9hB,SAE/B,aAAb4X,EHyGmGqL,GAAqB5B,GAC3H6B,EAAY9B,EAAgB,IAAI3F,EAAkB2F,EAAgB,KAAKzF,EAAgByF,EAAY,MAAO5C,EAAc,aAAc6C,GACtI8B,EAAkB/B,EAAgB,IAAI3F,EAAkB2F,EAAgB,KAAKzF,EAAgByF,EAAY,MIpIxG,SAAyBgC,GAC9B,IAAKA,EAAM,OAAO,EAClB,IAAK9kB,OAAO1C,iBAAoB,OAAO,EAEvC,IAIIynB,EAJApH,EAAM9gB,SACNM,EAAOugB,IACPM,EAAcD,EAAY5gB,GAC1B2hB,EAAKnB,EAAIC,cAAc,KAEvBoH,EAAQF,EAAGnmB,OAAS,EAAI,IAAMmmB,EAAGG,MAAM,GAAI,GAAGhU,cAAgB,IAAM,GAYxE,OAVA+T,GAAS,YAGT7nB,EAAKgC,aAAa2f,EAAI,MAEtBA,EAAGrf,MAAMqlB,GAAM,2BACfC,EAAQ/kB,OAAO1C,iBAAiBwhB,GAAIoG,iBAAiBF,GAErD7nB,EAAK0gB,KAAOI,EAAc9gB,EAAM6gB,GAAec,EAAGpd,cAEhCwb,IAAV6H,GAAuBA,EAAMpmB,OAAS,GAAe,SAAVomB,EJ+GiEI,CAAgBP,GAAY7B,GAC5IqC,EAAqBtC,EAAiB,KAAI3F,EAAkB2F,EAAiB,MAAKzF,EAAgByF,EAAY,OAAQ5C,EAAc,sBAAuB6C,GAC3JsC,EAAkBvC,EAAiB,KAAI3F,EAAkB2F,EAAiB,MAAKzF,EAAgByF,EAAY,OAAQ5C,EAAc,mBAAoB6C,GACrJuC,EAAoBxC,EAAiB,KAAI3F,EAAkB2F,EAAiB,MAAKzF,EAAgByF,EAAY,OAAQ5C,EAAc,qBAAsB6C,GACzJwC,EAAiBzC,EAAiB,KAAI3F,EAAkB2F,EAAiB,MAAKzF,EAAgByF,EAAY,OAAQ5C,EAAc,kBAAmB6C,GACnJyC,EAAgB1C,EAAgB,IAAI3F,EAAkB2F,EAAgB,KAAKzF,EAAgByF,EAAY,MAAOrC,EAAe2E,EAAoB,cAAerC,GAChK0C,EAAe3C,EAAgB,IAAI3F,EAAkB2F,EAAgB,KAAKzF,EAAgByF,EAAY,MAAOrC,EAAe6E,EAAmB,aAAcvC,GAG7J2C,EAAqBlD,EAAIlQ,SAAuC,mBAArBkQ,EAAIlQ,QAAQqT,KACvDC,EAAU,CAAC,YAAa,oBAAqB,aAAc,aAAc,eAAgB,kBACzFC,EAAkB,GAkBtB,GAhBAD,EAAQ/nB,SAAQ,SAASmE,GACvB,GAA6B,iBAAlB7D,EAAQ6D,GAAoB,CACrC,IAAI+c,EAAM5gB,EAAQ6D,GACd8c,EAAKnB,EAAI7gB,cAAciiB,GAG3B,GAFA8G,EAAgB7jB,GAAQ+c,GAEpBD,IAAMA,EAAGgH,SAIX,YADIJ,GAAsBpT,QAAQqT,KAAK,aAAexnB,EAAQ6D,KAF9D7D,EAAQ6D,GAAQ8c,QASlB3gB,EAAQqI,UAAUnI,SAASM,OAAS,GAAxC,CAMA,IAAIoH,EAAa5H,EAAQ4H,WACrB+B,EAAS3J,EAAQ2J,OACjBie,EAA4B,aAAjB5nB,EAAQrC,KAEvB,GAAIiK,EAAY,CAEV,KAAKA,IACP5H,EAAU2e,EAAO3e,EAAS4H,EAAW,WAC9BA,EAAW,IAGpB,IAAIigB,EAAgB,GACpB,IAAK,IAAI9pB,MAAO6J,EAAY,CAC1B,IAAI0d,GAAM1d,EAAW7J,IAOrBunB,GAAqB,iBAARA,GAAmB,CAAChd,MAAOgd,IAAOA,GAC/CuC,EAAc9pB,IAAOunB,GAEvB1d,EAAaigB,EACbA,EAAgB,KAoBlB,GAJKD,GAZL,SAASE,EAAelJ,GACtB,IAAK,IAAI7gB,KAAO6gB,EACTgJ,IACS,YAAR7pB,IAAqB6gB,EAAI7gB,GAAO,QACxB,gBAARA,IAAyB6gB,EAAI7gB,IAAO,GAC5B,eAARA,IAAwB6gB,EAAI7gB,IAAO,IAI7B,eAARA,GAAwB+pB,EAAclJ,EAAI7gB,IAGjC+pB,CAAc9nB,IAI1B4nB,EAAU,CACb5nB,EAAQoJ,KAAO,aACfpJ,EAAQuI,QAAU,OAClBvI,EAAQwjB,aAAc,EAEtB,IAAIla,GAAYtJ,EAAQsJ,UACpBC,GAAavJ,EAAQuJ,WACrBC,GAAexJ,EAAQwJ,aACvBC,GAAgBzJ,EAAQyJ,cAG9B,IAGIse,GAMAC,GATAC,GAA8B,eAAjBjoB,EAAQoJ,KACrB8e,GAAe1I,EAAIC,cAAc,OACjC0I,GAAe3I,EAAIC,cAAc,OAEjCpX,GAAYrI,EAAQqI,UACpB+f,GAAkB/f,GAAUvI,WAC5BuoB,GAAgBhgB,GAAUigB,UAC1BC,GAAalgB,GAAUnI,SACvBsoB,GAAaD,GAAW/nB,OAExBioB,GAAcC,KACdC,IAAO,EACP/gB,GAAcghB,KACdhB,IAAYvf,GAAUwY,WAAa,cAGvC,IA2BIgI,GAyFAC,GACAC,GKtWAtK,GLsfEuK,GACAnpB,GMvf0BopB,GAE5B3nB,GN+OAkH,GAAYxI,EAAQwI,UACpBsB,GAAaof,GAAU,cACvB1F,GAAc0F,GAAU,eACxB9Y,GAAS8Y,GAAU,UACnB/mB,GAAWgnB,KACXzgB,GAASwgB,GAAU,UACnB5gB,GAASE,GAA6C,EAAjCjC,KAAKC,MAAM0iB,GAAU,UAC1C3gB,GAAU2gB,GAAU,WACpBnf,GAAc/J,EAAQ+J,aAAe/J,EAAQopB,wBAC7C/hB,GAAY6hB,GAAU,aACtB/f,GAAQ+f,GAAU,SAClBrf,GAAS7J,EAAQ6J,OACjBD,IAAOC,IAAiB7J,EAAQ4J,KAChCnB,GAAaygB,GAAU,cACvB/hB,GAAW+hB,GAAU,YACrBjf,GAAeif,GAAU,gBACzBngB,GAAMmgB,GAAU,OAChB3hB,GAAQ2hB,GAAU,SAClB5hB,GAAY4hB,GAAU,aACtBjiB,GAAWiiB,GAAU,YACrBvgB,GAAkBugB,GAAU,mBAC5Bhf,GAAegf,GAAU,gBACzBtgB,GAAqBsgB,GAAU,sBAC/BpF,GAA4BoF,GAAU,6BACtClJ,IMvQA1e,GAAQ5C,SAAS+gB,cAAc,SAM/BwJ,IAAS3nB,GAAMX,aAAa,QAASsoB,IAMzCvqB,SAASC,cAAc,QAAQwC,YAAYG,IAEpCA,GAAM0e,MAAQ1e,GAAM0e,MAAQ1e,GAAM8kB,YN0PrCrC,GAAW/jB,EAAQ+jB,SAGnBsF,IAFmBrpB,EAAQgkB,iBAEX,IAChBsF,GAAa1f,IAwOXof,GAzBN,WAEE,GAAIxgB,IAAcsB,KAAeC,GAC/B,OAAOye,GAAa,EAGpB,IAAI5H,EAAM9W,GAAa,aAAe,QAClCwW,EAAM,GAIV,IAFIxW,IAAc9J,EAAQ4gB,GAAO4H,KAAclI,EAAI/f,KAAKP,EAAQ4gB,IAE5DhZ,EACF,IAAK,IAAI2hB,KAAM3hB,EAAY,CACzB,IAAI4hB,EAAM5hB,EAAW2hB,GAAI3I,GACrB4I,IAAQ1f,IAAc0f,EAAMhB,KAAelI,EAAI/f,KAAKipB,GAM5D,OAFKlJ,EAAI9f,QAAU8f,EAAI/f,KAAK,GAErBgG,KAAK0T,KAAKnQ,GAAaC,GAAcxD,KAAKkjB,IAAIC,MAAM,KAAMpJ,GAAO/Z,KAAK+L,IAAIoX,MAAM,KAAMpJ,IAKhFqJ,GACX9pB,GAAS+nB,EAAWrhB,KAAK0T,MAAiB,EAAX+O,GAAeR,IAAY,GAAiB,EAAXQ,GAAeR,GACnF3oB,GAAS0G,KAAK+L,IAAI0W,GAAUnpB,IAErB+pB,GAAU,eAAiB/pB,GAAS,EAAIA,IA5OA,EAC7CgqB,GAAiBjC,EAAqCY,GAA0B,EAAbc,GAAvCd,GAAac,GACzCQ,MAAoBhgB,KAActB,IAAeoB,IACjDmgB,GAAgBjgB,GAAakgB,KAAqB,KAClDC,IAA+BrC,IAAahe,GAE5CsgB,GAAgBjC,GAAa,OAAS,MACtCkC,GAAkB,GAClBC,GAAmB,GAEnBC,GACMvgB,GACK,WAAa,OAAOpB,KAAWkB,GAAO4e,GAAa,EAAIjiB,KAAK0T,MAAO8P,IAAiBjgB,GAAasG,MAC/F5H,GACF,WACL,IAAK,IAAIhM,EAAIqtB,GAAertB,KAC1B,GAAIqsB,GAAersB,KAAQutB,GAAiB,OAAOvtB,GAIhD,WACL,OAAIkM,IAAUkf,IAAahe,GAClB4e,GAAa,EAEb5e,IAAQge,EAAWrhB,KAAK+L,IAAI,EAAGuX,GAAgBtjB,KAAK0T,KAAK3R,KAAUuhB,GAAgB,GAKlG3e,GAAQof,GAAcpB,GAAU,eAChCqB,GAAcrf,GAEdsf,IADeC,KACJ,GACXC,GAAYliB,GAA4B,KAAhB6hB,KAGxBpG,GAA2BjkB,EAAQikB,yBACnCva,GAAa1J,EAAQ0J,WACrBihB,IAAwBjhB,IAAa,IACrCkhB,IAAU,EACV5gB,GAAShK,EAAQgK,OACjB6gB,GAAS,IAAI5H,EAEb6H,GAAsB,mBAAqB9qB,EAAQrC,KACnDotB,GAAU1iB,GAAUoW,KK1TpBA,GAAK5c,OAAOmpB,MAChBnpB,OAAOmpB,MAASvM,GAASA,GAAK,EAAT,EAEd,MAAQ5c,OAAOmpB,OLwTlB7c,GAAU+a,GAAU,WACpB+B,IAAW,EACX9G,GAAYnkB,EAAQmkB,UACpB+G,MAAS/G,IAAc3b,KAAY2iB,KACnCC,IAAS,EACTC,GAAiB,CACf,MAASC,GACT,QAmkEN,SAA4BhM,GAC1BA,EAAIiM,GAASjM,GACb,IAAIkM,EAAW,CAAClH,EAAKG,KAAMH,EAAKI,OAAOzF,QAAQK,EAAEvJ,SAE7CyV,GAAY,IACG,IAAbA,EACG9H,GAAWuH,UAAYK,GAAgBhM,GAAI,GACtCqE,GAAWsH,UACrBK,GAAgBhM,EAAG,MAzkErBmM,GAAY,CACV,MA+8DN,SAAqBnM,GACnB,GAAIsL,GAAS,CACX,GAAI3G,GAA4B,OAAiByH,KAInD,IAAIpnB,EAASqnB,GADbrM,EAAIiM,GAASjM,IAIb,KAAOhb,IAAW2E,KAAiB+X,EAAQ1c,EAAQ,aAAeA,EAASA,EAAOxE,WAClF,GAAIkhB,EAAQ1c,EAAQ,YAAa,CAC/B,IAAIsnB,EAAWC,GAAaC,OAAO7K,EAAQ3c,EAAQ,aAC/CynB,EAAkBjiB,IAActB,GAAYojB,EAAWpD,GAAawD,GAAQJ,EAAWtjB,GAE3F2jB,GADkB7hB,GAAkBwhB,EAAWrlB,KAAKkjB,IAAIljB,KAAK0T,KAAK8R,GAAkBvD,GAAa,GAC/ElJ,GAEd4M,KAAoBN,IAClBO,IAAaC,KACjBP,IAAc,KAh+Dd,QAklEN,SAAuBvM,GACrBA,EAAIiM,GAASjM,GACb,IAAI+M,EAAa7M,EAAI8M,cACrB,IAAKtL,EAAQqL,EAAY,YAAe,OAGxC,IAAIb,EAAW,CAAClH,EAAKG,KAAMH,EAAKI,MAAOJ,EAAKC,MAAOD,EAAKE,OAAOvF,QAAQK,EAAEvJ,SACrE6V,EAAWE,OAAO7K,EAAQoL,EAAY,aAEtCb,GAAY,IACG,IAAbA,EACEI,EAAW,GAAKW,GAASC,GAASZ,EAAW,IAC3B,IAAbJ,EACLI,EAAWI,GAAQ,GAAKO,GAASC,GAASZ,EAAW,KAEzDC,GAAaD,EACbK,GAAKL,EAAUtM,OAhmEjBmN,GAAc,CACZ,UAmiEN,WACMN,KACFO,KACAC,IAAsB,IAriEpB,SAyiEN,WACMA,KACFC,KACAD,IAAsB,KA1iEtBE,GAAkB,CAAC,iBAohEvB,WACMrN,EAAIsN,OACFX,KACFO,KACAK,IAA2B,GAEpBA,KACTH,KACAG,IAA2B,KA3hE3BC,GAAsB,CAAC,QA8iE3B,SAA4B1N,GAC1BA,EAAIiM,GAASjM,GACb,IAAIkM,EAAW,CAAClH,EAAKG,KAAMH,EAAKI,OAAOzF,QAAQK,EAAEvJ,SAE7CyV,GAAY,GACdF,GAAgBhM,EAAgB,IAAbkM,GAAkB,EAAI,KAljEzCyB,GAAc,CACZ,WAAcC,GACd,UAAaC,GACb,SAAYC,GACZ,YAAeA,IACdC,GAAa,CACd,UAAaH,GACb,UAAaC,GACb,QAAWC,GACX,WAAcA,IAEhBE,GAAc1D,GAAU,YACxB2D,GAAS3D,GAAU,OACnBxf,KAAkB5B,IAAmBxI,EAAQoK,gBAC7CojB,GAAc5D,GAAU,YACxB6D,GAAW7D,GAAU,SACrB8D,GAAe9D,GAAU,aACzB+D,GAAmB,mBACnBC,GAAmB,eACnBC,GAAY,CACV,KA84CN,SAAsBvO,GACpBwO,GAAUnC,GAAUrM,KA94ChB,MAi5CN,SAAsBA,GASF5S,EARRif,GAAUrM,GASpBwB,EAASpU,EAAK,UACdqhB,GAAarhB,GAFf,IAAoBA,IAt5ChBshB,GAAiD,UAAjChuB,EAAQkkB,qBAG5B,GAAIoJ,GACF,IAMIW,GACAC,GAPAhlB,GAAoBlJ,EAAQkJ,kBAC5BilB,GAAwBnuB,EAAQkJ,kBAAoBlJ,EAAQkJ,kBAAkBof,UAAY,GAC1F5E,GAAa1jB,EAAQ0jB,WACrBC,GAAa3jB,EAAQ2jB,WACrByK,GAAiBpuB,EAAQ0jB,WAAa1jB,EAAQ0jB,WAAW4E,UAAY,GACrE+F,GAAiBruB,EAAQ2jB,WAAa3jB,EAAQ2jB,WAAW2E,UAAY,GAM3E,GAAIiF,GACF,IAEIf,GAFAvjB,GAAejJ,EAAQiJ,aACvBqlB,GAAmBtuB,EAAQiJ,aAAejJ,EAAQiJ,aAAaqf,UAAY,GAE3E0D,GAAQxjB,GAAYggB,GAAa+F,KACjCC,GAAc,EACd3C,IAAc,EACdK,GAAkBuC,KAClBC,GAAwBxC,GACxByC,GAAiB,iBACjBC,GAAS,iBACTC,GAAgB,mBAItB,GAAIrB,GACF,IAIIsB,GACA3C,GACAQ,GACAoC,GACAhC,GARA5iB,GAAkD,YAA9BnK,EAAQmK,kBAAkC,GAAK,EACnEtB,GAAiB7I,EAAQ6I,eACzBmmB,GAAqBhvB,EAAQ6I,eAAiB7I,EAAQ6I,eAAeyf,UAAY,GACjF2G,GAAsB,CAAC,qCAAwC,qBAQrE,GAAIxB,IAAYC,GACd,IAEIwB,GAIAC,GANAC,GAAe,GACfC,GAAe,GAIfC,IAAW,EAEXC,GAAUtH,GACR,SAASuH,EAAGrrB,GAAK,OAAOqrB,EAAEC,EAAItrB,EAAEsrB,GAChC,SAASD,EAAGrrB,GAAK,OAAOqrB,EAAEE,EAAIvrB,EAAEurB,GAInClnB,IAAamnB,GAAyBxhB,IAAW+c,IAElDzE,IACFyD,GAAgBzD,EAChB0D,GAAkB,YAEdzD,GACFyD,IAAmBlC,GAAa,MAAQ,WACxCmC,GAAmBnC,GAAa,cAAgB,WAEhDkC,IAAmBlC,GAAa,KAAO,KACvCmC,GAAmB,MAKnBxC,IAAYvf,GAAUwY,UAAYxY,GAAUwY,UAAUvd,QAAQ,YAAa,KAiO/E,WAGkBsmB,GAAU,UAE1B1B,GAAarH,UAJI,YAKjBsH,GAAatH,UAJI,YAKjBqH,GAAazJ,GAAKsM,GAAU,MAC5B5C,GAAa1J,GAAKsM,GAAU,MAGP,KAAjB1iB,GAAUoW,KAAapW,GAAUoW,GAAKsM,IAC1CD,IAAuBpF,GAAoBld,GAAY,gBAAkB,mBACzEsiB,IAAuB1F,EAAO,YAAc,eACxC5c,KAAasiB,IAAuB,kBACxCA,IAAuB,QAAU9qB,EAAQoJ,KACzCf,GAAUwY,WAAaiK,GAGnBlD,IACFG,GAAgBvI,EAAIC,cAAc,QACpBhB,GAAKsM,GAAU,MAC7BhD,GAAclH,UAAY,UAE1BqH,GAAa/mB,YAAY4mB,IACzBA,GAAc5mB,YAAYgnB,KAE1BD,GAAa/mB,YAAYgnB,IAG3B,GAAI1f,GAAY,EACLsf,IAAgCI,IACtCtH,WAAa,UAqBlB,GAlBAuH,GAAgBpnB,aAAaknB,GAAc7f,IAC3C8f,GAAahnB,YAAYkH,IAIzB3I,EAAQ6oB,IAAY,SAAS1kB,EAAMrH,GACjCskB,EAASjd,EAAM,YACVA,EAAK4a,KAAM5a,EAAK4a,GAAKsM,GAAU,QAAUvuB,IACzCorB,GAAYne,IAAiBqX,EAASjd,EAAM4F,IACjD0X,EAAStd,EAAM,CACb,cAAe,OACf,SAAY,UAOZylB,GAAY,CAId,IAHA,IAAIsG,EAAiBpQ,EAAIqQ,yBACrBC,EAAgBtQ,EAAIqQ,yBAEfrO,EAAI8H,GAAY9H,KAAM,CAC7B,IAAIuO,EAAMvO,EAAEgH,GACRwH,EAAazH,GAAWwH,GAAK5Y,WAAU,GAI3C,GAHAmK,EAAY0O,EAAY,MACxBF,EAAc9uB,aAAagvB,EAAYF,EAAcG,YAEjDrI,EAAU,CACZ,IAAIsI,EAAY3H,GAAWC,GAAa,EAAIuH,GAAK5Y,WAAU,GAC3DmK,EAAY4O,EAAW,MACvBN,EAAezuB,YAAY+uB,IAI/B7nB,GAAUrH,aAAa4uB,EAAgBvnB,GAAU4nB,YACjD5nB,GAAUlH,YAAY2uB,GACtBvH,GAAalgB,GAAUnI,UAxS3BiwB,GAwXA,WAGE,IAAKvI,EACH,IAAK,IAAIprB,EAAI0O,GAAOzO,EAAIyO,GAAQ3E,KAAKkjB,IAAIjB,GAAYlgB,IAAQ9L,EAAIC,EAAGD,IAAK,CACvE,IAAIqH,EAAO0kB,GAAW/rB,GACtBqH,EAAKvC,MAAMykB,KAAqB,KAAbvpB,EAAI0O,IAAe5C,GAAQ,IAC9CwY,EAASjd,EAAMyF,IACfyX,EAAYld,EAAM4F,IAkBlBwe,KACEvC,GAAoBld,IACtBuX,EAAWC,GAAO,IAAM+K,GAAU,eAAgB,aAAe1G,EAAIllB,iBAAiBopB,GAAW,IAAI6H,SAAW,IAAKhQ,EAAkBJ,KACvID,EAAWC,GAAO,IAAM+K,GAAS,eAAgB3K,EAAkBJ,MAC1D4H,GACTloB,EAAQ6oB,IAAY,SAAU8H,EAAO7zB,GACnC6zB,EAAM/uB,MAAMgvB,WA3QpB,SAA6B9zB,GAC3B,OAAO4oB,EACLA,EAAO,IAAU,IAAJ5oB,EAAU,OAASqtB,GAAgB,IAC5C,IAAJrtB,EAAUqtB,GAAgB,IAwQG0G,CAAmB/zB,OAOlD,GAAI0pB,EAAO,CAET,GAAIe,EAAoB,CACtB,IAAIrG,EAAMmH,IAAiB/nB,EAAQyI,WAAa+nB,GAA2BxwB,EAAQmJ,OAAS,GAC5F4W,EAAWC,GAAO,IAAM+K,GAAU,MAAOnK,EAAKR,EAAkBJ,KAIlEY,EAAM6P,GAAsBzwB,EAAQwjB,YAAaxjB,EAAQoQ,OAAQpQ,EAAQ8J,WAAY9J,EAAQmJ,MAAOnJ,EAAQyI,YAC5GsX,EAAWC,GAAO,IAAM+K,GAAU,MAAOnK,EAAKR,EAAkBJ,KAG5D4H,IACFhH,EAAMqH,KAAezf,GAAY,SAAWkoB,GAAkB1wB,EAAQ8J,WAAY9J,EAAQoQ,OAAQpQ,EAAQsI,OAAS,IAAM,GACrH2e,IAAsBrG,GAAO4P,GAA2BrnB,KAC5D4W,EAAWC,GAAO,IAAM+K,GAASnK,EAAKR,EAAkBJ,MAI1DY,EAAMqH,KAAezf,GAAYmoB,GAAmB3wB,EAAQ8J,WAAY9J,EAAQoQ,OAAQpQ,EAAQsI,OAAS,GACrGtI,EAAQoQ,SAAUwQ,GAAOgQ,GAAoB5wB,EAAQoQ,SAEpDwX,IACCX,IAAsBrG,GAAO4P,GAA2BrnB,KACxDge,IAAqBvG,GAAOiQ,GAA0B1nB,MAExDyX,GAAOb,EAAWC,GAAO,IAAM+K,GAAU,eAAgBnK,EAAKR,EAAkBJ,SAM/E,CAEL8Q,KAGA3I,GAAa7mB,MAAM+kB,QAAUoK,GAAsBjN,GAAapT,GAAQtG,GAAYrB,IAGhFmf,GAAYK,KAAezf,KAC7BH,GAAU/G,MAAM6L,MAAQujB,GAAkB5mB,GAAYsG,GAAQ9H,KAI5DsY,EAAMqH,KAAezf,GAAYmoB,GAAmB7mB,GAAYsG,GAAQ9H,IAAS,GACjF8H,KAAUwQ,GAAOgQ,GAAoBxgB,KAGrCwQ,GAAOb,EAAWC,GAAO,IAAM+K,GAAU,eAAgBnK,EAAKR,EAAkBJ,KAItF,GAAIpY,GAAcse,EAChB,IAAK,IAAIqD,KAAM3hB,EAAY,CAEzB2hB,EAAK7nB,SAAS6nB,GAEd,IAAIwH,EAAOnpB,EAAW2hB,GAElByH,GADApQ,EAAM,GACa,IACnBqQ,EAAkB,GAClBC,EAAe,GACfC,EAAW,GACXC,EAAW5oB,GAAqC,KAAzB0gB,GAAU,QAASK,GAC1C8H,EAAenI,GAAU,aAAcK,GACvC+H,EAAUpI,GAAU,QAASK,GAC7BgI,EAAgBrI,GAAU,cAAeK,GACzCiI,EAAetI,GAAU,aAAcK,GACvCkI,EAAWvI,GAAU,SAAUK,GAG/BtC,GAAsBc,IAAiBmB,GAAU,aAAcK,IAAO,UAAWwH,IACnFC,EAAmB,IAAMjG,GAAU,OAASyF,GAA2Bc,GAAW,MAIhF,gBAAiBP,GAAQ,WAAYA,KACvCE,EAAkB,IAAMlG,GAAU,OAAS0F,GAAsBc,EAAeE,EAAUJ,EAAcC,EAASE,GAAgB,KAI/H5J,GAAYK,KAAezf,KAAc,eAAgBuoB,GAAQ,UAAWA,GAASjnB,IAAc,WAAYinB,KACjHG,EAAe,SAAWR,GAAkBW,EAAcI,EAAUL,GAAW,KAE7EnK,GAAsB,UAAW8J,IACnCG,GAAgBV,GAA2Bc,IAEzCJ,IACFA,EAAe,IAAMnG,GAAU,IAAMmG,EAAe,MAIlD,eAAgBH,GAASjnB,IAAc,WAAYinB,IAAUnJ,GAAY,UAAWmJ,KACtFI,GAAYR,GAAmBU,EAAcI,EAAUL,IAErD,WAAYL,IACdI,GAAYP,GAAoBa,KAG7B7J,GAAY,UAAWmJ,IACtB9J,IAAsBkK,GAAYX,GAA2Bc,IAC7DnK,IAAqBgK,GAAYN,GAA0BS,KAE7DH,IAAYA,EAAW,IAAMpG,GAAU,gBAAkBoG,EAAW,MAGxEvQ,EAAMoQ,EAAmBC,EAAkBC,EAAeC,IAGxDnR,GAAME,WAAW,sBAAwBqJ,EAAK,GAAK,QAAU3I,EAAM,IAAKZ,GAAMK,SAAS7f,SA5gB/FkxB,GACAC,KAwiCA,IAAIC,GACKhoB,GACLge,EAEE,WACE,IAAIiK,EAAWrH,GACXsH,EAAYpH,GAEhBmH,GAAYtpB,GACZupB,GAAavpB,GAITib,IACFqO,GAAY,EACZC,GAAa,GACJhoB,KACJ3H,GAAWiO,KAAStG,GAAasG,MAAW0hB,GAAa,GAG5DxI,KACEpe,GAAQ4mB,EACV5mB,IAASsd,GACAtd,GAAQ2mB,IACjB3mB,IAASsd,MAKf,WACE,GAAItd,GAAQwf,GACV,KAAOxf,IAASsf,GAAWhC,IAActd,IAASsd,QAC7C,GAAItd,GAAQsf,GACjB,KAAOtf,IAASwf,GAAWlC,IAActd,IAASsd,IAIxD,WACEtd,GAAQ3E,KAAK+L,IAAIkY,GAAUjkB,KAAKkjB,IAAIiB,GAAUxf,MAsjBhD6mB,GACKnK,EACL,WOzjEC,IAAqBjoB,EAASe,EAAM0hB,EAAQ4P,EAASC,EAAIpvB,EAAU0d,EACpE2R,EACAC,EAEAvuB,EACAwuB,EPqjEEC,GAAchqB,GAAW,IACrB4e,IAAuB9d,IAGzBmpB,KAGKnpB,IAAU2Y,EAAUzZ,KAAcqjB,OOjkErB/rB,EPqkEN0I,GOrkEe3H,EPqkEJwpB,GOrkEU9H,EPqkEK+H,GOrkEG6H,EPqkEc5H,GOrkEL6H,EPqkEuBM,KOrkEnB1vB,EPqkEiDsG,GOrkEvCoX,EPqkE8CmL,GOpkElHwG,EAAO3rB,KAAKkjB,IAAI5mB,EAAU,IAC1BsvB,EAAQF,EAAGhT,QAAQ,MAAQ,EAAK,IAAM,KACtCgT,EAAKA,EAAG3uB,QAAQ6uB,EAAM,IACtBvuB,EAAOkoB,OAAOnsB,EAAQ2B,MAAMZ,GAAM4C,QAAQ8e,EAAQ,IAAI9e,QAAQ0uB,EAAS,IAAI1uB,QAAQ6uB,EAAM,KACzFC,GAAgBH,EAAKruB,GAAQf,EAAWqvB,EAG5CpvB,YACA,SAAS0vB,IACP3vB,GAAYqvB,EACZtuB,GAAQwuB,EACRzyB,EAAQ2B,MAAMZ,GAAQ0hB,EAASxe,EAAOuuB,EAAOH,EACzCnvB,EAAW,EACbC,WAAW0vB,EAAaN,GAExB3R,MARoB2R,IPgkEbjK,IAAcwK,MAErB,WACEpJ,GAAgB,GAEhB,IAAIqJ,EAAM,GACVA,EAAIrL,GAAiBqL,EAAIpL,GAAgBoE,GACzC3I,EAAawF,GAAWgC,IAAcmI,GACtC7P,EAAU0F,GAAWrd,IAAQwnB,GAE7BC,GAAapI,GAAajhB,GAAWC,IAAY,GACjDopB,GAAaznB,GAAOzB,GAAeH,IAI9B+d,GAAkBC,GAAiBne,IAAU2Y,EAAUzZ,KAAcqjB,MA4jBhF,MAAO,CACLkH,QAAS,QACTC,QAAShlB,GACTgd,OAAQA,GACRoB,KAAMA,GACN6G,KA9UF,WACM7rB,KAAaklB,KACf4G,KACAhE,IAAqB,IA4UvBiE,MAzUF,WACM7G,KACFC,KACA2C,IAAqB,IAuUvBpG,KAAMA,GACNsK,mBAAoBC,GACpBC,QAASxB,GACTyB,QA7iDF,WAoBE,GAlBApT,GAAMiL,UAAW,EACbjL,GAAMqT,WAAarT,GAAMqT,UAAU9vB,SAGvCwf,EAAasB,EAAK,CAAC,OAAUiP,KAGzBjsB,IAAa0b,EAAavD,EAAKwN,IAC/B9jB,IAAqB6Z,EAAa7Z,GAAmBmiB,IACrDpiB,IAAgB8Z,EAAa9Z,GAAcwiB,IAG/C1I,EAAa1a,GAAWokB,IACxB1J,EAAa1a,GAAWwkB,IACpBhkB,IAAkBka,EAAala,GAAgB,CAAC,MAAS0qB,KACzDtsB,IAAYL,cAAckoB,IAG1BlH,GAAYP,EAAe,CAC7B,IAAIqL,EAAM,GACVA,EAAIrL,GAAiBqE,GACrB3I,EAAa1a,GAAWqqB,GAEtBnrB,IAASwb,EAAa1a,GAAW4kB,IACjC3lB,IAAayb,EAAa1a,GAAWglB,IAGzC,IAAImG,EAAW,CAACnL,GAAe8F,GAAuBC,GAAgBC,GAAgBC,GAAkBU,IAmBxG,IAAK,IAAIQ,KAjBT/H,EAAQ/nB,SAAQ,SAASmE,EAAMrH,GAC7B,IAAImkB,EAAc,cAAT9c,EAAuBqkB,GAAeloB,EAAQ6D,GAEvD,GAAkB,iBAAP8c,EAAiB,CAC1B,IAAI8S,IAAS9S,EAAGtgB,wBAAyBsgB,EAAGtgB,uBACxCqzB,EAAW/S,EAAG7gB,WAClB6gB,EAAG2H,UAAYkL,EAASh3B,GACxBwD,EAAQ6D,GAAQ4vB,EAASA,EAAOrzB,mBAAqBszB,EAASC,sBAMlElM,EAAUne,GAAYC,GAAaC,GAAeC,GAAgBwe,GAAaC,GAAeC,GAAe9f,GAAY+f,GAAkBC,GAAgBE,GAAaC,GAAaR,GAAiBS,GAAcjgB,GAAYsB,GAAa0Z,GAAcpT,GAASjO,GAAWmG,GAAQC,GAAUwB,GAAc1C,GAAY8B,GAAQU,GAASD,GAAOnB,GAAauX,GAAQ+D,GAAW8E,GAAiBQ,GAAgBC,GAAaO,GAAgBC,GAAmBC,GAAgBE,GAA6BC,GAAgBC,GAAkBC,GAAmBC,GAAcnf,GAAQqf,GAAcC,GAAWE,GAAyBhhB,GAAaihB,GAAwBC,GAAU5gB,GAAS6gB,GAASC,GAAsBC,GAAU5c,GAAU8c,GAAW9G,GAAY+G,GAASE,GAASC,GAAiBI,GAAYgB,GAAcI,GAAkBG,GAAsBC,GAAcI,GAAaC,GAAcC,GAASnjB,GAAkBojB,GAAcC,GAAWC,GAAeC,GAAmBC,GAAmBC,GAAY/E,GAAe3hB,GAAW8C,GAAef,GAAoBilB,GAAwBzK,GAAaC,GAAasK,GAAeC,GAAenlB,GAAME,GAAeqlB,GAAmB9B,GAAWR,GAAQwC,GAAc3C,GAAaK,GAAkBwC,GAAwBC,GAAiBC,GAASC,GAAgB5nB,GAAW0B,GAAkBwB,GAAoBD,GAAetB,GAAqBC,GAAiBmmB,GAAqBlL,GAA4BmL,GAAsBH,GAAgB3C,GAAYQ,GAAsBoC,GAAqBhC,GAA2BqC,GAAeC,GAAeH,GAA8BI,GAAWH,GAAWI,GAAUhoB,GAAQD,GAAY,KAI3pDiV,KACF,YAANiT,IAAmBjT,KAAKiT,GAAK,MAEnC7G,IAAO,GA2/CPiL,QAAS,WACP,OAAOrpB,EAAIoU,EAAO3e,EAAS0nB,MAzuE/B,SAASiI,GAA0BkE,GAC7BA,IACF1sB,GAAW4B,GAAMxB,GAAQD,GAAYD,GAAYJ,GAAW2B,GAAqBkb,IAA4B,GAIjH,SAAS2G,KAEP,IADA,IAAIjB,EAAM5B,EAAW1c,GAAQoe,GAAape,GACnCse,EAAM,GAAKA,GAAOhB,GACzB,OAAOgB,EAAIhB,GAAa,EAG1B,SAAS8B,GAAewJ,GAEtB,OADAA,EAAMA,EAAMvtB,KAAK+L,IAAI,EAAG/L,KAAKkjB,IAAI7f,GAAO4e,GAAa,EAAIA,GAAalgB,GAAOwrB,IAAQ,EAC9ElM,EAAWkM,EAAMxK,GAAawK,EAGvC,SAASC,GAAav3B,GAIpB,IAHS,MAALA,IAAaA,EAAI0O,IAEjB0c,IAAYprB,GAAK8sB,IACd9sB,EAAI,GAAKA,GAAKgsB,GAErB,OAAOjiB,KAAKC,MAAMhK,EAAEgsB,IAGtB,SAASiG,KACP,IACI5uB,EADAm0B,EAAWD,KAUf,OAPAl0B,EAASuK,GAAkB4pB,EACzBlqB,IAActB,GAAYjC,KAAK0T,MAAM+Z,EAAW,GAAKhI,GAAQxD,GAAa,GACtEjiB,KAAKC,MAAMwtB,EAAW1rB,KAGvBsB,IAAQge,GAAY1c,KAAUwf,KAAY7qB,EAASmsB,GAAQ,GAEzDnsB,EAmCT,SAAS6oB,KACP,OAAOrE,EAAInX,YAAcsS,EAAIjN,gBAAgBxF,aAAeyS,EAAIxgB,KAAK+N,YAGvE,SAASknB,GAAmBC,GAC1B,MAAe,QAARA,EAAgB,aAAe,YAYxC,SAAS/K,KACP,IAAIgL,EAAM3Q,GAA4B,EAAdA,GAAkBpT,GAAS,EACnD,OAXF,SAASgkB,EAAgBzT,GACvB,IAAoC0T,EAAMlnB,EAAtCkY,EAAM7F,EAAIC,cAAc,OAK5B,OAJAkB,EAAGxf,YAAYkkB,GAEflY,GADAknB,EAAOhP,EAAIpjB,yBACEgb,MAAQoX,EAAKtO,KAC1BV,EAAI9hB,SACG4J,GAASinB,EAAezT,EAAG7gB,YAK3Bs0B,CAAehM,IAAmB+L,EAG3C,SAASvK,GAAW/lB,GAClB,GAAI7D,EAAQ6D,GACV,OAAO,EAEP,GAAI+D,EACF,IAAK,IAAI2hB,KAAM3hB,EACb,GAAIA,EAAW2hB,GAAI1lB,GAAS,OAAO,EAGvC,OAAO,EAQX,SAASqlB,GAAWrlB,EAAMywB,GAGxB,GAFU,MAANA,IAAcA,EAAK7L,IAEV,UAAT5kB,GAAoBiG,GACtB,OAAOvD,KAAKC,OAAOrE,GAAWiO,KAAWtG,GAAasG,MAAY,EAGlE,IAAIvQ,EAASG,EAAQ6D,GAErB,GAAI+D,EACF,IAAK,IAAI2hB,KAAM3hB,EAET0sB,GAAM5yB,SAAS6nB,IACb1lB,KAAQ+D,EAAW2hB,KAAO1pB,EAAS+H,EAAW2hB,GAAI1lB,IAQ5D,MAHa,YAATA,GAAiC,SAAXhE,IAAqBA,EAASqpB,GAAU,UAC7DtB,GAAsB,YAAT/jB,GAA+B,UAATA,IAAqBhE,EAAS0G,KAAKC,MAAM3G,IAE1EA,EAUX,SAAS4wB,GAAuB8D,EAAgBC,EAAWC,EAAeC,EAAUlD,GAClF,IAAI5Q,EAAM,GAEV,QAAuB7B,IAAnBwV,EAA8B,CAChC,IAAIJ,EAAMI,EACNC,IAAaL,GAAOK,GACxB5T,EAAMqH,GACJ,aAAekM,EAAM,QAAUI,EAAiB,MAChD,WAAaA,EAAiB,QAAUJ,EAAM,aAC3C,GAAIK,IAAcC,EAAe,CACtC,IAAIE,EAAgB,IAAMH,EAAY,KAEtC5T,EAAM,cADIqH,GAAa0M,EAAgB,OAAS,KAAOA,EAAgB,MAC5C,IAI7B,OADK/M,GAAY4J,GAAgBvK,GAAsByN,IAAY9T,GAAO4P,GAA2BkE,IAC9F9T,EAGT,SAAS8P,GAAmB+D,EAAeD,EAAWI,GACpD,OAAIH,GACMA,EAAgBD,GAAa3K,GAAgB,KAE9CzE,EACLA,EAAO,IAAsB,IAAhByE,GAAsB,OAAS+K,EAAW,IACvC,IAAhB/K,GAAsB+K,EAAW,IAIvC,SAASjE,GAAoB8D,EAAeD,EAAWI,GACrD,IAAIznB,EAEJ,GAAIsnB,EACFtnB,EAASsnB,EAAgBD,EAAa,SACjC,CACA5M,IAAYgN,EAAWruB,KAAKC,MAAMouB,IACvC,IAAIC,EAAWjN,EAAWiC,GAAgB+K,EAC1CznB,EAAQiY,EACNA,EAAO,WAAayP,EAAW,IAC/B,IAAMA,EAAW,IAMrB,OAHA1nB,EAAQ,SAAWA,EAGD,UAAXxD,EAAqBwD,EAAQ,IAAMA,EAAQ,eAGpD,SAASyjB,GAAqB4D,GAC5B,IAAI5T,EAAM,IAIQ,IAAd4T,IAGF5T,GAFWqH,GAAa,WAAa,YAC3BA,GAAa,QAAU,UACb,KAAOuM,EAAY,OAGzC,OAAO5T,EAGT,SAASkU,GAAc/3B,EAAMgzB,GAC3B,IAAI3N,EAASrlB,EAAKg4B,UAAU,EAAGh4B,EAAKyD,OAASuvB,GAAKjd,cAGlD,OAFIsP,IAAUA,EAAS,IAAMA,EAAS,KAE/BA,EAGT,SAASoO,GAA4BrnB,GACnC,OAAO2rB,GAAa7N,EAAoB,IAAM,uBAAyB9d,EAAQ,IAAO,KAGxF,SAAS0nB,GAA2B1nB,GAClC,OAAO2rB,GAAa3N,EAAmB,IAAM,sBAAwBhe,EAAQ,IAAO,KAgFtF,SAASwoB,KAEP,GAAI/H,GAAU,eAAiBphB,KAAcyf,GAAY,CACvD,IAAI+M,EAAO3sB,GAAUzJ,iBAAiB,OAGtCc,EAAQs1B,GAAM,SAAStoB,GACrB,IAAIuoB,EAAMvoB,EAAIuoB,IAEVA,GAAOA,EAAIhW,QAAQ,cAAgB,GACrC4D,EAAUnW,EAAKmhB,IACfnhB,EAAIuoB,IAAM,GACVvoB,EAAIuoB,IAAMA,EACVnU,EAASpU,EAAK,YACJqX,IACV+J,GAAUphB,MAKduR,GAAI,WAAYiX,GAAgBzT,EAAkBuT,IAAO,WAAalM,IAAe,SAGhFtgB,IAAayf,KAAc+M,EAAOG,GAAcjqB,GAAO3E,KAAKkjB,IAAIve,GAAQ5C,GAAQ,EAAGuhB,GAAgB,KAExG9F,GAAWqR,KAAkCnX,GAAI,WAAYiX,GAAgBzT,EAAkBuT,GAAOI,YAIlGxN,GAAYyN,KAGhBC,KACAC,KAIJ,SAASH,KACP,GAAI5sB,GAAW,CAEb,IAAIunB,EAAMnmB,GAAOsB,GAAQsd,GAAa,GACtC,SAAUgN,IACRjN,GAAWwH,EAAM,GAAG9tB,wBAAwBgb,MAAMwY,QAAQ,KAAOlN,GAAWwH,GAAK9tB,wBAAwB8jB,KAAK0P,QAAQ,GACtHC,KACA5yB,YAAW,WAAY0yB,MAA4B,IAHrD,QAMAE,KAKJ,SAASA,KAEFzN,KAAczf,KACjBmtB,KAEIntB,IACFuhB,GAAgBC,KACZ7F,KAAa+G,GAASC,MAC1BT,GAAWL,KACXsF,GAAyBxhB,IAAW+c,KAEpCuH,MAKA7K,GAAYyN,KAGhBC,KACAC,KA8JF,SAASD,KASP,GAPAM,KAGA1N,GAAa7b,mBAAmB,aAAc,qHAAuHwpB,KAAqB,eAAiBrN,GAAa,UACxNO,GAAoBb,GAAavpB,cAAc,4BAG3C6uB,GAAa,CACf,IAAIsI,EAAM7uB,GAAW,OAAS,QAC1B4B,GACFsY,EAAStY,GAAgB,CAAC,cAAeitB,IAChC91B,EAAQqK,uBACjB6d,GAAa7b,mBAAmB4nB,GAAkBj0B,EAAQ6jB,kBAAmB,wBAA0BiS,EAAM,KAAO7G,GAAoB,GAAK6G,EAAM7G,GAAoB,GAAK/kB,GAAa,GAAK,aAC9LrB,GAAiBqf,GAAavpB,cAAc,kBAI1CkK,IACFga,EAAUha,GAAgB,CAAC,MAAS0qB,KAGlCtsB,KACF8rB,KACInqB,IAAsBia,EAAUxa,GAAWokB,IAC3C3I,IAA6BjB,EAAUxa,GAAWwkB,KAK1D,GAAIU,GAAQ,CAIV,GAAItkB,GACFkY,EAASlY,GAAc,CAAC,aAAc,wBAEtCvJ,EADA8sB,GAAWvjB,GAAa/I,UACN,SAAS2D,EAAMrH,GAC/B2kB,EAAStd,EAAM,CACb,WAAYrH,EACZ,SAAY,KACZ,aAAcoyB,IAAUpyB,EAAI,GAC5B,gBAAiBuuB,YAKhB,CAGL,IAFA,IAAIgL,EAAU,GACVC,EAAY5rB,GAAkB,GAAK,uBAC9B5N,EAAI,EAAGA,EAAIgsB,GAAYhsB,IAE9Bu5B,GAAW,qBAAuBv5B,EAAG,kCAAoCuuB,GAAU,KAAOiL,EAAY,gBAAkBpH,IAAUpyB,EAAI,GAAI,cAE5Iu5B,EAAU,yDAA2DA,EAAU,SAC/E7N,GAAa7b,mBAAmB4nB,GAAkBj0B,EAAQ4jB,aAAcmS,GAExE9sB,GAAeif,GAAavpB,cAAc,YAC1C6tB,GAAWvjB,GAAa/I,SAM1B,GAHA+1B,KAGIhP,EAAoB,CACtB,IAAI7E,EAAS6E,EAAmB8N,UAAU,EAAG9N,EAAmBzmB,OAAS,IAAIsS,cACzE8N,EAAM,mBAAqBzX,GAAQ,IAAO,IAE1CiZ,IACFxB,EAAM,IAAMwB,EAAS,IAAMxB,GAG7Bb,EAAWC,GAAO,mBAAqB+K,GAAU,SAAUnK,EAAKR,EAAkBJ,KAGpFmB,EAASqL,GAASN,IAAkB,CAAC,aAAc0C,IAAU1C,GAAkB,GAAK2C,KACpFvN,EAAYkL,GAASN,IAAkB,YACvCpL,EAAS0L,GAASN,IAAkByC,IAGpC9L,EAAU5Z,GAAcwiB,IAMtB6B,KACGpkB,IAAuBwa,IAAeC,KACzCuE,GAAa7b,mBAAmB4nB,GAAkBj0B,EAAQyjB,kBAAmB,qIAAuIsH,GAAS,KAAO9gB,GAAa,GAAK,sEAAwE8gB,GAAS,KAAO9gB,GAAa,GAAK,mBAEhWf,GAAoBgf,GAAavpB,cAAc,kBAG5C+kB,IAAeC,KAClBD,GAAaxa,GAAkBhJ,SAAS,GACxCyjB,GAAaza,GAAkBhJ,SAAS,IAGtCF,EAAQkJ,mBACViY,EAASjY,GAAmB,CAC1B,aAAc,sBACd,SAAY,OAIZlJ,EAAQkJ,mBAAsBlJ,EAAQ0jB,YAAc1jB,EAAQ2jB,aAC9DxC,EAAS,CAACuC,GAAYC,IAAa,CACjC,gBAAiBoH,GACjB,SAAY,QAIZ/qB,EAAQkJ,mBAAsBlJ,EAAQ0jB,YAAc1jB,EAAQ2jB,cAC9DxC,EAASuC,GAAY,CAAC,gBAAkB,SACxCvC,EAASwC,GAAY,CAAC,gBAAkB,UAG1CsK,GAAeiI,GAASxS,IACxBwK,GAAegI,GAASvS,IAExBwS,KAGIjtB,GACF2Z,EAAU3Z,GAAmBmiB,KAE7BxI,EAAUa,GAAY2H,IACtBxI,EAAUc,GAAY0H,MAK1B+K,KAGF,SAASb,KAEP,GAAI3N,GAAYP,EAAe,CAC7B,IAAIqL,EAAM,GACVA,EAAIrL,GAAiBqE,GACrB7I,EAAUxa,GAAWqqB,GAGnBnrB,IAASsb,EAAUxa,GAAW4kB,GAAajtB,EAAQkkB,sBACnD5c,IAAaub,EAAUxa,GAAWglB,IAClChmB,IAAawb,EAAUrD,EAAKwN,IAEjB,UAAXrjB,EACFkhB,GAAO1H,GAAG,gBAAgB,WACxBkT,KACAxL,GAAOtH,KAAK,cAAe1V,UAEpBjG,GAAckC,IAActB,IAAaC,KAAewf,KACjEpF,EAAUwB,EAAK,CAAC,OAAUiP,KAGxB7qB,KACa,UAAXkB,EACFkhB,GAAO1H,GAAG,cAAemT,IACfnoB,IAAWmoB,MAGzBC,KACIpoB,GAAWqoB,KAA4BtL,IAAUuL,KAErD5L,GAAO1H,GAAG,eAAgBuT,IACX,UAAX/sB,GAAsBkhB,GAAOtH,KAAK,cAAe1V,MAC/B,mBAAX7D,IAAyBA,GAAO6D,MAC3C8a,IAAO,EA2DT,SAAS2K,GAAUhU,GACjBrB,GAAI,WAAYoY,GAAY9K,GAASjM,OAGvC,SAAS+W,GAAa/W,GACpB,GAAKqJ,GAAL,CACe,UAAXhf,GAAsBkhB,GAAOtH,KAAK,eAAgB1V,GAAKyR,IAC3DmJ,GAAcC,KACd,IAAIiO,EACAC,EAAoB5O,GACpB6O,GAAyB,EAEzBjvB,IACFghB,MACA+N,EAAYC,IAAsB5O,KAEjB6C,GAAOtH,KAAK,qBAAsB1V,GAAKyR,KAG1D,IAAIwX,EACAC,EACAnC,EAAWtsB,GACX0uB,EAAa7oB,GACb8oB,EAAY/L,GACZgM,EAAe7vB,GACf8vB,EAAchwB,GACdiwB,EAASruB,GACTsuB,EAAW9vB,GACX+vB,EAAehwB,GACfiwB,EAActwB,GACduwB,EAAwB5uB,GACxB6uB,EAA+B3T,GAC/B4T,EAAWxsB,GAEf,GAAIyrB,EAAW,CACb,IAAIlC,EAAgB3qB,GAChB6tB,EAAgBlvB,GAChBmvB,EAAkB3tB,GAClB4tB,EAAYnvB,GACZovB,EAAkB5tB,GAEtB,IAAKgc,EACH,IAAIsO,EAAYpkB,GACZmkB,EAAiB/Q,GAqJzB,GA7IAnc,GAAY6hB,GAAU,aACtB/hB,GAAW+hB,GAAU,YACrBngB,GAAMmgB,GAAU,OAChB3hB,GAAQ2hB,GAAU,SAClBxgB,GAASwgB,GAAU,UACnB5hB,GAAY4hB,GAAU,aACtBjiB,GAAWiiB,GAAU,YACrBtgB,GAAqBsgB,GAAU,sBAC/BpF,GAA4BoF,GAAU,6BAElCyN,IACFxoB,GAAU+a,GAAU,WACpBpf,GAAaof,GAAU,cACvB/f,GAAQ+f,GAAU,SAClBzgB,GAAaygB,GAAU,cACvBjf,GAAeif,GAAU,gBACzBhf,GAAegf,GAAU,gBACzBvgB,GAAkBugB,GAAU,mBAEvBhD,IACH1C,GAAc0F,GAAU,eACxB9Y,GAAS8Y,GAAU,YAIvByG,GAAyBxhB,IAEzBhM,GAAWgnB,KACLlB,KAAczf,IAAe2F,KACjCwnB,KACK1N,KACHwK,KACAoE,GAAyB,KAGzB/sB,IAActB,MAChBuhB,GAAgBC,KAEhBU,GAAWL,OAITsM,GAAa7sB,MACfxB,GAAQ4gB,GAAU,SAClB3gB,GAAU2gB,GAAU,YACpB6N,EAAezuB,KAAUssB,KAGlB9qB,IAAetB,KAAakiB,GAAWL,MAG5CuH,OAIA+E,GACExoB,KAAY6oB,IACV7oB,GACFqoB,KAqVR,WACE,IAAKvL,GAAY,OAMjB,GAJAjL,GAAMiL,UAAW,EACjB5iB,GAAUwY,WAAaiK,GACvBuK,KAEIzrB,GACF,IAAK,IAAI4X,EAAI8H,GAAY9H,KACnBoG,GAAY/F,EAAY0G,GAAW/G,IACvCK,EAAY0G,GAAWsB,GAAgBrI,EAAI,IAK/C,IAAKoG,EACH,IAAK,IAAIprB,EAAI0O,GAAOzO,EAAIyO,GAAQsd,GAAYhsB,EAAIC,EAAGD,IAAK,CACtD,IAAIqH,EAAO0kB,GAAW/rB,GAClBu7B,EAASv7B,EAAI0O,GAAQ5C,GAAQgB,GAAYG,GAC7C5F,EAAKvC,MAAMykB,KAAqB,KAAbvpB,EAAI0O,IAAe5C,GAAQ,IAC9CwY,EAASjd,EAAMk0B,GAKnBC,KAEA/M,IAAW,EA9WLgN,IAKF9T,KAAcwS,GAAa7sB,IAActB,MAC3C0iB,GAASC,QAIM8L,IACT/L,IACFoH,GAAqBC,GAA2BjI,GAAc,KAC9DmM,QAgRR,WACE,IAAKrL,GAAU,OAIX5H,IAAe0C,IAASiC,GAAa7mB,MAAM42B,OAAS,IAGxD,GAAI5O,GAEF,IADA,IAAI1I,EAAM,kBACDpkB,EAAI8sB,GAAY9sB,KACnBorB,GAAY7G,EAAYwH,GAAW/rB,GAAIokB,GAC3CG,EAAYwH,GAAWsB,GAAgBrtB,EAAI,GAAIokB,GAKnDoX,KAEA5M,IAAS,EAjSH+M,GACAtB,GAAyB,IAK/BlH,GAAyBxhB,IAAW+c,IAC/BjkB,KAAY2B,GAAqBkb,IAA4B,GAE9Dzc,KAAc6vB,IAChB7vB,GACEwb,EAAUrD,EAAKwN,IACfjK,EAAavD,EAAKwN,KAElB7lB,KAAagwB,IACXhwB,GACE+B,GACF2Y,EAAY3Y,KAERwa,IAAc7B,EAAY6B,IAC1BC,IAAc9B,EAAY8B,KAG5Bza,GACFyY,EAAYzY,KAERwa,IAAc/B,EAAY+B,IAC1BC,IAAchC,EAAYgC,MAIhC5a,KAAQquB,IACVruB,GACE8Y,EAAY5Y,IACZ0Y,EAAY1Y,KAEZ1B,KAAU8vB,IACZ9vB,GACEsb,EAAUxa,GAAW4kB,GAAajtB,EAAQkkB,sBAC1CnB,EAAa1a,GAAW4kB,KAExB3lB,KAAcgwB,IAChBhwB,GACEub,EAAUxa,GAAWglB,IACrBtK,EAAa1a,GAAWglB,KAExBpmB,KAAaswB,IACXtwB,IACE4B,IAAkBgZ,EAAYhZ,IAC7BsjB,IAAc4C,IAAsBgE,OAErClqB,IAAkB8Y,EAAY9Y,IAC9BsjB,IAAaC,OAGjBxjB,KAAuB4uB,IACzB5uB,GACEia,EAAUxa,GAAWokB,IACrB1J,EAAa1a,GAAWokB,KAExB3I,KAA8B2T,IAChC3T,GACEjB,EAAUrD,EAAKqN,IACf9J,EAAavD,EAAKqN,KAGlB8J,GAYF,GAXI7sB,KAAe2qB,GAAiB/rB,KAAWmvB,IAAahB,GAAyB,GAEjFpuB,KAAekvB,IACZlvB,KAAc0f,GAAa7mB,MAAMoB,OAAS,KAG7CyE,IAAY8C,KAAiB2tB,IAC/BlU,GAAWxiB,UAAY+I,GAAa,GACpC0Z,GAAWziB,UAAY+I,GAAa,IAGlCpB,IAAkBqB,KAAiB4tB,EAAiB,CACtD,IAAIt7B,EAAIyK,GAAW,EAAI,EACnBmxB,EAAOvvB,GAAe3H,UACtBm3B,EAAMD,EAAK53B,OAASs3B,EAAgBt7B,GAAGgE,OACvC43B,EAAKrD,UAAUsD,KAASP,EAAgBt7B,KAC1CqM,GAAe3H,UAAYk3B,EAAKrD,UAAU,EAAGsD,GAAOnuB,GAAa1N,UAIjEkM,KAAWoB,IAActB,MAAcquB,GAAyB,GAsBtE,IAnBIE,GAAgBjtB,KAAetB,MACjCwjB,GAAQuC,KACR0H,OAGFa,EAAa5rB,KAAUwsB,IAErB7M,GAAOtH,KAAK,eAAgB1V,MAC5BgpB,GAAyB,GAChBE,EACJD,GAAcJ,MACV5sB,IAActB,MACvB+tB,KACAX,KACA0C,MAGEvB,IAAiBnP,GAwevB,WAEE,IADA,IAAInrB,EAAIyO,GAAQ3E,KAAKkjB,IAAIjB,GAAYlgB,IAC5B9L,EAAIqtB,GAAertB,KAAM,CAChC,IAAIqH,EAAO0kB,GAAW/rB,GAElBA,GAAK0O,IAAS1O,EAAIC,GAEpBqkB,EAASjd,EAAM,cAEfA,EAAKvC,MAAMykB,KAAqB,KAAbvpB,EAAI0O,IAAe5C,GAAQ,IAC9CwY,EAASjd,EAAMyF,IACfyX,EAAYld,EAAM4F,KACT5F,EAAKvC,MAAMykB,OACpBliB,EAAKvC,MAAMykB,KAAO,GAClBjF,EAASjd,EAAM4F,IACfsX,EAAYld,EAAMyF,KAIpByX,EAAYld,EAAM0F,IAIpBzG,YAAW,WACTpD,EAAQ6oB,IAAY,SAAS5H,GAC3BI,EAAYJ,EAAI,mBAEjB,KAngB8B4X,IAE5BpqB,KAAY+c,GAAQ,CAEvB,GAAIyL,IAAczQ,IAEZzd,KAAe+vB,eAAiBrvB,KAAUurB,UAC5C5D,KAIEtN,KAAgB+Q,GAAkBnkB,KAAWokB,IAC/CrM,GAAa7mB,MAAM+kB,QAAUoK,GAAsBjN,GAAapT,GAAQtG,GAAYX,GAAOV,KAGzFwf,IAAY,CAEVL,IACFvf,GAAU/G,MAAM6L,MAAQujB,GAAkB5mB,GAAYsG,GAAQ9H,KAIhE,IAAIsY,EAAM+P,GAAmB7mB,GAAYsG,GAAQ9H,IACvCsoB,GAAoBxgB,KQt6CjC,SAAuB4P,EAAO9U,GAEjC,eAAgB8U,EACdA,EAAMyY,WAAWvtB,GACjB8U,EAAM0Y,WAAWxtB,GRs6CbytB,CAAc3Y,GAAOI,EAAkBJ,IAAS,GAChDD,EAAWC,GAAO,IAAM+K,GAAU,eAAgBnK,EAAKR,EAAkBJ,KAKzEvX,IAAc6tB,KAEdO,IACFxB,KACA9K,GAAcrf,IAIdyrB,GAAa9L,GAAOtH,KAAK,mBAAoB1V,GAAKyR,KAQxD,SAAS6L,KACP,IAAKrhB,KAAetB,GAElB,OAAQggB,KADA9f,GAASJ,IAASA,GAAQ,GAAK,EAAIA,IAI7C,IAAI6E,EAAQrD,IAAcA,GAAasG,IAAUoY,GAAaK,GAAeL,IACzEoQ,EAAKpV,GAAcrhB,GAAyB,EAAdqhB,GAAkBrhB,GAAWiO,GAM/D,OAJI1H,KACFkwB,GAAM9uB,IAAc3H,GAAW2H,IAAc,GAAK3H,IAAY0mB,GAAe3d,GAAQ,GAAK2d,GAAe3d,IAASkF,KAAW,GAGxHjD,GAASyrB,EAGlB,SAAShQ,KAEP,IAAK,IAAIW,KADTvB,GAAiB,EACFpgB,EACb2hB,EAAK7nB,SAAS6nB,GACVd,IAAec,IAAMvB,GAAiBuB,GA+C9C,SAAS6M,MACFnvB,IAAY4B,IAAkB8Y,EAAY9Y,KAC1CE,IAAOE,IAAgB0Y,EAAY1Y,IACnC9B,KACC+B,GACFyY,EAAYzY,KAERwa,IAAc/B,EAAY+B,IAC1BC,IAAchC,EAAYgC,MAKpC,SAASqU,KACH/wB,IAAY4B,IAAkBgZ,EAAYhZ,IAC1CE,IAAOE,IAAgB4Y,EAAY5Y,IACnC9B,KACE+B,GACF2Y,EAAY3Y,KAERwa,IAAc7B,EAAY6B,IAC1BC,IAAc9B,EAAY8B,MAKpC,SAAS8S,KACP,IAAIrL,GAAJ,CAMA,GAHI5H,KAAe2E,GAAa7mB,MAAM42B,OAAS,OAG3C5O,GAEF,IADA,IAAI1I,EAAM,kBACDpkB,EAAI8sB,GAAY9sB,KACnBorB,GAAY9G,EAASyH,GAAW/rB,GAAIokB,GACxCE,EAASyH,GAAWsB,GAAgBrtB,EAAI,GAAIokB,GAKhDwV,KAEAhL,IAAS,GAyBX,SAASoL,KACP,IAAIvL,GAAJ,CAKA,GAHAjL,GAAMiL,UAAW,EACjB5iB,GAAUwY,UAAYxY,GAAUwY,UAAUvd,QAAQwnB,GAAoBiK,UAAU,GAAI,IACpFzT,EAAYjZ,GAAW,CAAC,UACpBuB,GACF,IAAK,IAAI4X,EAAI8H,GAAY9H,KACnBoG,GAAYjG,EAAY4G,GAAW/G,IACvCG,EAAY4G,GAAWsB,GAAgBrI,EAAI,IAQ/C,GAHKyG,IAAeL,GAAYtG,EAAY6G,GAAc,CAAC,WAGtDP,EACH,IAAK,IAAIprB,EAAI0O,GAAOzO,EAAIyO,GAAQsd,GAAYhsB,EAAIC,EAAGD,IAAK,CACtD,IAAIqH,EAAO0kB,GAAW/rB,GACtB8kB,EAAYzd,EAAM,CAAC,UACnBkd,EAAYld,EAAMyF,IAClByX,EAAYld,EAAM4F,IAKtB2sB,KAEAnL,IAAW,GAiCb,SAASqN,KACP,IAAI1X,EAAMiV,KACN9M,GAAkB7nB,YAAc0f,IAAOmI,GAAkB7nB,UAAY0f,GAG3E,SAASiV,KACP,IAAIvV,EAAMuY,KACNjf,EAAQ0G,EAAI,GAAK,EACjBzG,EAAMyG,EAAI,GAAK,EACnB,OAAO1G,IAAUC,EAAMD,EAAQ,GAAKA,EAAQ,OAASC,EAGvD,SAASgf,GAAsBvT,GAClB,MAAPA,IAAeA,EAAMiN,MACzB,IAAmB1Y,EAAKif,EAAYC,EAAhCnf,EAAQ1O,GAiBZ,GAdIxC,IAAU8a,IACRhb,IAAasB,MACfgvB,IAAgB9d,WAAWsK,GAAO9B,IAClCuV,EAAWD,EAAa32B,GAAyB,EAAdqhB,IAGjChb,KACFswB,EAAajQ,GAAe3d,IAC5B6tB,EAAWD,EAAa32B,IAMxBqG,GACFqgB,GAAenpB,SAAQ,SAASs5B,EAAOx8B,GACjCA,EAAIqtB,MACDnhB,IAAU8a,KAAgBwV,GAASF,EAAa,KAAOlf,EAAQpd,GAChEu8B,EAAWC,GAAS,KAAOnf,EAAMrd,WAKpC,CAEL,GAAIsN,GAAY,CACd,IAAImvB,EAAOnvB,GAAasG,GACpB1H,IAAU8a,IACZ5J,EAAQrT,KAAKC,MAAMsyB,EAAWG,GAC9Bpf,EAAMtT,KAAK0T,KAAK8e,EAASE,EAAO,IAEhCpf,EAAMD,EAAQrT,KAAK0T,KAAK9X,GAAS82B,GAAQ,OAI3C,GAAIvwB,IAAU8a,GAAa,CACzB,IAAIgM,EAAIlnB,GAAQ,EAQhB,GAPII,IACFkR,GAAS4V,EAAI,EACb3V,EAAM3O,GAAQskB,EAAI,GAElB3V,EAAM3O,GAAQskB,EAGZhM,GAAa,CACf,IAAIrf,EAAIqf,GAAclb,GAAQnG,GAC9ByX,GAASzV,EACT0V,GAAO1V,EAGTyV,EAAQrT,KAAKC,MAAMoT,GACnBC,EAAMtT,KAAK0T,KAAKJ,QAEhBA,EAAMD,EAAQtR,GAAQ,EAI1BsR,EAAQrT,KAAK+L,IAAIsH,EAAO,GACxBC,EAAMtT,KAAKkjB,IAAI5P,EAAKgQ,GAAgB,GAGtC,MAAO,CAACjQ,EAAOC,GAGjB,SAAS0c,KACHxS,KAAa5V,IACfgnB,GAAczL,MAAM,KAAMmP,MAAwBn5B,SAAQ,SAAUgN,GAClE,IAAKgU,EAAShU,EAAKkhB,IAAmB,CAEpC,IAAI8E,EAAM,GACVA,EAAIrL,GAAiB,SAAU/H,GAAKA,EAAE4Z,mBACtCrW,EAAUnW,EAAKgmB,GAEf7P,EAAUnW,EAAKmhB,IAGfnhB,EAAIuoB,IAAMhU,EAAQvU,EAAK,YAGvB,IAAIysB,EAASlY,EAAQvU,EAAK,eACtBysB,IAAUzsB,EAAIysB,OAASA,GAE3BrY,EAASpU,EAAK,eActB,SAASohB,GAAWphB,GAClBoU,EAASpU,EAAK,UACdqhB,GAAarhB,GAQf,SAASqhB,GAAcrhB,GACrBoU,EAASpU,EAAK,gBACdqU,EAAYrU,EAAK,WACjBqW,EAAarW,EAAKmhB,IAGpB,SAASsH,GAAevb,EAAOC,GAE7B,IADA,IAAImb,EAAO,GACJpb,GAASC,GACdna,EAAQ6oB,GAAW3O,GAAOhb,iBAAiB,QAAQ,SAAU8N,GAAOsoB,EAAKz0B,KAAKmM,MAC9EkN,IAGF,OAAOob,EAKT,SAASsB,KACP,IAAItB,EAAOG,GAAczL,MAAM,KAAMmP,MACrC5a,GAAI,WAAYiX,GAAgBF,EAAM9B,OAGxC,SAASgC,GAAiBF,EAAM3W,GAE9B,OAAIyK,GAAuBzK,KAG3B2W,EAAKt1B,SAAQ,SAAUgN,EAAKxB,GACtBwV,EAAShU,EAAKkhB,KAAqBoH,EAAKnjB,OAAO3G,EAAO,MAIvD8pB,EAAKx0B,YAGVyd,GAAI,WAAYiX,GAAgBF,EAAM3W,MAHXA,KAM7B,SAASqY,KACPH,KACAX,KACA0C,KACAnC,KA0GF,WAEE,GAAIptB,KACFmjB,GAAkBL,IAAc,EAAIA,GAAa4C,KACjD5C,IAAc,EAEVK,KAAoBwC,IAAuB,CAC7C,IAAI0K,EAAU5M,GAASkC,IACnB2K,EAAa7M,GAASN,IAE1B/K,EAASiY,EAAS,CAChB,SAAY,KACZ,aAAcxK,IAAUF,GAAwB,KAElD3N,EAAYqY,EAASzK,IAErBxN,EAASkY,EAAY,CAAC,aAAczK,IAAU1C,GAAkB,GAAK2C,KACrEvN,EAAY+X,EAAY,YACxBvY,EAASuY,EAAY1K,IAErBD,GAAwBxC,IA7H5BoN,GAIF,SAASxI,KACHlJ,GAAYnf,KACdsf,GAAczmB,MAAM2lB,GAAsB9d,GAAQ,IAAO,KAI7D,SAASowB,GAAmBC,EAAYC,GAEtC,IADA,IAAIC,EAAU,GACLl9B,EAAIg9B,EAAY/8B,EAAI8J,KAAKkjB,IAAI+P,EAAaC,EAAY5P,IAAgBrtB,EAAIC,EAAGD,IACpFk9B,EAAQn5B,KAAKgoB,GAAW/rB,GAAG4gB,cAG7B,OAAO7W,KAAK+L,IAAIoX,MAAM,KAAMgQ,GAQ9B,SAASxG,KACP,IAAIyG,EAAYlxB,GAAa8wB,GAAkBruB,GAAO5C,IAASixB,GAAkBjQ,GAAYd,IACzFoR,EAAK7R,IAAgCI,GAErCyR,EAAGt4B,MAAMoB,SAAWi3B,IAAaC,EAAGt4B,MAAMoB,OAASi3B,EAAY,MAKrE,SAAShE,KACP9M,GAAiB,CAAC,GAClB,IAAInoB,EAAOunB,GAAa,OAAS,MAC7B4R,EAAQ5R,GAAa,QAAU,SAC/B6R,EAAOvR,GAAW,GAAGtmB,wBAAwBvB,GAEjDhB,EAAQ6oB,IAAY,SAAS1kB,EAAMrH,GAE7BA,GAAKqsB,GAAetoB,KAAKsD,EAAK5B,wBAAwBvB,GAAQo5B,GAE9Dt9B,IAAMqtB,GAAgB,GAAKhB,GAAetoB,KAAKsD,EAAK5B,wBAAwB43B,GAASC,MAK7F,SAASlE,KACP,IAAImE,EAAQlB,KACRjf,EAAQmgB,EAAM,GACdlgB,EAAMkgB,EAAM,GAEhBr6B,EAAQ6oB,IAAY,SAAS1kB,EAAMrH,GAE7BA,GAAKod,GAASpd,GAAKqd,EACjBmH,EAAQnd,EAAM,iBAChByd,EAAYzd,EAAM,CAAC,cAAe,aAClCid,EAASjd,EAAM8pB,KAIZ3M,EAAQnd,EAAM,iBACjBsd,EAAStd,EAAM,CACb,cAAe,OACf,SAAY,OAEdkd,EAAYld,EAAM8pB,QA+D1B,SAASqM,GAAsBrZ,GAC7B,OAAOA,EAAGgH,SAAS7U,cAGrB,SAASojB,GAAUvV,GACjB,MAAoC,WAA7BqZ,GAAqBrZ,GAG9B,SAASsZ,GAAgBtZ,GACvB,MAA4C,SAArCA,EAAGxd,aAAa,iBAGzB,SAAS+2B,GAAkBhE,EAAUvV,EAAI2E,GACnC4Q,EACFvV,EAAGsK,SAAW3F,EAEd3E,EAAGhgB,aAAa,gBAAiB2kB,EAAIpP,YAKzC,SAASigB,KACP,GAAKhvB,KAAY0C,KAAUD,GAA3B,CAEA,IAAIuwB,EAAe,GAAiBzW,GAAWuH,SAAWgP,GAAevW,IACrE0W,EAAe,GAAiBzW,GAAWsH,SAAWgP,GAAetW,IACrE0W,EAAenvB,IAASsf,GACxB8P,GAAgBzwB,IAAUqB,IAASwf,GAEnC2P,IAAgBF,GAClBD,GAAiBjM,GAAcvK,IAAY,IAExC2W,GAAeF,GAClBD,GAAiBjM,GAAcvK,IAAY,GAEzC4W,IAAgBF,GAClBF,GAAiBhM,GAAcvK,IAAY,IAExC2W,GAAeF,GAClBF,GAAiBhM,GAAcvK,IAAY,IAK/C,SAAS0O,GAAe1R,EAAIC,GACtBqG,IAAsBtG,EAAGrf,MAAM2lB,GAAsBrG,GAO3D,SAAS2Z,GAAcxK,GAIrB,OAHW,MAAPA,IAAeA,EAAM7kB,IAGlB1C,IAAcrG,IADXqhB,GAAcpT,GAAS,IACOyY,GAAekH,EAAM,GAAKlH,GAAekH,GAAO3f,KAAS,EAC/FtG,IAAc3H,GAAW2H,IAAc,GACpCxB,GAAQ,GAAK,EAGpB,SAAS0hB,KACP,IACInqB,EAAUsC,IADJqhB,GAAcpT,GAAS,IAb1BtG,IAAcA,GAAasG,IAAUyZ,GAAgBhB,GAAegB,KAsB3E,OANInhB,KAAWkB,KACb/J,EAASiK,KAAgBA,GAAasG,KAAWyZ,GAAgB,GAAK0Q,KACpEA,GAAa1Q,GAAgB,GAAKhB,GAAegB,GAAgB,IAEjEhqB,EAAS,IAAKA,EAAS,GAEpBA,EAGT,SAAS0yB,GAA4BxC,GAGnC,IAAIzK,EACJ,GAHW,MAAPyK,IAAeA,EAAM7kB,IAGrB+c,KAAezf,GACjB,GAAIsB,GACFwb,IAASxb,GAAasG,IAAU2f,EAC5BrnB,KAAU4c,GAAOiV,UAChB,CACL,IAAIC,EAAc/T,EAAYoD,GAAgBvhB,GAC1CI,KAAUqnB,GAAOwK,MACrBjV,EAAc,KAANyK,EAAYyK,OAGtBlV,GAAQuD,GAAekH,GACnBrnB,IAAUF,KACZ8c,GAAOiV,MAQX,OAJIzQ,KAAoBxE,EAAM/e,KAAK+L,IAAIgT,EAAKyE,KAE5CzE,IAAQ2C,IAAezf,IAAcsB,GAAoB,KAAN,IAKrD,SAASurB,GAA4B/P,GACnC+M,GAAchqB,GAAW,MACzBiqB,GAAqBhN,GAGvB,SAASgN,GAAsBhN,GAClB,MAAPA,IAAeA,EAAMiN,MACzBlqB,GAAU/G,MAAM4oB,IAAiBC,GAAkB7E,EAAM8E,GAG3D,SAASuI,GAAc8H,EAAQC,EAAUC,EAASC,GAChD,IAAIn+B,EAAIg+B,EAASnyB,GACZsB,KAAQnN,EAAI8J,KAAKkjB,IAAIhtB,EAAGotB,KAE7B,IAAK,IAAIrtB,EAAIi+B,EAAQj+B,EAAIC,EAAGD,IAAK,CAC7B,IAAIqH,EAAO0kB,GAAW/rB,GAGnBo+B,IAAS/2B,EAAKvC,MAAMykB,KAAqB,KAAbvpB,EAAI0O,IAAe5C,GAAQ,KAExDkB,IAAgB0d,IAClBrjB,EAAKvC,MAAM4lB,GAAmBrjB,EAAKvC,MAAM8lB,GAAkB5d,IAAgBhN,EAAIi+B,GAAU,IAAO,KAElG1Z,EAAYld,EAAM62B,GAClB5Z,EAASjd,EAAM82B,GAEXC,GAASvR,GAAc9oB,KAAKsD,IA2CpC,SAASg3B,GAAQvb,EAAGwb,GACd7Q,IAA8B2H,MAG9B1mB,KAAUqf,IAAeuQ,KAE3BjQ,GAAOtH,KAAK,eAAgB1V,MAC5Bgd,GAAOtH,KAAK,kBAAmB1V,MAC3BpF,IAAc6tB,KAGdnK,IAAa7M,GAAK,CAAC,QAAS,WAAWL,QAAQK,EAAE/K,OAAS,GAAK6X,KAEnExB,IAAU,EACVmH,MAWJ,SAASgJ,GAAUna,GACjB,OAAOA,EAAI9N,cAAcxP,QAAQ,KAAM,IAWzC,SAASooB,GAAiBrsB,GAGxB,GAAIuoB,GAAYgD,GAAS,CAGvB,GAFAC,GAAOtH,KAAK,gBAAiB1V,GAAKxO,KAE7BuoB,GAAYyB,GAAc7oB,OAAS,EACtC,IAAK,IAAIhE,EAAI,EAAGA,EAAI6sB,GAAc7oB,OAAQhE,IAAK,CAC7C,IAAIqH,EAAOwlB,GAAc7sB,GAEzBqH,EAAKvC,MAAMykB,KAAO,GAEdqB,GAAkBF,IACpBrjB,EAAKvC,MAAM8lB,GAAkB,GAC7BvjB,EAAKvC,MAAM4lB,GAAmB,IAEhCnG,EAAYld,EAAM0F,IAClBuX,EAASjd,EAAM4F,IAanB,IAAKpK,IACAuoB,GAAYvoB,EAAMiF,OAAOxE,aAAeuI,IACzChJ,EAAMiF,SAAW+D,IAAa0yB,GAAS17B,EAAM27B,gBAAkBD,GAAS7Q,IAAgB,CAE1F,IAAKD,GAA4B,CAC/B,IAAIyN,EAAWxsB,GACf0mB,KACI1mB,KAAUwsB,IACZ7M,GAAOtH,KAAK,eAAgB1V,MAE5BwnB,MAIW,UAAX1rB,GAAsBkhB,GAAOtH,KAAK,cAAe1V,MACrD+c,IAAU,EACVL,GAAcrf,KAOpB,SAAS+gB,GAAMgP,EAAa3b,GAC1B,IAAI4L,GAGJ,GAAoB,SAAhB+P,EACF3P,GAAgBhM,GAAI,QAGf,GAAoB,SAAhB2b,EACT3P,GAAgBhM,EAAG,OAGd,CACL,GAAIsL,GAAS,CACX,GAAI3G,GAA4B,OAAiByH,KAGnD,IAAIsI,EAAWD,KACXmH,EAAW,EAkBf,GAhBoB,UAAhBD,EACFC,GAAalH,EACY,SAAhBiH,EACTC,EAAWtT,EAAWY,GAAalgB,GAAQ0rB,EAAWxL,GAAa,EAAIwL,GAE5C,iBAAhBiH,IAA4BA,EAAcv5B,SAASu5B,IAEzDlgB,MAAMkgB,KAEJ3b,IAAK2b,EAAc10B,KAAK+L,IAAI,EAAG/L,KAAKkjB,IAAIjB,GAAa,EAAGyS,KAE7DC,EAAWD,EAAcjH,KAKxBpM,GAAYsT,GAAY30B,KAAKuf,IAAIoV,GAAY5yB,GAAO,CACvD,IAAI6yB,EAASD,EAAW,EAAI,GAAK,EACjCA,GAAahwB,GAAQgwB,EAAW1S,IAAegC,GAAWhC,GAAa2S,EAAsB,EAAb3S,GAAiB2S,GAAU,EAG7GjwB,IAASgwB,EAGLtT,GAAYhe,KACVsB,GAAQsf,KAAYtf,IAASsd,IAC7Btd,GAAQwf,KAAYxf,IAASsd,KAI/BuL,GAAY7oB,MAAW6oB,GAAYxJ,KACrCsQ,GAAOvb,IAOb,SAASgM,GAAiBhM,EAAG8b,GAC3B,GAAIxQ,GAAS,CACX,GAAI3G,GAA4B,OAAiByH,KAEnD,IAAI2P,EAEJ,IAAKD,EAAK,CAIR,IAFA,IAAI92B,EAASqnB,GADbrM,EAAIiM,GAASjM,IAGNhb,IAAW4E,IAAqB,CAACwa,GAAYC,IAAY1E,QAAQ3a,GAAU,GAAKA,EAASA,EAAOxE,WAEvG,IAAIw7B,EAAW,CAAC5X,GAAYC,IAAY1E,QAAQ3a,GAC5Cg3B,GAAY,IACdD,GAAkB,EAClBD,EAAmB,IAAbE,GAAkB,EAAI,GAIhC,GAAIzxB,GAAQ,CACV,GAAIqB,KAAUsf,KAAqB,IAAT4Q,EAExB,YADAnP,GAAK,OAAQ3M,GAER,GAAIpU,KAAUwf,IAAoB,IAAR0Q,EAE/B,YADAnP,GAAK,QAAS3M,GAKd8b,IACFlwB,IAAS3C,GAAU6yB,EACf5yB,KAAa0C,GAAQ3E,KAAKC,MAAM0E,KAEpC2vB,GAAQQ,GAAoB/b,GAAgB,YAAXA,EAAE/K,KAAuB+K,EAAI,OA6BlE,SAASsN,KACPkC,GAAgBvvB,aAAY,WAC1B+rB,GAAgB,KAAMnhB,MACrBxB,IAEHwjB,IAAY,EAGd,SAASO,KACP9lB,cAAckoB,IACd3C,IAAY,EAGd,SAASoP,GAAsBC,EAAQ1F,GACrC3U,EAAStY,GAAgB,CAAC,cAAe2yB,IACzC3yB,GAAe3H,UAAY+tB,GAAoB,GAAKuM,EAASvM,GAAoB,GAAK6G,EAGxF,SAAS/C,KACPnG,KACI/jB,IAAkB0yB,GAAqB,OAAQrxB,GAAa,IAGlE,SAASkiB,KACPM,KACI7jB,IAAkB0yB,GAAqB,QAASrxB,GAAa,IAiBnE,SAASqpB,KACHpH,IACFC,KACA2C,IAAqB,IAErBgE,KACAhE,IAAqB,GAuDzB,SAASxC,GAAU5L,GACjBA,EAAG8a,QAyBL,SAASlQ,GAAUjM,GAEjB,OAAOoc,GADPpc,EAAIA,GAAK+E,EAAIhlB,OACYigB,EAAEqc,eAAe,GAAKrc,EAEjD,SAASqM,GAAWrM,GAClB,OAAOA,EAAEhb,QAAU+f,EAAIhlB,MAAMu8B,WAG/B,SAASF,GAAcpc,GACrB,OAAOA,EAAE/K,KAAK0K,QAAQ,UAAY,EAGpC,SAAS4c,GAAwBvc,GAC/BA,EAAElb,eAAiBkb,EAAElb,iBAAmBkb,EAAEwc,aAAc,EAG1D,SAASC,KACP,OS/7EsBrM,ET+7EYL,GAAaK,EAAIN,GAAaM,ES/7EvCD,ET+7E0CJ,GAAaI,EAAIL,GAAaK,EU/7EnEuM,EDCzBz1B,KAAK01B,MAAMvM,EAAGD,IAAM,IAAMlpB,KAAK21B,ICDCnC,EV+7EgErwB,GU97EnGtK,GAAY,GACZ+0B,EAAM5tB,KAAKuf,IAAI,GAAKvf,KAAKuf,IAAIkW,MAEtB,GAAKjC,EACd36B,EAAY,aACH+0B,GAAO4F,IAChB36B,EAAY,YAGPA,IVq7EgHY,EAAQoJ,KU/7E1H,IAA2B4yB,EAAOjC,EACnC36B,EACA+0B,EDFoBzE,EAAGD,ETk8E3B,SAASvC,GAAY5N,GACnB,GAAIsL,GAAS,CACX,GAAI3G,GAA4B,OAAiByH,KAG/CzkB,IAAYklB,IAAaO,KAE7B4C,IAAW,EACPH,KACF7Q,EAAI6Q,IACJA,GAAW,MAGb,IAAIgN,EAAI5Q,GAASjM,GACjBuL,GAAOtH,KAAKmY,GAAapc,GAAK,aAAe,YAAazR,GAAKyR,KAE1Doc,GAAapc,IAAM,CAAC,MAAO,KAAKL,QAAQ+a,GAAqBrO,GAAUrM,MAAQ,GAClFuc,GAAuBvc,GAGzB+P,GAAaI,EAAIL,GAAaK,EAAI0M,EAAEC,QACpC/M,GAAaK,EAAIN,GAAaM,EAAIyM,EAAEE,QAChCzU,IACFsH,GAAgBlU,WAAW3S,GAAU/G,MAAM4oB,IAAe5mB,QAAQ6mB,GAAiB,KACnFkI,GAAchqB,GAAW,OAI7B,SAAS8kB,GAAW7N,GAClB,GAAIgQ,GAAU,CACZ,IAAI6M,EAAI5Q,GAASjM,GACjB+P,GAAaI,EAAI0M,EAAEC,QACnB/M,GAAaK,EAAIyM,EAAEE,QAEfzU,EACGuH,KAAYA,GAAWlR,GAAI,YAUtC,SAASqe,EAAWhd,GAClB,IAAKqL,GAEH,YADA2E,IAAW,GAGbhR,EAAI6Q,IACAG,KAAYH,GAAWlR,GAAI,WAAYqe,EAAUhd,OAEvB,MAA1BqL,KAAiCA,GAAwBoR,MAC7D,GAAIpR,GAAuB,EACpBqD,IAAiB0N,GAAapc,KAAM0O,IAAgB,GAEzD,IACM1O,EAAE/K,MAAQsW,GAAOtH,KAAKmY,GAAapc,GAAK,YAAc,WAAYzR,GAAKyR,IAC3E,MAAMid,IAER,IAAI9M,EAAIP,GACJsN,EAAOjN,GAAQF,GAAcD,IACjC,IAAKnH,IAAcne,IAActB,GAC/BinB,GAAK+M,EACL/M,GAAK,UAGLA,GADkBhJ,EAAY+V,EAAOl0B,GAAQ,MAAQnG,GAAWiO,IAAUyZ,IAAuB,IAAP2S,GAAcr6B,GAAWiO,IAEnHqf,GAAK,IAGPpnB,GAAU/G,MAAM4oB,IAAiBC,GAAkBsF,EAAIrF,IArCTkS,CAAUhd,QAExB,MAA1BqL,KAAiCA,GAAwBoR,MACzDpR,KAAyBqD,IAAgB,IAG3CA,IAAiB1O,EAAElb,kBAmC3B,SAASgpB,GAAU9N,GACjB,GAAIgQ,GAAU,CACRH,KACF7Q,EAAI6Q,IACJA,GAAW,MAETvH,GAAYyK,GAAchqB,GAAW,IACzCinB,IAAW,EAEX,IAAI6M,EAAI5Q,GAASjM,GACjB+P,GAAaI,EAAI0M,EAAEC,QACnB/M,GAAaK,EAAIyM,EAAEE,QACnB,IAAIG,EAAOjN,GAAQF,GAAcD,IAEjC,GAAI7oB,KAAKuf,IAAI0W,GAAO,CAElB,IAAKd,GAAapc,GAAI,CAEpB,IAAIhb,EAASqnB,GAAUrM,GACvBuD,EAAUve,EAAQ,CAAC,MAAS,SAASm4B,EAAcnd,GACjDuc,GAAuBvc,GACvByD,EAAaze,EAAQ,CAAC,MAASm4B,OAI/B7U,EACFuH,GAAWlR,GAAI,WACb,GAAIgK,KAAezf,GAAW,CAC5B,IAAIk0B,GAAeF,EAAOl0B,IAASnG,GAAWiO,IAC9CssB,EAAaF,EAAO,EAAIj2B,KAAKC,MAAMk2B,GAAcn2B,KAAK0T,KAAKyiB,GAC3DxxB,IAASwxB,MACJ,CACL,IAAIC,IAAWzN,GAAgBsN,GAC/B,GAAIG,GAAS,EACXzxB,GAAQsf,QACH,GAAImS,GAAS9T,GAAegB,GAAgB,GACjD3e,GAAQwf,QAGR,IADA,IAAIluB,EAAI,EACDA,EAAIqtB,IAAiB8S,GAAS9T,GAAersB,IAClD0O,GAAQ1O,EACJmgC,EAAQ9T,GAAersB,IAAMggC,EAAO,IAAKtxB,IAAS,GACtD1O,IAKNq+B,GAAOvb,EAAGkd,GACV3R,GAAOtH,KAAKmY,GAAapc,GAAK,WAAa,UAAWzR,GAAKyR,OAGzDqL,IACFW,GAAgBhM,EAAGkd,EAAO,GAAK,EAAI,IAON,SAAjCx8B,EAAQkkB,uBAAmC8J,IAAgB,GAC3DtkB,KAAcihB,GAAwB,KACtC1jB,KAAaklB,IAAaS,KAKhC,SAAS6F,MACE1K,IAAgCI,IACtC7mB,MAAMoB,OAASmmB,GAAe3d,GAAQ5C,IAASugB,GAAe3d,IAAS,KAG5E,SAASqjB,KACP,IAAIqO,EAAQ9yB,IAAcA,GAAasG,IAAUoY,GAAarmB,GAAWqmB,GAAalgB,GACtF,OAAO/B,KAAKkjB,IAAIljB,KAAK0T,KAAK2iB,GAAQpU,IAQpC,SAASyN,KACP,GAAKltB,KAAOqB,IAER4hB,KAAUwC,GAAa,CACzB,IAAI/E,EAAM+E,GACNlc,EAAM0Z,GACN3I,EAAKxB,EAQT,IANI2M,GAAcxC,KAChBvC,EAAMuC,GACN1Z,EAAMkc,GACNnL,EAAK1B,GAGA8H,EAAMnX,GACX+Q,EAAGmJ,GAAS/C,IACZA,IAIF+E,GAAcxC,IAIlB,SAASne,GAAMyR,GACb,MAAO,CACLjX,UAAWA,GACXkgB,WAAYA,GACZtf,aAAcA,GACdujB,SAAUA,GACVtjB,kBAAmBA,GACnBokB,YAAaA,GACb5J,WAAYA,GACZC,WAAYA,GACZrb,MAAOA,GACPC,QAASA,GACT+gB,WAAYA,GACZd,WAAYA,GACZqB,cAAeA,GACf3e,MAAOA,GACPqf,YAAaA,GACbsS,aAAcpS,KACdyB,gBAAiBA,GACjBwC,sBAAuBA,GACvB1C,MAAOA,GACPwC,YAAaA,GACbxO,MAAOA,GACP2I,KAAMA,GACNtpB,MAAOigB,GAAK,IAz+EViI,GAAsBpT,QAAQqT,KAAK,qBAAsBxnB,EAAQqI","file":"tornado.min.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 4);\n","/**======> Referance By Comment <======\r\n * ===> 00 - TinySlider [Third Party]\r\n * ===> 01 - Tornado Methods Object\r\n * ===> 02 - Navigation Menu Component\r\n * ===> 03 - Nested Menu Component\r\n * ===> 04 - Form UI Component\r\n * ===> 05 - DataTable Component\r\n * ===> 06 - Allow Access to Tornado Methods\r\n * ===> 07 - Tornado UI Utilities\r\n*/\r\n\r\n//======> TinySlider <=======//\r\nimport { tns } from \"../../../node_modules/tiny-slider/src/tiny-slider\";\r\n\r\n//======> Tornado Methods Object <=======//\r\nconst Tornado = {\r\n /**======> Referance By Comment <======\r\n * ===> 01 - get Element\r\n * ===> 02 - get Elements\r\n * ===> 03 - get Page Direction\r\n * ===> 04 - Live Events Watcher\r\n * ===> 05 - get Parents Until\r\n * ===> 06 - Get All Siblings\r\n * ===> 07 - Get Next Sibling that Matchs\r\n * ===> 08 - Get Previous Sibling that Matchs\r\n * ===> 09 - Get All Next Sibling\r\n * ===> 10 - Get All Previous Sibling\r\n * ===> 11 - Set new Attributes\r\n * ===> 12 - Insert After\r\n * ===> 13 - Insert Before\r\n * ===> 14 - Append HTML\r\n * ===> 15 - Get Element Height\r\n * ===> 16 - Slide Toggle\r\n * ===> 17 - Slide Up\r\n * ===> 18 - Slide Down\r\n * ===> 19 - Animated Counter\r\n * ===> 20 - Set Background\r\n * ===> 21 - Images LazyLoading\r\n * ===> 22 - Sticky Elements\r\n * ===> 23 - Animations Pattrens\r\n * ===> 24 - Smoth Scroll\r\n * ===> 25 - ScrollSpy\r\n * ===> 26 - Event Date Counter\r\n * ===> 27 - Dropdown Button\r\n * ===> 28 - TNS Slider Method\r\n * ===> 29 - Tabs Method\r\n * ===> 30 - Accordion Method\r\n * ===> 31 - Popup Modals\r\n * ===> 32 - Lightbox Modal\r\n * ===> 33 - Design Options\r\n * ===> 34 - Theme Switcher\r\n * ===> 35 - Viewport Info\r\n */\r\n\r\n //======> get Elements <=======//\r\n \"getElement\" : selector => document.querySelector(selector),\r\n\r\n //======> get Multiple Elements <=======//\r\n \"getElements\" : selector => document.querySelectorAll(selector),\r\n\r\n //======> get Page Direction <=======//\r\n \"direction\" : property => {\r\n //======> Default Directions <======//\r\n var pageDirection = 'ltr',\r\n startDirection = 'left',\r\n endDirection = 'right';\r\n //======> Detact Page Direction <======//\r\n if (!document.body.classList.contains('wp-admin')) pageDirection = getComputedStyle(document.body).direction;\r\n //======> Change Directions if RTL <======//\r\n if (pageDirection === 'rtl') {\r\n startDirection = 'right';\r\n endDirection = 'left';\r\n }\r\n //======> Return Property Value <======//\r\n if (property == \"start\") {\r\n return startDirection;\r\n } else if (property == \"end\") {\r\n return endDirection;\r\n } else {\r\n return pageDirection;\r\n }\r\n },\r\n\r\n //======> Live Events Watcher <=======//\r\n \"liveEvent\" : (selector, event, func) => {\r\n //==== interval for Checking new Elements ====//\r\n if (selector !== null) {\r\n var timerLoop = setInterval(() => {\r\n //==== Check if its Node Object =====//\r\n if (typeof(selector) === 'object') {\r\n selector.addEventListener(event, func);\r\n } else {\r\n //==== Selector ====//\r\n Tornado.getElements(selector).forEach(element => element.addEventListener(event, func));\r\n }\r\n }, 500);\r\n }\r\n },\r\n\r\n //======> get Parents Until <=======//\r\n \"parentsUntil\" : (element, filter) => {\r\n //====> Filtering the Matching Parent\r\n if (typeof(element) === 'object') {\r\n for (let i = 0; element && element !== document; element = element.parentNode) {\r\n if (element.matches(filter)) {\r\n return element;\r\n break;\r\n }\r\n }\r\n } else {\r\n var result;\r\n Tornado.getElements(element).forEach(element => {\r\n for (let i = 0; element && element !== document; element = element.parentNode) {\r\n if (element.matches(filter)) {\r\n result = element;\r\n break;\r\n }\r\n }\r\n });\r\n return result;\r\n }\r\n },\r\n\r\n //======> Get All Siblings <=======//\r\n \"getSiblings\" : (options) => {\r\n /*== Get all siblings of ==> element @param {Node} ==> @return {Array} The siblings ==*/\r\n if (options.element !== null) {\r\n return Array.prototype.filter.call(options.element.parentNode.children, sibling => {\r\n if(!options.filter) return sibling !== options.element;\r\n if(sibling.matches(options.filter)) return sibling;\r\n });\r\n }\r\n },\r\n\r\n //======> Get Next Sibling that Matchs <=======//\r\n \"getNextSibling\" : (options) => {\r\n if (options.element !== null) {\r\n //====> Get the next sibling element\r\n var sibling = options.element.nextElementSibling;\r\n //====> Filtering the Matching Sibling\r\n if (options.filter && options.filter !== null) {\r\n if (sibling !== null && sibling.matches(options.filter)) return sibling;\r\n }\r\n }\r\n },\r\n\r\n //======> Get Previous Sibling that Matchs <=======//\r\n \"getPrevSibling\" : (options) => {\r\n if (options.element !== null && options.filter !== null) {\r\n //====> Get the Previous sibling element\r\n var sibling = options.element.previousElementSibling;\r\n //====> Filtering the Matching Sibling\r\n if (sibling !== null && sibling.matches(options.filter)) return sibling;\r\n }\r\n },\r\n\r\n //======> Get All Next Sibling <=======//\r\n \"getNextSiblings\" : (options) => {\r\n //====> Get the Next Sibling and Initialize Array\r\n var siblings = [],\r\n sibling = options.element.nextElementSibling;\r\n //====> Loop Throgh the Next Siblings\r\n while (sibling) {\r\n //====> Filtering Matched Sibling\r\n if (options.filter && sibling.matches(options.filter)) siblings.push(sibling);\r\n //====> Catch the New Next Sibling\r\n sibling = sibling.nextElementSibling;\r\n }\r\n //====> Return Siblings\r\n if (siblings.length > 0) return siblings;\r\n },\r\n\r\n //======> Get All Previous Sibling <=======//\r\n \"getPrevSiblings\" : (options) => {\r\n //====> Get the Previous Sibling and Initialize Array\r\n var siblings = [],\r\n sibling = options.element.previousElementSibling;\r\n //====> Loop Throgh the Next Siblings\r\n while (sibling) {\r\n //====> Filtering Matched Sibling\r\n if (options.filter && sibling.matches(options.filter)) siblings.push(sibling);\r\n //====> Catch the New Next Sibling\r\n sibling = sibling.previousElementSibling;\r\n }\r\n //====> Return Siblings\r\n if (siblings.length > 0) return siblings;\r\n },\r\n\r\n //======> Set new Attributes <=======//\r\n \"setAttributes\" : (element, options) => {\r\n if (element !== null) {\r\n Object.keys(options).forEach(function (attr) {\r\n element.setAttribute(attr, options[attr]);\r\n });\r\n }\r\n },\r\n\r\n //======> Insert After <=======//\r\n \"insertAfter\" : (element, reference) => {\r\n //===> Descover if its HTML String <===//\r\n var elementString = element;\r\n if (typeof elementString === 'string' && reference !== null) {\r\n var range = document.createRange();\r\n elementString = range.createContextualFragment(element);\r\n }\r\n //===> Insert the Element After the Target <====//\r\n reference?.parentNode.insertBefore(elementString, reference.nextSibling);\r\n },\r\n\r\n //======> Insert Before <=======//\r\n \"insBefore\" : (element, reference) => {\r\n //===> Descover if its HTML String <===//\r\n var elementString = element;\r\n if (typeof elementString === 'string' && reference !== null) {\r\n var range = document.createRange();\r\n elementString = range.createContextualFragment(element);\r\n }\r\n //===> Insert the Element After the Target <====//\r\n reference?.parentNode.insertBefore(elementString, reference);\r\n },\r\n\r\n //======> Append HTML <=======//\r\n \"appendIn\" : (element, reference) => {\r\n //===> Descover if its HTML String <===//\r\n if (typeof element === 'string' && reference !== null) {\r\n reference.innerHTML += element;\r\n } else if (reference !== null) {\r\n reference.appendChild(element);\r\n }\r\n },\r\n\r\n //=======> Get Element Height <=======//\r\n \"getHeight\" : (element) => {\r\n //======> for Getting the Height of a Hidden Element <=======//\r\n var origDisplay = getComputedStyle(element).display;\r\n if (origDisplay == 'none') element.style.display = 'block'; \r\n //======> Get Element Height <=======//\r\n var eleHeight = element.scrollHeight,\r\n elePadding = parseInt(getComputedStyle(element).padding,10) || 0;\r\n if (origDisplay === 'none') element.style.display = 'none';\r\n return eleHeight + elePadding;\r\n },\r\n\r\n //======> ViewPort Detactor <======//\r\n \"inView\" : (element) => {\r\n //==== Get the Element Data ====//\r\n var scrollPosition = window.scrollY || window.pageYOffset,\r\n boundsTop = element.getBoundingClientRect().top + scrollPosition,\r\n viewport = {top: scrollPosition,bottom: scrollPosition + window.innerHeight},\r\n bounds = {top: boundsTop, bottom: boundsTop + element.clientHeight};\r\n //====== if its visible =====//\r\n if (bounds.bottom >= viewport.top && bounds.bottom <= viewport.bottom || bounds.top <= viewport.bottom && bounds.top >= viewport.top) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n },\r\n\r\n //=======> Slide Toggle <=======//\r\n \"slideToggle\" : (element,time) => {\r\n //======> Get Element Height and Current Display <=======//\r\n var origDisplay = element.style.display || getComputedStyle(element).display,\r\n eleHeight = Tornado.getHeight(element);\r\n if (!time) time = 300;\r\n //===> Slide Up <===//\r\n if (origDisplay && origDisplay !== 'none') {\r\n //====== Prepare Element for Animation =======//\r\n element.style.overflow = \"hidden\";\r\n element.style.height = eleHeight + 'px';\r\n //====== Slide Up Animation =======//\r\n var keyframes = [\r\n { height: eleHeight + 'px' },\r\n { height: '0px' }\r\n ]\r\n element.animate(keyframes, {duration: time,});\r\n //====== After Animation Reset to Default =======//\r\n setTimeout(()=> {\r\n element.style.display = \"none\";\r\n element.style.height = null;\r\n element.style.overflow = null;\r\n },time);\r\n //===> Slide Down <===//\r\n } else {\r\n //====== Prepare Element for Animation =======//\r\n element.style.overflow = \"hidden\";\r\n element.style.display = \"block\";\r\n element.style.height = 0;\r\n //====== Set Height With Animation =======//\r\n setTimeout(()=>{\r\n //====== Slide Down Animation =======//\r\n var keyframes = [\r\n { height: '0px' },\r\n { height: eleHeight + 'px' }\r\n ]\r\n element.animate(keyframes, {duration: time,});\r\n },5);\r\n //====== After Animation Reset to Default =======//\r\n setTimeout(()=>{\r\n element.style.height = null;\r\n element.style.overflow = null;\r\n },time);\r\n }\r\n },\r\n\r\n //=======> Slide Up <=======//\r\n \"slideUp\" : (element,time) => {\r\n //======> Get Element Height and Current Display <=======//\r\n var origDisplay = element.style.display,\r\n eleHeight = Tornado.getHeight(element);\r\n if (!time) time = 300;\r\n //===> Check Cureent State <===//\r\n if (origDisplay !== 'none') {\r\n //====== Prepare Element for Animation =======//\r\n element.style.overflow = \"hidden\";\r\n element.style.height = eleHeight + 'px';\r\n //====== Slide Up Animation =======//\r\n var keyframes = [\r\n { height: eleHeight + 'px' },\r\n { height: '0px' }\r\n ]\r\n element.animate(keyframes, {duration: time,});\r\n //====== After Animation Reset to Default =======//\r\n setTimeout(()=> {\r\n element.style.display = \"none\";\r\n element.style.height = null;\r\n element.style.overflow = null;\r\n },time);\r\n }\r\n },\r\n\r\n //=======> Slide Down <=======//\r\n \"slideDown\" : (element,time) => {\r\n //======> Get Element Height and Current Display <=======//\r\n var origDisplay = element.style.display || getComputedStyle(element).display,\r\n eleHeight = Tornado.getHeight(element);\r\n if (!time) time = 300;\r\n //===> Slide Down <===//\r\n if (origDisplay && origDisplay === 'none') {\r\n //====== Prepare Element for Animation =======//\r\n element.style.overflow = \"hidden\";\r\n element.style.display = \"block\";\r\n element.style.height = 0;\r\n //====== Set Height With Animation =======//\r\n setTimeout(()=>{\r\n //====== Slide Down Animation =======//\r\n var keyframes = [\r\n { height: '0px' },\r\n { height: eleHeight + 'px' }\r\n ]\r\n element.animate(keyframes, {duration: time,});\r\n },5);\r\n //====== After Animation Reset to Default =======//\r\n setTimeout(()=>{\r\n element.style.height = null;\r\n element.style.overflow = null;\r\n },time);\r\n }\r\n },\r\n\r\n //======> Set Background <======//\r\n \"setBackground\" : (selector,lazy?) => {\r\n //====> Check if Selector or Element <====//\r\n typeof(selector) === 'object' ? selector = [selector] : selector = Tornado.getElements(selector || '[data-src]');\r\n //====> Selector Handler <====//\r\n selector.forEach(element => {\r\n if(element.classList.contains('dbdone')) return;\r\n //====> Lazyloader Set <====//\r\n if (lazy) {\r\n element.classList.add('lazyloader');\r\n element.style.backgroundImage = `url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBzdHlsZT0ibWFyZ2luOiBhdXRvOyBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDApIG5vbmUgcmVwZWF0IHNjcm9sbCAwJSAwJTsgZGlzcGxheTogYmxvY2s7IHNoYXBlLXJlbmRlcmluZzogYXV0bzsiIHdpZHRoPSIyMDBweCIgaGVpZ2h0PSIyMDBweCIgdmlld0JveD0iMCAwIDEwMCAxMDAiIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIj4KPGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZGNkY2RjIiBzdHJva2Utd2lkdGg9IjMiIHI9IjE4IiBzdHJva2UtZGFzaGFycmF5PSI4NC44MjMwMDE2NDY5MjQ0MSAzMC4yNzQzMzM4ODIzMDgxMzgiPgogIDxhbmltYXRlVHJhbnNmb3JtIGF0dHJpYnV0ZU5hbWU9InRyYW5zZm9ybSIgdHlwZT0icm90YXRlIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgZHVyPSIxcyIgdmFsdWVzPSIwIDUwIDUwOzM2MCA1MCA1MCIga2V5VGltZXM9IjA7MSI+PC9hbmltYXRlVHJhbnNmb3JtPgo8L2NpcmNsZT4KPCEtLSBbbGRpb10gZ2VuZXJhdGVkIGJ5IGh0dHBzOi8vbG9hZGluZy5pby8gLS0+PC9zdmc+)`;\r\n }\r\n //====> get the Target <====//\r\n var bgData = element.getAttribute('data-src'),\r\n //====> Set Background Method <=====//\r\n setBackground = ele => {\r\n if(bgData === null || bgData === undefined || bgData === '' || bgData === ' ') {\r\n element.style.backgroundImage = '';\r\n } else {\r\n bgData = bgData.replace(' ','%20');\r\n bgData = bgData.replace('#','%23');\r\n if (lazy) element.classList.remove('lazyloader');\r\n element.style.backgroundImage = 'url(\"' + bgData + '\")';\r\n }\r\n },\r\n //====> Detact if there is a Slider <====//\r\n sliderDetact = Tornado.parentsUntil(element,'.tns-outer');\r\n //====> Lazyloading Mode <====//\r\n if (lazy) {\r\n if (bgData === '' || bgData === ' ') element.classList.remove('lazyloader');\r\n //====> Scroll Event <====//\r\n window.addEventListener('scroll', event => {\r\n if (Tornado.inView(element)) {\r\n if (sliderDetact) {\r\n var sliderItems = sliderDetact.querySelectorAll('[data-src]');\r\n Array.from(sliderItems).forEach(item => setBackground(item));\r\n } else {\r\n setBackground(element);\r\n }\r\n }\r\n });\r\n }\r\n //====> if its in first view <=====//\r\n if (lazy && Tornado.inView(element)) {\r\n /*======> if not Slider Set Background <====*/\r\n if (!sliderDetact) setBackground(element);\r\n } else if (!lazy) {\r\n setBackground(element);\r\n }\r\n //===> Done <===//\r\n element.classList.add('dbdone');\r\n });\r\n },\r\n\r\n //======> Images LazyLoading <======//\r\n \"lazyLoading\" : (selector) => {\r\n //====> Check if Selector or Element <====//\r\n typeof(selector) === 'object' ? selector = [selector] : selector = Tornado.getElements(selector || '[data-lazyload]');\r\n //========> LazyLoading <========//\r\n selector.forEach(element => {\r\n if(element.classList.contains('lldone')) return;\r\n //====> Default Loader <====//\r\n element.setAttribute('src', \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBzdHlsZT0ibWFyZ2luOiBhdXRvOyBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDApIG5vbmUgcmVwZWF0IHNjcm9sbCAwJSAwJTsgZGlzcGxheTogYmxvY2s7IHNoYXBlLXJlbmRlcmluZzogYXV0bzsiIHdpZHRoPSIyMDBweCIgaGVpZ2h0PSIyMDBweCIgdmlld0JveD0iMCAwIDEwMCAxMDAiIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIj4KPGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZGNkY2RjIiBzdHJva2Utd2lkdGg9IjMiIHI9IjE4IiBzdHJva2UtZGFzaGFycmF5PSI4NC44MjMwMDE2NDY5MjQ0MSAzMC4yNzQzMzM4ODIzMDgxMzgiPgogIDxhbmltYXRlVHJhbnNmb3JtIGF0dHJpYnV0ZU5hbWU9InRyYW5zZm9ybSIgdHlwZT0icm90YXRlIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgZHVyPSIxcyIgdmFsdWVzPSIwIDUwIDUwOzM2MCA1MCA1MCIga2V5VGltZXM9IjA7MSI+PC9hbmltYXRlVHJhbnNmb3JtPgo8L2NpcmNsZT4KPCEtLSBbbGRpb10gZ2VuZXJhdGVkIGJ5IGh0dHBzOi8vbG9hZGluZy5pby8gLS0+PC9zdmc+\");\r\n //====> Set Media Method <====//\r\n var setMediaImages = () => {\r\n //==== Get the Element Data ====//\r\n var newResault = Tornado.inView(element),\r\n lazydata = element.getAttribute('data-lazyload');\r\n //====== if its visible =====//\r\n if (newResault) element.setAttribute('src',lazydata);\r\n };\r\n \r\n setMediaImages();\r\n //====> Check if Target in Slider <====//\r\n var sliderDetact = Tornado.parentsUntil(element,'.tns-outer');\r\n\r\n //====> Scroll Event <====//\r\n window.addEventListener('scroll', event => {\r\n if (sliderDetact) {\r\n var sliderItems = sliderDetact.querySelectorAll('[data-lazyload]');\r\n Array.from(sliderItems).forEach(item => {\r\n var lazydata = element.getAttribute('data-lazyload');\r\n element.setAttribute('src',lazydata);\r\n });\r\n } else {\r\n setMediaImages();\r\n }\r\n });\r\n\r\n //====> if its in first view <=====//\r\n var newResault = Tornado.inView(element);\r\n if (newResault && !sliderDetact) setMediaImages();\r\n\r\n //===> Done <===//\r\n element.classList.add('lldone');\r\n });\r\n },\r\n\r\n //======> Sticky Elements <======//\r\n \"sticky\" : (selector) => {\r\n //====> Check if Selector or Element <====//\r\n typeof(selector) === 'object' ? selector = [selector] : selector = Tornado.getElements(selector || '[data-sticky]');\r\n //====> Selector Handler <====//\r\n selector.forEach(element => {\r\n if(element.classList.contains('stdone')) return;\r\n //=== Calculate Offset ===//\r\n var elementTop = element.offsetTop;\r\n //=== On Window Scroll ===//\r\n window.addEventListener('scroll', event => {\r\n //==== if the Postion Less Then 50 Add Extra 10 pixels ====//\r\n if (elementTop < 50) { elementTop = element.offsetTop+10; }\r\n //==== if the Element Hit the Top Toggle Class ====//\r\n if (window.scrollY >= elementTop) {\r\n element.classList.add('is-sticky');\r\n } else {\r\n element.classList.remove('is-sticky');\r\n }\r\n });\r\n //===> Done <===//\r\n element.classList.add('stdone');\r\n });\r\n },\r\n\r\n //======> Animations Pattrens <======//\r\n \"animation\" : {\r\n \"ease\" : (t, b, c, d) => {\r\n t /= d / 2;\r\n if (t < 1) return c / 2 * t * t + b;\r\n t--;\r\n return -c / 2 * (t * (t - 2) - 1) + b;\r\n } \r\n },\r\n\r\n //======> Smoth Scroll <======//\r\n \"smothScroll\" : (options) => {\r\n //====> Check if Selector or Element <====//\r\n let selector = options.selector;\r\n typeof(selector) === 'object' ? options.selector = [selector] : options.selector = Tornado.getElements(selector || '.smoth-scroll');\r\n //====> Selector Handler <====//\r\n options.selector.forEach(element => {\r\n if(element.classList.contains('tssdone')) return;\r\n element.addEventListener('click', event => {\r\n event.preventDefault();\r\n\r\n //====> get the Target and its Options <====//\r\n var scrollTarget = element.getAttribute('href') || element.getAttribute('data-target'),\r\n duration = options.duration || element.getAttribute('data-duration') || 1000,\r\n target = Tornado.getElement(options.target || scrollTarget),\r\n startTime = null,\r\n targetPosition = target.getBoundingClientRect().top,\r\n startPosition = window.pageYOffset || window.scrollY;\r\n\r\n //====> Scroll Animation <====//\r\n function smothlyScroll(currentTime) {\r\n if (startTime === null) startTime = currentTime;\r\n var timeElapsed = currentTime - startTime,\r\n scrollToTarget = Tornado.animation.ease(timeElapsed, startPosition, targetPosition, duration);\r\n window.scrollTo(0, scrollToTarget);\r\n if (timeElapsed < duration) requestAnimationFrame(smothlyScroll);\r\n }\r\n\r\n requestAnimationFrame(smothlyScroll);\r\n });\r\n //===> Done <===//\r\n element.classList.add('tssdone');\r\n });\r\n },\r\n\r\n //======> ScrollSpy <======//\r\n \"scrollSpy\" : (options) => {\r\n //====> Check if Selector or Element <====//\r\n let selector = options.selector;\r\n typeof(selector) === 'object' ? selector = [selector] : selector = Tornado.getElements(selector);\r\n //====> Scroll Spy Elements <====//\r\n selector.forEach(element => {\r\n if(element.classList.contains('ssdone')) return;\r\n //===> Get Children <===//\r\n element.querySelectorAll('[href],[data-target]').forEach(element => {\r\n Tornado.smothScroll({\r\n element:element,\r\n duration:options.duration,\r\n });\r\n //====> get the Target <====//\r\n var scrollTarget = options.target || element.getAttribute('href') || element.getAttribute('data-target'),\r\n selectedTarget = Tornado.getElement(scrollTarget),\r\n targetOffset = selectedTarget.offsetTop - 100,\r\n parentDetactor = element.parentNode;\r\n //====> Scroll Event <====//\r\n window.addEventListener('scroll', event => {\r\n //====> if the position of the section less then the current position <====//\r\n if (window.scrollY >= targetOffset) {\r\n //====> Add Class Active <====//\r\n if (parentDetactor.matches('li')) {\r\n var otherSiblings = Tornado.getSiblings({element:parentDetactor});\r\n parentDetactor.classList.add('active');\r\n otherSiblings.forEach(element => element.classList.remove('active'))\r\n } else if (element.hasAttribute('data-target') || element.hasAttribute('href')) {\r\n element.classList.add('active');\r\n var spySiblings = Tornado.getSiblings({element:element});\r\n spySiblings.forEach(element => element.classList.remove('active'));\r\n } else {\r\n var otherSiblings = Tornado.getSiblings({element:element});\r\n element.classList.add('active');\r\n otherSiblings.forEach(element => element.classList.remove('active'));\r\n }\r\n } else {\r\n //====> Remove Class Active <====//\r\n if (parentDetactor.matches('li')) {\r\n var otherSiblings = Tornado.getSiblings({element:parentDetactor});\r\n parentDetactor.classList.remove('active');\r\n } else if (element.hasAttribute('data-target')) {\r\n element.classList.remove('active');\r\n } else {\r\n var parent = element.parentNode;\r\n parent.classList.remove('active');\r\n }\r\n }\r\n });\r\n });\r\n //===> Done <===//\r\n element.classList.add('ssdone');\r\n });\r\n },\r\n\r\n //=====> Event Date Counter <=====//\r\n \"dateCounter\" : (options) => {\r\n //====> Check if Selector or Element <====//\r\n let selector = options.selector;\r\n typeof(selector) === 'object' ? selector = [selector] : selector = Tornado.getElements(selector || '.date-counter');\r\n //====== Get Element and its Data =======//\r\n selector.forEach(timerWraper => {\r\n if(timerWraper.classList.contains('dcdone')) return;\r\n var timerSeconds = timerWraper.querySelector('.seconds'),\r\n timerMinutes = timerWraper.querySelector('.minutes'),\r\n timerHours = timerWraper.querySelector('.hours'),\r\n timerDays = timerWraper.querySelector('.days'),\r\n timerDate = options.date || timerWraper.getAttribute('data-date'),\r\n countDownDate = new Date(timerDate).getTime();\r\n //========> Update the count down every 1 second <========//\r\n var updateCount = setInterval(function () {\r\n //=======> Get today's date and time <========//\r\n var now = new Date().getTime();\r\n //=======> Find the distance between now and the count down date <========//\r\n var distance = countDownDate - now;\r\n //=======> Time calculations for days, hours, minutes and seconds <========//\r\n var days = Math.floor(distance / (1000 * 60 * 60 * 24));\r\n var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));\r\n var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));\r\n var seconds = Math.floor((distance % (1000 * 60)) / 1000);\r\n //=======> Display the result in the elements <========//\r\n timerSeconds.innerHTML = seconds;\r\n timerMinutes.innerHTML = minutes;\r\n timerHours.innerHTML = hours;\r\n timerDays.innerHTML = days;\r\n\r\n // If the count down is finished, write some text\r\n if (distance < 0) {\r\n clearInterval(updateCount);\r\n if(Tornado.direction('page') == 'ltr') {\r\n timerWraper.innerHTML = \"
This Event has been Expired!
\";\r\n } else {\r\n timerWraper.innerHTML = \"
لقد انتهي هذا العرض!
\";\r\n }\r\n }\r\n }, 1000);\r\n //===> Done <===//\r\n timerWraper.classList.add('dcdone');\r\n });\r\n },\r\n\r\n //=====> Dropdown Button <=====//\r\n \"dropdown\" : selector => {\r\n //====> Check if Selector or Element <====//\r\n typeof(selector) === 'object' ? selector = [selector] : selector = Tornado.getElements(selector);\r\n //===> Dropdown Buttons <===//\r\n selector.forEach(element => {\r\n if(element.classList.contains('dd-done')) return;\r\n //=====> Accessibility <=====//\r\n Tornado.setAttributes(element,{\r\n \"tabindex\":0,\r\n \"role\":\"button\",\r\n \"aria-pressed\":\"false\",\r\n });\r\n\r\n //===> When Click on the Button <===//\r\n element.addEventListener('click', event => {\r\n //==> Prevent Default Behavor <==//\r\n event.preventDefault();\r\n //===> Deactivate Other <===//\r\n Tornado.getElement('.dropdown.active')?.classList.remove('active');\r\n //===> Activat Button and List <===//\r\n Tornado.parentsUntil(event.target,'.dropdown')?.classList.add('active');\r\n });\r\n\r\n //===> Deactivate on Blank <===//\r\n window.onclick = blank => {\r\n if (!blank.target.matches('.dropdown') && !blank.target.matches('.dropdown *')) {\r\n Tornado.getElements('.dropdown.active').forEach(close => close.classList.remove('active'));\r\n }\r\n };\r\n\r\n //===> Done <===//\r\n element.classList.add('dd-done');\r\n });\r\n },\r\n\r\n //=====> TNS Slider Method <=====//\r\n \"slider\" : (selector, options?) => {\r\n //====> Check if Selector or Element <====//\r\n typeof(selector) === 'object' ? selector = [selector] : selector = Tornado.getElements(selector);\r\n\r\n //====> Default Options <====//\r\n if(!options) options = {};\r\n if(!options.hasOwnProperty('autoplay')) options.autoplay = true;\r\n if(!options.hasOwnProperty('hoverPause')) options.hoverPause = true;\r\n if(!options.hasOwnProperty('controls')) options.controls = true; \r\n if(!options.hasOwnProperty('infinite')) options.infinite = true;\r\n if(!options.hasOwnProperty('arrowKeys')) options.arrowKeys = true;\r\n if(!options.hasOwnProperty('mouseDrag')) options.mouseDrag = true; \r\n if(!options.hasOwnProperty('touch')) options.touch = true;\r\n\r\n //====> Sliders Array <====//\r\n var sliders = [];\r\n\r\n //====> For Each Slider <====//\r\n selector.forEach(element => {\r\n //=====> Flow Direction Set <=====//\r\n var sliderDirection = options?.direction || false;\r\n if(!sliderDirection && Tornado.direction('page') == 'ltr') sliderDirection = \"forward\";\r\n if(!sliderDirection && Tornado.direction('page') == 'rtl') sliderDirection = \"backward\";\r\n\r\n //=====> Responsive Handler <=====//\r\n var responsiveHandler:any = {\r\n 576 : options?.responsive?.small || {},\r\n 768 : options?.responsive?.medium || {},\r\n 1200 : options?.responsive?.large || {},\r\n 1366 : options?.responsive?.xlarge || {},\r\n };\r\n\r\n if (!options?.responsive) responsiveHandler = false;\r\n\r\n //=====> Get Slider Options <=====//\r\n var TnOptions:object = {\r\n container : element,\r\n //===> Items Options <===//\r\n items : options.items || 1, //===> Display Slides Count\r\n slideBy : options.slideBy || 1, //===> Change Slide Steps\r\n autoWidth : options.autoWidth || false, //===> Adaptive Width from Each Item\r\n autoHeight : options.autoHeight || false, //===> Adaptive Height from Each Item\r\n center : options.center || false, //===> Center the Active Slide\r\n responsive : responsiveHandler || false, //===> Responsive Options\r\n //===> Autoplay Options <===//\r\n autoplay : options.autoplay, //===> Autoplay Support\r\n autoplayTimeout : options.duration || 6000, //===> Autoplay Duration\r\n autoplayHoverPause : options.hoverPause, //===> Pause on Hover\r\n autoplayButton : options.playButton || false, //===> Show Play Button\r\n //===> Controls Options <===//\r\n nav : options.pagination || false, //===> Show Dots Pagination\r\n navContainer : options.navContainer || false, //===> Define Pagination Container\r\n controls : options.controls, //===> Show Arrows\r\n controlsContainer : options.controlsContainer || false, //===> Define Arrows Container\r\n //===> Animations Options <===//\r\n mode : options.animation || \"carousel\", //===> Animation Mode [carousel, gallery]\r\n speed : options.speed || 700, //===> Animation Speed\r\n axis : options.flow || \"horizontal\", //===> Slider Flow\r\n animateIn : options.animateIn || \"tns-fadeIn\", //===> Inter Animation Class\r\n animateOut : options.animateOut || \"tns-fadeOut\", //===> Outer Animation Class\r\n animateDelay : options.animateDelay || false, //===> Animation Delay\r\n animateNormal : options.animateNormal || \"tns-normal\", //===> Default Animation Class\r\n //===> Other Options <===//\r\n mouseDrag : options.mouseDrag,\r\n touch : options.touch,\r\n swipeAngle : options.swipeAngle || 30,\r\n nested : options.nested || false,\r\n loop : options.infinite,\r\n arrowKeys : options.arrowKeys,\r\n rewind : options.rewind || false,\r\n fixedWidth : options.fixedWidth || false,\r\n viewportMax : options.viewportMax || false,\r\n onInit : options.onInit || false,\r\n controlsText : options.controlsText || ['',''],\r\n autoplayText : options.autoplayText || ['',''],\r\n autoplayDirection : sliderDirection,\r\n navAsThumbnails : options.navAsThumbnails || false,\r\n autoplayButtonOutput : options.playButton || false,\r\n }\r\n\r\n //=====> Create The Slider <=====//\r\n var TnSlider = tns(TnOptions);\r\n\r\n //=====> Return The Slider <=====//\r\n if(TnSlider) sliders.push(TnSlider);\r\n\r\n //====> Adding Uniuqe Class to Slider Wraper <====//\r\n if(options?.uniuqClass) element.closest('.tns-outer')?.classList.add(`${options.uniuqClass}`);\r\n\r\n //====> Fix Grid Mode <====//\r\n if (element.classList.contains('row')) element.closest('.tns-outer')?.classList.add(`grid-mode`);\r\n });\r\n\r\n return sliders;\r\n },\r\n\r\n //=====> Tabs Method <=====//\r\n \"tabs\" : (selector, options?) => {\r\n //====> Check if Selector or Element <====//\r\n typeof(selector) === 'object' ? selector = [selector] : selector = Tornado.getElements(selector);\r\n\r\n //=====> Tabs Options <=====//\r\n var Options = {\r\n active : options?.active || 0, //===> Activate Tab on init by [ index || ID ]\r\n hashOpen : options?.hashOpen || true, //===> Activate Tab by URL Hash [true || false]\r\n onChange : options?.onChange || function (btn?, tab?, func?) { return func; }, //===> On Tab Change Call Back Function\r\n onShow : options?.onShow || function (btn?, tab?, func?) { return func; }, //===> On Tab Shows Call Back Function\r\n onHide : options?.onHide || function (btn?, tab?, func?) { return func; }, //===> On Tab Hide Call Back Function\r\n }\r\n\r\n //=====> Activate Handler <=====//\r\n const TabActivate = element => {\r\n //====> get First Tab Id <====//\r\n var firstTab = element.matches('*:first-child') ? element.getAttribute('data-tab' || 'href') : null;\r\n\r\n //====> get the ID from Options <====//\r\n if (typeof(Options.active) == 'number') {\r\n //====> get the ID <====//\r\n firstTab = element.matches(`*:nth-child(${Options.active+1})`) ? element.getAttribute('data-tab' || 'href') : null;\r\n } else if (typeof(Options.active) == 'string') {\r\n //====> get the ID <====/\r\n firstTab = Options.active;\r\n }\r\n\r\n //====> get the ID from Url <====//\r\n if(Options.hashOpen) if (window.location.hash.substr(1)) firstTab = window.location.hash.substr(1);\r\n\r\n if (firstTab) {\r\n //====> Cleanup the ID <====//\r\n firstTab = firstTab.replace(/#/g, \"\");\r\n //====> Activate the Tab <====//\r\n Tornado.getElement(`#${firstTab}`)?.classList.add('active');\r\n Tornado.getElement(`[data-tab=\"${firstTab}\"]` || `a[href=\"#${firstTab}\"]`)?.classList.add('active');\r\n }\r\n };\r\n\r\n //=====> for Each Tab Button <=====//\r\n selector.forEach((element,index) => {\r\n //====> if Ts is Done Return no thing <====//\r\n if(element.classList.contains('tbdone')) return;\r\n\r\n //=====> Activate Tab <=====//\r\n TabActivate(element);\r\n\r\n //=====> Accessibility <=====//\r\n Tornado.setAttributes(element,{\r\n \"tabindex\":0,\r\n \"role\":\"button\",\r\n \"aria-pressed\":\"false\",\r\n });\r\n\r\n //=====> Tabs Change Handler <=====//\r\n element.addEventListener('click', event => {\r\n //====> get the Tab <====//\r\n var panelID = element.getAttribute('data-tab' || 'href'),\r\n thePanel = Tornado.getElement(`#${panelID.replace(/#/g, \"\")}`);\r\n\r\n //====> on Change Function <====//\r\n if(Options.onChange) Options.onChange(element,thePanel);\r\n\r\n //====> De-Activate Siblings <====//\r\n Tornado.getSiblings({element:element, filter:'.active'}).forEach(sibling => {\r\n //====> De-Activated Sibling <====//\r\n sibling.classList.remove('active');\r\n //====> Hide Activated Sibling Panel <====//\r\n var sibPanel = sibling.getAttribute('data-tab' || 'href');\r\n sibPanel = Tornado.getElement(`#${sibPanel.replace(/#/g, \"\")}`);\r\n sibPanel?.classList.remove('active');\r\n //====> on Hide Function <====//\r\n if(Options.onHide) Options.onHide(sibling,sibPanel);\r\n });\r\n\r\n //====> Activate Current Tab <====//\r\n element.classList.add('active');\r\n thePanel.classList.add('active');\r\n\r\n //====> on Shows Function <====//\r\n if(Options.onShow) Options.onShow(element,thePanel);\r\n });\r\n\r\n //====> Done <====//\r\n element.classList.add('tbdone');\r\n });\r\n },\r\n\r\n //=====> Accordion <=====//\r\n \"accordion\" : (selector, options?) => {\r\n //====> Check if Selector or Element <====//\r\n typeof(selector) === 'object' ? selector = [selector] : selector = Tornado.getElements(selector);\r\n\r\n //=====> Accordion Options <=====//\r\n var Options = {\r\n onChange : options?.onChange || function (btn?, panel?, func?) { return func; }, //===> On Panel Change Call Back Function\r\n onShow : options?.onHide || function (btn?, panel?, func?) { return func; }, //===> On Panel Shows Call Back Function\r\n onHide : options?.onShow || function (btn?, panel?, func?) { return func; }, //===> On Panel Hide Call Back Function\r\n }\r\n\r\n //======> Accordion Trigger <======//\r\n selector.forEach(element => {\r\n //====> if Ts is Done Return no thing <====//\r\n if(element.classList.contains('acdone')) return;\r\n\r\n //====> Store Playable Elements <====//\r\n var nextPanel = Tornado.getNextSibling({element:element, filter:'.accordion-content'}),\r\n thisParent = Tornado.parentsUntil(element, '.accordion-item');\r\n\r\n //=====> Accessibility <=====//\r\n Tornado.setAttributes(element,{\r\n \"tabindex\":0,\r\n \"role\":\"button\",\r\n \"aria-pressed\":\"false\",\r\n });\r\n\r\n //====> Activate First Accordion <====//\r\n if(thisParent.matches('.accordion-item:first-child')) {\r\n if(!Tornado.parentsUntil(element, '.accordion')?.querySelector('.active')) {\r\n thisParent.classList.add('active');\r\n }\r\n }\r\n\r\n //====> Accordion Handler <====//\r\n element.addEventListener('click', event => {\r\n event.preventDefault();\r\n \r\n //==== Check if the Clicked Button is Activated or Not ====//\r\n if (thisParent.classList.contains('active')) {\r\n //==== Deactivate Clicked Accordion if its Activated ====//\r\n thisParent.classList.remove('active');\r\n //==== Close the Panel ====//\r\n Tornado.slideUp(nextPanel,300);\r\n //====> on Hide Function <====//\r\n if(Options.onHide) Options.onHide(element, nextPanel);\r\n } else {\r\n //==== Close Siblings Panels ====//\r\n Tornado.getSiblings({element:thisParent}).forEach((sibling:any) => {\r\n //==== Close Other Activated Siblings ====//\r\n sibling.classList.remove('active');\r\n var siblingPanel = sibling.querySelector('.accordion-content');\r\n //==== Close Siblings Panels ====//\r\n if (siblingPanel) Tornado.slideUp(siblingPanel,300);\r\n });\r\n //==== Open the Panel ====//\r\n Tornado.slideDown(nextPanel,300);\r\n //==== Deactivate Clicked Accordion if its Activated ====//\r\n thisParent.classList.add('active');\r\n //====> on Shows Function <====//\r\n if(Options.onShow) Options.onChange(element, nextPanel);\r\n }\r\n\r\n //====> on Change Function <====//\r\n if(Options.onChange) Options.onChange(element, nextPanel);\r\n });\r\n\r\n //====> Done <====//\r\n element.classList.add('acdone');\r\n });\r\n },\r\n\r\n //=====> Popup Modals <=====//\r\n \"popup\" : (selector, options?) => {\r\n //====> Check if Selector or Element <====//\r\n typeof(selector) === 'object' ? selector = [selector] : selector = Tornado.getElements(selector);\r\n \r\n //=====> Tabs Options <=====//\r\n var Options = {\r\n hashOpen : options?.hashOpen || true, //===> Activate Tab by URL Hash [true || false]\r\n onShow : options?.onShow || function (trigger?, popup?, func?) { return func; }, //===> On Tab Shows Call Back Function\r\n onHide : options?.onHide || function (trigger?, popup?, func?) { return func; }, //===> On Tab Hide Call Back Function\r\n }\r\n \r\n selector.forEach(element => {\r\n //====> if Ts is Done Return no thing <====//\r\n if(element.classList.contains('pmdone')) return;\r\n \r\n //=====> Get Popup Data <=====//\r\n var theID = element.getAttribute('id');\r\n \r\n /*=====> Create Overlay Trigger <=====*/\r\n element.insertAdjacentHTML('afterbegin', '');\r\n \r\n //=====> Open by URL <=====//\r\n if (Options.hashOpen) {\r\n var urlHash = window.location.hash.substr(1);\r\n if (urlHash == theID) element.classList.add('active');\r\n //====> on Shows Function <====//\r\n if(Options.onShow) Options.onShow(null, element);\r\n }\r\n \r\n //=====> Activate Triggers <=====///\r\n Tornado.getElements(`*[data-modal=\"${theID}\"]`)?.forEach(trigger => {\r\n //=====> Accessibility <=====//\r\n Tornado.setAttributes(trigger,{\r\n \"tabindex\":0,\r\n \"role\":\"button\",\r\n \"aria-pressed\":\"false\",\r\n });\r\n //====> Trigger Handler <====//\r\n trigger.addEventListener('click', event => {\r\n event.preventDefault();\r\n //==== Open the Modal ====//\r\n Tornado.getElement(`#${theID}`).classList.add('active');\r\n //====> on Shows Function <====//\r\n if(Options.onShow) Options.onShow(event.target, element);\r\n })\r\n });\r\n \r\n //=====> Activate Overlay Trigger <=====//\r\n element.querySelector('.modal-overlay')?.addEventListener('click', event => {\r\n event.preventDefault();\r\n //==== Close the Modal ====//\r\n event.target.parentNode.classList.remove('active');\r\n //====> on Hide Function <====//\r\n if(Options.onHide) Options.onShow(null , element);\r\n });\r\n \r\n //=====> Activate Close Triggers <=====///\r\n element.querySelectorAll('.close-modal').forEach(trigger => {\r\n trigger.addEventListener('click', event => {\r\n event.preventDefault();\r\n //==== Close the Modal ====//\r\n trigger.closest('.modal-box').classList.remove('active');\r\n //====> on Hide Function <====//\r\n if(Options.onHide) Options.onShow(event.target , element);\r\n });\r\n });\r\n \r\n //====> Done <====//\r\n element.classList.add('pmdone');\r\n });\r\n },\r\n\r\n //=====> Lightbox Modal <=====//\r\n \"lightbox\" : selector => {\r\n //====> Check if Selector or Element <====//\r\n typeof(selector) === 'object' ? selector = [selector] : selector = Tornado.getElements(selector);\r\n\r\n //====> Create Lightbox <====//\r\n if(selector.length >= 1) {\r\n //====> Lightbox Markup <====//\r\n document.body.insertAdjacentHTML('beforeend', `\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n `);\r\n\r\n //====> Lightbox Data <====//\r\n var lightbox = Tornado.getElement('#lightbox-modal'),\r\n lightContent = lightbox.querySelector('.modal-content'),\r\n lightSlider = lightContent.querySelector('.lightbox-slider');\r\n\r\n //====> Overlay Trigger <====//\r\n lightbox.querySelector('.modal-overlay')?.addEventListener('click', event => {\r\n event.target.parentNode.classList.remove('active');\r\n lightbox.querySelector('.modal-content').innerHTML = '
';\r\n lightSlider = lightbox.querySelector('.lightbox-slider');\r\n });\r\n }\r\n\r\n //====> for Each Lightbox <=====//\r\n selector.forEach(element => {\r\n //====> if Ts is Done Return no thing <====//\r\n if(element.classList.contains('lbdone')) return;\r\n\r\n //====> Lightbox Handler <====//\r\n element.addEventListener('click', event => {\r\n event.preventDefault();\r\n //====> Images Data <====//\r\n var group = element.getAttribute('data-group'),\r\n images = [];\r\n //====> Group Build <====//\r\n if(element.hasAttribute('data-group')) {\r\n //====> get All Related Images <====//\r\n Tornado.getElements(`[data-group=\"${group}\"]`)?.forEach(img => {\r\n //====> get the Image <====//\r\n images.push(img.getAttribute('data-lightbox'));\r\n //====> Create the Image <====//\r\n images.forEach(image => {\r\n Tornado.appendIn(`
\"original
`, lightSlider);\r\n });\r\n });\r\n //====> Build the Slider <====//\r\n var lightSlide = Tornado.slider(lightSlider, {\r\n autoWidth : false,\r\n autoHeight : true,\r\n autoplay : false,\r\n pagination : false,\r\n });\r\n } else {\r\n images.push(element.getAttribute('data-lightbox'));\r\n //====> Create the Image <====//\r\n images.forEach(image => {\r\n Tornado.appendIn(`
\"original
`, lightSlider);\r\n });\r\n }\r\n //====> Show the Lightbox <====//\r\n lightbox.classList.add('active');\r\n //====> Clear Loading <====//\r\n lightSlider.querySelectorAll('img')?.forEach(img => {\r\n //====> Size Data <====//\r\n var firstWidth = lightSlider.querySelector('.item img').clientWidth,\r\n parentTns = Tornado.parentsUntil(lightSlider, '.tns-outer');\r\n //====> Images Load <====//\r\n img.onload = () => {\r\n img.parentNode.style.backgroundImage = null;\r\n img.clientWidth > firstWidth ? firstWidth = img.clientWidth : null;\r\n //====> Resize <====//\r\n if(firstWidth < window.innerWidth && parentTns) parentTns.style.width = firstWidth+'px';\r\n };\r\n });\r\n });\r\n\r\n //====> Done <====//\r\n element.classList.add('lbdone');\r\n });\r\n },\r\n\r\n //=====> Design Options <=====//\r\n \"design\" : options => {\r\n //====> Fonts Loader <====//\r\n let fontLoader = () => {\r\n var fonts = [];\r\n //===> LTR Fonts <===//\r\n if (options?.font?.include && Tornado.direction('page') == 'ltr') options.font.include.forEach(font => fonts.push(``));\r\n //===> RTL Fonts <===//\r\n if (options?.font?.rtl?.include && Tornado.direction('page') == 'rtl') options.font.rtl.include.forEach(font => fonts.push(``));\r\n //===> Return Fonts Links <===//\r\n return fonts;\r\n }\r\n //====> Colors Options <====//\r\n var colorsOptions = `\r\n /*======== Backgrounds ========*/\r\n ${options?.colors?.background? `--body-bg :${options?.colors?.background}`:''};\r\n /*======== Primary ========*/\r\n ${options?.colors?.primary? `--primary-color:${options?.colors?.primary}`:''};\r\n ${options?.colors?.primaryHover? `--primary-hover:${options?.colors?.primaryHover}`:''};\r\n ${options?.colors?.primaryReverse? `--primary-reverse:${options?.colors?.primaryReverse}`:''};\r\n /*======== Secondary ========*/\r\n ${options?.colors?.secondary? `--secondary-color:${options?.colors?.secondary}`:''};\r\n ${options?.colors?.secondaryHover? `--secondary-hover:${options?.colors?.secondaryHover}`:''};\r\n ${options?.colors?.secondaryReverse? `--secondary-reverse:${options?.colors?.secondaryReverse}`:''};\r\n /*======== Assets Colors ========*/\r\n ${options?.colors?.info? `--info-color:${options?.colors?.info}`:''};\r\n ${options?.colors?.gray? `--gray-color:${options?.colors?.gray}`:''};\r\n ${options?.colors?.dark? `--dark-color:${options?.colors?.dark}`:''};\r\n ${options?.colors?.success? `--success-color:${options?.colors?.success}`:''};\r\n ${options?.colors?.danger? `--danger-color:${options?.colors?.danger}`:''};\r\n ${options?.colors?.warning? `--warning-color:${options?.colors?.warning}`:''};\r\n ${options?.colors?.disable? `--disable-color:${options?.colors?.disable}`:''};\r\n /*======== Assets Light ========*/\r\n ${options?.colors?.infoLight? `--info-light:${options?.colors?.infoLight}`:''};\r\n ${options?.colors?.grayLight? `--gray-light:${options?.colors?.grayLight}`:''};\r\n ${options?.colors?.darkLight? `--dark-light:${options?.colors?.darkLight}`:''};\r\n ${options?.colors?.successLight? `--success-light:${options?.colors?.successLight}`:''};\r\n ${options?.colors?.dangerLight? `--danger-light:${options?.colors?.dangerLight}`:''};\r\n ${options?.colors?.warningLight? `--warning-light:${options?.colors?.warningLight}`:''};\r\n /*======== Typography Colors ========*/\r\n ${options?.colors?.headlines? `--headlines-color:${options?.colors?.headlines}`:''};\r\n ${options?.colors?.typography? `--typography-color:${options?.colors?.typography}`:''};\r\n ${options?.colors?.lightReverse? `--light-reverse:${options?.colors?.lightReverse}`:''};\r\n ${options?.colors?.darkReverse? `--dark-reverse:${options?.colors?.darkReverse}`:''};\r\n `;\r\n //====> RTL Handler <====//\r\n var rtlFont = () => {\r\n if(options?.font?.rtl && Tornado.direction('page') == 'rtl') {\r\n options?.font?.rtl.primary? options.font.primary = options.font.rtl.primary : '';\r\n options?.font?.rtl.secondary? options.font.primary = options.font.rtl.secondary : '';\r\n options?.font?.rtl.normalWeight? options.font.normalWeight = options.font.rtl.normalWeight:'';\r\n options?.font?.rtl.mediumWeight? options.font.mediumWeight = options.font.rtl.mediumWeight:'';\r\n options?.font?.rtl.strongWeight? options.font.strongWeight = options.font.rtl.strongWeight:'';\r\n } else {return '';}\r\n }\r\n //====> Font Options <====//\r\n var fontOptions = `\r\n /*=====> RTL Fonts <=====*/\r\n ${rtlFont()}\r\n /*=====> Font Famileis <=====*/\r\n ${options?.font?.primary? `--primary-font:${options.font.primary}`:''};\r\n ${options?.font?.secondary? `--secondary-font:${options.font.secondary}`:''};\r\n ${options?.font?.icons? `--icons-font:${options.font.icons}`:''};\r\n /*=====> Font Sizes <=====*/\r\n ${options?.font?.size? `--base-l-size:${options.font.size}`:''};\r\n ${options?.font?.sizeMedium? `--base-m-size:${options.font.sizeMedium}`:''};\r\n ${options?.font?.sizeSmall? `--base-s-size:${options.font.sizeSmall}`:''};\r\n /*=====> Line-Height <=====*/\r\n ${options?.font?.lineHeight? `--line-height:${options.font.lineHeight}`:''};\r\n /*=====> Font Weights <=====*/\r\n ${options?.font?.normalWeight? `--normal-weight:${options.font.normalWeight}`:''};\r\n ${options?.font?.mediumWeight? `--medium-weight:${options.font.mediumWeight}`:''};\r\n ${options?.font?.strongWeight? `--strong-weight:${options.font.strongWeight}`:''};\r\n `;\r\n //====> Forms Options <====//\r\n var formOptions = `\r\n ${options?.forms?.background? `--forms-bg:${options.forms.background}`:''};\r\n ${options?.forms?.typography? `--forms-color:${options.forms.typography}`:''};\r\n ${options?.forms?.edgeRadius? `--forms-radius:${options.forms.edgeRadius}`:''};\r\n ${options?.forms?.border? `--forms-border:${options.forms.border}`:''};\r\n ${options?.forms?.darkerBG? `--forms-darker-bg:${options.forms.darkerBG}`:''};\r\n ${options?.forms?.alertColor? `--forms-alert:${options.forms.alertColor}`:''};\r\n ${options?.forms?.height? `--forms-height:${options.forms.height}`:''};\r\n ${options?.forms?.heightS? `--forms-height-small:${options.forms.heightS}`:''};\r\n ${options?.forms?.heightL? `--forms-height-large:${options.forms.heightL}`:''};\r\n ${options?.forms?.textArea? `--forms-height-txarea:${options.forms.textArea}`:''};\r\n ${options?.forms?.padding? `--forms-padding:${options.forms.padding}`:''};\r\n ${options?.forms?.paddingL? `--forms-padding-large:${options.forms.paddingL}`:''};\r\n ${options?.forms?.gutter? `--forms-gutter:${options.forms.gutter}`:''};\r\n ${options?.forms?.shadow? `--forms-shadow:${options.forms.shadow}`:''};\r\n ${options?.forms?.btnShadow? `--forms-btns-shadow:${options.forms.btnShadow}`:''};\r\n `\r\n //====> Components Options <====//\r\n var tablesOptions = `\r\n ${options?.tables?.background? `--table-background:${options.tables.background}`:''};\r\n ${options?.tables?.padding? `--table-padding:${options.tables.padding}`:''};\r\n ${options?.tables?.border? `--table-border:${options.tables.border}`:''};\r\n ${options?.tables?.headBG? `--table-head-bg:${options.tables.headBG}`:''};\r\n ${options?.tables?.stripedBG? `--table-striped:${options.tables.stripedBG}`:''};\r\n `\r\n //====> Components Options <====//\r\n var componentsOps = `\r\n ${options?.components?.background? `--component-background:${options.components.background}`:''};\r\n ${options?.components?.darkerBg? `--component-darker-bg:${options.components.darkerBg}`:''};\r\n ${options?.components?.color? `--component-color:${options.components.color}`:''};\r\n ${options?.components?.activeBg? `--component-active-bg:${options.components.activeBg}`:''};\r\n ${options?.components?.activeColor? `--component-active-color:${options.components.activeColor}`:''};\r\n ${options?.components?.border? `--component-border:${options.components.border}`:''};\r\n ${options?.components?.edgeRadius? `--component-radius:${options.components.edgeRadius}`:''};\r\n ${options?.components?.padding? `--component-padding:${options.components.padding}`:''};\r\n ${options?.components?.shadow? `--component-shadow:${options.components.shadow}`:''};\r\n `\r\n //====> Markup <====//\r\n var designOptions = `\r\n \r\n ${fontLoader()}`;\r\n //====> Activate Options <====//\r\n document.head.querySelector('#tornado-design-options')?.remove();\r\n if(options?.font?.include || options?.font?.rtl?.include) document.head.querySelectorAll('.tornado-fonts').forEach(del => del.remove());\r\n document.head.insertAdjacentHTML('beforeend',designOptions);\r\n },\r\n\r\n //=====> Theme Switcher <=====//\r\n \"themeSwitcher\" : (selector,themes) => {\r\n //====> Check if Selector or Element <====//\r\n typeof(selector) === 'object' ? selector = [selector] : selector = Tornado.getElements(selector);\r\n\r\n //====> Cookies Handler <====//\r\n var cookiesOutput = {},\r\n cookiesHandler = (cookies) => {\r\n cookiesOutput = {};\r\n //====> Cookies Handler <====//\r\n cookies.split(/\\s*;\\s*/).forEach((pair:any) => {\r\n pair = pair.split(/\\s*=\\s*/);\r\n cookiesOutput[pair[0]] = pair.splice(1).join('=');\r\n });\r\n };\r\n\r\n //====> Set Default <====//\r\n if(themes['default']) {\r\n cookiesHandler(document.cookie);\r\n //===> if it has Options <===//\r\n if (cookiesOutput['tornado-theme']) {\r\n Tornado.design(JSON.parse(cookiesOutput['tornado-theme']));\r\n } else {\r\n document.cookie = `tornado-theme=${JSON.stringify(themes['default'])} ;path=/`;\r\n cookiesHandler(document.cookie);\r\n Tornado.design(JSON.parse(cookiesOutput['tornado-theme']));\r\n }\r\n }\r\n\r\n //====> for Each Switch <=====//\r\n selector.forEach(element => {\r\n //====> if Ts is Done Return no thing <====//\r\n if(element.classList.contains('tsd-done')) return;\r\n\r\n //====> Lightbox Handler <====//\r\n element.addEventListener('click', event => {\r\n event.preventDefault();\r\n //===> Get Theme <===//\r\n var themeName = element.getAttribute('data-theme'),\r\n themeOps = themes[themeName];\r\n //====> Set the Theme <====//\r\n if(themeOps) {\r\n //====> Store Theme in Cookies <====//\r\n document.cookie = `tornado-theme=${JSON.stringify(themeOps)};path=/`;\r\n //====> Get the Theme form Cookies <====//\r\n cookiesHandler(document.cookie);\r\n Tornado.design(JSON.parse(cookiesOutput['tornado-theme']));\r\n }\r\n });\r\n\r\n //====> Done <====//\r\n element.classList.add('tsd-done');\r\n });\r\n },\r\n\r\n //=====> Viewport Info <=====//\r\n \"viewport\" : {\r\n \"width\" : () => Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0),\r\n \"height\" : () => Math.max(document.documentElement.clientHeight || 0, window.innerHeight || 0)\r\n }\r\n};\r\n\r\nexport default Tornado;\r\n\r\n//======> Navigation Menu Assets <=======//\r\nimport './Navigation-Menu';\r\nimport Menus from './Navigation-Menu';\r\n\r\n//======> Form UI Component <=======//\r\nimport './Forms';\r\nimport Forms from \"./Forms\";\r\n\r\n//======> DataTable Component <=======//\r\nimport './DataTable';\r\nimport DataTable from \"./DataTable\";\r\n\r\n//=====> Allow Access to Tornado Methods <=====//\r\ndeclare global {interface Window {Tornado: any;}}\r\nwindow.Tornado = window.Tornado || Tornado;\r\nwindow.Tornado.forms = window.Tornado.forms || Forms;\r\nwindow.Tornado.menus = window.Tornado.menus || Menus;\r\nwindow.Tornado.DataTable = window.Tornado.DataTable || DataTable;\r\n\r\n//======> Tornado UI Utilities <=======//\r\nimport './Utilities';\r\n","//======> Import Tornado UI Helpers <=======//\r\nimport Tornado from './Tornado';\r\n\r\n/**======> Referance By Comment <======\r\n * ===> 01 - Form UI Methods\r\n * ===> 02 - Controls Placeholder\r\n * ===> 03 - Control Validation\r\n * ===> 04 - Form Validate\r\n * ===> 05 - File Uploader\r\n * ===> 06 - Progress Component\r\n * ===> 07 - Advanced Select\r\n * ===> 08 - Fix Controls Sizes\r\n * ===> 09 - Advanced Uploader\r\n * ===> 10 - Form Repeater\r\n * ===> 11 - Form Rating Control\r\n * ===> 12 - Tornado Forms Assets\r\n*/\r\n\r\n//=====> Form UI Methods <=====//\r\nconst Forms = {\r\n //=====> Controls Placeholder <=====//\r\n \"placeholder\" : input => {\r\n var currentPlaceholder = input.getAttribute('placeholder');\r\n //====> When Focus In Empty Placeholder <===//\r\n input.addEventListener('focus', event => input.setAttribute('placeholder', ''));\r\n //====> When Focus Out Restore Placeholder <===//\r\n input.addEventListener('blur', event => input.setAttribute('placeholder', currentPlaceholder));\r\n },\r\n //=====> Control Validation <=====//\r\n \"validate\" : selector => {\r\n //==== if it is label return nothing ====//\r\n if (selector.matches('label' || '.success')) return;\r\n //==== Define Data Circle ====//\r\n var mailRegx = /^\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w{2,3})+$/, //====> Email Regx\r\n theValue = selector.value?.toLowerCase(), //====> get Current Value\r\n theType = selector.getAttribute('type'); //====> get Control Type\r\n //==== Error Message ====//\r\n var errorMsg:string = 'This Field is Required Please Fulfill this Field.';\r\n if (Tornado.direction('page') == 'rtl') errorMsg = 'هذا الحقل مطلوب يرجي املاء هذا الحقل.';\r\n //==== Email Error Message ====//\r\n if (theType == 'email' && !mailRegx.test(theValue)) {\r\n errorMsg = 'This Field only accepts Working Email Address';\r\n if (Tornado.direction('page') == 'rtl') errorMsg = 'هذا الحقل لا يقبل الا البريد الالكتروني.';\r\n theValue = null;\r\n }\r\n //==== Validation Process ====//\r\n if (!theValue || theValue == '') {\r\n //==== add Error Class Name ====//\r\n selector.classList.add('error');\r\n //==== if has a Wraper Change Selector to Parent ====//\r\n if (!selector.parentNode.matches('.control-icon' || '.file-input')) selector == selector.parentNode;\r\n //==== if Error not Exist ====//\r\n if (!Tornado.getNextSibling({element:selector,filter:'.control-hint'})) {\r\n //==== Show the Error Message ====//\r\n Tornado.insertAfter(`

${errorMsg}

`, selector);\r\n }\r\n //==== add Has Error the Form ====//\r\n Tornado.parentsUntil(selector, 'form:not(.no-vali)' || '.wp7')?.classList.add('hasErrors');\r\n } else {\r\n //==== Remove Error Class Name ====//\r\n selector.classList.remove('error');\r\n //==== Add Success Class Name ====//\r\n selector.classList.add('success');\r\n //==== if has a Wraper Change Selector to Parent ====//\r\n if (!selector.parentNode.matches('.control-icon' || '.file-input')) selector == selector.parentNode;\r\n //==== Remove the Error Message ====//\r\n Tornado.getNextSibling({element:selector,filter:'.control-hint'}).remove();\r\n //==== Remove Has Error the Form ====//\r\n Tornado.parentsUntil(selector, 'form:not(.no-vali)' || '.wp7')?.classList.remove('hasErrors');\r\n }\r\n },\r\n //======> Form Validate <======//\r\n \"formValidate\" : element => {\r\n //======> on Submit <======//\r\n element.addEventListener('submit', event => {\r\n //======> Define Data for Success Redirect <======//\r\n var checkForRedierct = element.getAttribute('data-success') || event.target.querySelector('[name=\"redirect\"]');\r\n if (checkForRedierct) var formData = new FormData();\r\n //======> Validate The Form Controls <======//\r\n event.target.querySelectorAll('.required,[aria-required=\"true\"],[required]').forEach(element => {\r\n //==== if it is label return nothing ====//\r\n if (element.matches('label' || '.success')) return;\r\n //======> Validate The Control <======//\r\n Forms.validate(element);\r\n //======> Colect Data for Redirect if Exist <======//\r\n if (checkForRedierct) {\r\n if(element.matches('[type=\"file\"]')) {\r\n formData.append(element.getAttribute('name'), element.files[0]);\r\n } else {\r\n formData.append(element.getAttribute('name'), element.value);\r\n }\r\n }\r\n });\r\n //======> if has Error Prevent Submit <======//\r\n if (event.target.matches('.hasErrors')) return event.preventDefault();\r\n //======> Success Redirect if Exist <======//\r\n if (checkForRedierct) {\r\n var theUrl = element.getAttribute('data-success') || event.target.querySelector('[name=\"success-redirect\"]').value,\r\n theAction = element.getAttribute('action'),\r\n theMethod = element.getAttribute('method');\r\n //======> Send Data <======//\r\n fetch(theAction, {method: theMethod,body: formData})\r\n //======> Send Data Error Handler <======//\r\n .then(response => response.json()).catch(error => console.error('Error:', error))\r\n //======> Send Data Success Redirect <======//\r\n .then(response => window.location.href = theUrl);\r\n }\r\n });\r\n },\r\n //=====> File Uploader <=====//\r\n \"fileUploader\" : fileUploader => {\r\n if(fileUploader.classList.contains('fudone')) return;\r\n //====> When Value Change <===//\r\n fileUploader.addEventListener('change', event => {\r\n //===> Get Files Names <===//\r\n var filePath = [];\r\n for (var i = 0; i < fileUploader.files.length; ++i) filePath.push(fileUploader.files[i].name);\r\n //===> Set Files Names <===//\r\n fileUploader.parentNode.setAttribute('data-text',filePath);\r\n });\r\n //===> Done <===//\r\n fileUploader.classList.add('fudone');\r\n },\r\n //=====> Progress Component <=====//\r\n \"progress\" : (selector, options?) => {\r\n //====> Check if Selector or Element <====//\r\n typeof(selector) === 'object' ? selector = [selector] : selector = Tornado.getElements(selector);\r\n\r\n //====> Options <====//\r\n var Options = {\r\n type : options?.type || 'bar',\r\n color : options?.color,\r\n background : options?.background,\r\n }\r\n\r\n //====> for Each Progress <====//\r\n selector.forEach(element => {\r\n //===> get Progress Value <===//\r\n var progressValue = element.getAttribute('data-value');\r\n //===> Create Bar <===//\r\n if (Options.type == 'bar') {\r\n //===> Set Number Position <===//\r\n element.innerHTML = `${progressValue}`;\r\n //===> Set Progress Value <===//\r\n element.querySelector('svg')?.remove();\r\n Tornado.appendIn(``, element);\r\n }\r\n //===> Create Circle <===//\r\n if (Options.type == 'circle') {\r\n //===> Set Number Position <===//\r\n element.innerHTML = `${progressValue}`;\r\n //===> Set Progress Value <===//\r\n element.classList.add('circle');\r\n element.querySelector('svg')?.remove();\r\n var Progress = progressValue.replace(/%/g,'')\r\n Tornado.appendIn(`\r\n \r\n `, element);\r\n }\r\n //===> Create Radial <===//\r\n if (Options.type == 'radial') {\r\n //===> Set Number Position <===//\r\n element.innerHTML = `${progressValue}`;\r\n //===> Set Progress Value <===//\r\n element.classList.add('radial');\r\n element.querySelector('svg')?.remove();\r\n Tornado.appendIn(`\r\n \r\n \r\n `, element);\r\n //===> get Progress Data <===//\r\n var radialMeter = element.querySelector('svg .progress'),\r\n MeterLength = radialMeter.getTotalLength(),\r\n MeterProgress = progressValue.replace(/%/g,''),\r\n MeterCalc = MeterLength * ((100 - MeterProgress) / 100);\r\n //===> Set Progress <===//\r\n radialMeter.style.strokeDashoffset = Math.max(0, MeterCalc); \r\n }\r\n });\r\n },\r\n //=====> Advanced Select <=====//\r\n \"advancedSelect\" : selector => {\r\n //====> Check if Selector or Element <====//\r\n typeof(selector) === 'object' ? selector = [selector] : selector = Tornado.getElements(selector);\r\n //====> Selector Handler <====//\r\n selector.forEach((element, index) => {\r\n if(element.classList.contains('asdone')) return;\r\n //=====> Hide the Original Element <=====//\r\n element.style.display = 'none';\r\n //=====> Select HTML Structure <=====//\r\n var tornadoSelect = `
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n
`;\r\n //=====> Insert the Select after the Orginal Select <=====//\r\n Tornado.insertAfter(tornadoSelect,element);\r\n //=====> Tornado Select Elements <=====//\r\n var selectWraper = Tornado.getNextSibling({element:element,filter:'.tornado-select'}),\r\n Forms = Tornado.parentsUntil(element, '.form-ui'),\r\n selectList = selectWraper.querySelector('.options-list'),\r\n multipleSelect = element.hasAttribute('multiple'),\r\n selectedOption = selectWraper.querySelector('.selected-option'),\r\n arrowIcon = selectWraper.querySelector('.arrow-icon');\r\n //=====> Set Large Size <=====//\r\n if(element.classList.contains('large') || Forms?.classList.contains('large'))\r\n selectWraper.querySelector('.form-control').classList.add('large');\r\n //=====> Set Small Size <=====//\r\n if(element.classList.contains('small') || Forms?.classList.contains('small'))\r\n selectWraper.querySelector('.form-control').classList.add('small');\r\n //=====> Get Current Value <=====//\r\n var selectedValue = [element.value];\r\n //=====> Remove Multiple <=====//\r\n const removeOption = () => {\r\n selectedOption.querySelectorAll('span').forEach(item => {\r\n item.addEventListener('click', event => {\r\n //====> Set the Selected Value <====//\r\n if(selectedValue) {\r\n element.querySelectorAll('option').forEach(option => {\r\n if (option.value == item.getAttribute('data-value')) option.removeAttribute('selected');\r\n });\r\n element.dispatchEvent(new Event('change'));\r\n }\r\n event.target.remove();\r\n });\r\n });\r\n }\r\n //=====> Creating the Options <=====//\r\n element.querySelectorAll('option').forEach((option, index) => {\r\n //=====> Set the First Option <=====//\r\n if(index == 0 || option.hasAttribute('selected')) selectWraper.querySelector('.selected-option').textContent = option.textContent;\r\n //=====> Append Each Option in the List <=====//\r\n Tornado.appendIn(`
  • ${option.textContent}
  • `,selectList);\r\n });\r\n //=====> prepare as multiple <=====//\r\n if (multipleSelect) {\r\n //=====> Convert Current value into item <=====//\r\n selectedOption.innerHTML = `${selectedOption.textContent}`;\r\n //=====> get Filter <=====//\r\n var filterInput = selectWraper.querySelector('li.filter-select');\r\n //=====> add filter class <=====//\r\n selectedOption.classList.add('filter-select');\r\n //=====> change placeholder <=====//\r\n filterInput.querySelector('input').setAttribute('placeholder','...');\r\n //=====> move the Filter <=====//\r\n Tornado.appendIn(filterInput.innerHTML, selectedOption);\r\n //=====> remove dropdown Filter <=====//\r\n filterInput.remove();\r\n removeOption();\r\n //=====> Show the Options on Focus <=====//\r\n selectedOption.querySelector('input').addEventListener('focus', event => selectList.classList.add('active'));\r\n selectedOption.querySelector('input').addEventListener('blur', event => selectList.classList.remove('active'));\r\n } else {\r\n //=====> Show/Hide options <=====//\r\n selectedOption.addEventListener('click', event => selectList.classList.add('active'));\r\n arrowIcon.addEventListener('click', event => selectList.classList.add('active'));\r\n selectWraper.addEventListener('mouseout', event => selectList.classList.remove('active'));\r\n }\r\n //=====> get and set the Selected Value <=====//\r\n selectList.querySelectorAll('li').forEach((item,index) => {\r\n if (!item.classList.contains('filter-select')) item.addEventListener('click', event => {\r\n selectedValue = item.getAttribute('data-value');\r\n //=====> if its not multiple <=====//\r\n if(!multipleSelect) {\r\n //====> Set the Selected Label <====//\r\n selectedOption.textContent = item.textContent;\r\n //====> Set the Selected Value <====//\r\n if(selectedValue) {\r\n element.value = selectedValue;\r\n element.dispatchEvent(new Event('change'));\r\n }\r\n } else {\r\n //====> Set the Selected Label <====//\r\n var lastSelectedItem = selectedOption.querySelector('span:last-of-type'),\r\n newItem = `${item.textContent}`;\r\n if (lastSelectedItem) {\r\n Tornado.insertAfter(newItem, lastSelectedItem);\r\n } else {\r\n lastSelectedItem = selectedOption.querySelector('input');\r\n Tornado.insBefore(newItem, lastSelectedItem);\r\n }\r\n removeOption();\r\n //====> Set the Selected Value <====//\r\n if(selectedValue) {\r\n element.querySelectorAll('option').forEach(option => {\r\n if (option.value == selectedValue) option.setAttribute('selected', true);\r\n });\r\n element.dispatchEvent(new Event('change'));\r\n }\r\n }\r\n });\r\n });\r\n //=====> Filting The Options <=====//\r\n selectWraper.querySelector('.filter-select input').addEventListener('keyup', event => {\r\n //=====> Loop Through Options <=====//\r\n selectList.querySelectorAll('li').forEach((item,index) => {\r\n var currentValue = event.target.value,\r\n keyboard_key = event.keyCode || event.charCode;\r\n if(keyboard_key == 8 && currentValue == '' || null) {\r\n item.classList.remove('hidden');\r\n } else {\r\n //=====> Search and Options Data <=====//\r\n var labelValue = item.textContent.toString(),\r\n optionValue = item.getAttribute('data-value')?.toString();\r\n //=====> Show / Hide Options <=====//\r\n if (!item.classList.contains('filter-select')) {\r\n if (labelValue.includes(currentValue) || optionValue.includes(currentValue)) {\r\n if(currentValue) item.classList.remove('hidden');\r\n } else {\r\n if(currentValue) item.classList.add('hidden');\r\n }\r\n }\r\n }\r\n });\r\n });\r\n //===> Done <===//\r\n element.classList.add('asdone');\r\n });\r\n },\r\n //======> Fix Controls Icon Size <======//\r\n \"fixSizes\" : element => {\r\n let elementParent = Tornado.parentsUntil(element, '.form-ui');\r\n if(elementParent && elementParent.classList.contains('large')) element.classList.add('large');\r\n if(elementParent && elementParent.classList.contains('small')) element.classList.add('small');\r\n },\r\n //======> Advanced Uploader <======//\r\n \"advancedUploader\" : input => {\r\n if(input.classList.contains('afudone')) return;\r\n //====> get Data <====//\r\n var parent = input.parentNode,\r\n text = parent.getAttribute('data-text') || 'Drag and Drop your file to upload',\r\n multiple = input.getAttribute('multiple');\r\n //====> set Uploader Icon <====//\r\n if (!parent.matches('[class*=\" ti-\"]')) parent.classList.add('ti-play-work-up');\r\n //====> set Uploader Text <====//\r\n Tornado.insertAfter(`${text}`, input);\r\n //====> Change File Function <===//\r\n const changeFile = (files) => {\r\n //===> Get File Data <===//\r\n var filePath = [],\r\n filesList = parent.querySelector('.files'),\r\n fileType,\r\n fileUrl;\r\n //===> Set Files Data <===//\r\n for (var i = 0; i < files.length; ++i) {\r\n filePath.push(files[i].name);\r\n fileType = files[i].type.split('/');\r\n fileUrl = URL.createObjectURL(files[i]);\r\n }\r\n //===> Reset File List <===//\r\n filesList.innerHTML = '';\r\n //===> Create Files List <===//\r\n filePath.forEach(file => {\r\n //===> Create new File Item <===//\r\n Tornado.appendIn(`
  • ${file}
  • `, filesList);\r\n if(multiple === null) {\r\n //===> Image Preview Mode <===//\r\n if(fileType[0] === 'image') {\r\n parent.style.backgroundImage = `url(${fileUrl})`;\r\n parent.classList.add('image-mode');\r\n //===> if Video , Reset <===//\r\n if (parent.classList.contains('video-mode')) {\r\n parent.classList.remove('video-mode');\r\n parent.querySelector('video')?.remove();\r\n }\r\n }\r\n //===> Video Preview Mode <===//\r\n if (fileType[0] === 'video') {\r\n parent.classList.add('video-mode');\r\n var videoCheck = Tornado.getNextSibling({element:input, filter:'video'});\r\n //===> if video exist replace data else create new video <==//\r\n if(videoCheck) videoCheck.remove();\r\n Tornado.insertAfter(``, input);\r\n //===> if Image , Reset <===//\r\n if (parent.classList.contains('image-mode')) {\r\n parent.classList.remove('image-mode');\r\n parent.style.backgroundImage = null;\r\n }\r\n }\r\n }\r\n });\r\n //===> File Type <===//\r\n };\r\n //====> Change File <===//\r\n input.addEventListener('change', event => changeFile(event.target.files));\r\n //====> Highlight Droparea <===//\r\n input.addEventListener('dragenter', event => parent.classList.add('highlight'));\r\n input.addEventListener('dragleave', event => parent.classList.remove('highlight'));\r\n //====> Drop Files <===//\r\n input.addEventListener('drop', event => {\r\n /*====> get Files <====*/\r\n var data = event.dataTransfer,\r\n files = data.files;\r\n input.files = files;\r\n });\r\n //===> Done <===//\r\n input.classList.add('afudone');\r\n },\r\n /*=====> Form Repeater <=====*/\r\n \"repeater\" : selector => {\r\n let element = selector.querySelector('.add-item');\r\n //====> if its Done <====//\r\n if(element.classList.contains('rpdone')) return;\r\n //=====> Accessibility <=====//\r\n Tornado.setAttributes(element,{\r\n \"tabindex\":0,\r\n \"role\":\"button\",\r\n \"aria-pressed\":\"false\",\r\n });\r\n //====> Add Item Handler <====//\r\n element.addEventListener('click', event => {\r\n event.preventDefault();\r\n /*====> Clone Parent Item <====*/\r\n var itemClone = Tornado.parentsUntil(event.target, '.repeater-item').cloneNode(true),\r\n repeater = Tornado.parentsUntil(event.target, '.form-repeater'),\r\n newButton = itemClone.querySelector('.add-item');\r\n /*====> Change Button to Remover <====*/\r\n newButton.classList.remove('add-item');\r\n newButton.classList.remove('ti-plus');\r\n newButton.classList.add('remove-item');\r\n newButton.classList.add('ti-minus');\r\n //====> Reset new Item Controls <====//\r\n itemClone.querySelectorAll('input,select,textarea').forEach(element => {\r\n //===> Reset Value <===//\r\n element.value = null;\r\n if (element.matches('[placeholder]')) Forms.placeholder(element);\r\n //===> Reset Select <===//\r\n if (element.matches('select')) {\r\n element.classList.remove('asdone');\r\n Tornado.getNextSibling({element:element,filter:'.tornado-select'})?.remove();\r\n Forms.advancedSelect(element);\r\n }\r\n //===> Reset File Uploader <===//\r\n if (element.parentNode.matches('.file-input')) {\r\n element.classList.remove('fudone');\r\n Forms.fileUploader(element);\r\n }\r\n //===> Reset Advanced Uploader <===//\r\n if (element.parentNode.matches('.advanced-uploader')) {\r\n element.classList.remove('afudone');\r\n element.classList.remove('image-mode');\r\n element.classList.remove('video-mode');\r\n element.removeAttribute('data-src');\r\n element.querySelector('video')?.remove();\r\n Forms.advancedUploader(element);\r\n }\r\n //===> Reset Validation <===//\r\n if(element.parentNode.matches('.required' || '[aria-required=\"true\"]' || '[required]')) {\r\n element.addEventListener('blur', event => Forms.validate(event.target));\r\n };\r\n });\r\n /*====> Repeat the Item <====*/\r\n Tornado.appendIn(itemClone, repeater);\r\n });\r\n //===> Done <===//\r\n element.classList.add('rpdone');\r\n },\r\n /*=====> Form Rating Control <=====*/\r\n \"rating\" : element => {\r\n //====> if its Done <====//\r\n if(element.classList.contains('rtdone')) return;\r\n //====> Get Data <====//\r\n var input = element.querySelector('input'),\r\n maxRate:any = parseInt(input.getAttribute('max')) || 5,\r\n text = maxRate < 10 ? `${maxRate}.0` : maxRate,\r\n iconName = element.getAttribute('data-icon') || 'ti-star';\r\n //====> Create Elements <====//\r\n for (let i = 1; maxRate >= i; i++) Tornado.insertAfter(``, input);\r\n //====> Create Text Element <====//\r\n Tornado.insertAfter(`${text}`, element.querySelector('.rate-icon:last-child'));\r\n //====> get the New Elements <====//\r\n var ratingElements = element.querySelectorAll('.rate-icon');\r\n //====> Loop Throgh Rating Elements <====//\r\n ratingElements.forEach((rateElement, index) => {\r\n if (parseInt(input.value)-1 >= index) rateElement.classList.add('active');\r\n //===> Hover Effect <===//\r\n rateElement.addEventListener('mouseenter', event => {\r\n //===> Activate Elements <===//\r\n Tornado.getPrevSiblings({element:rateElement, filter:'.rate-icon'})?.forEach(ele => ele.classList.add('active'));\r\n Tornado.getNextSiblings({element:rateElement, filter:'.rate-icon'})?.forEach(ele => ele.classList.remove('active'));\r\n event.target.classList.add('active');\r\n //===> When Mouse Leaves Element <===//\r\n rateElement.addEventListener('mouseleave', event => {\r\n var currentValue = parseInt(input.value) || -1;\r\n //===> unactivate Elements <===//\r\n element.querySelectorAll('.rate-icon').forEach((item, i) => {\r\n if (i > currentValue-1) item.classList.remove('active');\r\n });\r\n });\r\n });\r\n //===> Toggle Rate <===//\r\n rateElement.addEventListener('click', event => {\r\n //===> Set Value <===//\r\n input.value = index+1;\r\n //===> Activate Elements <===//\r\n Tornado.getPrevSiblings({element:rateElement, filter:'.rate-icon'})?.forEach(ele => ele.classList.add('active'));\r\n Tornado.getNextSiblings({element:rateElement, filter:'.rate-icon'})?.forEach(ele => ele.classList.remove('active'));\r\n event.target.classList.add('active');\r\n rateElement.addEventListener('mouseleave', event => event.target.classList.add('active'));\r\n //===> Dispatch Change Event <===//\r\n input.dispatchEvent(new Event('change'));\r\n }); \r\n });\r\n //===> Done <===//\r\n element.classList.add('rtdone');\r\n },\r\n}\r\n\r\n/*===== Tornado Forms Assets =====*/\r\ndocument.addEventListener('DOMContentLoaded', domReady => {\r\n //=====> Buttons Accessibility <=====//\r\n Tornado.getElements('.btn').forEach(element => {\r\n Tornado.setAttributes(element,{\r\n \"tabindex\":0,\r\n \"role\":\"button\",\r\n \"aria-pressed\":\"false\",\r\n })\r\n });\r\n //=====> Activate Placeholder <=====//\r\n Tornado.getElements('[placeholder]').forEach(element => Forms.placeholder(element));\r\n //=====> File Uploader <=====//\r\n Tornado.getElements('.file-input input[type=\"file\"]').forEach(element => Forms.fileUploader(element));\r\n //=====> Progress Bars <=====//\r\n Forms.progress('.progress-bar:not(.circle):not(.radial)');\r\n Forms.progress('.progress-bar.circle', {type:'circle'});\r\n Forms.progress('.progress-bar.radial', {type:'radial'});\r\n //======> Realtime Validate <======//\r\n Tornado.getElements('.required,[aria-required=\"true\"],[required]').forEach(element => element.addEventListener('blur', event => Forms.validate(event.target)));\r\n //======> on Submit Validate <======//\r\n // Tornado.getElements('form:not(.no-vali),.wp7').forEach(element => Forms.formValidate(element));\r\n //======> Advanced Select <======//\r\n Forms.advancedSelect('.form-ui select,select.form-control');\r\n //======> Fix Controls Sizes <======//\r\n Tornado.getElements('.control-icon,.form-repeater,.form-ui .btn,.rating-control').forEach(element => Forms.fixSizes(element));\r\n //======> Advanced Uploader <======//\r\n Tornado.getElements('.advanced-uploader input[type=\"file\"]').forEach(element => Forms.advancedUploader(element));\r\n /*=====> Form Repeater <=====*/\r\n Tornado.getElements('.form-repeater').forEach(element => Forms.repeater(element));\r\n /*=====> Form Rating Control <=====*/\r\n Tornado.getElements('.rating-control').forEach(element => Forms.rating(element));\r\n});\r\n\r\n//=====> Export Form UI Methods <=====//\r\nexport default Forms;\r\n","//======> Import Tornado UI Helpers <=======//\r\nimport Tornado from './Tornado';\r\nimport Forms from './Forms';\r\n\r\n/**======> Referance By Comment <======\r\n * ===> 01 - DataTable Method\r\n * ===> 02 - Detact Responsive Tables\r\n * ===> 03 - Label Translate\r\n * ===> 04 - Data Table Options\r\n * ===> 05 - Get Table Elements\r\n * ===> 06 - Create Labels from Data\r\n * ===> 07 - Create Data from Source File\r\n * ===> 08 - Editable Handler\r\n * ===> 09 - Per-Page Template\r\n * ===> 10 - Search Template\r\n * ===> 11 - Navigation Template\r\n * ===> 12 - Pagination Template\r\n * ===> 13 - Set Page Handler\r\n * ===> 14 - Pagination Handlers\r\n * ===> 15 - Create Pagination\r\n * ===> 16 - Per-Page Activate\r\n * ===> 17 - Search Handler\r\n * ===> 18 - Sorting Handler\r\n*/\r\n\r\n//=====> DataTable Method <=====//\r\nconst DataTable = (selector, options?) => {\r\n //====> Check if Selector or Element <====//\r\n typeof(selector) === 'object' ? selector = [selector] : selector = Tornado.getElements(selector);\r\n //====> For Each Table <====//\r\n selector.forEach(element => {\r\n var tableParent = element;\r\n //====> Detact Responsive Tables <====//\r\n if (element.parentNode.matches('.responsive-table' || '.responsive-sm-table')) tableParent = element.parentNode;\r\n element.classList.add('data-table-wrap');\r\n\r\n //====> Label Translate <====//\r\n const Label_Translate = (english,arabic) => {\r\n if (Tornado.direction('page') == 'ltr') {\r\n return english;\r\n } else {\r\n return arabic;\r\n }\r\n };\r\n \r\n //====> Data Table Options <====//\r\n options = {\r\n //===> Controls Options <===//\r\n perPage : options?.perPage || false, //====> Rows Per Pages\r\n search : options?.search || true, //====> Enable Search\r\n sortable : options?.sortable || true, //====> Enable Sorting\r\n\r\n //===> Data Options <===//\r\n data : {\r\n editable : options?.data?.editable || false, //====> Enable Data Edit\r\n source : options?.data?.source || false, //====> Data Source URL [csv, json]\r\n labels : options?.data?.labels || false, //====> Table Head Items [array of strings]\r\n },\r\n };\r\n\r\n //====> Get Table Elements <====//\r\n var tableLabels = element.querySelectorAll('thead th'),\r\n tableRows = element.querySelectorAll('tbody tr'),\r\n rowLength = tableRows.length;\r\n\r\n //====> Create Labels from Data <====//\r\n if (options.data.labels) {\r\n //====> Remove Head <====//\r\n element.querySelector('thead')?.remove();\r\n //====> Create Head Wraper <====//\r\n Tornado.appendIn(``,element);\r\n var headRow = element.querySelector('thead tr');\r\n //====> Create Labels <====//\r\n for (let i = 0; options.data.labels.length-1 >= i; i++) {\r\n var label = options.data.labels[i];\r\n Tornado.appendIn(`${label}`,headRow);\r\n };\r\n //====> get the New Labels <====//\r\n tableLabels = element.querySelectorAll('thead th');\r\n }\r\n\r\n //====> Create Data from Source File <====//\r\n if (options.data.source) {\r\n //====> Remove Head <====//\r\n element.querySelector('tbody')?.remove();\r\n //====> Create Head Wraper <====//\r\n Tornado.appendIn(``,element);\r\n var tbody = element.querySelector('tbody');\r\n //====> Create Labels <====//\r\n // for (let i = 0; options.data.labels.length-1 >= i; i++) {\r\n // var label = options.data.labels[i];\r\n // Tornado.appendIn(`${label}`,headRow);\r\n // };\r\n //====> get the New Labels <====//\r\n tableRows = element.querySelector('tbody tr');\r\n }\r\n\r\n //====> Editable Handler <====//\r\n if (options.data.editable) {\r\n tableRows.forEach(row => {\r\n row.querySelectorAll('td').forEach(column => column.setAttribute('contenteditable',true));\r\n });\r\n }\r\n\r\n //====> Per-Page Template <====//\r\n var perPageHTML = '';\r\n if (options.perPage) perPageHTML = `\r\n \r\n \r\n `;\r\n\r\n //====> Search Template <====//\r\n var searchHTML = '';\r\n if (options.search) searchHTML = `\r\n
    \r\n \r\n
    \r\n `;\r\n\r\n //====> Navigation Template <====//\r\n var tableNav = `
    \r\n ${options.perPage ? \r\n `\r\n
    \r\n ${perPageHTML}\r\n
    ` : ''\r\n }\r\n\r\n ${options.search ? \r\n `\r\n
    \r\n ${searchHTML}\r\n
    \r\n ` : ''\r\n }\r\n
    `;\r\n\r\n //====> Insert Navigation <====//\r\n Tornado.insBefore(tableNav, tableParent);\r\n\r\n //====> Pagination Template <====//\r\n var paginationTemplate = `
    \r\n \r\n

    ${Label_Translate(\r\n `Showing from 1 to ${tableRows.length} out of ${tableRows.length}`,\r\n `اظهار 1 الي ${tableRows.length} من مجموع ${tableRows.length}`\r\n )}

    \r\n \r\n \r\n
    `;\r\n\r\n //====> Insert Pagination <====//\r\n Tornado.insertAfter(paginationTemplate, tableParent);\r\n\r\n //====> get Navigation and Pagination <====//\r\n var navigation = Tornado.getPrevSibling({element:tableParent, filter:'.data-table-nav'});\r\n var pagination = Tornado.getNextSibling({element:tableParent, filter:'.data-table-pagi'});\r\n\r\n //====> Set Page Handler <====//\r\n const setPage = (rows, start, end) => {\r\n //====> Clear Current Items <====//\r\n element.querySelectorAll('tbody tr')?.forEach(del => del.remove());\r\n //====> Set Pages <====//\r\n for(let i = start; end >= i; i++) {\r\n if(rows[i]) Tornado.appendIn(rows[i], element.querySelector('tbody'))\r\n };\r\n //====> Display Information <====//\r\n pagination.querySelector('.start-count').textContent = start+1;\r\n pagination.querySelector('.end-count').textContent = end+1;\r\n };\r\n\r\n //====> Pagination Handlers <====//\r\n const paginationHandlers = () => {\r\n //===> Set New Page <===//\r\n const setNewPage = item => {\r\n //====> Positions <====//\r\n var thisPage = parseInt(item.textContent),\r\n perPageNumber = navigation.querySelector('.perpage').value;\r\n\r\n //====> Activate <====//\r\n item.parentNode.querySelector('.active')?.classList.remove('active')\r\n item.classList.add('active');\r\n\r\n //====> Items Caluclation <====//\r\n var startPoint = thisPage == 1 ? 0 : thisPage*perPageNumber-perPageNumber,\r\n endPoint = thisPage*perPageNumber-1;\r\n\r\n //====> Set First Page <====//\r\n setPage(tableRows, startPoint, endPoint);\r\n };\r\n\r\n //===> Get Pagination Items <===//\r\n pagination.querySelectorAll('.pagination li:not(.next-page):not(.prev-page)').forEach(item => {\r\n //===> On Item Click <===//\r\n item.addEventListener('click', event => {\r\n event.preventDefault();\r\n setNewPage(event.target);\r\n });\r\n });\r\n\r\n //===> Next Page <===//\r\n pagination.querySelector('.pagination .next-page')?.addEventListener('click', event => {\r\n event.preventDefault();\r\n //====> Positions <====//\r\n var item = Tornado.getNextSibling({element:pagination.querySelector('li.active'), filter:'li:not(.prev-page):not(.next-page)'});\r\n if(item) setNewPage(item);\r\n });\r\n\r\n //===> Prev Page <===//\r\n pagination.querySelector('.pagination .prev-page')?.addEventListener('click', event => {\r\n event.preventDefault();\r\n //====> Positions <====//\r\n var item = Tornado.getPrevSibling({element:pagination.querySelector('li.active'), filter:'li:not(.prev-page):not(.next-page)'});\r\n if (item) setNewPage(item);\r\n });\r\n };\r\n\r\n //====> Create Pagination <====//\r\n const createPagination = (rows, start, end) => {\r\n //====> Clear Current Items <====//\r\n element.querySelectorAll('tbody tr')?.forEach(del => del.remove());\r\n\r\n //====> Select Pagination List <====//\r\n var paginationList = pagination.querySelector('.pagination'),\r\n pagesNumber = Math.ceil(rows.length/options.perPage);\r\n\r\n //===> Reset Pagination <===//\r\n paginationList.innerHTML = null;\r\n\r\n //====> Create Pagination Items <====//\r\n for(let i = 0; pagesNumber-1 >= i; i++) Tornado.appendIn(`
  • ${i+1}
  • `, paginationList);\r\n\r\n //====> Create Next / Prev Buttons <====//\r\n if (pagesNumber > 1) {\r\n Tornado.insBefore(`
  • `, paginationList.querySelector('li:first-child'));\r\n Tornado.appendIn(`
  • `, paginationList);\r\n }\r\n\r\n //====> Set First Page <====//\r\n setPage(rows,start,end);\r\n\r\n //====> Activate Pagination <====//\r\n paginationHandlers();\r\n };\r\n\r\n //====> Per-Page Activate <====//\r\n if(options.perPage) {\r\n //====> Create Pagination <====//\r\n createPagination(tableRows, 0, options.perPage-1);\r\n\r\n //====> Per-Page Handler <====//\r\n var perPageControl = navigation.querySelector('.perpage');\r\n Forms.advancedSelect(perPageControl);\r\n\r\n perPageControl.addEventListener('change', event => {\r\n options.perPage = event.target.value;\r\n //====> Create Pagination <====//\r\n createPagination(tableRows, 0, options.perPage-1);\r\n });\r\n }\r\n\r\n //====> Search Handler <====//\r\n if(options.search) {\r\n navigation.querySelector('.table-search')?.addEventListener('keyup', event => {\r\n //====> Get Search Data <====//\r\n var currentValue = event.target.value.toString().toLowerCase(),\r\n keyboard_key = event.keyCode || event.charCode,\r\n filteredData = [];\r\n \r\n //====> Search Process <====//\r\n if(keyboard_key == 8 && currentValue == '' || null) {\r\n //====> if its Empty Return Original Data <====//\r\n filteredData = tableRows;\r\n } else {\r\n //=====> Loop Through Options <=====//\r\n tableRows.forEach((item,index) => {\r\n //=====> Search and Options Data <=====//\r\n var labelValue = item.textContent.toString().toLowerCase();\r\n //=====> Show / Hide Options <=====//\r\n if (labelValue.includes(currentValue)) filteredData.push(item);\r\n });\r\n }\r\n \r\n //====> Search Resault <====//\r\n if (options.perPage && filteredData.length > 0) createPagination(filteredData, 0, options.perPage-1);\r\n if (!options.perPage) setPage(filteredData, 0, filteredData.length-1);\r\n });\r\n }\r\n\r\n //====> Sorting Handler <====//\r\n if(options.sortable) {\r\n tableLabels.forEach((label, tdIndex) => {\r\n //====> Set Sort Icons <====//\r\n label.classList.add('sort-table');\r\n Tornado.appendIn(``, label);\r\n\r\n //====> Handler <====//\r\n label.addEventListener('click', event => {\r\n event.preventDefault();\r\n //====> Deactive Handler <====//\r\n const deactiveOther = () => {\r\n //====> Deactivte Other <====//\r\n Tornado.getSiblings({element:label, filter:'.active'})?.forEach(sibling => {\r\n sibling.classList.remove('active');\r\n sibling.classList.remove('asc-sort');\r\n sibling.classList.remove('desc-sort');\r\n });\r\n }\r\n\r\n //====> Sort Detactor <====//\r\n if(!label.classList.contains('asc-sort')) {\r\n var sortBy = 'asc'\r\n //====> Deactivte Other <====//\r\n deactiveOther();\r\n //====> Activate Item <====//\r\n label.classList.add('active');\r\n label.classList.add('asc-sort');\r\n label.classList.remove('desc-sort');\r\n } else {\r\n var sortBy = 'desc';\r\n //====> Deactivte Other <====//\r\n deactiveOther();\r\n //====> Activate Item <====//\r\n label.classList.add('active');\r\n label.classList.add('desc-sort');\r\n label.classList.remove('asc-sort');\r\n }\r\n\r\n //====> Clear Current Items <====//\r\n if(options.perPage) {\r\n var tableBody = element.querySelector('tbody');\r\n tableBody.querySelectorAll('tr')?.forEach(del => del.remove());\r\n //====> Show All <====//\r\n if (tableBody) tableRows.forEach(row => tableBody.appendChild(row));\r\n }\r\n\r\n //====> Rows Sorting <====//\r\n element.querySelectorAll('tbody tr')?.forEach((row, index) => {\r\n var rowSiblings = Tornado.getSiblings({element:row,filter:'tr'}),\r\n currentValue = row.children[tdIndex].textContent;\r\n //====> Compare Row to its Sibling <====//\r\n rowSiblings.forEach(sibling => {\r\n var siblingValue = sibling.children[tdIndex].textContent;\r\n \r\n //====> Compare as Number <====//\r\n if (!isNaN(currentValue)) {\r\n currentValue = parseFloat(currentValue);\r\n siblingValue = parseFloat(siblingValue);\r\n } \r\n \r\n //====> Compare as String <====//\r\n if (isNaN(currentValue)) {\r\n currentValue = currentValue.toString();\r\n siblingValue = siblingValue.toString();\r\n }\r\n\r\n //====> ASC Sorting <====//\r\n if(sortBy == 'asc' && currentValue >= siblingValue) Tornado.insertAfter(row, sibling);\r\n //====> DESC Sorting <====//\r\n if(sortBy == 'desc' && currentValue <= siblingValue) Tornado.insertAfter(row, sibling);\r\n });\r\n });\r\n\r\n //====> new Sorted Rows <====//\r\n tableRows = element.querySelectorAll('tbody tr');\r\n //====> Create Pagination <====//\r\n if (options.perPage && tableRows.length > 0) createPagination(tableRows, 0, options.perPage-1);\r\n if (!options.perPage) setPage(tableRows, 0, tableRows.length-1);\r\n });\r\n });\r\n }\r\n });\r\n}\r\n\r\nexport default DataTable;\r\n","//======> Import Tornado UI Helpers <=======//\r\nimport Tornado from './Tornado';\r\n\r\n/**======> Referance By Comment <======\r\n * ===> 01 - Create Navigation Menu\r\n * ===> 02 - Create Nested Dropdown\r\n*/\r\n\r\nconst Menus = {\r\n //======> Create Navigation Menu <=======//\r\n \"navigation\" : selector => {\r\n //====> Check if Selector or Element <====//\r\n typeof(selector) === 'object' ? selector = [selector] : selector = Tornado.getElements('.navigation-menu');\r\n\r\n /*==== Create a Clone from The Menu ====*/\r\n selector.forEach(element => {\r\n //===> Check ID and Reset <===//\r\n if(!element.getAttribute('data-id')) return;\r\n if(element.classList.contains('ngdone')) return;\r\n\r\n //===> Marking Dropdown Sub Menus <===//\r\n element.querySelectorAll('li > ul,li > .megamenu').forEach(SubMenu => {\r\n SubMenu.classList.add('dropdown-menu');\r\n SubMenu.parentNode.classList.add('dropdown-item');\r\n //===> Create Dropdown Toggle Button <===//\r\n Tornado.insBefore(``, SubMenu);\r\n //===> Megamenu Fix <===//\r\n if(SubMenu.classList.contains('megamenu')) SubMenu.parentNode.style.position = 'static';\r\n });\r\n\r\n //===> Get Menu ID <===//\r\n var MenuID = element.getAttribute('data-id'),\r\n //===> Get Menu Toggle Button <===//\r\n toggleButton = Tornado.getElement(`.menu-btn[data-id=\"${MenuID}\"]`),\r\n //===> Get the Menu List Elements <===//\r\n MenuList = element.querySelectorAll('ul:not(.dropdown-menu)'),\r\n //===> Wraper Elemets <===//\r\n MenuElements = `
    `;\r\n\r\n //===> Create Mobile Menu Wraper <===//\r\n document.body.insertAdjacentHTML('beforeend', `
    ${MenuElements}
    `);\r\n\r\n //===> Copy the List <===//\r\n MenuList.forEach(list => {\r\n var MenuCopy = list.cloneNode(true);\r\n Tornado.getElement(`#${MenuID} .menu-content`).appendChild(MenuCopy);\r\n });\r\n\r\n //===> Mega Menu Width Hack <===//\r\n element.querySelectorAll('.megamenu').forEach(Megamenu => Megamenu.parentNode.style.postion = 'static');\r\n\r\n //=====> Accessibility <=====//\r\n Tornado.setAttributes(toggleButton,{\r\n \"tabindex\":0,\r\n \"role\":\"button\",\r\n \"aria-pressed\":\"false\",\r\n });\r\n\r\n /*===> Toggle Button <===*/\r\n Tornado.liveEvent(toggleButton, 'click', event => {\r\n event.preventDefault();\r\n Tornado.getElement(`#${MenuID}`).classList.add('active');\r\n });\r\n\r\n //===> Overlay Toggle <===//\r\n var overlayToggle = Tornado.getElement(`#${MenuID} .overlay-close`);\r\n overlayToggle.addEventListener('click', event => {\r\n event.preventDefault();\r\n event.target.parentNode.classList.remove('active');\r\n });\r\n\r\n /*===> Mobile Submenus Toggle <===*/\r\n var submneuToggle = Tornado.getElements(`#${MenuID} .dropdown-item > a`);\r\n submneuToggle.forEach(button => {\r\n button.addEventListener('click', event => {\r\n event.preventDefault();\r\n //====> Detacte Effect Theme <====//\r\n var MobileMen = Tornado.parentsUntil(button, '.mobile-menu');\r\n \r\n //==== Store Playable Elements ====//\r\n var nextSib = button.parentNode.querySelector('ul' || '.megamenu');\r\n \r\n //==== Check if the Clicked Menu is Activated ====//\r\n if (button.parentNode.classList.contains('active')) {\r\n //==== Close Dropdown ====//\r\n if(nextSib) Tornado.slideUp(nextSib,300);\r\n //====> Deactivate the Menu <====//\r\n button.parentNode?.classList.remove('active');\r\n } else {\r\n var parentSiblings = Tornado.getSiblings({element:button.parentNode, filter:'.active'});\r\n //==== Deactivate Siblings ====//\r\n parentSiblings.forEach(siblings => {\r\n siblings.classList.remove('active');\r\n //==== Close Dropdown ====//\r\n siblings.children.forEach(childs => {\r\n if (childs.matches('ul') || childs.matches('.megamenu') && nextSib) Tornado.slideUp(nextSib,300);\r\n });\r\n });\r\n //==== Set Max Height for Transtion ====//\r\n if(nextSib) Tornado.slideDown(nextSib,300);\r\n //==== Activate Clicked Accordion if its Not Activated ====//\r\n button.parentNode?.classList.add('active');\r\n }\r\n });\r\n });\r\n\r\n element.classList.add('ngdone');\r\n });\r\n },\r\n\r\n /*==== Create Nested Dropdown ====*/\r\n \"nestedList\" : selector => {\r\n //====> Check if Selector or Element <====//\r\n typeof(selector) === 'object' ? selector = [selector] : selector = Tornado.getElements('.nested-menu');\r\n //====> Nested Menu <====//\r\n selector.forEach(element => {\r\n if(element.classList.contains('nldone')) return;\r\n element.querySelectorAll('li > ul').forEach(SubMenuList => {\r\n //===> Catch SubMenu Button <===//\r\n var SubMenuBtn = Tornado.getPrevSibling({element:SubMenuList, filter:'a'});\r\n SubMenuBtn.classList.add('submenu');\r\n SubMenuBtn.classList.add('ti-arrow-down-chevron');\r\n //===> When Click on the Button <===//\r\n SubMenuBtn.addEventListener('click', event => {\r\n //==> Prevent Default Behavor <==//\r\n event.preventDefault();\r\n //==> Catch Playable Elements <==//\r\n var thisParent = SubMenuBtn.parentNode;\r\n //===> Activated The Clicked Item <===//\r\n thisParent.classList.toggle('active');\r\n Tornado.slideToggle(SubMenuList,500);\r\n //===> Deativate the Siblings Items <===//\r\n Tornado.getSiblings({element:thisParent}).forEach(parentSiblings => {\r\n var siblingList = parentSiblings.querySelector('ul');\r\n if(siblingList) Tornado.slideUp(siblingList,500);\r\n parentSiblings.classList.remove('active');\r\n });\r\n });\r\n //===> Done <===//\r\n element.classList.add('nldone');\r\n });\r\n });\r\n }\r\n}\r\n\r\n/*==== Activate Menus ====*/\r\ndocument.addEventListener('DOMContentLoaded', domReady => {\r\n Menus.navigation('.navigation-menu');\r\n Menus.nestedList('.nested-menu');\r\n});\r\n\r\nexport default Menus;","//======> Tornado UI Core Base <=======//\r\nimport './Base/Tornado';\r\nimport Tornado from './Base/Tornado';\r\n","// Object.keys\nif (!Object.keys) {\n Object.keys = function(object) {\n var keys = [];\n for (var name in object) {\n if (Object.prototype.hasOwnProperty.call(object, name)) {\n keys.push(name);\n }\n }\n return keys;\n };\n}","// ChildNode.remove\nif(!(\"remove\" in Element.prototype)){\n Element.prototype.remove = function(){\n if(this.parentNode) {\n this.parentNode.removeChild(this);\n }\n };\n}","//======> Import Tornado UI Helpers <=======//\r\nimport Tornado from './Tornado';\r\nimport DataTable from './DataTable';\r\n\r\n/**======> Referance By Comment <======\r\n * ===> 01 - Item Remover\r\n * ===> 02 - Dynamic Backgrounds\r\n * ===> 03 - Images lazyLoading\r\n * ===> 04 - Sticky Elements\r\n * ===> 05 - Responsive Tooltips\r\n * ===> 06 - Animated Counters\r\n * ===> 07 - ViewPort Detactor\r\n * ===> 08 - Activate Smoth Scroll\r\n * ===> 09 - Activate Scroll Spy\r\n * ===> 10 - Activate Date Counter\r\n * ===> 11 - Activate Dropdown Buttons\r\n * ===> 12 - Activate Data Tables\r\n * ===> 13 - Activate Tabs\r\n * ===> 14 - Activate Accordion \r\n * ===> 15 - Activate Dropdowns\r\n * ===> 16 - Activate Popups\r\n*/\r\n\r\ndocument.addEventListener('DOMContentLoaded', domReady => {\r\n //======> Remove ITem Access <======//\r\n Tornado.getElements('.remove-item')?.forEach(element => {\r\n //=====> Accessibility <=====//\r\n Tornado.setAttributes(element,{\r\n \"tabindex\":0,\r\n \"role\":\"button\",\r\n \"aria-pressed\":\"false\",\r\n });\r\n });\r\n\r\n //======> Item Remover <======//\r\n Tornado.liveEvent('.remove-item', 'click', event => {\r\n event.preventDefault();\r\n var thisButton = event.target; //===> for Fewer Linter Warnings\r\n //=== Remove Specific Target by ID ===//\r\n if (thisButton.hasAttribute('data-target')) {\r\n //=== Get Target ID ===//\r\n var target = thisButton.getAttribute('data-target');\r\n //=== Remove the Target ===//\r\n Tornado.getElement('#' + target).remove();\r\n } else if (thisButton.hasAttribute('data-tag')) {\r\n //=== Get the Targeted HTML Tag ===//\r\n var parentTag = thisButton.getAttribute('data-closest');\r\n //=== Remove the Target ===//\r\n thisButton.closest(parentTag).remove();\r\n } else {\r\n //=== Remove Direct Parent ===//\r\n thisButton.parentNode.remove();\r\n }\r\n });\r\n\r\n //====> Dynamic Backgrounds <====//\r\n Tornado.setBackground('[data-src]:not(.lazyactive)',false);\r\n Tornado.setBackground('[data-src].lazyactive',true);\r\n\r\n //====> Images lazyLoading <====//\r\n Tornado.lazyLoading('[data-lazyload]');\r\n\r\n //====> Sticky Elements <====//\r\n Tornado.sticky('[data-sticky]');\r\n\r\n //======> Responsive Tooltips <======//\r\n (function responsiveTooltips() {\r\n //======> Responsive X Tooltip <======//\r\n var tooltipX = Tornado.getElements('.tooltip-start.tooltip-responsive,.tooltip-end.tooltip-responsive');\r\n tooltipX.forEach(tooltipX => {\r\n var startTip = tooltipX.offsetLeft,\r\n endTip = window.innerWidth - tooltipX.getBoundingClientRect().right; // tooltipX.offsetLeft + tooltipX.offsetWidth;\r\n if (startTip < 100 || endTip < 100) {\r\n tooltipX.classList.add('tooltip-bottom');\r\n tooltipX.classList.remove('tooltip-end');\r\n tooltipX.classList.remove('tooltip-start');\r\n }\r\n });\r\n\r\n //======> Responsive Top Tooltip <======//\r\n Tornado.getElements('.tooltip.tooltip-responsive').forEach(tooltipTop => {\r\n var topTip = tooltipTop.offsetTop;\r\n if (topTip <= 50) {\r\n tooltipTop.classList.add('tooltip-bottom');\r\n tooltipTop.classList.remove('tooltip');\r\n }\r\n });\r\n\r\n //======> Responsive Bottom Tooltip <======//\r\n Tornado.getElements('.tooltip-bottom.tooltip-responsive').forEach(tooltipBottom => {\r\n var bottomTip = tooltipBottom.offsetTop + tooltipBottom.offsetHeight;\r\n if (bottomTip <= 50) {\r\n tooltipBottom.classList.add('tooltip');\r\n tooltipBottom.classList.remove('tooltip-bottom');\r\n }\r\n });\r\n }());\r\n\r\n //======> ViewPort Detactor <======//\r\n (function ViewPortDetactor () {\r\n Tornado.getElements('.view-status').forEach(element => {\r\n var animName = element.getAttribute('data-animation'),\r\n animDelay = element.getAttribute('data-delay') || 0,\r\n animDuration = element.getAttribute('data-duration') || 1000;\r\n //=====> Activate View <=====//\r\n function activateView() {\r\n //====> Activate the Element <=====//\r\n element.classList.add('view-active');\r\n //====> Add CSS Animation <=====//\r\n if (animName) element.style.animationName = animName;\r\n if (animDuration) element.style.animationDuration = animDuration;\r\n if (animDelay) element.style.animationDelay = animDelay;\r\n }\r\n //====> Activate While Scroll\r\n window.addEventListener('scroll', event => activateView());\r\n window.addEventListener('load', event => activateView());\r\n });\r\n }());\r\n\r\n //====> Activate Smoth Scroll <====//\r\n Tornado.smothScroll({\r\n selector : '.smoth-scroll',\r\n duration : 1500,\r\n });\r\n\r\n //====> Activate Scroll Spy <====//\r\n Tornado.scrollSpy({\r\n selector : '.scrollspy',\r\n duration : 1500,\r\n });\r\n\r\n //====> Activate Date Counter <====//\r\n Tornado.dateCounter({selector : '.date-counter'});\r\n\r\n //====> Activate Data Tables <====//\r\n DataTable('.data-table');\r\n \r\n //====> Activate Tabs <====//\r\n Tornado.tabs('.tabs-menu [data-tab]');\r\n\r\n //====> Activate Accordion <====//\r\n Tornado.accordion('.accordion-item .accordion-title');\r\n\r\n //====> Activate Dropdowns <====//\r\n Tornado.dropdown('.dropdown');\r\n\r\n //====> Activate Popups <====//\r\n Tornado.popup('.modal-box');\r\n\r\n //====> Activate Lightbox <====//\r\n Tornado.lightbox('[data-lightbox]');\r\n});\r\n","var win = window;\n\nexport var raf = win.requestAnimationFrame\n || win.webkitRequestAnimationFrame\n || win.mozRequestAnimationFrame\n || win.msRequestAnimationFrame\n || function(cb) { return setTimeout(cb, 16); };\n","var win = window;\n\nexport var caf = win.cancelAnimationFrame\n || win.mozCancelAnimationFrame\n || function(id){ clearTimeout(id); };\n","export function extend() {\n var obj, name, copy,\n target = arguments[0] || {},\n i = 1,\n length = arguments.length;\n\n for (; i < length; i++) {\n if ((obj = arguments[i]) !== null) {\n for (name in obj) {\n copy = obj[name];\n\n if (target === copy) {\n continue;\n } else if (copy !== undefined) {\n target[name] = copy;\n }\n }\n }\n }\n return target;\n}","export function checkStorageValue (value) {\n return ['true', 'false'].indexOf(value) >= 0 ? JSON.parse(value) : value;\n}","export function setLocalStorage(storage, key, value, access) {\n if (access) {\n try { storage.setItem(key, value); } catch (e) {}\n }\n return value;\n}","export function getBody () {\n var doc = document,\n body = doc.body;\n\n if (!body) {\n body = doc.createElement('body');\n body.fake = true;\n }\n\n return body;\n}","export var docElement = document.documentElement;","import { docElement } from './docElement.js';\n\nexport function setFakeBody (body) {\n var docOverflow = '';\n if (body.fake) {\n docOverflow = docElement.style.overflow;\n //avoid crashing IE8, if background image is used\n body.style.background = '';\n //Safari 5.13/5.1.4 OSX stops loading if ::-webkit-scrollbar is used and scrollbars are visible\n body.style.overflow = docElement.style.overflow = 'hidden';\n docElement.appendChild(body);\n }\n\n return docOverflow;\n}","import { docElement } from './docElement.js';\n\nexport function resetFakeBody (body, docOverflow) {\n if (body.fake) {\n body.remove();\n docElement.style.overflow = docOverflow;\n // Trigger layout so kinetic scrolling isn't disabled in iOS6+\n // eslint-disable-next-line\n docElement.offsetHeight;\n }\n}","// cross browsers addRule method\nimport { raf } from './raf.js';\nexport function addCSSRule(sheet, selector, rules, index) {\n // return raf(function() {\n 'insertRule' in sheet ?\n sheet.insertRule(selector + '{' + rules + '}', index) :\n sheet.addRule(selector, rules, index);\n // });\n}","export function getCssRulesLength(sheet) {\n var rule = ('insertRule' in sheet) ? sheet.cssRules : sheet.rules;\n return rule.length;\n}","// https://toddmotto.com/ditch-the-array-foreach-call-nodelist-hack/\nexport function forEach (arr, callback, scope) {\n for (var i = 0, l = arr.length; i < l; i++) {\n callback.call(scope, arr[i], i);\n }\n}","export var classListSupport = 'classList' in document.createElement('_');","import { classListSupport } from './classListSupport.js';\n\nvar hasClass = classListSupport ?\n function (el, str) { return el.classList.contains(str); } :\n function (el, str) { return el.className.indexOf(str) >= 0; };\n\nexport { classListSupport, hasClass };","import { classListSupport, hasClass } from './hasClass.js';\nvar addClass = classListSupport ?\n function (el, str) {\n if (!hasClass(el, str)) { el.classList.add(str); }\n } :\n function (el, str) {\n if (!hasClass(el, str)) { el.className += ' ' + str; }\n };\n\nexport { addClass };","import { classListSupport, hasClass } from './hasClass.js';\nvar removeClass = classListSupport ?\n function (el, str) {\n if (hasClass(el, str)) { el.classList.remove(str); }\n } :\n function (el, str) {\n if (hasClass(el, str)) { el.className = el.className.replace(str, ''); }\n };\n\nexport { removeClass };","export function hasAttr(el, attr) {\n return el.hasAttribute(attr);\n}","export function getAttr(el, attr) {\n return el.getAttribute(attr);\n}","export function isNodeList(el) {\n // Only NodeList has the \"item()\" function\n return typeof el.item !== \"undefined\"; \n}","import { isNodeList } from \"./isNodeList.js\";\n\nexport function setAttrs(els, attrs) {\n els = (isNodeList(els) || els instanceof Array) ? els : [els];\n if (Object.prototype.toString.call(attrs) !== '[object Object]') { return; }\n\n for (var i = els.length; i--;) {\n for(var key in attrs) {\n els[i].setAttribute(key, attrs[key]);\n }\n }\n}","import { isNodeList } from \"./isNodeList.js\";\n\nexport function removeAttrs(els, attrs) {\n els = (isNodeList(els) || els instanceof Array) ? els : [els];\n attrs = (attrs instanceof Array) ? attrs : [attrs];\n\n var attrLength = attrs.length;\n for (var i = els.length; i--;) {\n for (var j = attrLength; j--;) {\n els[i].removeAttribute(attrs[j]);\n }\n }\n}","export function arrayFromNodeList (nl) {\n var arr = [];\n for (var i = 0, l = nl.length; i < l; i++) {\n arr.push(nl[i]);\n }\n return arr;\n}","export function hideElement(el, forceHide) {\n if (el.style.display !== 'none') { el.style.display = 'none'; }\n}","export function showElement(el, forceHide) {\n if (el.style.display === 'none') { el.style.display = ''; }\n}","export function isVisible(el) {\n return window.getComputedStyle(el).display !== 'none';\n}","export function whichProperty(props){\n if (typeof props === 'string') {\n var arr = [props],\n Props = props.charAt(0).toUpperCase() + props.substr(1),\n prefixes = ['Webkit', 'Moz', 'ms', 'O'];\n \n prefixes.forEach(function(prefix) {\n if (prefix !== 'ms' || props === 'transform') {\n arr.push(prefix + Props);\n }\n });\n\n props = arr;\n }\n\n var el = document.createElement('fakeelement'),\n len = props.length;\n for(var i = 0; i < props.length; i++){\n var prop = props[i];\n if( el.style[prop] !== undefined ){ return prop; }\n }\n\n return false; // explicit for ie9-\n}\n","// get transitionend, animationend based on transitionDuration\n// @propin: string\n// @propOut: string, first-letter uppercase\n// Usage: getEndProperty('WebkitTransitionDuration', 'Transition') => webkitTransitionEnd\nexport function getEndProperty(propIn, propOut) {\n var endProp = false;\n if (/^Webkit/.test(propIn)) {\n endProp = 'webkit' + propOut + 'End';\n } else if (/^O/.test(propIn)) {\n endProp = 'o' + propOut + 'End';\n } else if (propIn) {\n endProp = propOut.toLowerCase() + 'end';\n }\n return endProp;\n}","// Test via a getter in the options object to see if the passive property is accessed\nvar supportsPassive = false;\ntry {\n var opts = Object.defineProperty({}, 'passive', {\n get: function() {\n supportsPassive = true;\n }\n });\n window.addEventListener(\"test\", null, opts);\n} catch (e) {}\nexport var passiveOption = supportsPassive ? { passive: true } : false;","import { passiveOption } from './passiveOption.js';\n\nexport function addEvents(el, obj, preventScrolling) {\n for (var prop in obj) {\n var option = ['touchstart', 'touchmove'].indexOf(prop) >= 0 && !preventScrolling ? passiveOption : false;\n el.addEventListener(prop, obj[prop], option);\n }\n}","import { passiveOption } from './passiveOption.js';\n\nexport function removeEvents(el, obj) {\n for (var prop in obj) {\n var option = ['touchstart', 'touchmove'].indexOf(prop) >= 0 ? passiveOption : false;\n el.removeEventListener(prop, obj[prop], option);\n }\n}","export function Events() {\n return {\n topics: {},\n on: function (eventName, fn) {\n this.topics[eventName] = this.topics[eventName] || [];\n this.topics[eventName].push(fn);\n },\n off: function(eventName, fn) {\n if (this.topics[eventName]) {\n for (var i = 0; i < this.topics[eventName].length; i++) {\n if (this.topics[eventName][i] === fn) {\n this.topics[eventName].splice(i, 1);\n break;\n }\n }\n }\n },\n emit: function (eventName, data) {\n data.type = eventName;\n if (this.topics[eventName]) {\n this.topics[eventName].forEach(function(fn) {\n fn(data, eventName);\n });\n }\n }\n };\n};","import './helpers/Object.keys';\nimport './helpers/childNode.remove';\nimport { raf } from './helpers/raf.js';\nimport { caf } from './helpers/caf.js';\nimport { extend } from './helpers/extend.js';\nimport { checkStorageValue } from './helpers/checkStorageValue.js';\nimport { setLocalStorage } from './helpers/setLocalStorage.js';\nimport { getSlideId } from './helpers/getSlideId.js';\nimport { calc } from './helpers/calc.js';\nimport { percentageLayout } from './helpers/percentageLayout.js';\nimport { mediaquerySupport } from './helpers/mediaquerySupport.js';\nimport { createStyleSheet } from './helpers/createStyleSheet.js';\nimport { addCSSRule } from './helpers/addCSSRule.js';\nimport { removeCSSRule } from './helpers/removeCSSRule.js';\nimport { getCssRulesLength } from './helpers/getCssRulesLength.js';\nimport { toDegree } from './helpers/toDegree.js';\nimport { getTouchDirection } from './helpers/getTouchDirection.js';\nimport { forEach } from './helpers/forEach.js';\nimport { hasClass } from './helpers/hasClass.js';\nimport { addClass } from './helpers/addClass.js';\nimport { removeClass } from './helpers/removeClass.js';\nimport { hasAttr } from './helpers/hasAttr.js';\nimport { getAttr } from './helpers/getAttr.js';\nimport { setAttrs } from './helpers/setAttrs.js';\nimport { removeAttrs } from './helpers/removeAttrs.js';\nimport { arrayFromNodeList } from './helpers/arrayFromNodeList.js';\nimport { hideElement } from './helpers/hideElement.js';\nimport { showElement } from './helpers/showElement.js';\nimport { isVisible } from './helpers/isVisible.js';\nimport { whichProperty } from './helpers/whichProperty.js';\nimport { has3DTransforms } from './helpers/has3DTransforms.js';\nimport { getEndProperty } from './helpers/getEndProperty.js';\nimport { addEvents } from './helpers/addEvents.js';\nimport { removeEvents } from './helpers/removeEvents.js';\nimport { Events } from './helpers/events.js';\nimport { jsTransform } from './helpers/jsTransform.js';\n\nexport var tns = function(options) {\n options = extend({\n container: '.slider',\n mode: 'carousel',\n axis: 'horizontal',\n items: 1,\n gutter: 0,\n edgePadding: 0,\n fixedWidth: false,\n autoWidth: false,\n viewportMax: false,\n slideBy: 1,\n center: false,\n controls: true,\n controlsPosition: 'top',\n controlsText: ['prev', 'next'],\n controlsContainer: false,\n prevButton: false,\n nextButton: false,\n nav: true,\n navPosition: 'top',\n navContainer: false,\n navAsThumbnails: false,\n arrowKeys: false,\n speed: 300,\n autoplay: false,\n autoplayPosition: 'top',\n autoplayTimeout: 5000,\n autoplayDirection: 'forward',\n autoplayText: ['start', 'stop'],\n autoplayHoverPause: false,\n autoplayButton: false,\n autoplayButtonOutput: true,\n autoplayResetOnVisibility: true,\n animateIn: 'tns-fadeIn',\n animateOut: 'tns-fadeOut',\n animateNormal: 'tns-normal',\n animateDelay: false,\n loop: true,\n rewind: false,\n autoHeight: false,\n responsive: false,\n lazyload: false,\n lazyloadSelector: '.tns-lazy-img',\n touch: true,\n mouseDrag: false,\n swipeAngle: 15,\n nested: false,\n preventActionWhenRunning: false,\n preventScrollOnTouch: false,\n freezable: true,\n onInit: false,\n useLocalStorage: true\n }, options || {});\n \n var doc = document,\n win = window,\n KEYS = {\n ENTER: 13,\n SPACE: 32,\n LEFT: 37,\n RIGHT: 39\n },\n tnsStorage = {},\n localStorageAccess = options.useLocalStorage;\n\n if (localStorageAccess) {\n // check browser version and local storage access\n var browserInfo = navigator.userAgent;\n var uid = new Date;\n\n try {\n tnsStorage = win.localStorage;\n if (tnsStorage) {\n tnsStorage.setItem(uid, uid);\n localStorageAccess = tnsStorage.getItem(uid) == uid;\n tnsStorage.removeItem(uid);\n } else {\n localStorageAccess = false;\n }\n if (!localStorageAccess) { tnsStorage = {}; }\n } catch(e) {\n localStorageAccess = false;\n }\n\n if (localStorageAccess) {\n // remove storage when browser version changes\n if (tnsStorage['tnsApp'] && tnsStorage['tnsApp'] !== browserInfo) {\n ['tC', 'tPL', 'tMQ', 'tTf', 't3D', 'tTDu', 'tTDe', 'tADu', 'tADe', 'tTE', 'tAE'].forEach(function(item) { tnsStorage.removeItem(item); });\n }\n // update browserInfo\n localStorage['tnsApp'] = browserInfo;\n }\n }\n\n var CALC = tnsStorage['tC'] ? checkStorageValue(tnsStorage['tC']) : setLocalStorage(tnsStorage, 'tC', calc(), localStorageAccess),\n PERCENTAGELAYOUT = tnsStorage['tPL'] ? checkStorageValue(tnsStorage['tPL']) : setLocalStorage(tnsStorage, 'tPL', percentageLayout(), localStorageAccess),\n CSSMQ = tnsStorage['tMQ'] ? checkStorageValue(tnsStorage['tMQ']) : setLocalStorage(tnsStorage, 'tMQ', mediaquerySupport(), localStorageAccess),\n TRANSFORM = tnsStorage['tTf'] ? checkStorageValue(tnsStorage['tTf']) : setLocalStorage(tnsStorage, 'tTf', whichProperty('transform'), localStorageAccess),\n HAS3DTRANSFORMS = tnsStorage['t3D'] ? checkStorageValue(tnsStorage['t3D']) : setLocalStorage(tnsStorage, 't3D', has3DTransforms(TRANSFORM), localStorageAccess),\n TRANSITIONDURATION = tnsStorage['tTDu'] ? checkStorageValue(tnsStorage['tTDu']) : setLocalStorage(tnsStorage, 'tTDu', whichProperty('transitionDuration'), localStorageAccess),\n TRANSITIONDELAY = tnsStorage['tTDe'] ? checkStorageValue(tnsStorage['tTDe']) : setLocalStorage(tnsStorage, 'tTDe', whichProperty('transitionDelay'), localStorageAccess),\n ANIMATIONDURATION = tnsStorage['tADu'] ? checkStorageValue(tnsStorage['tADu']) : setLocalStorage(tnsStorage, 'tADu', whichProperty('animationDuration'), localStorageAccess),\n ANIMATIONDELAY = tnsStorage['tADe'] ? checkStorageValue(tnsStorage['tADe']) : setLocalStorage(tnsStorage, 'tADe', whichProperty('animationDelay'), localStorageAccess),\n TRANSITIONEND = tnsStorage['tTE'] ? checkStorageValue(tnsStorage['tTE']) : setLocalStorage(tnsStorage, 'tTE', getEndProperty(TRANSITIONDURATION, 'Transition'), localStorageAccess),\n ANIMATIONEND = tnsStorage['tAE'] ? checkStorageValue(tnsStorage['tAE']) : setLocalStorage(tnsStorage, 'tAE', getEndProperty(ANIMATIONDURATION, 'Animation'), localStorageAccess);\n\n // get element nodes from selectors\n var supportConsoleWarn = win.console && typeof win.console.warn === \"function\",\n tnsList = ['container', 'controlsContainer', 'prevButton', 'nextButton', 'navContainer', 'autoplayButton'], \n optionsElements = {};\n \n tnsList.forEach(function(item) {\n if (typeof options[item] === 'string') {\n var str = options[item],\n el = doc.querySelector(str);\n optionsElements[item] = str;\n\n if (el && el.nodeName) {\n options[item] = el;\n } else {\n if (supportConsoleWarn) { console.warn('Can\\'t find', options[item]); }\n return;\n }\n }\n });\n\n // make sure at least 1 slide\n if (options.container.children.length < 1) {\n if (supportConsoleWarn) { console.warn('No slides found in', options.container); }\n return;\n }\n\n // update options\n var responsive = options.responsive,\n nested = options.nested,\n carousel = options.mode === 'carousel' ? true : false;\n\n if (responsive) {\n // apply responsive[0] to options and remove it\n if (0 in responsive) {\n options = extend(options, responsive[0]);\n delete responsive[0];\n }\n\n var responsiveTem = {};\n for (var key in responsive) {\n var val = responsive[key];\n // update responsive\n // from: 300: 2\n // to: \n // 300: { \n // items: 2 \n // } \n val = typeof val === 'number' ? {items: val} : val;\n responsiveTem[key] = val;\n }\n responsive = responsiveTem;\n responsiveTem = null;\n }\n\n // update options\n function updateOptions (obj) {\n for (var key in obj) {\n if (!carousel) {\n if (key === 'slideBy') { obj[key] = 'page'; }\n if (key === 'edgePadding') { obj[key] = false; }\n if (key === 'autoHeight') { obj[key] = false; }\n }\n\n // update responsive options\n if (key === 'responsive') { updateOptions(obj[key]); }\n }\n }\n if (!carousel) { updateOptions(options); }\n\n\n // === define and set variables ===\n if (!carousel) {\n options.axis = 'horizontal';\n options.slideBy = 'page';\n options.edgePadding = false;\n\n var animateIn = options.animateIn,\n animateOut = options.animateOut,\n animateDelay = options.animateDelay,\n animateNormal = options.animateNormal;\n }\n\n var horizontal = options.axis === 'horizontal' ? true : false,\n outerWrapper = doc.createElement('div'),\n innerWrapper = doc.createElement('div'),\n middleWrapper,\n container = options.container,\n containerParent = container.parentNode,\n containerHTML = container.outerHTML,\n slideItems = container.children,\n slideCount = slideItems.length,\n breakpointZone,\n windowWidth = getWindowWidth(),\n isOn = false;\n if (responsive) { setBreakpointZone(); }\n if (carousel) { container.className += ' tns-vpfix'; }\n\n // fixedWidth: viewport > rightBoundary > indexMax\n var autoWidth = options.autoWidth,\n fixedWidth = getOption('fixedWidth'),\n edgePadding = getOption('edgePadding'),\n gutter = getOption('gutter'),\n viewport = getViewportWidth(),\n center = getOption('center'),\n items = !autoWidth ? Math.floor(getOption('items')) : 1,\n slideBy = getOption('slideBy'),\n viewportMax = options.viewportMax || options.fixedWidthViewportWidth,\n arrowKeys = getOption('arrowKeys'),\n speed = getOption('speed'),\n rewind = options.rewind,\n loop = rewind ? false : options.loop,\n autoHeight = getOption('autoHeight'),\n controls = getOption('controls'),\n controlsText = getOption('controlsText'),\n nav = getOption('nav'),\n touch = getOption('touch'),\n mouseDrag = getOption('mouseDrag'),\n autoplay = getOption('autoplay'),\n autoplayTimeout = getOption('autoplayTimeout'),\n autoplayText = getOption('autoplayText'),\n autoplayHoverPause = getOption('autoplayHoverPause'),\n autoplayResetOnVisibility = getOption('autoplayResetOnVisibility'),\n sheet = createStyleSheet(),\n lazyload = options.lazyload,\n lazyloadSelector = options.lazyloadSelector,\n slidePositions, // collection of slide positions\n slideItemsOut = [],\n cloneCount = loop ? getCloneCountForLoop() : 0,\n slideCountNew = !carousel ? slideCount + cloneCount : slideCount + cloneCount * 2,\n hasRightDeadZone = (fixedWidth || autoWidth) && !loop ? true : false,\n rightBoundary = fixedWidth ? getRightBoundary() : null,\n updateIndexBeforeTransform = (!carousel || !loop) ? true : false,\n // transform\n transformAttr = horizontal ? 'left' : 'top',\n transformPrefix = '',\n transformPostfix = '',\n // index\n getIndexMax = (function () {\n if (fixedWidth) {\n return function() { return center && !loop ? slideCount - 1 : Math.ceil(- rightBoundary / (fixedWidth + gutter)); };\n } else if (autoWidth) {\n return function() {\n for (var i = slideCountNew; i--;) {\n if (slidePositions[i] >= - rightBoundary) { return i; }\n }\n };\n } else {\n return function() {\n if (center && carousel && !loop) {\n return slideCount - 1;\n } else {\n return loop || carousel ? Math.max(0, slideCountNew - Math.ceil(items)) : slideCountNew - 1;\n }\n };\n }\n })(),\n index = getStartIndex(getOption('startIndex')),\n indexCached = index,\n displayIndex = getCurrentSlide(),\n indexMin = 0,\n indexMax = !autoWidth ? getIndexMax() : null,\n // resize\n resizeTimer,\n preventActionWhenRunning = options.preventActionWhenRunning,\n swipeAngle = options.swipeAngle,\n moveDirectionExpected = swipeAngle ? '?' : true,\n running = false,\n onInit = options.onInit,\n events = new Events(),\n // id, class\n newContainerClasses = ' tns-slider tns-' + options.mode,\n slideId = container.id || getSlideId(),\n disable = getOption('disable'),\n disabled = false,\n freezable = options.freezable,\n freeze = freezable && !autoWidth ? getFreeze() : false,\n frozen = false,\n controlsEvents = {\n 'click': onControlsClick,\n 'keydown': onControlsKeydown\n },\n navEvents = {\n 'click': onNavClick,\n 'keydown': onNavKeydown\n },\n hoverEvents = {\n 'mouseover': mouseoverPause,\n 'mouseout': mouseoutRestart\n },\n visibilityEvent = {'visibilitychange': onVisibilityChange},\n docmentKeydownEvent = {'keydown': onDocumentKeydown},\n touchEvents = {\n 'touchstart': onPanStart,\n 'touchmove': onPanMove,\n 'touchend': onPanEnd,\n 'touchcancel': onPanEnd\n }, dragEvents = {\n 'mousedown': onPanStart,\n 'mousemove': onPanMove,\n 'mouseup': onPanEnd,\n 'mouseleave': onPanEnd\n },\n hasControls = hasOption('controls'),\n hasNav = hasOption('nav'),\n navAsThumbnails = autoWidth ? true : options.navAsThumbnails,\n hasAutoplay = hasOption('autoplay'),\n hasTouch = hasOption('touch'),\n hasMouseDrag = hasOption('mouseDrag'),\n slideActiveClass = 'tns-slide-active',\n imgCompleteClass = 'tns-complete',\n imgEvents = {\n 'load': onImgLoaded,\n 'error': onImgFailed\n },\n imgsComplete,\n liveregionCurrent,\n preventScroll = options.preventScrollOnTouch === 'force' ? true : false;\n\n // controls\n if (hasControls) {\n var controlsContainer = options.controlsContainer,\n controlsContainerHTML = options.controlsContainer ? options.controlsContainer.outerHTML : '',\n prevButton = options.prevButton,\n nextButton = options.nextButton,\n prevButtonHTML = options.prevButton ? options.prevButton.outerHTML : '',\n nextButtonHTML = options.nextButton ? options.nextButton.outerHTML : '',\n prevIsButton,\n nextIsButton;\n }\n\n // nav\n if (hasNav) {\n var navContainer = options.navContainer,\n navContainerHTML = options.navContainer ? options.navContainer.outerHTML : '',\n navItems,\n pages = autoWidth ? slideCount : getPages(),\n pagesCached = 0,\n navClicked = -1,\n navCurrentIndex = getCurrentNavIndex(),\n navCurrentIndexCached = navCurrentIndex,\n navActiveClass = 'tns-nav-active',\n navStr = 'Carousel Page ',\n navStrCurrent = ' (Current Slide)';\n }\n\n // autoplay\n if (hasAutoplay) {\n var autoplayDirection = options.autoplayDirection === 'forward' ? 1 : -1,\n autoplayButton = options.autoplayButton,\n autoplayButtonHTML = options.autoplayButton ? options.autoplayButton.outerHTML : '',\n autoplayHtmlStrings = ['', ' animation'],\n autoplayTimer,\n animating,\n autoplayHoverPaused,\n autoplayUserPaused,\n autoplayVisibilityPaused;\n }\n\n if (hasTouch || hasMouseDrag) {\n var initPosition = {},\n lastPosition = {},\n translateInit,\n disX,\n disY,\n panStart = false,\n rafIndex,\n getDist = horizontal ? \n function(a, b) { return a.x - b.x; } :\n function(a, b) { return a.y - b.y; };\n }\n \n // disable slider when slidecount <= items\n if (!autoWidth) { resetVariblesWhenDisable(disable || freeze); }\n\n if (TRANSFORM) {\n transformAttr = TRANSFORM;\n transformPrefix = 'translate';\n\n if (HAS3DTRANSFORMS) {\n transformPrefix += horizontal ? '3d(' : '3d(0px, ';\n transformPostfix = horizontal ? ', 0px, 0px)' : ', 0px)';\n } else {\n transformPrefix += horizontal ? 'X(' : 'Y(';\n transformPostfix = ')';\n }\n\n }\n\n if (carousel) { container.className = container.className.replace('tns-vpfix', ''); }\n initStructure();\n initSheet();\n initSliderTransform();\n\n // === COMMON FUNCTIONS === //\n function resetVariblesWhenDisable (condition) {\n if (condition) {\n controls = nav = touch = mouseDrag = arrowKeys = autoplay = autoplayHoverPause = autoplayResetOnVisibility = false;\n }\n }\n\n function getCurrentSlide () {\n var tem = carousel ? index - cloneCount : index;\n while (tem < 0) { tem += slideCount; }\n return tem%slideCount + 1;\n }\n\n function getStartIndex (ind) {\n ind = ind ? Math.max(0, Math.min(loop ? slideCount - 1 : slideCount - items, ind)) : 0;\n return carousel ? ind + cloneCount : ind;\n }\n\n function getAbsIndex (i) {\n if (i == null) { i = index; }\n\n if (carousel) { i -= cloneCount; }\n while (i < 0) { i += slideCount; }\n\n return Math.floor(i%slideCount);\n }\n\n function getCurrentNavIndex () {\n var absIndex = getAbsIndex(),\n result;\n\n result = navAsThumbnails ? absIndex : \n fixedWidth || autoWidth ? Math.ceil((absIndex + 1) * pages / slideCount - 1) : \n Math.floor(absIndex / items);\n\n // set active nav to the last one when reaches the right edge\n if (!loop && carousel && index === indexMax) { result = pages - 1; }\n\n return result;\n }\n\n function getItemsMax () {\n // fixedWidth or autoWidth while viewportMax is not available\n if (autoWidth || (fixedWidth && !viewportMax)) {\n return slideCount - 1;\n // most cases\n } else {\n var str = fixedWidth ? 'fixedWidth' : 'items',\n arr = [];\n\n if (fixedWidth || options[str] < slideCount) { arr.push(options[str]); }\n\n if (responsive) {\n for (var bp in responsive) {\n var tem = responsive[bp][str];\n if (tem && (fixedWidth || tem < slideCount)) { arr.push(tem); }\n }\n }\n\n if (!arr.length) { arr.push(0); }\n\n return Math.ceil(fixedWidth ? viewportMax / Math.min.apply(null, arr) : Math.max.apply(null, arr));\n }\n }\n\n function getCloneCountForLoop () {\n var itemsMax = getItemsMax(),\n result = carousel ? Math.ceil((itemsMax * 5 - slideCount)/2) : (itemsMax * 4 - slideCount);\n result = Math.max(itemsMax, result);\n\n return hasOption('edgePadding') ? result + 1 : result;\n }\n\n function getWindowWidth () {\n return win.innerWidth || doc.documentElement.clientWidth || doc.body.clientWidth;\n }\n\n function getInsertPosition (pos) {\n return pos === 'top' ? 'afterbegin' : 'beforeend';\n }\n\n function getClientWidth (el) {\n var div = doc.createElement('div'), rect, width;\n el.appendChild(div);\n rect = div.getBoundingClientRect();\n width = rect.right - rect.left;\n div.remove();\n return width || getClientWidth(el.parentNode);\n }\n\n function getViewportWidth () {\n var gap = edgePadding ? edgePadding * 2 - gutter : 0;\n return getClientWidth(containerParent) - gap;\n }\n\n function hasOption (item) {\n if (options[item]) {\n return true;\n } else {\n if (responsive) {\n for (var bp in responsive) {\n if (responsive[bp][item]) { return true; }\n }\n }\n return false;\n }\n }\n\n // get option:\n // fixed width: viewport, fixedWidth, gutter => items\n // others: window width => all variables\n // all: items => slideBy\n function getOption (item, ww) {\n if (ww == null) { ww = windowWidth; }\n\n if (item === 'items' && fixedWidth) {\n return Math.floor((viewport + gutter) / (fixedWidth + gutter)) || 1;\n\n } else {\n var result = options[item];\n\n if (responsive) {\n for (var bp in responsive) {\n // bp: convert string to number\n if (ww >= parseInt(bp)) {\n if (item in responsive[bp]) { result = responsive[bp][item]; }\n }\n }\n }\n\n if (item === 'slideBy' && result === 'page') { result = getOption('items'); }\n if (!carousel && (item === 'slideBy' || item === 'items')) { result = Math.floor(result); }\n\n return result;\n }\n }\n\n function getSlideMarginLeft (i) {\n return CALC ? \n CALC + '(' + i * 100 + '% / ' + slideCountNew + ')' : \n i * 100 / slideCountNew + '%';\n }\n\n function getInnerWrapperStyles (edgePaddingTem, gutterTem, fixedWidthTem, speedTem, autoHeightBP) {\n var str = '';\n\n if (edgePaddingTem !== undefined) {\n var gap = edgePaddingTem;\n if (gutterTem) { gap -= gutterTem; }\n str = horizontal ?\n 'margin: 0 ' + gap + 'px 0 ' + edgePaddingTem + 'px;' :\n 'margin: ' + edgePaddingTem + 'px 0 ' + gap + 'px 0;';\n } else if (gutterTem && !fixedWidthTem) {\n var gutterTemUnit = '-' + gutterTem + 'px',\n dir = horizontal ? gutterTemUnit + ' 0 0' : '0 ' + gutterTemUnit + ' 0';\n str = 'margin: 0 ' + dir + ';'\n }\n\n if (!carousel && autoHeightBP && TRANSITIONDURATION && speedTem) { str += getTransitionDurationStyle(speedTem); }\n return str;\n }\n\n function getContainerWidth (fixedWidthTem, gutterTem, itemsTem) {\n if (fixedWidthTem) {\n return (fixedWidthTem + gutterTem) * slideCountNew + 'px';\n } else {\n return CALC ?\n CALC + '(' + slideCountNew * 100 + '% / ' + itemsTem + ')' :\n slideCountNew * 100 / itemsTem + '%';\n }\n }\n\n function getSlideWidthStyle (fixedWidthTem, gutterTem, itemsTem) {\n var width;\n\n if (fixedWidthTem) {\n width = (fixedWidthTem + gutterTem) + 'px';\n } else {\n if (!carousel) { itemsTem = Math.floor(itemsTem); }\n var dividend = carousel ? slideCountNew : itemsTem;\n width = CALC ? \n CALC + '(100% / ' + dividend + ')' : \n 100 / dividend + '%';\n }\n\n width = 'width:' + width;\n\n // inner slider: overwrite outer slider styles\n return nested !== 'inner' ? width + ';' : width + ' !important;';\n }\n\n function getSlideGutterStyle (gutterTem) {\n var str = '';\n\n // gutter maybe interger || 0\n // so can't use 'if (gutter)'\n if (gutterTem !== false) {\n var prop = horizontal ? 'padding-' : 'margin-',\n dir = horizontal ? 'right' : 'bottom';\n str = prop + dir + ': ' + gutterTem + 'px;';\n }\n\n return str;\n }\n\n function getCSSPrefix (name, num) {\n var prefix = name.substring(0, name.length - num).toLowerCase();\n if (prefix) { prefix = '-' + prefix + '-'; }\n\n return prefix;\n }\n\n function getTransitionDurationStyle (speed) {\n return getCSSPrefix(TRANSITIONDURATION, 18) + 'transition-duration:' + speed / 1000 + 's;';\n }\n\n function getAnimationDurationStyle (speed) {\n return getCSSPrefix(ANIMATIONDURATION, 17) + 'animation-duration:' + speed / 1000 + 's;';\n }\n\n function initStructure () {\n var classOuter = 'tns-outer',\n classInner = 'tns-inner',\n hasGutter = hasOption('gutter');\n\n outerWrapper.className = classOuter;\n innerWrapper.className = classInner;\n outerWrapper.id = slideId + '-ow';\n innerWrapper.id = slideId + '-iw';\n\n // set container properties\n if (container.id === '') { container.id = slideId; }\n newContainerClasses += PERCENTAGELAYOUT || autoWidth ? ' tns-subpixel' : ' tns-no-subpixel';\n newContainerClasses += CALC ? ' tns-calc' : ' tns-no-calc';\n if (autoWidth) { newContainerClasses += ' tns-autowidth'; }\n newContainerClasses += ' tns-' + options.axis;\n container.className += newContainerClasses;\n\n // add constrain layer for carousel\n if (carousel) {\n middleWrapper = doc.createElement('div');\n middleWrapper.id = slideId + '-mw';\n middleWrapper.className = 'tns-ovh';\n\n outerWrapper.appendChild(middleWrapper);\n middleWrapper.appendChild(innerWrapper);\n } else {\n outerWrapper.appendChild(innerWrapper);\n }\n\n if (autoHeight) {\n var wp = middleWrapper ? middleWrapper : innerWrapper;\n wp.className += ' tns-ah';\n }\n\n containerParent.insertBefore(outerWrapper, container);\n innerWrapper.appendChild(container);\n\n // add id, class, aria attributes \n // before clone slides\n forEach(slideItems, function(item, i) {\n addClass(item, 'tns-item');\n if (!item.id) { item.id = slideId + '-item' + i; }\n if (!carousel && animateNormal) { addClass(item, animateNormal); }\n setAttrs(item, {\n 'aria-hidden': 'true',\n 'tabindex': '-1'\n });\n });\n\n // ## clone slides\n // carousel: n + slides + n\n // gallery: slides + n\n if (cloneCount) {\n var fragmentBefore = doc.createDocumentFragment(), \n fragmentAfter = doc.createDocumentFragment();\n\n for (var j = cloneCount; j--;) {\n var num = j%slideCount,\n cloneFirst = slideItems[num].cloneNode(true);\n removeAttrs(cloneFirst, 'id');\n fragmentAfter.insertBefore(cloneFirst, fragmentAfter.firstChild);\n\n if (carousel) {\n var cloneLast = slideItems[slideCount - 1 - num].cloneNode(true);\n removeAttrs(cloneLast, 'id');\n fragmentBefore.appendChild(cloneLast);\n }\n }\n\n container.insertBefore(fragmentBefore, container.firstChild);\n container.appendChild(fragmentAfter);\n slideItems = container.children;\n }\n\n }\n\n function initSliderTransform () {\n // ## images loaded/failed\n if (hasOption('autoHeight') || autoWidth || !horizontal) {\n var imgs = container.querySelectorAll('img');\n\n // add complete class if all images are loaded/failed\n forEach(imgs, function(img) {\n var src = img.src;\n \n if (src && src.indexOf('data:image') < 0) {\n addEvents(img, imgEvents);\n img.src = '';\n img.src = src;\n addClass(img, 'loading');\n } else if (!lazyload) {\n imgLoaded(img);\n }\n });\n\n // All imgs are completed\n raf(function(){ imgsLoadedCheck(arrayFromNodeList(imgs), function() { imgsComplete = true; }); });\n\n // Check imgs in window only for auto height\n if (!autoWidth && horizontal) { imgs = getImageArray(index, Math.min(index + items - 1, slideCountNew - 1)); }\n\n lazyload ? initSliderTransformStyleCheck() : raf(function(){ imgsLoadedCheck(arrayFromNodeList(imgs), initSliderTransformStyleCheck); });\n\n } else {\n // set container transform property\n if (carousel) { doContainerTransformSilent(); }\n\n // update slider tools and events\n initTools();\n initEvents();\n }\n }\n\n function initSliderTransformStyleCheck () {\n if (autoWidth) {\n // check styles application\n var num = loop ? index : slideCount - 1;\n (function stylesApplicationCheck() {\n slideItems[num - 1].getBoundingClientRect().right.toFixed(2) === slideItems[num].getBoundingClientRect().left.toFixed(2) ?\n initSliderTransformCore() :\n setTimeout(function(){ stylesApplicationCheck() }, 16);\n })();\n } else {\n initSliderTransformCore();\n }\n }\n\n\n function initSliderTransformCore () {\n // run Fn()s which are rely on image loading\n if (!horizontal || autoWidth) {\n setSlidePositions();\n\n if (autoWidth) {\n rightBoundary = getRightBoundary();\n if (freezable) { freeze = getFreeze(); }\n indexMax = getIndexMax(); // <= slidePositions, rightBoundary <=\n resetVariblesWhenDisable(disable || freeze);\n } else {\n updateContentWrapperHeight();\n }\n }\n\n // set container transform property\n if (carousel) { doContainerTransformSilent(); }\n\n // update slider tools and events\n initTools();\n initEvents();\n }\n\n function initSheet () {\n // gallery:\n // set animation classes and left value for gallery slider\n if (!carousel) { \n for (var i = index, l = index + Math.min(slideCount, items); i < l; i++) {\n var item = slideItems[i];\n item.style.left = (i - index) * 100 / items + '%';\n addClass(item, animateIn);\n removeClass(item, animateNormal);\n }\n }\n\n // #### LAYOUT\n\n // ## INLINE-BLOCK VS FLOAT\n\n // ## PercentageLayout:\n // slides: inline-block\n // remove blank space between slides by set font-size: 0\n\n // ## Non PercentageLayout:\n // slides: float\n // margin-right: -100%\n // margin-left: ~\n\n // Resource: https://docs.google.com/spreadsheets/d/147up245wwTXeQYve3BRSAD4oVcvQmuGsFteJOeA5xNQ/edit?usp=sharing\n if (horizontal) {\n if (PERCENTAGELAYOUT || autoWidth) {\n addCSSRule(sheet, '#' + slideId + ' > .tns-item', 'font-size:' + win.getComputedStyle(slideItems[0]).fontSize + ';', getCssRulesLength(sheet));\n addCSSRule(sheet, '#' + slideId, 'font-size:0;', getCssRulesLength(sheet));\n } else if (carousel) {\n forEach(slideItems, function (slide, i) {\n slide.style.marginLeft = getSlideMarginLeft(i);\n });\n }\n }\n\n\n // ## BASIC STYLES\n if (CSSMQ) {\n // middle wrapper style\n if (TRANSITIONDURATION) {\n var str = middleWrapper && options.autoHeight ? getTransitionDurationStyle(options.speed) : '';\n addCSSRule(sheet, '#' + slideId + '-mw', str, getCssRulesLength(sheet));\n }\n\n // inner wrapper styles\n str = getInnerWrapperStyles(options.edgePadding, options.gutter, options.fixedWidth, options.speed, options.autoHeight);\n addCSSRule(sheet, '#' + slideId + '-iw', str, getCssRulesLength(sheet));\n\n // container styles\n if (carousel) {\n str = horizontal && !autoWidth ? 'width:' + getContainerWidth(options.fixedWidth, options.gutter, options.items) + ';' : '';\n if (TRANSITIONDURATION) { str += getTransitionDurationStyle(speed); }\n addCSSRule(sheet, '#' + slideId, str, getCssRulesLength(sheet));\n }\n\n // slide styles\n str = horizontal && !autoWidth ? getSlideWidthStyle(options.fixedWidth, options.gutter, options.items) : '';\n if (options.gutter) { str += getSlideGutterStyle(options.gutter); }\n // set gallery items transition-duration\n if (!carousel) {\n if (TRANSITIONDURATION) { str += getTransitionDurationStyle(speed); }\n if (ANIMATIONDURATION) { str += getAnimationDurationStyle(speed); }\n }\n if (str) { addCSSRule(sheet, '#' + slideId + ' > .tns-item', str, getCssRulesLength(sheet)); }\n\n // non CSS mediaqueries: IE8\n // ## update inner wrapper, container, slides if needed\n // set inline styles for inner wrapper & container\n // insert stylesheet (one line) for slides only (since slides are many)\n } else {\n // middle wrapper styles\n update_carousel_transition_duration();\n\n // inner wrapper styles\n innerWrapper.style.cssText = getInnerWrapperStyles(edgePadding, gutter, fixedWidth, autoHeight);\n\n // container styles\n if (carousel && horizontal && !autoWidth) {\n container.style.width = getContainerWidth(fixedWidth, gutter, items);\n }\n\n // slide styles\n var str = horizontal && !autoWidth ? getSlideWidthStyle(fixedWidth, gutter, items) : '';\n if (gutter) { str += getSlideGutterStyle(gutter); }\n\n // append to the last line\n if (str) { addCSSRule(sheet, '#' + slideId + ' > .tns-item', str, getCssRulesLength(sheet)); }\n }\n\n // ## MEDIAQUERIES\n if (responsive && CSSMQ) {\n for (var bp in responsive) {\n // bp: convert string to number\n bp = parseInt(bp);\n\n var opts = responsive[bp],\n str = '',\n middleWrapperStr = '',\n innerWrapperStr = '',\n containerStr = '',\n slideStr = '',\n itemsBP = !autoWidth ? getOption('items', bp) : null,\n fixedWidthBP = getOption('fixedWidth', bp),\n speedBP = getOption('speed', bp),\n edgePaddingBP = getOption('edgePadding', bp),\n autoHeightBP = getOption('autoHeight', bp),\n gutterBP = getOption('gutter', bp);\n\n // middle wrapper string\n if (TRANSITIONDURATION && middleWrapper && getOption('autoHeight', bp) && 'speed' in opts) {\n middleWrapperStr = '#' + slideId + '-mw{' + getTransitionDurationStyle(speedBP) + '}';\n }\n\n // inner wrapper string\n if ('edgePadding' in opts || 'gutter' in opts) {\n innerWrapperStr = '#' + slideId + '-iw{' + getInnerWrapperStyles(edgePaddingBP, gutterBP, fixedWidthBP, speedBP, autoHeightBP) + '}';\n }\n\n // container string\n if (carousel && horizontal && !autoWidth && ('fixedWidth' in opts || 'items' in opts || (fixedWidth && 'gutter' in opts))) {\n containerStr = 'width:' + getContainerWidth(fixedWidthBP, gutterBP, itemsBP) + ';';\n }\n if (TRANSITIONDURATION && 'speed' in opts) {\n containerStr += getTransitionDurationStyle(speedBP);\n }\n if (containerStr) {\n containerStr = '#' + slideId + '{' + containerStr + '}';\n }\n\n // slide string\n if ('fixedWidth' in opts || (fixedWidth && 'gutter' in opts) || !carousel && 'items' in opts) {\n slideStr += getSlideWidthStyle(fixedWidthBP, gutterBP, itemsBP);\n }\n if ('gutter' in opts) {\n slideStr += getSlideGutterStyle(gutterBP);\n }\n // set gallery items transition-duration\n if (!carousel && 'speed' in opts) {\n if (TRANSITIONDURATION) { slideStr += getTransitionDurationStyle(speedBP); }\n if (ANIMATIONDURATION) { slideStr += getAnimationDurationStyle(speedBP); }\n }\n if (slideStr) { slideStr = '#' + slideId + ' > .tns-item{' + slideStr + '}'; }\n\n // add up\n str = middleWrapperStr + innerWrapperStr + containerStr + slideStr;\n\n if (str) {\n sheet.insertRule('@media (min-width: ' + bp / 16 + 'em) {' + str + '}', sheet.cssRules.length);\n }\n }\n }\n }\n\n function initTools () {\n // == slides ==\n updateSlideStatus();\n\n // == live region ==\n outerWrapper.insertAdjacentHTML('afterbegin', '
    slide ' + getLiveRegionStr() + ' of ' + slideCount + '
    ');\n liveregionCurrent = outerWrapper.querySelector('.tns-liveregion .current');\n\n // == autoplayInit ==\n if (hasAutoplay) {\n var txt = autoplay ? 'stop' : 'start';\n if (autoplayButton) {\n setAttrs(autoplayButton, {'data-action': txt});\n } else if (options.autoplayButtonOutput) {\n outerWrapper.insertAdjacentHTML(getInsertPosition(options.autoplayPosition), '');\n autoplayButton = outerWrapper.querySelector('[data-action]');\n }\n\n // add event\n if (autoplayButton) {\n addEvents(autoplayButton, {'click': toggleAutoplay});\n }\n\n if (autoplay) {\n startAutoplay();\n if (autoplayHoverPause) { addEvents(container, hoverEvents); }\n if (autoplayResetOnVisibility) { addEvents(container, visibilityEvent); }\n }\n }\n \n // == navInit ==\n if (hasNav) {\n var initIndex = !carousel ? 0 : cloneCount;\n // customized nav\n // will not hide the navs in case they're thumbnails\n if (navContainer) {\n setAttrs(navContainer, {'aria-label': 'Carousel Pagination'});\n navItems = navContainer.children;\n forEach(navItems, function(item, i) {\n setAttrs(item, {\n 'data-nav': i,\n 'tabindex': '-1',\n 'aria-label': navStr + (i + 1),\n 'aria-controls': slideId,\n });\n });\n\n // generated nav \n } else {\n var navHtml = '',\n hiddenStr = navAsThumbnails ? '' : 'style=\"display:none\"';\n for (var i = 0; i < slideCount; i++) {\n // hide nav items by default\n navHtml += '';\n }\n navHtml = '
    ' + navHtml + '
    ';\n outerWrapper.insertAdjacentHTML(getInsertPosition(options.navPosition), navHtml);\n\n navContainer = outerWrapper.querySelector('.tns-nav');\n navItems = navContainer.children;\n }\n\n updateNavVisibility();\n\n // add transition\n if (TRANSITIONDURATION) {\n var prefix = TRANSITIONDURATION.substring(0, TRANSITIONDURATION.length - 18).toLowerCase(),\n str = 'transition: all ' + speed / 1000 + 's';\n\n if (prefix) {\n str = '-' + prefix + '-' + str;\n }\n\n addCSSRule(sheet, '[aria-controls^=' + slideId + '-item]', str, getCssRulesLength(sheet));\n }\n\n setAttrs(navItems[navCurrentIndex], {'aria-label': navStr + (navCurrentIndex + 1) + navStrCurrent});\n removeAttrs(navItems[navCurrentIndex], 'tabindex');\n addClass(navItems[navCurrentIndex], navActiveClass);\n\n // add events\n addEvents(navContainer, navEvents);\n }\n\n\n\n // == controlsInit ==\n if (hasControls) {\n if (!controlsContainer && (!prevButton || !nextButton)) {\n outerWrapper.insertAdjacentHTML(getInsertPosition(options.controlsPosition), '
    ');\n\n controlsContainer = outerWrapper.querySelector('.tns-controls');\n }\n\n if (!prevButton || !nextButton) {\n prevButton = controlsContainer.children[0];\n nextButton = controlsContainer.children[1];\n }\n\n if (options.controlsContainer) {\n setAttrs(controlsContainer, {\n 'aria-label': 'Carousel Navigation',\n 'tabindex': '0'\n });\n }\n\n if (options.controlsContainer || (options.prevButton && options.nextButton)) {\n setAttrs([prevButton, nextButton], {\n 'aria-controls': slideId,\n 'tabindex': '-1',\n });\n }\n \n if (options.controlsContainer || (options.prevButton && options.nextButton)) {\n setAttrs(prevButton, {'data-controls' : 'prev'});\n setAttrs(nextButton, {'data-controls' : 'next'});\n }\n\n prevIsButton = isButton(prevButton);\n nextIsButton = isButton(nextButton);\n\n updateControlsStatus();\n\n // add events\n if (controlsContainer) {\n addEvents(controlsContainer, controlsEvents);\n } else {\n addEvents(prevButton, controlsEvents);\n addEvents(nextButton, controlsEvents);\n }\n }\n\n // hide tools if needed\n disableUI();\n }\n\n function initEvents () {\n // add events\n if (carousel && TRANSITIONEND) {\n var eve = {};\n eve[TRANSITIONEND] = onTransitionEnd;\n addEvents(container, eve);\n }\n\n if (touch) { addEvents(container, touchEvents, options.preventScrollOnTouch); }\n if (mouseDrag) { addEvents(container, dragEvents); }\n if (arrowKeys) { addEvents(doc, docmentKeydownEvent); }\n\n if (nested === 'inner') {\n events.on('outerResized', function () {\n resizeTasks();\n events.emit('innerLoaded', info());\n });\n } else if (responsive || fixedWidth || autoWidth || autoHeight || !horizontal) {\n addEvents(win, {'resize': onResize});\n }\n\n if (autoHeight) {\n if (nested === 'outer') {\n events.on('innerLoaded', doAutoHeight);\n } else if (!disable) { doAutoHeight(); }\n }\n\n doLazyLoad();\n if (disable) { disableSlider(); } else if (freeze) { freezeSlider(); }\n\n events.on('indexChanged', additionalUpdates);\n if (nested === 'inner') { events.emit('innerLoaded', info()); }\n if (typeof onInit === 'function') { onInit(info()); }\n isOn = true;\n }\n\n function destroy () {\n // sheet\n sheet.disabled = true;\n if (sheet.ownerNode) { sheet.ownerNode.remove(); }\n\n // remove win event listeners\n removeEvents(win, {'resize': onResize});\n\n // arrowKeys, controls, nav\n if (arrowKeys) { removeEvents(doc, docmentKeydownEvent); }\n if (controlsContainer) { removeEvents(controlsContainer, controlsEvents); }\n if (navContainer) { removeEvents(navContainer, navEvents); }\n\n // autoplay\n removeEvents(container, hoverEvents);\n removeEvents(container, visibilityEvent);\n if (autoplayButton) { removeEvents(autoplayButton, {'click': toggleAutoplay}); }\n if (autoplay) { clearInterval(autoplayTimer); }\n\n // container\n if (carousel && TRANSITIONEND) {\n var eve = {};\n eve[TRANSITIONEND] = onTransitionEnd;\n removeEvents(container, eve);\n }\n if (touch) { removeEvents(container, touchEvents); }\n if (mouseDrag) { removeEvents(container, dragEvents); }\n\n // cache Object values in options && reset HTML\n var htmlList = [containerHTML, controlsContainerHTML, prevButtonHTML, nextButtonHTML, navContainerHTML, autoplayButtonHTML];\n\n tnsList.forEach(function(item, i) {\n var el = item === 'container' ? outerWrapper : options[item];\n\n if (typeof el === 'object') {\n var prevEl = el.previousElementSibling ? el.previousElementSibling : false,\n parentEl = el.parentNode;\n el.outerHTML = htmlList[i];\n options[item] = prevEl ? prevEl.nextElementSibling : parentEl.firstElementChild;\n }\n });\n\n\n // reset variables\n tnsList = animateIn = animateOut = animateDelay = animateNormal = horizontal = outerWrapper = innerWrapper = container = containerParent = containerHTML = slideItems = slideCount = breakpointZone = windowWidth = autoWidth = fixedWidth = edgePadding = gutter = viewport = items = slideBy = viewportMax = arrowKeys = speed = rewind = loop = autoHeight = sheet = lazyload = slidePositions = slideItemsOut = cloneCount = slideCountNew = hasRightDeadZone = rightBoundary = updateIndexBeforeTransform = transformAttr = transformPrefix = transformPostfix = getIndexMax = index = indexCached = indexMin = indexMax = resizeTimer = swipeAngle = moveDirectionExpected = running = onInit = events = newContainerClasses = slideId = disable = disabled = freezable = freeze = frozen = controlsEvents = navEvents = hoverEvents = visibilityEvent = docmentKeydownEvent = touchEvents = dragEvents = hasControls = hasNav = navAsThumbnails = hasAutoplay = hasTouch = hasMouseDrag = slideActiveClass = imgCompleteClass = imgEvents = imgsComplete = controls = controlsText = controlsContainer = controlsContainerHTML = prevButton = nextButton = prevIsButton = nextIsButton = nav = navContainer = navContainerHTML = navItems = pages = pagesCached = navClicked = navCurrentIndex = navCurrentIndexCached = navActiveClass = navStr = navStrCurrent = autoplay = autoplayTimeout = autoplayDirection = autoplayText = autoplayHoverPause = autoplayButton = autoplayButtonHTML = autoplayResetOnVisibility = autoplayHtmlStrings = autoplayTimer = animating = autoplayHoverPaused = autoplayUserPaused = autoplayVisibilityPaused = initPosition = lastPosition = translateInit = disX = disY = panStart = rafIndex = getDist = touch = mouseDrag = null;\n // check variables\n // [animateIn, animateOut, animateDelay, animateNormal, horizontal, outerWrapper, innerWrapper, container, containerParent, containerHTML, slideItems, slideCount, breakpointZone, windowWidth, autoWidth, fixedWidth, edgePadding, gutter, viewport, items, slideBy, viewportMax, arrowKeys, speed, rewind, loop, autoHeight, sheet, lazyload, slidePositions, slideItemsOut, cloneCount, slideCountNew, hasRightDeadZone, rightBoundary, updateIndexBeforeTransform, transformAttr, transformPrefix, transformPostfix, getIndexMax, index, indexCached, indexMin, indexMax, resizeTimer, swipeAngle, moveDirectionExpected, running, onInit, events, newContainerClasses, slideId, disable, disabled, freezable, freeze, frozen, controlsEvents, navEvents, hoverEvents, visibilityEvent, docmentKeydownEvent, touchEvents, dragEvents, hasControls, hasNav, navAsThumbnails, hasAutoplay, hasTouch, hasMouseDrag, slideActiveClass, imgCompleteClass, imgEvents, imgsComplete, controls, controlsText, controlsContainer, controlsContainerHTML, prevButton, nextButton, prevIsButton, nextIsButton, nav, navContainer, navContainerHTML, navItems, pages, pagesCached, navClicked, navCurrentIndex, navCurrentIndexCached, navActiveClass, navStr, navStrCurrent, autoplay, autoplayTimeout, autoplayDirection, autoplayText, autoplayHoverPause, autoplayButton, autoplayButtonHTML, autoplayResetOnVisibility, autoplayHtmlStrings, autoplayTimer, animating, autoplayHoverPaused, autoplayUserPaused, autoplayVisibilityPaused, initPosition, lastPosition, translateInit, disX, disY, panStart, rafIndex, getDist, touch, mouseDrag ].forEach(function(item) { if (item !== null) { console.log(item); } });\n\n for (var a in this) {\n if (a !== 'rebuild') { this[a] = null; }\n }\n isOn = false;\n }\n\n// === ON RESIZE ===\n // responsive || fixedWidth || autoWidth || !horizontal\n function onResize (e) {\n raf(function(){ resizeTasks(getEvent(e)); });\n }\n\n function resizeTasks (e) {\n if (!isOn) { return; }\n if (nested === 'outer') { events.emit('outerResized', info(e)); }\n windowWidth = getWindowWidth();\n var bpChanged,\n breakpointZoneTem = breakpointZone,\n needContainerTransform = false;\n\n if (responsive) {\n setBreakpointZone();\n bpChanged = breakpointZoneTem !== breakpointZone;\n // if (hasRightDeadZone) { needContainerTransform = true; } // *?\n if (bpChanged) { events.emit('newBreakpointStart', info(e)); }\n }\n\n var indChanged,\n itemsChanged,\n itemsTem = items,\n disableTem = disable,\n freezeTem = freeze,\n arrowKeysTem = arrowKeys,\n controlsTem = controls,\n navTem = nav,\n touchTem = touch,\n mouseDragTem = mouseDrag,\n autoplayTem = autoplay,\n autoplayHoverPauseTem = autoplayHoverPause,\n autoplayResetOnVisibilityTem = autoplayResetOnVisibility,\n indexTem = index;\n\n if (bpChanged) {\n var fixedWidthTem = fixedWidth,\n autoHeightTem = autoHeight,\n controlsTextTem = controlsText,\n centerTem = center,\n autoplayTextTem = autoplayText;\n\n if (!CSSMQ) {\n var gutterTem = gutter,\n edgePaddingTem = edgePadding;\n }\n }\n\n // get option:\n // fixed width: viewport, fixedWidth, gutter => items\n // others: window width => all variables\n // all: items => slideBy\n arrowKeys = getOption('arrowKeys');\n controls = getOption('controls');\n nav = getOption('nav');\n touch = getOption('touch');\n center = getOption('center');\n mouseDrag = getOption('mouseDrag');\n autoplay = getOption('autoplay');\n autoplayHoverPause = getOption('autoplayHoverPause');\n autoplayResetOnVisibility = getOption('autoplayResetOnVisibility');\n\n if (bpChanged) {\n disable = getOption('disable');\n fixedWidth = getOption('fixedWidth');\n speed = getOption('speed');\n autoHeight = getOption('autoHeight');\n controlsText = getOption('controlsText');\n autoplayText = getOption('autoplayText');\n autoplayTimeout = getOption('autoplayTimeout');\n\n if (!CSSMQ) {\n edgePadding = getOption('edgePadding');\n gutter = getOption('gutter');\n }\n }\n // update options\n resetVariblesWhenDisable(disable);\n\n viewport = getViewportWidth(); // <= edgePadding, gutter\n if ((!horizontal || autoWidth) && !disable) {\n setSlidePositions();\n if (!horizontal) {\n updateContentWrapperHeight(); // <= setSlidePositions\n needContainerTransform = true;\n }\n }\n if (fixedWidth || autoWidth) {\n rightBoundary = getRightBoundary(); // autoWidth: <= viewport, slidePositions, gutter\n // fixedWidth: <= viewport, fixedWidth, gutter\n indexMax = getIndexMax(); // autoWidth: <= rightBoundary, slidePositions\n // fixedWidth: <= rightBoundary, fixedWidth, gutter\n }\n\n if (bpChanged || fixedWidth) {\n items = getOption('items');\n slideBy = getOption('slideBy');\n itemsChanged = items !== itemsTem;\n\n if (itemsChanged) {\n if (!fixedWidth && !autoWidth) { indexMax = getIndexMax(); } // <= items\n // check index before transform in case\n // slider reach the right edge then items become bigger\n updateIndex();\n }\n }\n \n if (bpChanged) {\n if (disable !== disableTem) {\n if (disable) {\n disableSlider();\n } else {\n enableSlider(); // <= slidePositions, rightBoundary, indexMax\n }\n }\n }\n\n if (freezable && (bpChanged || fixedWidth || autoWidth)) {\n freeze = getFreeze(); // <= autoWidth: slidePositions, gutter, viewport, rightBoundary\n // <= fixedWidth: fixedWidth, gutter, rightBoundary\n // <= others: items\n\n if (freeze !== freezeTem) {\n if (freeze) {\n doContainerTransform(getContainerTransformValue(getStartIndex(0)));\n freezeSlider();\n } else {\n unfreezeSlider();\n needContainerTransform = true;\n }\n }\n }\n\n resetVariblesWhenDisable(disable || freeze); // controls, nav, touch, mouseDrag, arrowKeys, autoplay, autoplayHoverPause, autoplayResetOnVisibility\n if (!autoplay) { autoplayHoverPause = autoplayResetOnVisibility = false; }\n\n if (arrowKeys !== arrowKeysTem) {\n arrowKeys ?\n addEvents(doc, docmentKeydownEvent) :\n removeEvents(doc, docmentKeydownEvent);\n }\n if (controls !== controlsTem) {\n if (controls) {\n if (controlsContainer) {\n showElement(controlsContainer);\n } else {\n if (prevButton) { showElement(prevButton); }\n if (nextButton) { showElement(nextButton); }\n }\n } else {\n if (controlsContainer) {\n hideElement(controlsContainer);\n } else {\n if (prevButton) { hideElement(prevButton); }\n if (nextButton) { hideElement(nextButton); }\n }\n }\n }\n if (nav !== navTem) {\n nav ?\n showElement(navContainer) :\n hideElement(navContainer);\n }\n if (touch !== touchTem) {\n touch ?\n addEvents(container, touchEvents, options.preventScrollOnTouch) :\n removeEvents(container, touchEvents);\n }\n if (mouseDrag !== mouseDragTem) {\n mouseDrag ?\n addEvents(container, dragEvents) :\n removeEvents(container, dragEvents);\n }\n if (autoplay !== autoplayTem) {\n if (autoplay) {\n if (autoplayButton) { showElement(autoplayButton); }\n if (!animating && !autoplayUserPaused) { startAutoplay(); }\n } else {\n if (autoplayButton) { hideElement(autoplayButton); }\n if (animating) { stopAutoplay(); }\n }\n }\n if (autoplayHoverPause !== autoplayHoverPauseTem) {\n autoplayHoverPause ?\n addEvents(container, hoverEvents) :\n removeEvents(container, hoverEvents);\n }\n if (autoplayResetOnVisibility !== autoplayResetOnVisibilityTem) {\n autoplayResetOnVisibility ?\n addEvents(doc, visibilityEvent) :\n removeEvents(doc, visibilityEvent);\n }\n\n if (bpChanged) {\n if (fixedWidth !== fixedWidthTem || center !== centerTem) { needContainerTransform = true; }\n\n if (autoHeight !== autoHeightTem) {\n if (!autoHeight) { innerWrapper.style.height = ''; }\n }\n\n if (controls && controlsText !== controlsTextTem) {\n prevButton.innerHTML = controlsText[0];\n nextButton.innerHTML = controlsText[1];\n }\n\n if (autoplayButton && autoplayText !== autoplayTextTem) {\n var i = autoplay ? 1 : 0,\n html = autoplayButton.innerHTML,\n len = html.length - autoplayTextTem[i].length;\n if (html.substring(len) === autoplayTextTem[i]) {\n autoplayButton.innerHTML = html.substring(0, len) + autoplayText[i];\n }\n }\n } else {\n if (center && (fixedWidth || autoWidth)) { needContainerTransform = true; }\n }\n\n if (itemsChanged || fixedWidth && !autoWidth) {\n pages = getPages();\n updateNavVisibility();\n }\n\n indChanged = index !== indexTem;\n if (indChanged) { \n events.emit('indexChanged', info());\n needContainerTransform = true;\n } else if (itemsChanged) {\n if (!indChanged) { additionalUpdates(); }\n } else if (fixedWidth || autoWidth) {\n doLazyLoad(); \n updateSlideStatus();\n updateLiveRegion();\n }\n\n if (itemsChanged && !carousel) { updateGallerySlidePositions(); }\n\n if (!disable && !freeze) {\n // non-meduaqueries: IE8\n if (bpChanged && !CSSMQ) {\n // middle wrapper styles\n if (autoHeight !== autoheightTem || speed !== speedTem) {\n update_carousel_transition_duration();\n }\n\n // inner wrapper styles\n if (edgePadding !== edgePaddingTem || gutter !== gutterTem) {\n innerWrapper.style.cssText = getInnerWrapperStyles(edgePadding, gutter, fixedWidth, speed, autoHeight);\n }\n\n if (horizontal) {\n // container styles\n if (carousel) {\n container.style.width = getContainerWidth(fixedWidth, gutter, items);\n }\n\n // slide styles\n var str = getSlideWidthStyle(fixedWidth, gutter, items) + \n getSlideGutterStyle(gutter);\n\n // remove the last line and\n // add new styles\n removeCSSRule(sheet, getCssRulesLength(sheet) - 1);\n addCSSRule(sheet, '#' + slideId + ' > .tns-item', str, getCssRulesLength(sheet));\n }\n }\n\n // auto height\n if (autoHeight) { doAutoHeight(); }\n\n if (needContainerTransform) {\n doContainerTransformSilent();\n indexCached = index;\n }\n }\n\n if (bpChanged) { events.emit('newBreakpointEnd', info(e)); }\n }\n\n\n\n\n\n // === INITIALIZATION FUNCTIONS === //\n function getFreeze () {\n if (!fixedWidth && !autoWidth) {\n var a = center ? items - (items - 1) / 2 : items;\n return slideCount <= a;\n }\n\n var width = fixedWidth ? (fixedWidth + gutter) * slideCount : slidePositions[slideCount],\n vp = edgePadding ? viewport + edgePadding * 2 : viewport + gutter;\n\n if (center) {\n vp -= fixedWidth ? (viewport - fixedWidth) / 2 : (viewport - (slidePositions[index + 1] - slidePositions[index] - gutter)) / 2;\n }\n\n return width <= vp;\n }\n\n function setBreakpointZone () {\n breakpointZone = 0;\n for (var bp in responsive) {\n bp = parseInt(bp); // convert string to number\n if (windowWidth >= bp) { breakpointZone = bp; }\n }\n }\n\n // (slideBy, indexMin, indexMax) => index\n var updateIndex = (function () {\n return loop ? \n carousel ?\n // loop + carousel\n function () {\n var leftEdge = indexMin,\n rightEdge = indexMax;\n\n leftEdge += slideBy;\n rightEdge -= slideBy;\n\n // adjust edges when has edge paddings\n // or fixed-width slider with extra space on the right side\n if (edgePadding) {\n leftEdge += 1;\n rightEdge -= 1;\n } else if (fixedWidth) {\n if ((viewport + gutter)%(fixedWidth + gutter)) { rightEdge -= 1; }\n }\n\n if (cloneCount) {\n if (index > rightEdge) {\n index -= slideCount;\n } else if (index < leftEdge) {\n index += slideCount;\n }\n }\n } :\n // loop + gallery\n function() {\n if (index > indexMax) {\n while (index >= indexMin + slideCount) { index -= slideCount; }\n } else if (index < indexMin) {\n while (index <= indexMax - slideCount) { index += slideCount; }\n }\n } :\n // non-loop\n function() {\n index = Math.max(indexMin, Math.min(indexMax, index));\n };\n })();\n\n function disableUI () {\n if (!autoplay && autoplayButton) { hideElement(autoplayButton); }\n if (!nav && navContainer) { hideElement(navContainer); }\n if (!controls) {\n if (controlsContainer) {\n hideElement(controlsContainer);\n } else {\n if (prevButton) { hideElement(prevButton); }\n if (nextButton) { hideElement(nextButton); }\n }\n }\n }\n\n function enableUI () {\n if (autoplay && autoplayButton) { showElement(autoplayButton); }\n if (nav && navContainer) { showElement(navContainer); }\n if (controls) {\n if (controlsContainer) {\n showElement(controlsContainer);\n } else {\n if (prevButton) { showElement(prevButton); }\n if (nextButton) { showElement(nextButton); }\n }\n }\n }\n\n function freezeSlider () {\n if (frozen) { return; }\n\n // remove edge padding from inner wrapper\n if (edgePadding) { innerWrapper.style.margin = '0px'; }\n\n // add class tns-transparent to cloned slides\n if (cloneCount) {\n var str = 'tns-transparent';\n for (var i = cloneCount; i--;) {\n if (carousel) { addClass(slideItems[i], str); }\n addClass(slideItems[slideCountNew - i - 1], str);\n }\n }\n\n // update tools\n disableUI();\n\n frozen = true;\n }\n\n function unfreezeSlider () {\n if (!frozen) { return; }\n\n // restore edge padding for inner wrapper\n // for mordern browsers\n if (edgePadding && CSSMQ) { innerWrapper.style.margin = ''; }\n\n // remove class tns-transparent to cloned slides\n if (cloneCount) {\n var str = 'tns-transparent';\n for (var i = cloneCount; i--;) {\n if (carousel) { removeClass(slideItems[i], str); }\n removeClass(slideItems[slideCountNew - i - 1], str);\n }\n }\n\n // update tools\n enableUI();\n\n frozen = false;\n }\n\n function disableSlider () {\n if (disabled) { return; }\n\n sheet.disabled = true;\n container.className = container.className.replace(newContainerClasses.substring(1), '');\n removeAttrs(container, ['style']);\n if (loop) {\n for (var j = cloneCount; j--;) {\n if (carousel) { hideElement(slideItems[j]); }\n hideElement(slideItems[slideCountNew - j - 1]);\n }\n }\n\n // vertical slider\n if (!horizontal || !carousel) { removeAttrs(innerWrapper, ['style']); }\n\n // gallery\n if (!carousel) { \n for (var i = index, l = index + slideCount; i < l; i++) {\n var item = slideItems[i];\n removeAttrs(item, ['style']);\n removeClass(item, animateIn);\n removeClass(item, animateNormal);\n }\n }\n\n // update tools\n disableUI();\n\n disabled = true;\n }\n\n function enableSlider () {\n if (!disabled) { return; }\n\n sheet.disabled = false;\n container.className += newContainerClasses;\n doContainerTransformSilent();\n\n if (loop) {\n for (var j = cloneCount; j--;) {\n if (carousel) { showElement(slideItems[j]); }\n showElement(slideItems[slideCountNew - j - 1]);\n }\n }\n\n // gallery\n if (!carousel) { \n for (var i = index, l = index + slideCount; i < l; i++) {\n var item = slideItems[i],\n classN = i < index + items ? animateIn : animateNormal;\n item.style.left = (i - index) * 100 / items + '%';\n addClass(item, classN);\n }\n }\n\n // update tools\n enableUI();\n\n disabled = false;\n }\n\n function updateLiveRegion () {\n var str = getLiveRegionStr();\n if (liveregionCurrent.innerHTML !== str) { liveregionCurrent.innerHTML = str; }\n }\n\n function getLiveRegionStr () {\n var arr = getVisibleSlideRange(),\n start = arr[0] + 1,\n end = arr[1] + 1;\n return start === end ? start + '' : start + ' to ' + end; \n }\n\n function getVisibleSlideRange (val) {\n if (val == null) { val = getContainerTransformValue(); }\n var start = index, end, rangestart, rangeend;\n\n // get range start, range end for autoWidth and fixedWidth\n if (center || edgePadding) {\n if (autoWidth || fixedWidth) {\n rangestart = - (parseFloat(val) + edgePadding);\n rangeend = rangestart + viewport + edgePadding * 2;\n }\n } else {\n if (autoWidth) {\n rangestart = slidePositions[index];\n rangeend = rangestart + viewport;\n }\n }\n\n // get start, end\n // - check auto width\n if (autoWidth) {\n slidePositions.forEach(function(point, i) {\n if (i < slideCountNew) {\n if ((center || edgePadding) && point <= rangestart + 0.5) { start = i; }\n if (rangeend - point >= 0.5) { end = i; }\n }\n });\n\n // - check percentage width, fixed width\n } else {\n\n if (fixedWidth) {\n var cell = fixedWidth + gutter;\n if (center || edgePadding) {\n start = Math.floor(rangestart/cell);\n end = Math.ceil(rangeend/cell - 1);\n } else {\n end = start + Math.ceil(viewport/cell) - 1;\n }\n\n } else {\n if (center || edgePadding) {\n var a = items - 1;\n if (center) {\n start -= a / 2;\n end = index + a / 2;\n } else {\n end = index + a;\n }\n\n if (edgePadding) {\n var b = edgePadding * items / viewport;\n start -= b;\n end += b;\n }\n\n start = Math.floor(start);\n end = Math.ceil(end);\n } else {\n end = start + items - 1;\n }\n }\n\n start = Math.max(start, 0);\n end = Math.min(end, slideCountNew - 1);\n }\n\n return [start, end];\n }\n\n function doLazyLoad () {\n if (lazyload && !disable) {\n getImageArray.apply(null, getVisibleSlideRange()).forEach(function (img) {\n if (!hasClass(img, imgCompleteClass)) {\n // stop propagation transitionend event to container\n var eve = {};\n eve[TRANSITIONEND] = function (e) { e.stopPropagation(); };\n addEvents(img, eve);\n\n addEvents(img, imgEvents);\n\n // update src\n img.src = getAttr(img, 'data-src');\n\n // update srcset\n var srcset = getAttr(img, 'data-srcset');\n if (srcset) { img.srcset = srcset; }\n\n addClass(img, 'loading');\n }\n });\n }\n }\n\n function onImgLoaded (e) {\n imgLoaded(getTarget(e));\n }\n\n function onImgFailed (e) {\n imgFailed(getTarget(e));\n }\n\n function imgLoaded (img) {\n addClass(img, 'loaded');\n imgCompleted(img);\n }\n\n function imgFailed (img) {\n addClass(img, 'failed');\n imgCompleted(img);\n }\n\n function imgCompleted (img) {\n addClass(img, 'tns-complete');\n removeClass(img, 'loading');\n removeEvents(img, imgEvents);\n }\n\n function getImageArray (start, end) {\n var imgs = [];\n while (start <= end) {\n forEach(slideItems[start].querySelectorAll('img'), function (img) { imgs.push(img); });\n start++;\n }\n\n return imgs;\n }\n\n // check if all visible images are loaded\n // and update container height if it's done\n function doAutoHeight () {\n var imgs = getImageArray.apply(null, getVisibleSlideRange());\n raf(function(){ imgsLoadedCheck(imgs, updateInnerWrapperHeight); });\n }\n\n function imgsLoadedCheck (imgs, cb) {\n // directly execute callback function if all images are complete\n if (imgsComplete) { return cb(); }\n\n // check selected image classes otherwise\n imgs.forEach(function (img, index) {\n if (hasClass(img, imgCompleteClass)) { imgs.splice(index, 1); }\n });\n\n // execute callback function if selected images are all complete\n if (!imgs.length) { return cb(); }\n\n // otherwise execute this functiona again\n raf(function(){ imgsLoadedCheck(imgs, cb); });\n } \n\n function additionalUpdates () {\n doLazyLoad(); \n updateSlideStatus();\n updateLiveRegion();\n updateControlsStatus();\n updateNavStatus();\n }\n\n\n function update_carousel_transition_duration () {\n if (carousel && autoHeight) {\n middleWrapper.style[TRANSITIONDURATION] = speed / 1000 + 's';\n }\n }\n\n function getMaxSlideHeight (slideStart, slideRange) {\n var heights = [];\n for (var i = slideStart, l = Math.min(slideStart + slideRange, slideCountNew); i < l; i++) {\n heights.push(slideItems[i].offsetHeight);\n }\n\n return Math.max.apply(null, heights);\n }\n\n // update inner wrapper height\n // 1. get the max-height of the visible slides\n // 2. set transitionDuration to speed\n // 3. update inner wrapper height to max-height\n // 4. set transitionDuration to 0s after transition done\n function updateInnerWrapperHeight () {\n var maxHeight = autoHeight ? getMaxSlideHeight(index, items) : getMaxSlideHeight(cloneCount, slideCount),\n wp = middleWrapper ? middleWrapper : innerWrapper;\n\n if (wp.style.height !== maxHeight) { wp.style.height = maxHeight + 'px'; }\n }\n\n // get the distance from the top edge of the first slide to each slide\n // (init) => slidePositions\n function setSlidePositions () {\n slidePositions = [0];\n var attr = horizontal ? 'left' : 'top',\n attr2 = horizontal ? 'right' : 'bottom',\n base = slideItems[0].getBoundingClientRect()[attr];\n\n forEach(slideItems, function(item, i) {\n // skip the first slide\n if (i) { slidePositions.push(item.getBoundingClientRect()[attr] - base); }\n // add the end edge\n if (i === slideCountNew - 1) { slidePositions.push(item.getBoundingClientRect()[attr2] - base); }\n });\n }\n\n // update slide\n function updateSlideStatus () {\n var range = getVisibleSlideRange(),\n start = range[0],\n end = range[1];\n\n forEach(slideItems, function(item, i) {\n // show slides\n if (i >= start && i <= end) {\n if (hasAttr(item, 'aria-hidden')) {\n removeAttrs(item, ['aria-hidden', 'tabindex']);\n addClass(item, slideActiveClass);\n }\n // hide slides\n } else {\n if (!hasAttr(item, 'aria-hidden')) {\n setAttrs(item, {\n 'aria-hidden': 'true',\n 'tabindex': '-1'\n });\n removeClass(item, slideActiveClass);\n }\n }\n });\n }\n\n // gallery: update slide position\n function updateGallerySlidePositions () {\n var l = index + Math.min(slideCount, items);\n for (var i = slideCountNew; i--;) {\n var item = slideItems[i];\n\n if (i >= index && i < l) {\n // add transitions to visible slides when adjusting their positions\n addClass(item, 'tns-moving');\n\n item.style.left = (i - index) * 100 / items + '%';\n addClass(item, animateIn);\n removeClass(item, animateNormal);\n } else if (item.style.left) {\n item.style.left = '';\n addClass(item, animateNormal);\n removeClass(item, animateIn);\n }\n\n // remove outlet animation\n removeClass(item, animateOut);\n }\n\n // removing '.tns-moving'\n setTimeout(function() {\n forEach(slideItems, function(el) {\n removeClass(el, 'tns-moving');\n });\n }, 300);\n }\n\n // set tabindex on Nav\n function updateNavStatus () {\n // get current nav\n if (nav) {\n navCurrentIndex = navClicked >= 0 ? navClicked : getCurrentNavIndex();\n navClicked = -1;\n\n if (navCurrentIndex !== navCurrentIndexCached) {\n var navPrev = navItems[navCurrentIndexCached],\n navCurrent = navItems[navCurrentIndex];\n\n setAttrs(navPrev, {\n 'tabindex': '-1',\n 'aria-label': navStr + (navCurrentIndexCached + 1)\n });\n removeClass(navPrev, navActiveClass);\n \n setAttrs(navCurrent, {'aria-label': navStr + (navCurrentIndex + 1) + navStrCurrent});\n removeAttrs(navCurrent, 'tabindex');\n addClass(navCurrent, navActiveClass);\n\n navCurrentIndexCached = navCurrentIndex;\n }\n }\n }\n\n function getLowerCaseNodeName (el) {\n return el.nodeName.toLowerCase();\n }\n\n function isButton (el) {\n return getLowerCaseNodeName(el) === 'button';\n }\n\n function isAriaDisabled (el) {\n return el.getAttribute('aria-disabled') === 'true';\n }\n\n function disEnableElement (isButton, el, val) {\n if (isButton) {\n el.disabled = val;\n } else {\n el.setAttribute('aria-disabled', val.toString());\n }\n }\n\n // set 'disabled' to true on controls when reach the edges\n function updateControlsStatus () {\n if (!controls || rewind || loop) { return; }\n\n var prevDisabled = (prevIsButton) ? prevButton.disabled : isAriaDisabled(prevButton),\n nextDisabled = (nextIsButton) ? nextButton.disabled : isAriaDisabled(nextButton),\n disablePrev = (index <= indexMin) ? true : false,\n disableNext = (!rewind && index >= indexMax) ? true : false;\n\n if (disablePrev && !prevDisabled) {\n disEnableElement(prevIsButton, prevButton, true);\n }\n if (!disablePrev && prevDisabled) {\n disEnableElement(prevIsButton, prevButton, false);\n }\n if (disableNext && !nextDisabled) {\n disEnableElement(nextIsButton, nextButton, true);\n }\n if (!disableNext && nextDisabled) {\n disEnableElement(nextIsButton, nextButton, false);\n }\n }\n\n // set duration\n function resetDuration (el, str) {\n if (TRANSITIONDURATION) { el.style[TRANSITIONDURATION] = str; }\n }\n\n function getSliderWidth () {\n return fixedWidth ? (fixedWidth + gutter) * slideCountNew : slidePositions[slideCountNew];\n }\n\n function getCenterGap (num) {\n if (num == null) { num = index; }\n\n var gap = edgePadding ? gutter : 0;\n return autoWidth ? ((viewport - gap) - (slidePositions[num + 1] - slidePositions[num] - gutter))/2 :\n fixedWidth ? (viewport - fixedWidth) / 2 :\n (items - 1) / 2;\n }\n\n function getRightBoundary () {\n var gap = edgePadding ? gutter : 0,\n result = (viewport + gap) - getSliderWidth();\n\n if (center && !loop) {\n result = fixedWidth ? - (fixedWidth + gutter) * (slideCountNew - 1) - getCenterGap() :\n getCenterGap(slideCountNew - 1) - slidePositions[slideCountNew - 1];\n }\n if (result > 0) { result = 0; }\n\n return result;\n }\n\n function getContainerTransformValue (num) {\n if (num == null) { num = index; }\n\n var val;\n if (horizontal && !autoWidth) {\n if (fixedWidth) {\n val = - (fixedWidth + gutter) * num;\n if (center) { val += getCenterGap(); }\n } else {\n var denominator = TRANSFORM ? slideCountNew : items;\n if (center) { num -= getCenterGap(); }\n val = - num * 100 / denominator;\n }\n } else {\n val = - slidePositions[num];\n if (center && autoWidth) {\n val += getCenterGap();\n }\n }\n\n if (hasRightDeadZone) { val = Math.max(val, rightBoundary); }\n\n val += (horizontal && !autoWidth && !fixedWidth) ? '%' : 'px';\n\n return val;\n }\n\n function doContainerTransformSilent (val) {\n resetDuration(container, '0s');\n doContainerTransform(val);\n }\n\n function doContainerTransform (val) {\n if (val == null) { val = getContainerTransformValue(); }\n container.style[transformAttr] = transformPrefix + val + transformPostfix;\n }\n\n function animateSlide (number, classOut, classIn, isOut) {\n var l = number + items;\n if (!loop) { l = Math.min(l, slideCountNew); }\n\n for (var i = number; i < l; i++) {\n var item = slideItems[i];\n\n // set item positions\n if (!isOut) { item.style.left = (i - index) * 100 / items + '%'; }\n\n if (animateDelay && TRANSITIONDELAY) {\n item.style[TRANSITIONDELAY] = item.style[ANIMATIONDELAY] = animateDelay * (i - number) / 1000 + 's';\n }\n removeClass(item, classOut);\n addClass(item, classIn);\n \n if (isOut) { slideItemsOut.push(item); }\n }\n }\n\n // make transfer after click/drag:\n // 1. change 'transform' property for mordern browsers\n // 2. change 'left' property for legacy browsers\n var transformCore = (function () {\n return carousel ?\n function () {\n resetDuration(container, '');\n if (TRANSITIONDURATION || !speed) {\n // for morden browsers with non-zero duration or \n // zero duration for all browsers\n doContainerTransform();\n // run fallback function manually \n // when duration is 0 / container is hidden\n if (!speed || !isVisible(container)) { onTransitionEnd(); }\n\n } else {\n // for old browser with non-zero duration\n jsTransform(container, transformAttr, transformPrefix, transformPostfix, getContainerTransformValue(), speed, onTransitionEnd);\n }\n\n if (!horizontal) { updateContentWrapperHeight(); }\n } :\n function () {\n slideItemsOut = [];\n\n var eve = {};\n eve[TRANSITIONEND] = eve[ANIMATIONEND] = onTransitionEnd;\n removeEvents(slideItems[indexCached], eve);\n addEvents(slideItems[index], eve);\n\n animateSlide(indexCached, animateIn, animateOut, true);\n animateSlide(index, animateNormal, animateIn);\n\n // run fallback function manually \n // when transition or animation not supported / duration is 0\n if (!TRANSITIONEND || !ANIMATIONEND || !speed || !isVisible(container)) { onTransitionEnd(); }\n };\n })();\n\n function render (e, sliderMoved) {\n if (updateIndexBeforeTransform) { updateIndex(); }\n\n // render when slider was moved (touch or drag) even though index may not change\n if (index !== indexCached || sliderMoved) {\n // events\n events.emit('indexChanged', info());\n events.emit('transitionStart', info());\n if (autoHeight) { doAutoHeight(); }\n\n // pause autoplay when click or keydown from user\n if (animating && e && ['click', 'keydown'].indexOf(e.type) >= 0) { stopAutoplay(); }\n\n running = true;\n transformCore();\n }\n }\n\n /*\n * Transfer prefixed properties to the same format\n * CSS: -Webkit-Transform => webkittransform\n * JS: WebkitTransform => webkittransform\n * @param {string} str - property\n *\n */\n function strTrans (str) {\n return str.toLowerCase().replace(/-/g, '');\n }\n\n // AFTER TRANSFORM\n // Things need to be done after a transfer:\n // 1. check index\n // 2. add classes to visible slide\n // 3. disable controls buttons when reach the first/last slide in non-loop slider\n // 4. update nav status\n // 5. lazyload images\n // 6. update container height\n function onTransitionEnd (event) {\n // check running on gallery mode\n // make sure trantionend/animationend events run only once\n if (carousel || running) {\n events.emit('transitionEnd', info(event));\n\n if (!carousel && slideItemsOut.length > 0) {\n for (var i = 0; i < slideItemsOut.length; i++) {\n var item = slideItemsOut[i];\n // set item positions\n item.style.left = '';\n\n if (ANIMATIONDELAY && TRANSITIONDELAY) { \n item.style[ANIMATIONDELAY] = '';\n item.style[TRANSITIONDELAY] = '';\n }\n removeClass(item, animateOut);\n addClass(item, animateNormal);\n }\n }\n\n /* update slides, nav, controls after checking ...\n * => legacy browsers who don't support 'event' \n * have to check event first, otherwise event.target will cause an error \n * => or 'gallery' mode: \n * + event target is slide item\n * => or 'carousel' mode: \n * + event target is container, \n * + event.property is the same with transform attribute\n */\n if (!event || \n !carousel && event.target.parentNode === container || \n event.target === container && strTrans(event.propertyName) === strTrans(transformAttr)) {\n\n if (!updateIndexBeforeTransform) { \n var indexTem = index;\n updateIndex();\n if (index !== indexTem) { \n events.emit('indexChanged', info());\n\n doContainerTransformSilent();\n }\n } \n\n if (nested === 'inner') { events.emit('innerLoaded', info()); }\n running = false;\n indexCached = index;\n }\n }\n\n }\n\n // # ACTIONS\n function goTo (targetIndex, e) {\n if (freeze) { return; }\n\n // prev slideBy\n if (targetIndex === 'prev') {\n onControlsClick(e, -1);\n\n // next slideBy\n } else if (targetIndex === 'next') {\n onControlsClick(e, 1);\n\n // go to exact slide\n } else {\n if (running) {\n if (preventActionWhenRunning) { return; } else { onTransitionEnd(); }\n }\n\n var absIndex = getAbsIndex(), \n indexGap = 0;\n\n if (targetIndex === 'first') {\n indexGap = - absIndex;\n } else if (targetIndex === 'last') {\n indexGap = carousel ? slideCount - items - absIndex : slideCount - 1 - absIndex;\n } else {\n if (typeof targetIndex !== 'number') { targetIndex = parseInt(targetIndex); }\n\n if (!isNaN(targetIndex)) {\n // from directly called goTo function\n if (!e) { targetIndex = Math.max(0, Math.min(slideCount - 1, targetIndex)); }\n\n indexGap = targetIndex - absIndex;\n }\n }\n\n // gallery: make sure new page won't overlap with current page\n if (!carousel && indexGap && Math.abs(indexGap) < items) {\n var factor = indexGap > 0 ? 1 : -1;\n indexGap += (index + indexGap - slideCount) >= indexMin ? slideCount * factor : slideCount * 2 * factor * -1;\n }\n\n index += indexGap;\n\n // make sure index is in range\n if (carousel && loop) {\n if (index < indexMin) { index += slideCount; }\n if (index > indexMax) { index -= slideCount; }\n }\n\n // if index is changed, start rendering\n if (getAbsIndex(index) !== getAbsIndex(indexCached)) {\n render(e);\n }\n\n }\n }\n\n // on controls click\n function onControlsClick (e, dir) {\n if (running) {\n if (preventActionWhenRunning) { return; } else { onTransitionEnd(); }\n }\n var passEventObject;\n\n if (!dir) {\n e = getEvent(e);\n var target = getTarget(e);\n\n while (target !== controlsContainer && [prevButton, nextButton].indexOf(target) < 0) { target = target.parentNode; }\n\n var targetIn = [prevButton, nextButton].indexOf(target);\n if (targetIn >= 0) {\n passEventObject = true;\n dir = targetIn === 0 ? -1 : 1;\n }\n }\n\n if (rewind) {\n if (index === indexMin && dir === -1) {\n goTo('last', e);\n return;\n } else if (index === indexMax && dir === 1) {\n goTo('first', e);\n return;\n }\n }\n\n if (dir) {\n index += slideBy * dir;\n if (autoWidth) { index = Math.floor(index); }\n // pass e when click control buttons or keydown\n render((passEventObject || (e && e.type === 'keydown')) ? e : null);\n }\n }\n\n // on nav click\n function onNavClick (e) {\n if (running) {\n if (preventActionWhenRunning) { return; } else { onTransitionEnd(); }\n }\n \n e = getEvent(e);\n var target = getTarget(e), navIndex;\n\n // find the clicked nav item\n while (target !== navContainer && !hasAttr(target, 'data-nav')) { target = target.parentNode; }\n if (hasAttr(target, 'data-nav')) {\n var navIndex = navClicked = Number(getAttr(target, 'data-nav')),\n targetIndexBase = fixedWidth || autoWidth ? navIndex * slideCount / pages : navIndex * items,\n targetIndex = navAsThumbnails ? navIndex : Math.min(Math.ceil(targetIndexBase), slideCount - 1);\n goTo(targetIndex, e);\n\n if (navCurrentIndex === navIndex) {\n if (animating) { stopAutoplay(); }\n navClicked = -1; // reset navClicked\n }\n }\n }\n\n // autoplay functions\n function setAutoplayTimer () {\n autoplayTimer = setInterval(function () {\n onControlsClick(null, autoplayDirection);\n }, autoplayTimeout);\n\n animating = true;\n }\n\n function stopAutoplayTimer () {\n clearInterval(autoplayTimer);\n animating = false;\n }\n\n function updateAutoplayButton (action, txt) {\n setAttrs(autoplayButton, {'data-action': action});\n autoplayButton.innerHTML = autoplayHtmlStrings[0] + action + autoplayHtmlStrings[1] + txt;\n }\n\n function startAutoplay () {\n setAutoplayTimer();\n if (autoplayButton) { updateAutoplayButton('stop', autoplayText[1]); }\n }\n\n function stopAutoplay () {\n stopAutoplayTimer();\n if (autoplayButton) { updateAutoplayButton('start', autoplayText[0]); }\n }\n\n // programaitcally play/pause the slider\n function play () {\n if (autoplay && !animating) {\n startAutoplay();\n autoplayUserPaused = false;\n }\n }\n function pause () {\n if (animating) {\n stopAutoplay();\n autoplayUserPaused = true;\n }\n }\n\n function toggleAutoplay () {\n if (animating) {\n stopAutoplay();\n autoplayUserPaused = true;\n } else {\n startAutoplay();\n autoplayUserPaused = false;\n }\n }\n\n function onVisibilityChange () {\n if (doc.hidden) {\n if (animating) {\n stopAutoplayTimer();\n autoplayVisibilityPaused = true;\n }\n } else if (autoplayVisibilityPaused) {\n setAutoplayTimer();\n autoplayVisibilityPaused = false;\n }\n }\n\n function mouseoverPause () {\n if (animating) { \n stopAutoplayTimer();\n autoplayHoverPaused = true;\n }\n }\n\n function mouseoutRestart () {\n if (autoplayHoverPaused) { \n setAutoplayTimer();\n autoplayHoverPaused = false;\n }\n }\n\n // keydown events on document \n function onDocumentKeydown (e) {\n e = getEvent(e);\n var keyIndex = [KEYS.LEFT, KEYS.RIGHT].indexOf(e.keyCode);\n\n if (keyIndex >= 0) {\n onControlsClick(e, keyIndex === 0 ? -1 : 1);\n }\n }\n\n // on key control\n function onControlsKeydown (e) {\n e = getEvent(e);\n var keyIndex = [KEYS.LEFT, KEYS.RIGHT].indexOf(e.keyCode);\n\n if (keyIndex >= 0) {\n if (keyIndex === 0) {\n if (!prevButton.disabled) { onControlsClick(e, -1); }\n } else if (!nextButton.disabled) {\n onControlsClick(e, 1);\n }\n }\n }\n\n // set focus\n function setFocus (el) {\n el.focus();\n }\n\n // on key nav\n function onNavKeydown (e) {\n e = getEvent(e);\n var curElement = doc.activeElement;\n if (!hasAttr(curElement, 'data-nav')) { return; }\n\n // var code = e.keyCode,\n var keyIndex = [KEYS.LEFT, KEYS.RIGHT, KEYS.ENTER, KEYS.SPACE].indexOf(e.keyCode),\n navIndex = Number(getAttr(curElement, 'data-nav'));\n\n if (keyIndex >= 0) {\n if (keyIndex === 0) {\n if (navIndex > 0) { setFocus(navItems[navIndex - 1]); }\n } else if (keyIndex === 1) {\n if (navIndex < pages - 1) { setFocus(navItems[navIndex + 1]); }\n } else {\n navClicked = navIndex;\n goTo(navIndex, e);\n }\n }\n }\n\n function getEvent (e) {\n e = e || win.event;\n return isTouchEvent(e) ? e.changedTouches[0] : e;\n }\n function getTarget (e) {\n return e.target || win.event.srcElement;\n }\n\n function isTouchEvent (e) {\n return e.type.indexOf('touch') >= 0;\n }\n\n function preventDefaultBehavior (e) {\n e.preventDefault ? e.preventDefault() : e.returnValue = false;\n }\n\n function getMoveDirectionExpected () {\n return getTouchDirection(toDegree(lastPosition.y - initPosition.y, lastPosition.x - initPosition.x), swipeAngle) === options.axis;\n }\n\n function onPanStart (e) {\n if (running) {\n if (preventActionWhenRunning) { return; } else { onTransitionEnd(); }\n }\n\n if (autoplay && animating) { stopAutoplayTimer(); }\n \n panStart = true;\n if (rafIndex) {\n caf(rafIndex);\n rafIndex = null;\n }\n\n var $ = getEvent(e);\n events.emit(isTouchEvent(e) ? 'touchStart' : 'dragStart', info(e));\n\n if (!isTouchEvent(e) && ['img', 'a'].indexOf(getLowerCaseNodeName(getTarget(e))) >= 0) {\n preventDefaultBehavior(e);\n }\n\n lastPosition.x = initPosition.x = $.clientX;\n lastPosition.y = initPosition.y = $.clientY;\n if (carousel) {\n translateInit = parseFloat(container.style[transformAttr].replace(transformPrefix, ''));\n resetDuration(container, '0s');\n }\n }\n\n function onPanMove (e) {\n if (panStart) {\n var $ = getEvent(e);\n lastPosition.x = $.clientX;\n lastPosition.y = $.clientY;\n\n if (carousel) {\n if (!rafIndex) { rafIndex = raf(function(){ panUpdate(e); }); }\n } else {\n if (moveDirectionExpected === '?') { moveDirectionExpected = getMoveDirectionExpected(); }\n if (moveDirectionExpected) { preventScroll = true; }\n }\n\n if (preventScroll) { e.preventDefault(); }\n }\n }\n\n function panUpdate (e) {\n if (!moveDirectionExpected) {\n panStart = false;\n return;\n }\n caf(rafIndex);\n if (panStart) { rafIndex = raf(function(){ panUpdate(e); }); }\n\n if (moveDirectionExpected === '?') { moveDirectionExpected = getMoveDirectionExpected(); }\n if (moveDirectionExpected) {\n if (!preventScroll && isTouchEvent(e)) { preventScroll = true; }\n\n try {\n if (e.type) { events.emit(isTouchEvent(e) ? 'touchMove' : 'dragMove', info(e)); }\n } catch(err) {}\n\n var x = translateInit,\n dist = getDist(lastPosition, initPosition);\n if (!horizontal || fixedWidth || autoWidth) {\n x += dist;\n x += 'px';\n } else {\n var percentageX = TRANSFORM ? dist * items * 100 / ((viewport + gutter) * slideCountNew): dist * 100 / (viewport + gutter);\n x += percentageX;\n x += '%';\n }\n\n container.style[transformAttr] = transformPrefix + x + transformPostfix;\n }\n }\n\n function onPanEnd (e) {\n if (panStart) {\n if (rafIndex) {\n caf(rafIndex);\n rafIndex = null;\n }\n if (carousel) { resetDuration(container, ''); }\n panStart = false;\n\n var $ = getEvent(e);\n lastPosition.x = $.clientX;\n lastPosition.y = $.clientY;\n var dist = getDist(lastPosition, initPosition);\n\n if (Math.abs(dist)) {\n // drag vs click\n if (!isTouchEvent(e)) {\n // prevent \"click\"\n var target = getTarget(e);\n addEvents(target, {'click': function preventClick (e) {\n preventDefaultBehavior(e);\n removeEvents(target, {'click': preventClick});\n }}); \n }\n\n if (carousel) {\n rafIndex = raf(function() {\n if (horizontal && !autoWidth) {\n var indexMoved = - dist * items / (viewport + gutter);\n indexMoved = dist > 0 ? Math.floor(indexMoved) : Math.ceil(indexMoved);\n index += indexMoved;\n } else {\n var moved = - (translateInit + dist);\n if (moved <= 0) {\n index = indexMin;\n } else if (moved >= slidePositions[slideCountNew - 1]) {\n index = indexMax;\n } else {\n var i = 0;\n while (i < slideCountNew && moved >= slidePositions[i]) {\n index = i;\n if (moved > slidePositions[i] && dist < 0) { index += 1; }\n i++;\n }\n }\n }\n\n render(e, dist);\n events.emit(isTouchEvent(e) ? 'touchEnd' : 'dragEnd', info(e));\n });\n } else {\n if (moveDirectionExpected) {\n onControlsClick(e, dist > 0 ? -1 : 1);\n }\n }\n }\n }\n\n // reset\n if (options.preventScrollOnTouch === 'auto') { preventScroll = false; }\n if (swipeAngle) { moveDirectionExpected = '?'; } \n if (autoplay && !animating) { setAutoplayTimer(); }\n }\n\n // === RESIZE FUNCTIONS === //\n // (slidePositions, index, items) => vertical_conentWrapper.height\n function updateContentWrapperHeight () {\n var wp = middleWrapper ? middleWrapper : innerWrapper;\n wp.style.height = slidePositions[index + items] - slidePositions[index] + 'px';\n }\n\n function getPages () {\n var rough = fixedWidth ? (fixedWidth + gutter) * slideCount / viewport : slideCount / items;\n return Math.min(Math.ceil(rough), slideCount);\n }\n\n /*\n * 1. update visible nav items list\n * 2. add \"hidden\" attributes to previous visible nav items\n * 3. remove \"hidden\" attrubutes to new visible nav items\n */\n function updateNavVisibility () {\n if (!nav || navAsThumbnails) { return; }\n\n if (pages !== pagesCached) {\n var min = pagesCached,\n max = pages,\n fn = showElement;\n\n if (pagesCached > pages) {\n min = pages;\n max = pagesCached;\n fn = hideElement;\n }\n\n while (min < max) {\n fn(navItems[min]);\n min++;\n }\n\n // cache pages\n pagesCached = pages;\n }\n }\n\n function info (e) {\n return {\n container: container,\n slideItems: slideItems,\n navContainer: navContainer,\n navItems: navItems,\n controlsContainer: controlsContainer,\n hasControls: hasControls,\n prevButton: prevButton,\n nextButton: nextButton,\n items: items,\n slideBy: slideBy,\n cloneCount: cloneCount,\n slideCount: slideCount,\n slideCountNew: slideCountNew,\n index: index,\n indexCached: indexCached,\n displayIndex: getCurrentSlide(),\n navCurrentIndex: navCurrentIndex,\n navCurrentIndexCached: navCurrentIndexCached,\n pages: pages,\n pagesCached: pagesCached,\n sheet: sheet,\n isOn: isOn,\n event: e || {},\n };\n }\n\n return {\n version: '2.9.2',\n getInfo: info,\n events: events,\n goTo: goTo,\n play: play,\n pause: pause,\n isOn: isOn,\n updateSliderHeight: updateInnerWrapperHeight,\n refresh: initSliderTransform,\n destroy: destroy,\n rebuild: function() {\n return tns(extend(options, optionsElements));\n }\n };\n};\n","// get css-calc \n// @return - false | calc | -webkit-calc | -moz-calc\n// @usage - var calc = getCalc(); \nimport { getBody } from './getBody.js';\nimport { setFakeBody } from './setFakeBody.js';\nimport { resetFakeBody } from './resetFakeBody.js';\n\nexport function calc() {\n var doc = document, \n body = getBody(),\n docOverflow = setFakeBody(body),\n div = doc.createElement('div'), \n result = false;\n\n body.appendChild(div);\n try {\n var str = '(10px * 10)',\n vals = ['calc' + str, '-moz-calc' + str, '-webkit-calc' + str],\n val;\n for (var i = 0; i < 3; i++) {\n val = vals[i];\n div.style.width = val;\n if (div.offsetWidth === 100) { \n result = val.replace(str, ''); \n break;\n }\n }\n } catch (e) {}\n \n body.fake ? resetFakeBody(body, docOverflow) : div.remove();\n\n return result;\n}","// get subpixel support value\n// @return - boolean\nimport { getBody } from './getBody.js';\nimport { setFakeBody } from './setFakeBody.js';\nimport { resetFakeBody } from './resetFakeBody.js';\n\nexport function percentageLayout() {\n // check subpixel layout supporting\n var doc = document,\n body = getBody(),\n docOverflow = setFakeBody(body),\n wrapper = doc.createElement('div'),\n outer = doc.createElement('div'),\n str = '',\n count = 70,\n perPage = 3,\n supported = false;\n\n wrapper.className = \"tns-t-subp2\";\n outer.className = \"tns-t-ct\";\n\n for (var i = 0; i < count; i++) {\n str += '
    ';\n }\n\n outer.innerHTML = str;\n wrapper.appendChild(outer);\n body.appendChild(wrapper);\n\n supported = Math.abs(wrapper.getBoundingClientRect().left - outer.children[count - perPage].getBoundingClientRect().left) < 2;\n\n body.fake ? resetFakeBody(body, docOverflow) : wrapper.remove();\n\n return supported;\n}","import { getBody } from './getBody.js';\nimport { setFakeBody } from './setFakeBody.js';\nimport { resetFakeBody } from './resetFakeBody.js';\n\nexport function mediaquerySupport () {\n var doc = document,\n body = getBody(),\n docOverflow = setFakeBody(body),\n div = doc.createElement('div'),\n style = doc.createElement('style'),\n rule = '@media all and (min-width:1px){.tns-mq-test{position:absolute}}',\n position;\n\n style.type = 'text/css';\n div.className = 'tns-mq-test';\n\n body.appendChild(style);\n body.appendChild(div);\n\n if (style.styleSheet) {\n style.styleSheet.cssText = rule;\n } else {\n style.appendChild(doc.createTextNode(rule));\n }\n\n position = window.getComputedStyle ? window.getComputedStyle(div).position : div.currentStyle['position'];\n\n body.fake ? resetFakeBody(body, docOverflow) : div.remove();\n\n return position === \"absolute\";\n}","import { getBody } from './getBody.js';\nimport { setFakeBody } from './setFakeBody.js';\nimport { resetFakeBody } from './resetFakeBody.js';\n\nexport function has3DTransforms(tf){\n if (!tf) { return false; }\n if (!window.getComputedStyle) { return false; }\n \n var doc = document,\n body = getBody(),\n docOverflow = setFakeBody(body),\n el = doc.createElement('p'),\n has3d,\n cssTF = tf.length > 9 ? '-' + tf.slice(0, -9).toLowerCase() + '-' : '';\n\n cssTF += 'transform';\n\n // Add it to the body to get the computed style\n body.insertBefore(el, null);\n\n el.style[tf] = 'translate3d(1px,1px,1px)';\n has3d = window.getComputedStyle(el).getPropertyValue(cssTF);\n\n body.fake ? resetFakeBody(body, docOverflow) : el.remove();\n\n return (has3d !== undefined && has3d.length > 0 && has3d !== \"none\");\n}\n","export function getSlideId() {\n var id = window.tnsId;\n window.tnsId = !id ? 1 : id + 1;\n \n return 'tns' + window.tnsId;\n}","// create and append style sheet\nexport function createStyleSheet (media) {\n // Create the