mirror of
https://github.com/a2nt/webpack-bootstrap-ui-kit.git
synced 2024-10-22 11:05:45 +02:00
1 line
1.1 MiB
1 line
1.1 MiB
{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/@a2nt/meta-lightbox/src/js/meta-lightbox.js","webpack:///./node_modules/bootstrap/js/dist/alert.js","webpack:///./node_modules/bootstrap/js/dist/button.js","webpack:///./node_modules/bootstrap/js/dist/carousel.js","webpack:///./node_modules/bootstrap/js/dist/collapse.js","webpack:///./node_modules/bootstrap/js/dist/modal.js","webpack:///./node_modules/bootstrap/js/dist/popover.js","webpack:///./node_modules/bootstrap/js/dist/scrollspy.js","webpack:///./node_modules/bootstrap/js/dist/tab.js","webpack:///./node_modules/bootstrap/js/dist/tooltip.js","webpack:///./node_modules/bootstrap/js/dist/util.js","webpack:///./node_modules/font-awesome sync nonrecursive \\.(otf|eot|svg|ttf|woff|woff2)$","webpack:///./node_modules/hammerjs/hammer.js","webpack:///./node_modules/jquery-hammerjs/jquery.hammer.js","webpack:///./node_modules/jquery-hoverintent/jquery.hoverIntent.js","webpack:///./node_modules/jquery.inputmask/dist/jquery.inputmask.bundle.js","webpack:///./node_modules/popper.js/dist/esm/popper.js","webpack:///./node_modules/select2/dist/js/select2.js","webpack:///./node_modules/smooth-scroll/dist/smooth-scroll.polyfills.min.js","webpack:///(webpack)/buildin/global.js","webpack:///./src/img sync nonrecursive \\.(png|jpe","webpack:///./src/img/bg.png","webpack:///./src/img/photo1.png","webpack:///./src/img/photo2.jpg","webpack:///./src/img/photo3.svg","webpack:///./src/js/_components/drivers/_google.track.external.links.js","webpack:///./src/js/_components/drivers/_map.google.marker.js","webpack:///./src/js/_components/drivers/_map.google.js","webpack:///./src/js/_consts.js","webpack:///./src/js/_events.js","webpack:///./src/js/_components/_ui.hover.js","webpack:///./src/js/_components/_ui.carousel.js","webpack:///./src/js/_components/_ui.menu.js","webpack:///./src/js/_components/_ui.cookie.js","webpack:///./src/js/_components/_ui.flyout.js","webpack:///./node_modules/sticky-sidebar/src/sticky-sidebar.js","webpack:///./src/js/_components/_ui.sidebar.js","webpack:///./src/js/_components/_ui.spinner.js","webpack:///./src/js/_components/_ui.ajax.js","webpack:///./src/js/_components/_ui.form.fields.js","webpack:///./src/js/_components/_ui.form.basics.js","webpack:///./src/js/_main.js","webpack:///./src/js/_components/_ui.video.preview.js","webpack:///./src/js/_layout.js","webpack:///./src/js/app.js","webpack:///external \"jQuery\""],"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","$","window","document","pluginName","defaults","effect","theme","keyboardNav","clickOverlayToClose","onInit","beforeShowLightbox","afterShowLightbox","lightbox","beforeHideLightbox","afterHideLightbox","onPrev","element","onNext","errorMessage","MetaLightbox","options","this","extend","_defaults","_name","init","$this","$html","ajaxLoaded","hasClass","addClass","removeClass","on","e","preventDefault","stopPropagation","showLightbox","off","code","keyCode","which","destructLightbox","trigger","el","$el","content","currentLink","galleryItems","constructLightbox","find","processContent","data","length","hide","show","index","eq","last","first","setTimeout","link","img","video","src","classTerm","iframe","wrap","href","attr","html","isHidpi","match","$content","imgwrapper","append","css","height","resize","zoom","contentLoaded","setTitle","ga","frameborder","vspace","hspace","scrolling","substring","clone","outerHeight","ajax","sync","async","url","dataType","method","cache","statusCode","404","console","log","location","302","error","jqXHR","statusText","success","status","dataJson","parseJSON","title","getResponseHeader","indexOf","replace","localStorage","setItem","URL","history","pushState","page","imagesLoaded","then","text","titleWrap","overlay","nav","close","$overlay","$target","target","replaceState","empty","devicePixelRatio","matchMedia","matches","fn","each","metaLightbox","jQuery","Util","_defineProperties","props","descriptor","configurable","writable","JQUERY_NO_CONFLICT","Event","CLOSE","CLOSED","CLICK_DATA_API","ClassName","Alert","_element","Constructor","protoProps","staticProps","_proto","rootElement","_getRootElement","_triggerCloseEvent","isDefaultPrevented","_removeElement","dispose","removeData","selector","getSelectorFromElement","parent","querySelector","closest","closeEvent","_this","transitionDuration","getTransitionDurationFromElement","one","TRANSITION_END","event","_destroyElement","emulateTransitionEnd","detach","remove","_jQueryInterface","config","$element","_handleDismiss","alertInstance","noConflict","factory","NAME","Selector","FOCUS_BLUR_DATA_API","LOAD_DATA_API","Button","toggle","triggerChangeEvent","addAriaPressed","input","type","checked","classList","contains","activeElement","tagName","focus","hasAttribute","setAttribute","toggleClass","button","inputBtn","test","buttons","slice","querySelectorAll","len","add","_i","_len","_button","getAttribute","_defineProperty","obj","ownKeys","enumerableOnly","keys","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","push","apply","_objectSpread2","arguments","source","forEach","getOwnPropertyDescriptors","defineProperties","DATA_KEY","EVENT_KEY","Default","interval","keyboard","slide","pause","touch","DefaultType","Direction","SLIDE","SLID","KEYDOWN","MOUSEENTER","MOUSELEAVE","TOUCHSTART","TOUCHMOVE","TOUCHEND","POINTERDOWN","POINTERUP","DRAG_START","ACTIVE","ACTIVE_ITEM","ITEM","ITEM_IMG","NEXT_PREV","INDICATORS","DATA_SLIDE","DATA_RIDE","PointerType","TOUCH","PEN","Carousel","_items","_interval","_activeElement","_isPaused","_isSliding","touchTimeout","touchStartX","touchDeltaX","_config","_getConfig","_indicatorsElement","_touchSupported","documentElement","navigator","maxTouchPoints","_pointerEvent","Boolean","PointerEvent","MSPointerEvent","_addEventListeners","next","_slide","nextWhenVisible","hidden","is","prev","triggerTransitionEnd","cycle","clearInterval","setInterval","visibilityState","to","activeIndex","_getItemIndex","direction","typeCheckConfig","_handleSwipe","absDeltax","Math","abs","_this2","_keydown","_addTouchEventListeners","_this3","start","originalEvent","pointerType","toUpperCase","clientX","touches","end","clearTimeout","move","parentNode","_getItemByDirection","isNextDirection","isPrevDirection","lastItemIndex","itemIndex","_triggerSlideEvent","relatedTarget","eventDirectionName","targetIndex","fromIndex","slideEvent","from","_setActiveIndicatorElement","indicators","nextIndicator","children","directionalClassName","orderClassName","_this4","activeElementIndex","nextElement","nextElementIndex","isCycling","slidEvent","reflow","nextElementInterval","parseInt","defaultInterval","action","TypeError","ride","_dataApiClickHandler","slideIndex","carousels","$carousel","SHOW","SHOWN","HIDE","HIDDEN","Dimension","ACTIVES","DATA_TOGGLE","Collapse","_isTransitioning","_triggerArray","id","toggleList","elem","filterElement","foundElem","_selector","_parent","_getParent","_addAriaAndCollapsedClass","actives","activesData","not","startEvent","dimension","_getDimension","style","setTransitioning","scrollSize","getBoundingClientRect","triggerArrayLength","isTransitioning","isElement","jquery","_getTargetFromElement","triggerArray","isOpen","currentTarget","$trigger","selectors","backdrop","HIDE_PREVENTED","FOCUSIN","RESIZE","CLICK_DISMISS","KEYDOWN_DISMISS","MOUSEUP_DISMISS","MOUSEDOWN_DISMISS","DIALOG","MODAL_BODY","DATA_DISMISS","FIXED_CONTENT","STICKY_CONTENT","Modal","_dialog","_backdrop","_isShown","_isBodyOverflowing","_ignoreBackdropClick","_scrollbarWidth","showEvent","_checkScrollbar","_setScrollbar","_adjustDialog","_setEscapeEvent","_setResizeEvent","_showBackdrop","_showElement","hideEvent","transition","_hideModal","htmlElement","handleUpdate","_triggerBackdropTransition","hideEventPrevented","defaultPrevented","modalTransitionDuration","modalBody","nodeType","Node","ELEMENT_NODE","body","appendChild","display","removeAttribute","scrollTop","_enforceFocus","shownEvent","transitionComplete","_this5","has","_this6","_this7","_this8","_resetAdjustments","_resetScrollbar","_removeBackdrop","callback","_this9","animate","createElement","className","appendTo","backdropTransitionDuration","callbackRemove","_backdropTransitionDuration","isModalOverflowing","scrollHeight","clientHeight","paddingLeft","paddingRight","rect","left","right","innerWidth","_getScrollbarWidth","_this10","fixedContent","stickyContent","actualPadding","calculatedPadding","parseFloat","actualMargin","marginRight","calculatedMargin","padding","elements","margin","scrollDiv","scrollbarWidth","width","clientWidth","removeChild","_this11","Tooltip","BSCLS_PREFIX_REGEX","RegExp","placement","template","INSERTED","CLICK","FOCUSOUT","Popover","_Tooltip","subClass","superClass","constructor","__proto__","isWithContent","getTitle","_getContent","addAttachmentClass","attachment","getTipElement","CLASS_PREFIX","tip","setContent","$tip","setElementContent","_cleanTipClass","tabClass","join","offset","ACTIVATE","SCROLL","DATA_SPY","NAV_LIST_GROUP","NAV_LINKS","NAV_ITEMS","LIST_ITEMS","DROPDOWN","DROPDOWN_ITEMS","DROPDOWN_TOGGLE","OffsetMethod","ScrollSpy","_scrollElement","_offsets","_targets","_activeTarget","_scrollHeight","_process","refresh","autoMethod","offsetMethod","offsetBase","_getScrollTop","_getScrollHeight","map","targetSelector","targetBCR","top","item","sort","a","b","getUID","pageYOffset","max","_getOffsetHeight","innerHeight","maxScroll","_activate","_clear","queries","split","$link","parents","node","scrollSpys","$spy","Tab","previous","listElement","itemSelector","nodeName","makeArray","complete","hiddenEvent","container","active","_transitionComplete","dropdownChild","dropdownElement","dropdownToggleList","Popper","uriAttrs","DefaultWhitelist","area","br","col","div","em","hr","h1","h2","h3","h4","h5","h6","li","ol","pre","small","span","sub","sup","strong","u","ul","SAFE_URL_PATTERN","DATA_URL_PATTERN","sanitizeHtml","unsafeHtml","whiteList","sanitizeFn","createdDocument","DOMParser","parseFromString","whitelistKeys","_loop","elName","toLowerCase","attributeList","attributes","whitelistedAttributes","concat","allowedAttributeList","attrName","nodeValue","regExp","attrRegex","allowedAttribute","innerHTML","DISALLOWED_ATTRIBUTES","animation","delay","fallbackPlacement","boundary","sanitize","popperConfig","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","HoverState","Trigger","_isEnabled","_timeout","_hoverState","_activeTrigger","_popper","_setListeners","enable","disable","toggleEnabled","dataKey","context","_getDelegateConfig","click","_isWithActiveTrigger","_enter","_leave","_hideModalHandler","destroy","Error","shadowRoot","findShadowRoot","isInTheDom","ownerDocument","tipId","_getAttachment","_getContainer","_getPopperConfig","noop","_fixTransition","prevHoverState","update","scheduleUpdate","modifiers","_getOffset","flip","behavior","arrow","preventOverflow","boundariesElement","onCreate","originalPlacement","_handlePopperPlacementChange","onUpdate","offsets","eventIn","eventOut","_fixTitle","titleType","dataAttributes","dataAttr","toString","popperData","popperInstance","instance","popper","initConfigAnimation","transitionEndEmulator","duration","called","prefix","random","getElementById","hrefAttr","trim","err","transitionDelay","floatTransitionDuration","floatTransitionDelay","offsetHeight","supportsTransitionEnd","componentName","configTypes","expectedTypes","valueType","attachShadow","getRootNode","root","ShadowRoot","jQueryDetection","version","special","bindType","delegateType","handle","handleObj","handler","webpackEmptyContext","req","resolve","exportName","undefined","assign","VENDOR_PREFIXES","TEST_ELEMENT","TYPE_FUNCTION","round","now","Date","setTimeoutContext","timeout","bindFn","invokeArrayArg","arg","Array","isArray","iterator","deprecate","message","deprecationMessage","stack","warn","output","nextKey","dest","merge","inherit","child","base","properties","childP","baseP","_super","boolOrFn","val","args","ifUndefined","val1","val2","addEventListeners","types","splitStr","addEventListener","removeEventListeners","removeEventListener","hasParent","inStr","str","inArray","findByKey","toArray","uniqueArray","results","values","prefixed","prop","camelProp","_uniqueId","getWindowForElement","doc","defaultView","parentWindow","SUPPORT_TOUCH","SUPPORT_POINTER_EVENTS","SUPPORT_ONLY_TOUCH","userAgent","COMPUTE_INTERVAL","INPUT_START","INPUT_MOVE","INPUT_END","INPUT_CANCEL","DIRECTION_NONE","DIRECTION_LEFT","DIRECTION_RIGHT","DIRECTION_UP","DIRECTION_DOWN","DIRECTION_HORIZONTAL","DIRECTION_VERTICAL","DIRECTION_ALL","PROPS_XY","PROPS_CLIENT_XY","Input","manager","self","inputTarget","domHandler","ev","inputHandler","eventType","pointersLen","pointers","changedPointersLen","changedPointers","isFirst","isFinal","session","pointersLength","firstInput","simpleCloneInputData","firstMultiple","offsetCenter","center","getCenter","timeStamp","deltaTime","angle","getAngle","distance","getDistance","offsetDelta","prevDelta","prevInput","x","deltaX","y","deltaY","computeDeltaXY","offsetDirection","getDirection","overallVelocity","getVelocity","overallVelocityX","overallVelocityY","scale","rotation","getRotation","maxPointers","velocity","velocityX","velocityY","lastInterval","v","computeIntervalInputData","srcEvent","computeInputData","emit","recognize","clientY","p1","p2","sqrt","atan2","PI","evEl","evTarget","evWin","MOUSE_INPUT_MAP","mousedown","mousemove","mouseup","MOUSE_ELEMENT_EVENTS","MOUSE_WINDOW_EVENTS","MouseInput","pressed","POINTER_INPUT_MAP","pointerdown","pointermove","pointerup","pointercancel","pointerout","IE10_POINTER_TYPE_ENUM","2","3","4","5","POINTER_ELEMENT_EVENTS","POINTER_WINDOW_EVENTS","PointerEventInput","store","pointerEvents","removePointer","eventTypeNormalized","isTouch","storeIndex","pointerId","splice","SINGLE_TOUCH_INPUT_MAP","touchstart","touchmove","touchend","touchcancel","SINGLE_TOUCH_TARGET_EVENTS","SINGLE_TOUCH_WINDOW_EVENTS","SingleTouchInput","started","normalizeSingleTouches","all","changed","changedTouches","TOUCH_INPUT_MAP","TOUCH_TARGET_EVENTS","TouchInput","targetIds","getTouches","allTouches","identifier","targetTouches","changedTargetTouches","DEDUP_TIMEOUT","DEDUP_DISTANCE","TouchMouseInput","mouse","primaryTouch","lastTouches","recordTouches","eventData","setLastTouch","lastTouch","lts","isSyntheticEvent","dx","dy","inputEvent","inputData","isMouse","sourceCapabilities","firesTouchEvents","PREFIXED_TOUCH_ACTION","NATIVE_TOUCH_ACTION","TOUCH_ACTION_AUTO","TOUCH_ACTION_MANIPULATION","TOUCH_ACTION_NONE","TOUCH_ACTION_PAN_X","TOUCH_ACTION_PAN_Y","TOUCH_ACTION_MAP","touchMap","cssSupports","CSS","supports","getTouchActionProps","TouchAction","set","compute","actions","touchAction","recognizers","recognizer","getTouchAction","hasPanX","hasPanY","cleanTouchActions","preventDefaults","prevented","hasNone","isTapPointer","isTapMovement","isTapTouchTime","preventSrc","STATE_POSSIBLE","STATE_BEGAN","STATE_CHANGED","STATE_ENDED","STATE_RECOGNIZED","STATE_CANCELLED","Recognizer","state","simultaneous","requireFail","stateStr","directionStr","getRecognizerByNameIfManager","otherRecognizer","AttrRecognizer","PanRecognizer","pX","pY","PinchRecognizer","PressRecognizer","_timer","_input","RotateRecognizer","SwipeRecognizer","TapRecognizer","pTime","pCenter","count","Hammer","preset","Manager","recognizeWith","dropRecognizeWith","requireFailure","dropRequireFailure","hasRequireFailures","canRecognizeWith","additionalEvent","tryEmit","canEmit","inputDataClone","reset","process","attrTest","optionPointers","isRecognized","isValid","threshold","directionTest","hasMoved","inOut","time","validPointers","validMovement","validTime","taps","posThreshold","validTouchTime","failTimeout","validInterval","validMultiTap","tapCount","VERSION","domEvents","inputClass","cssProps","userSelect","touchSelect","touchCallout","contentZooming","userDrag","tapHighlightColor","handlers","oldCssProps","toggleCssProps","stop","force","stopped","curRecognizer","existing","events","gestureEvent","createEvent","initEvent","gesture","dispatchEvent","triggerDomEvent","STATE_FAILED","Tap","Pan","Swipe","Pinch","Rotate","Press","originalEmit","hammer","hammerify","cX","cY","_cfg","sensitivity","INSTANCE_COUNT","track","pageX","pageY","compare","cfg","timeoutId","isActive","over","hoverIntent","handlerIn","handlerOut","instanceId","isPlainObject","isFunction","out","handleHover","hoverIntentData","Inputmask","alias","opts","maskset","noMasksCache","definitions","userOptions","dataAttribute","isRTL","numericInput","resolveAlias","aliasStr","aliasDefinition","aliases","mask","generateMaskSet","nocache","generateMask","metadata","greedy","repeat","placeholder","repeatStart","groupmarker","quantifiermarker","masksetDefinition","masksCache","maskToken","analyseMask","validPositions","_buffer","buffer","tests","maskLength","reverse","ms","keepStatic","altMask","ndx","msk","alternatormarker","pop","maskScope","actionObj","getMaskTemplate","baseOnInput","minimalPos","includeMode","ndxIntlzr","testPos","maskTemplate","pos","lvp","getLastValidPosition","maxLength","getMaskSet","locator","nativeDef","getPlaceholder","getTestTemplate","jitMasking","isFinite","def","resetMaskSet","soft","closestTo","strict","before","after","valids","posNdx","psNdx","stripValidPositions","nocheck","IsEnclosedStatic","posMatch","prevMatch","nextMatch","startPos","positionsClone","needsValidation","optionality","canClearPosition","isMask","positionCanMatchDefinition","determineTestTemplate","guessNextBest","testPositions","lvTest","getTests","lvTestAltArr","alternation","optionalQuantifier","newBlockMarker","checkAlternationMatch","tstPs","getTest","valid","tndx","resolveTestFromToken","ndxInitializer","loopNdx","quantifierRecurse","handleMatch","isFirstMatch","latestMatch","tokenGroup","firstMatch","isQuantifier","resolveNdxInitializer","alternateNdx","targetAlternation","bestMatch","indexPos","lmnt","ndxPos","cd","cacheDependency","isGroup","isOptional","optionalToken","insertStop","isAlternator","maltMatches","alternateToken","malternateMatches","currentMatches","loopNdxCnt","altIndex","shift","amndx","currentPos","ndxInitializerClone","altIndexArr","ntndx","ndx1","altMatch","hasMatch","ndx2","altMatch2","na","altLocArr","alndx","qt","qndx","isNaN","quantifier","min","filterTests","maskTokens","previousPos","tst","mtndx","cardinality","casing","getBufferTemplate","getBuffer","noCache","refreshFromBuffer","skipOptionalPartCharacter","posBefore","String","fromCharCode","SPACE","altArr1","altArr2","altArrC","isMatch","fromSetValid","fromAlternate","isSelection","posObj","selection","begin","insertMode","_isValid","position","rslt","loopend","chrs","getBufferElement","validatedPos","possibleModifiedBuffer","insert","setValidPosition","trackbackAlternations","originalPos","newPos","vp","targetLocator","tll","ps","equality","validTest","j","vps","initialLength","fillMissingNonMask","result","caret","generatedInput","maskPos","pndx","testTemplate","testsFromPos","radixPointDefinitionSymbol","radixPoint","handleRemove","DELETE","currentPosValid","seekNext","staticChar","nPos","snPos","lastAlt","altPos","prevAltPos","validPos","altNdxs","decisionPos","validPsClone","isValidRslt","lAltPos","decisionTaker","possibilityPos","prevPos","mndx","validInputs","staticInputsBeforePos","staticInputsBeforePosAlternate","verifyValidInput","possibilities","targetLvp","alternate","postValidation","newBlock","maskL","seekPrevious","writeBuffer","caretPos","triggerInputEvent","onBeforeWrite","inputmask","_valueSet","renderColorMask","skipInputEvent","prevTest","staticAlternations","charAt","checkVal","writeOut","nptvl","initiatingEvent","stickyCaret","inputValue","charCodes","initialNdx","autoUnmask","staticInput","escapeRegex","charCode","keypress","charCodeAt","nextTest","charCodeNdx","bufferTemplateArr","isTemplateMatch","EventHandlers","keypressEvent","forwardPosition","unmaskedvalue","umValue","unmaskedValue","onUnMask","bufferValue","notranslate","translatePosition","range","setSelectionRange","selectionStart","selectionEnd","getSelection","getRangeAt","commonAncestorContainer","startOffset","endOffset","createRange","duplicate","moveStart","_valueGet","scrollCalc","getComputedStyle","currentStyle","fontSize","scrollLeft","scrollWidth","mobile","firstChild","textNode","createTextNode","setStart","setEnd","collapse","sel","removeAllRanges","addRange","createTextRange","moveEnd","select","determineLastRequiredPosition","returnDefinition","bl","positions","lvTestAlt","clearOptionalTail","rl","lmib","isComplete","lrp","aml","k","BACKSPACE","pend","groupSeparator","generalize","initializeColorMask","colorMask","offsetWidth","computedStyle","borderLeftWidth","borderRightWidth","paddingTop","paddingBottom","borderTopWidth","borderBottomWidth","lineHeight","zIndex","webkitAppearance","mozAppearance","Appearance","backgroundColor","color","clientx","textTransform","letterSpacing","visibility","whiteSpace","itl","inputText","previousWidth","offset1","offset2","findCaretPos","clickEvent","shiftKey","handleStatic","static","undoValue","valueBuffer","skipKeyPressEvent","ignorable","mouseEnter","EventRuler","eventName","eventHandler","imOpts","disabled","readOnly","ctrlKey","tabThrough","TAB","iemobile","iphone","that","returnVal","form","evArr","keydownEvent","$input","BACKSPACE_SAFARI","X","evName","isSupported","isInputEventSupported","END","PAGE_DOWN","HOME","PAGE_UP","undoOnEscape","ESCAPE","altKey","INSERT","onKeyDown","ignorables","checkval","metaKey","ENTER","writeOutBuffer","valResult","onKeyValidation","pasteEvent","tempValue","valueBeforeCaret","substr","valueAfterCaret","clipboardData","getData","pasteValue","onBeforePaste","inputFallBackEvent","inputChar","bufferTemplate","setValueEvent","onBeforeMask","clearMaskOnLostFocus","clearIncomplete","focusEvent","nptValue","showMaskOnFocus","showMaskOnHover","positionCaretOnTab","mouseleaveEvent","tabbed","selectedCaret","positionCaretOnClick","clickPos","radixPos","doRadixFocus","clickPosition","lastPosition","dblclickEvent","cutEvent","clipData","setData","execCommand","blurEvent","mouseenterEvent","submitEvent","removeMaskOnSubmit","resetEvent","elementType","supportsInputType","isContentEditable","npt","nullable","valueGet","setter","valueSet","__valueGet","noValuePatching","getPrototypeOf","valueProperty","textContent","__lookupGetter__","__lookupSetter__","__defineGetter__","__defineSetter__","__valueSet","overruleRTL","valHooks","inputmaskpatch","valhookGet","valhookSet","$elem","patchValhook","installNativeValueSetFallback","patchValueProperty","isElementTypeSupported","dir","rightAlign","textAlign","android","inputmode","androidHack","oncomplete","onincomplete","oncleared","inputEventOnly","initialValue","maskTarget","mtdt","ua","optionalmarker","escapeChar","pastedValue","validator","definitionSymbol","staticDefinitionSymbol","elems","scopedOpts","importOption","option","optionData","dataoptions","attrOptions","JSON","parse","importAttributeOptions","noremask","getemptymask","hasMaskedValue","getmetadata","format","MaskToken","openGroup","insertTestDefinition","mtoken","maskdef","escaped","prevalidators","prevalidator","prevalidatorsL","defaultCase","openenings","currentOpeningToken","alternator","currentToken","openingToken","lastMatch","groupToken","tokenizer","exec","mq","mq0","mq1","verifyGroupMarker","token","nextToken","reverseTokens","intMatch","st","extendDefaults","extendDefinitions","definition","extendAliases","unmask","ALT","CAPS_LOCK","COMMA","COMMAND","COMMAND_LEFT","COMMAND_RIGHT","CONTROL","DOWN","MENU","NUMPAD_ADD","NUMPAD_DECIMAL","NUMPAD_DIVIDE","NUMPAD_ENTER","NUMPAD_MULTIPLY","NUMPAD_SUBTRACT","PERIOD","SHIFT","UP","WINDOWS","nptmask","triggerHandler","regex","val1pre","val2pre","separator","escapedSeparator","leapday","yearrange","minyear","maxyear","isInYearRange","enteredyear","enteredyear2","determinebaseyear","hint","currentyear","getFullYear","maxYearPrefix","maxYearPostfix","maxxYear","currentYearPrefix","currentYearAndHint","today","getDate","getMonth","getFrontValue","currentResult","dayMonthValue","year","bufferStr","isLeapYear","pchrs","frontValue","yearPrefix","datetime","hrspre","hrs24","hrs","ampm","mspre","timeseparator","hourFormat","h","tmp","datetime12","date","shamsi","A","ip","maskedValue","email","mac","vin","V","numeric","autoEscape","txt","escapedTxt","integerDigits","autoGroup","groupSize","seps","floor","mod","integerOptional","digitsOptional","digits","decimalProtect","dq","suffix","allowPlus","allowMinus","negationSymbol","front","back","step","unmaskAsNumber","postFormat","charAtPos","cbuf","isNegative","bufVal","bufValOrigin","escapedGroupSeparator","radixSplit","reg","needsRefresh","processValue","floatValue","signedFloatValue","radixPosition","rpb","unshift","integerPart","integerNPart","signHandler","matchRslt","radixHandler","integerValue","leadingZeroHandler","decimalPart","radix","Number","bufClone","vs","kommaMatches","dotMatches","decPart","digitsFactor","pow","positionInput","currency","decimal","integer","percentage","maskSort","maska","maskb","maskas","maskbs","localeCompare","analyseMaskBase","maskGroups","phoneCodes","reduceVariations","masks","previousVariation","previousmaskGroup","variation","maskGroup","rebuild","submasks","abstractphone","countrycode","processedValue","Regex","regexTokens","quantifierFilter","RegexToken","repeaterPart","validateRegexToken","fromGroup","isvalid","regexPart","openGroupCount","matchToken","crrntndx","matchGroup","regexPartBak","qm","testExp","tl","cbuffer","opengroups","quantifierToken","analyseRegex","regexToken","isBrowser","timeoutDuration","longerTimeoutBrowsers","debounce","Promise","scheduled","functionToCheck","getStyleComputedProperty","getParentNode","host","getScrollParent","_getStyleComputedProp","overflow","overflowX","overflowY","getReferenceNode","reference","referenceNode","isIE11","MSInputMethodContext","documentMode","isIE10","isIE","getOffsetParent","noOffsetParent","offsetParent","nextElementSibling","getRoot","findCommonOffsetParent","element1","element2","order","compareDocumentPosition","DOCUMENT_POSITION_FOLLOWING","firstElementChild","element1root","getScroll","upperSide","scrollingElement","getBordersSize","styles","axis","sideA","sideB","getSize","getWindowSizes","classCallCheck","createClass","_extends","getClientRect","bottom","sizes","horizScrollbar","vertScrollbar","getOffsetRectRelativeToArbitraryNode","fixedPosition","isHTML","childrenRect","parentRect","scrollParent","marginTop","marginLeft","subtract","modifier","includeScroll","getFixedPositionOffsetParent","parentElement","getBoundaries","boundaries","excludeScroll","relativeOffset","getViewportOffsetRectRelativeToArtbitraryNode","boundariesNode","isFixed","_getWindowSizes","isPaddingNumber","computeAutoPlacement","refRect","rects","sortedAreas","_ref","filteredAreas","_ref2","computedPlacement","getReferenceOffsets","getOuterSizes","marginBottom","getOppositePlacement","hash","matched","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","arr","check","runModifiers","ends","findIndex","cur","enabled","isDestroyed","arrowStyles","flipped","positionFixed","isCreated","isModifierEnabled","modifierName","some","getSupportedPropertyName","prefixes","upperProp","toCheck","willChange","disableEventListeners","removeOnDestroy","getWindow","setupEventListeners","updateBound","passive","scrollElement","attachToScrollParents","scrollParents","isBody","eventsEnabled","enableEventListeners","cancelAnimationFrame","isNumeric","setStyles","unit","isFirefox","isModifierRequired","requestingName","requestedName","requesting","isRequired","_requesting","requested","placements","validPlacements","clockwise","counter","BEHAVIORS","FLIP","CLOCKWISE","COUNTERCLOCKWISE","parseOffset","basePlacement","useHeight","fragments","frag","divider","search","splitRegex","ops","op","mergeWithPrevious","reduce","toValue","index2","Defaults","shiftvariation","_data$offsets","isVertical","side","shiftOffsets","transformProp","popperStyles","transform","priority","primary","escapeWithReference","secondary","keepTogether","opSide","_data$offsets$arrow","arrowElement","sideCapitalized","altSide","arrowElementSize","popperMarginSide","popperBorderSide","sideValue","placementOpposite","flipOrder","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariationByRef","flipVariations","flippedVariationByContent","flipVariationsByContent","flippedVariation","getOppositeVariation","inner","subtractLength","bound","computeStyle","legacyGpuAccelerationOption","gpuAcceleration","offsetParentRect","shouldRound","noRound","referenceWidth","popperWidth","isVariation","horizontalToInteger","verticalToInteger","getRoundedOffsets","prefixedProperty","invertTop","invertLeft","applyStyle","onLoad","modifierOptions","requestAnimationFrame","Utils","global","PopperUtils","S2","select2","amd","requirejs","require","define","undef","main","makeMap","defined","waiting","defining","hasOwn","aps","jsSuffixRegExp","hasProp","normalize","baseName","nameParts","nameSegment","mapValue","foundMap","lastIndex","foundI","foundStarMap","starI","part","baseParts","starMap","nodeIdCompat","makeRequire","relName","forceSync","makeLoad","depName","callDep","splitPrefix","makeRelParts","makeConfig","relParts","plugin","parts","relResourceName","f","pr","uri","deps","cjsModule","ret","usingExports","callbackType","load","alt","_defined","_$","getMethods","theClass","proto","methods","methodName","Extend","ChildClass","SuperClass","__hasProp","BaseConstructor","__super__","Decorate","DecoratorClass","decoratedMethods","superMethods","DecoratedClass","argCount","calledConstructor","displayName","superMethod","calledMethod","originalMethod","decoratedMethod","Observable","listeners","params","_type","invoke","generateChars","chars","func","_convertData","originalKey","dataLevel","hasScroll","escapeMarkup","markup","replaceMap","'","appendMany","$nodes","$jqNodes","__cache","GetUniqueElementId","select2Id","StoreData","GetData","RemoveData","Results","dataAdapter","render","$results","clear","displayMessage","hideLoading","$message","hideMessages","$options","$option","$dropdown","sorter","highlightFirstItem","$selected","ensureHighlightVisible","setClasses","current","selected","selectedIds","showLoading","loading","loadingMore","$loading","prepend","attrs","Element","msMatchesSelector","webkitMatchesSelector","_resultId","role","label","$children","$child","$childrenContainer","$container","removeAttr","$highlighted","getHighlightedResults","currentIndex","nextIndex","$next","currentOffset","nextTop","nextOffset","nextBottom","mousewheel","isAtTop","isAtBottom","evt","CTRL","ESC","KEYS","BaseSelection","$selection","_tabindex","resultsId","_handleBlur","_attachCloseHandler","_detachCloseHandler","$select","SingleSelection","$rendered","selectionContainer","formatted","MultipleSelection","$selections","Placeholder","decorated","normalizePlaceholder","_","createPlaceholder","$placeholder","singlePlaceholder","AllowClear","_handleClear","_handleKeyboardClear","$clear","previousVal","unselectData","removeAll","$remove","Search","$search","$searchContainer","_transferTabIndex","_keyUpPrevented","$previousChoice","searchRemoveChoice","msie","disableInputEvents","handleSearch","searchHadFocus","resizeSearch","term","EventRelay","relayEvents","preventableEvents","Translation","dict","translation","_cache","loadPath","path","translations","BaseAdapter","query","generateResultId","SelectAdapter","currentData","unselect","addOptions","innerText","normalizedData","_normalizeItem","matcher","ArrayAdapter","_dataToConvert","convertToOptions","elm","$existing","existingIds","onlyItem","$existingOption","existingData","newData","$newOption","replaceWith","AjaxAdapter","ajaxOptions","_applyDefaults","processResults","q","transport","failure","$request","fail","_request","abort","request","_queryTimeout","Tags","tags","createTag","insertTag","tag","_removeOldTags","wrapper","checkChildren","Tokenizer","dropdown","tokenData","separators","termChar","MinimumInputLength","$e","minimumInputLength","minimum","MaximumInputLength","maximumInputLength","maximum","MaximumSelectionLength","maximumSelectionLength","_checkIfMaximumSelected","successCallback","Dropdown","showSearch","HidePlaceholder","removePlaceholder","modifiedData","InfiniteScroll","lastParams","$loadingMore","createLoadingMore","showLoadingMore","loadMoreIfNeeded","isLoadMoreVisible","loadMore","pagination","more","AttachBody","$dropdownParent","_showDropdown","_attachPositioningHandler","_bindContainerResultHandlers","_hideDropdown","_detachPositioningHandler","$dropdownContainer","_containerResultsHandlersBound","_positionDropdown","_resizeDropdown","scrollEvent","resizeEvent","orientationEvent","$watchers","$window","isCurrentlyAbove","isCurrentlyBelow","newDirection","viewport","enoughRoomAbove","enoughRoomBelow","$offsetParent","parentOffset","isConnected","outerWidth","minWidth","MinimumResultsForSearch","minimumResultsForSearch","Infinity","countResults","SelectOnClose","_handleSelectOnClose","originalSelect2Event","$highlightedResults","CloseOnSelect","_selectTriggered","errorLoading","inputTooLong","overChars","inputTooShort","maximumSelected","noResults","searching","removeAllItems","ResultsList","SelectionSearch","DIACRITICS","SelectData","ArrayData","AjaxData","DropdownSearch","EnglishTranslation","tokenSeparators","Query","amdBase","initSelection","InitSelection","resultsAdapter","selectOnClose","dropdownAdapter","multiple","SearchableDropdown","closeOnSelect","dropdownCssClass","dropdownCss","adaptDropdownCssClass","DropdownCSS","selectionAdapter","allowClear","containerCssClass","containerCss","adaptContainerCssClass","ContainerCSS","language","_resolveLanguage","uniqueLanguages","_processTranslations","debug","stripDiacritics","amdLanguageBase","dropdownAutoWidth","original","scrollAfterSelect","templateResult","templateSelection","applyFromElement","optionLanguage","defaultLanguage","elementLanguage","parentLanguage","languages","isEmptyObject","resolvedLanguages","baseLanguage","languageData","ex","camelCase","convertedData","Options","fromElement","InputCompat","excludedData","dataset","upperCaseLetter","letter","attributeName","dataName","dataValue","Select2","_generateId","tabindex","DataAdapter","_placeContainer","SelectionAdapter","DropdownAdapter","ResultsAdapter","_bindAdapters","_registerDomEvents","_registerDataEvents","_registerSelectionEvents","_registerDropdownEvents","_registerResultsEvents","_registerEvents","initialData","_syncAttributes","insertAfter","_resolveWidth","WIDTH","styleWidth","elementWidth","_syncA","_syncS","_syncSubtree","attachEvent","observer","MutationObserver","WebKitMutationObserver","MozMutationObserver","_observer","mutations","observe","childList","subtree","nonRelayEvents","toggleDropdown","open","addedNodes","removedNodes","actualTrigger","preTriggerMap","preTriggerName","preTriggerArgs","hasFocus","newVal","detachEvent","disconnect","thisMethods","instanceOptions","bubbles","cancelable","detail","initCustomEvent","CustomEvent","getTime","ignore","header","topOnEmptyHash","speed","clip","easing","customEasing","updateURL","popstate","emitEvents","decodeURIComponent","InvalidCharacterError","offsetTop","anchor","g","w","E","S","C","O","I","F","L","cancelScroll","outline","scrollTo","H","smoothScroll","stringify","hostname","pathname","animateScroll","Function","webpackContext","webpackContextResolve","_gaLt","srcElement","hitCallback","hitBack","returnValue","Obj","ui","setMap","divClass","align","isDebugMode","onClick","onMouseOver","isBoolean","isNotUndefined","hasContent","isString","google","maps","OverlayView","getPanes","overlayMouseTarget","addDomListener","$div","positionInPixels","getProjection","fromLatLngToDivPixel","LatLng","divWidth","divHeight","draw","CONSTS","ENVS","MAP_DRIVER","W","markers","getName","googleApiLoaded","$mapDiv","lat","lng","MarkerUI","Map","fullscreenControl","default_zoom","popup","geocoder","Geocoder","Events","MAPAPILOADED","crds","marker","showPopup","MAPMARKERCLICK","$popup","getDiv","setCenter","setZoom","opacity","hidePopup","setPosition","restoreBounds","MAPPOPUPCLOSE","addr","geocode","address","latLng","latlng","bounds","features","geometry","coordinates","LatLngBounds","addMarker","icon","flyToMarker","fitBounds","default_bounds","getZoom","getPosition","restoreZoom","AJAX","LOADED","MAPLOADED","SET_TARGET_UPDATE","RESTORE_FIELD","FORM_INIT_BASICS","FORM_INIT_STEPPED","FORM_INIT_VALIDATE","FORM_INIT_VALIDATE_FIELD","FORM_INIT_STORAGE","FORM_VALIDATION_FAILED","FORM_STEPPED_NEW_STEP","FORM_STEPPED_FIRST_STEP","FORM_STEPPED_LAST_STEP","FORM_FIELDS","HoverUI","$parent","$triger","isShown","ready","jsHoverUI","CarouselUI","$indicators","carousel","$youtubeSlides","YT","Player","pauseVideo","SlidingMenu","jsSlidingMenu","CookieUI","D","cookie","days","expires","toUTCString","encodeURIComponent","FlyoutUI","$modal","$close","StickySidebar","DEFAULTS","topSpacing","bottomSpacing","containerSelector","innerWrapperSelector","stickyClass","resizeSensor","sidebar","sidebarInner","affixedType","support","transform3d","_initialized","_reStyle","_breakpoint","_resizeListeners","dimensions","translateY","lastTopSpacing","lastBottomSpacing","sidebarHeight","sidebarWidth","containerTop","containerHeight","viewportHeight","viewportTop","lastViewportTop","initialize","_setSupportFeatures","containers","_widthBreakpoint","calcDimensions","stickyPosition","bindEvents","capture","ResizeSensor","handleEvent","updateSticky","dims","offsetRelative","containerBottom","_calcDimensionsWithScroll","sidebarLeft","viewportBottom","viewportLeft","furthest","affixType","sidebarBottom","colliderTop","colliderBottom","isSidebarFitsViewport","outer","translate","_getTranslate","getAffixType","_getStyle","affixEvent","eventTrigger","_unit","affixedEvent","_running","observeScrollDir","supportTransform","z","caption","minHeight","styleReset","upper","offsetLeft","$Body","SidebarUI","sticky","SpinnerUI","AjaxUI","G","$Html","Spinner","MainUI","updateLocation","absoluteLocation","URLDetails","js","regions","replaceRegion","preload","$head","items","itemCallback","Deferred","promise","dfds","dfd","always","when","$region","jsAjaxUI","Title","onpopstate","$existingLink","FormFieldUI","shown","vals","$collapse","restore","wipe","msg","$field","FormBasics","_el","$fields","$selectFields","$radioOptions","siblings","jsFormBasics","SmoothScroll","$AlertNotify","$SiteWideMessage","updateOnlineStatus","onLine","pingInterval","datastatus","relative","loadImages","detectBootstrapScreenSize","getScript","fonts","WebFont","families","targetEl","$targetEl","print","envs","Consts","curEnv","env","cls","fadeOut","alert","fadeIn","play","$imgs","$imgUrls","$imgLazyUrls","lazySrc","VideoPreviewUI","$_el","video_id","parsedURL","YouTubeGetID","jsonp","thumbnail_src","thumbnail_large","jsVideoPreviewUI","LayoutUI","importAll"],"mappings":"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V,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,QAMdL,EAAGK,OAAO,oBAAoB,CAC5B,aACC,SAAUR,GACX,SAASmN,EAAaphE,EAAUjK,GAC9BqrE,EAAY/I,UAAUpkD,YAAYnhB,KAAKkD,MAkCzC,OA/BAi+D,EAAM+D,OAAOoJ,EAAanN,EAAMiF,YAEhCkI,EAAY7sE,UAAUqnE,QAAU,SAAU5qD,GACxC,MAAM,IAAIiN,MAAM,2DAGlBmjD,EAAY7sE,UAAU8sE,MAAQ,SAAUjI,EAAQpoD,GAC9C,MAAM,IAAIiN,MAAM,yDAGlBmjD,EAAY7sE,UAAUJ,KAAO,SAAUskB,EAAWqkD,KAIlDsE,EAAY7sE,UAAUypB,QAAU,aAIhCojD,EAAY7sE,UAAU+sE,iBAAmB,SAAU7oD,EAAW3gB,GAC5D,IAAI4T,EAAK+M,EAAU/M,GAAK,WASxB,OAPAA,GAAMuoD,EAAMsF,cAAc,GAEX,MAAXzhE,EAAK4T,GACPA,GAAM,IAAM5T,EAAK4T,GAAGuU,WAEpBvU,GAAM,IAAMuoD,EAAMsF,cAAc,GAE3B7tD,GAGF01D,KAGThN,EAAGK,OAAO,sBAAsB,CAC9B,SACA,WACA,WACC,SAAU2M,EAAanN,EAAOt/D,GAC/B,SAAS4sE,EAAevhE,EAAUjK,GAChCC,KAAKgK,SAAWA,EAChBhK,KAAKD,QAAUA,EAEfwrE,EAAclJ,UAAUpkD,YAAYnhB,KAAKkD,MAkR3C,OA/QAi+D,EAAM+D,OAAOuJ,EAAeH,GAE5BG,EAAchtE,UAAUqnE,QAAU,SAAU5qD,GAC1C,IAAIlZ,EAAO,GACP6vB,EAAO3xB,KAEXA,KAAKgK,SAASpI,KAAK,aAAasF,MAAK,WACnC,IAAIm+D,EAAU1mE,EAAEqB,MAEZkiD,EAASvwB,EAAK7Q,KAAKukD,GAEvBvjE,EAAKgL,KAAKo1C,MAGZlnC,EAASlZ,IAGXypE,EAAchtE,UAAUo4C,OAAS,SAAU70C,GACzC,IAAI6vB,EAAO3xB,KAKX,GAHA8B,EAAK+jE,UAAW,EAGZlnE,EAAEmD,EAAKnC,SAASoR,GAAG,UAKrB,OAJAjP,EAAKnC,QAAQkmE,UAAW,OAExB7lE,KAAKgK,SAAS3I,QAAQ,UAKxB,GAAIrB,KAAKgK,SAAS+lB,KAAK,YACrB/vB,KAAK4lE,SAAQ,SAAU4F,GACrB,IAAI98C,EAAM,IAEV5sB,EAAO,CAACA,IACHgL,KAAKC,MAAMjL,EAAM0pE,GAEtB,IAAK,IAAIvuE,EAAI,EAAGA,EAAI6E,EAAKC,OAAQ9E,IAAK,CACpC,IAAIyY,EAAK5T,EAAK7E,GAAGyY,IAEW,IAAxB/W,EAAE6wB,QAAQ9Z,EAAIgZ,IAChBA,EAAI5hB,KAAK4I,GAIbic,EAAK3nB,SAAS0kB,IAAIA,GAClBiD,EAAK3nB,SAAS3I,QAAQ,iBAEnB,CACL,IAAIqtB,EAAM5sB,EAAK4T,GAEf1V,KAAKgK,SAAS0kB,IAAIA,GAClB1uB,KAAKgK,SAAS3I,QAAQ,YAI1BkqE,EAAchtE,UAAUktE,SAAW,SAAU3pE,GAC3C,IAAI6vB,EAAO3xB,KAEX,GAAKA,KAAKgK,SAAS+lB,KAAK,YAAxB,CAMA,GAFAjuB,EAAK+jE,UAAW,EAEZlnE,EAAEmD,EAAKnC,SAASoR,GAAG,UAKrB,OAJAjP,EAAKnC,QAAQkmE,UAAW,OAExB7lE,KAAKgK,SAAS3I,QAAQ,UAKxBrB,KAAK4lE,SAAQ,SAAU4F,GAGrB,IAFA,IAAI98C,EAAM,GAEDzxB,EAAI,EAAGA,EAAIuuE,EAAYzpE,OAAQ9E,IAAK,CAC3C,IAAIyY,EAAK81D,EAAYvuE,GAAGyY,GAEpBA,IAAO5T,EAAK4T,KAA8B,IAAxB/W,EAAE6wB,QAAQ9Z,EAAIgZ,IAClCA,EAAI5hB,KAAK4I,GAIbic,EAAK3nB,SAAS0kB,IAAIA,GAElBiD,EAAK3nB,SAAS3I,QAAQ,eAI1BkqE,EAAchtE,UAAUJ,KAAO,SAAUskB,EAAWqkD,GAClD,IAAIn1C,EAAO3xB,KAEXA,KAAKyiB,UAAYA,EAEjBA,EAAU9hB,GAAG,UAAU,SAAUyiE,GAC/BzxC,EAAKglB,OAAOysB,EAAOthE,SAGrB2gB,EAAU9hB,GAAG,YAAY,SAAUyiE,GACjCzxC,EAAK85C,SAASrI,EAAOthE,UAIzBypE,EAAchtE,UAAUypB,QAAU,WAEhChoB,KAAKgK,SAASpI,KAAK,KAAKsF,MAAK,WAE3B+2D,EAAMyG,WAAW1kE,UAIrBurE,EAAchtE,UAAU8sE,MAAQ,SAAUjI,EAAQpoD,GAChD,IAAIlZ,EAAO,GACP6vB,EAAO3xB,KAEIA,KAAKgK,SAAS4J,WAEpB1M,MAAK,WACZ,IAAIm+D,EAAU1mE,EAAEqB,MAEhB,GAAKqlE,EAAQt0D,GAAG,WAAcs0D,EAAQt0D,GAAG,YAAzC,CAIA,IAAImxC,EAASvwB,EAAK7Q,KAAKukD,GAEnBr+D,EAAU2qB,EAAK3qB,QAAQo8D,EAAQlhB,GAEnB,OAAZl7C,GACFlF,EAAKgL,KAAK9F,OAIdgU,EAAS,CACP4U,QAAS9tB,KAIbypE,EAAchtE,UAAUmtE,WAAa,SAAUtG,GAC7CnH,EAAMiG,WAAWlkE,KAAKgK,SAAUo7D,IAGlCmG,EAAchtE,UAAU2jD,OAAS,SAAUpgD,GACzC,IAAIogD,EAEApgD,EAAK8R,UACPsuC,EAASrjD,SAASsc,cAAc,aACzBurD,MAAQ5kE,EAAKsE,UAIOqmB,KAF3By1B,EAASrjD,SAASsc,cAAc,WAErBwkC,YACTuC,EAAOvC,YAAc79C,EAAKsE,KAE1B87C,EAAOypB,UAAY7pE,EAAKsE,UAIZqmB,IAAZ3qB,EAAK4T,KACPwsC,EAAOtkD,MAAQkE,EAAK4T,IAGlB5T,EAAKu4C,WACP6H,EAAO7H,UAAW,GAGhBv4C,EAAK+jE,WACP3jB,EAAO2jB,UAAW,GAGhB/jE,EAAK0D,QACP08C,EAAO18C,MAAQ1D,EAAK0D,OAGtB,IAAI6/D,EAAU1mE,EAAEujD,GAEZ0pB,EAAiB5rE,KAAK6rE,eAAe/pE,GAMzC,OALA8pE,EAAejsE,QAAUuiD,EAGzB+b,EAAMuG,UAAUtiB,EAAQ,OAAQ0pB,GAEzBvG,GAGTkG,EAAchtE,UAAUuiB,KAAO,SAAUukD,GACvC,IAAIvjE,EAAO,GAIX,GAAY,OAFZA,EAAOm8D,EAAMwG,QAAQY,EAAQ,GAAI,SAG/B,OAAOvjE,EAGT,GAAIujE,EAAQt0D,GAAG,UACbjP,EAAO,CACL4T,GAAI2vD,EAAQ32C,MACZtoB,KAAMi/D,EAAQj/D,OACdi0C,SAAUgrB,EAAQt1C,KAAK,YACvB81C,SAAUR,EAAQt1C,KAAK,YACvBvqB,MAAO6/D,EAAQt1C,KAAK,eAEjB,GAAIs1C,EAAQt0D,GAAG,YAAa,CACjCjP,EAAO,CACLsE,KAAMi/D,EAAQt1C,KAAK,SACnBnc,SAAU,GACVpO,MAAO6/D,EAAQt1C,KAAK,UAMtB,IAHA,IAAI42C,EAAYtB,EAAQzxD,SAAS,UAC7BA,EAAW,GAEN5W,EAAI,EAAGA,EAAI2pE,EAAU5kE,OAAQ/E,IAAK,CACzC,IAAI4pE,EAASjoE,EAAEgoE,EAAU3pE,IAErBmxB,EAAQnuB,KAAK8gB,KAAK8lD,GAEtBhzD,EAAS9G,KAAKqhB,GAGhBrsB,EAAK8R,SAAWA,EAQlB,OALA9R,EAAO9B,KAAK6rE,eAAe/pE,IACtBnC,QAAU0lE,EAAQ,GAEvBpH,EAAMuG,UAAUa,EAAQ,GAAI,OAAQvjE,GAE7BA,GAGTypE,EAAchtE,UAAUstE,eAAiB,SAAU/qD,GA6BjD,OA5BIA,IAASzjB,OAAOyjB,KAClBA,EAAO,CACLpL,GAAIoL,EACJ1a,KAAM0a,IAaK,OATfA,EAAOniB,EAAEsB,OAAO,GAAI,CAClBmG,KAAM,IACL0a,IAOMpL,KACPoL,EAAKpL,GAAKoL,EAAKpL,GAAGuU,YAGH,MAAbnJ,EAAK1a,OACP0a,EAAK1a,KAAO0a,EAAK1a,KAAK6jB,YAGF,MAAlBnJ,EAAK0lD,WAAqB1lD,EAAKpL,IAAwB,MAAlB1V,KAAKyiB,YAC5C3B,EAAK0lD,UAAYxmE,KAAKsrE,iBAAiBtrE,KAAKyiB,UAAW3B,IAGlDniB,EAAEsB,OAAO,GAjBD,CACb4lE,UAAU,EACVxrB,UAAU,GAekBv5B,IAGhCyqD,EAAchtE,UAAUyI,QAAU,SAAUo8D,EAAQthE,GAGlD,OAFc9B,KAAKD,QAAQvC,IAAI,UAExBsuE,CAAQ1I,EAAQthE,IAGlBypE,KAGTnN,EAAGK,OAAO,qBAAqB,CAC7B,WACA,WACA,WACC,SAAU8M,EAAetN,EAAOt/D,GACjC,SAASotE,EAAc/hE,EAAUjK,GAC/BC,KAAKgsE,eAAiBjsE,EAAQvC,IAAI,SAAW,GAE7CuuE,EAAa1J,UAAUpkD,YAAYnhB,KAAKkD,KAAMgK,EAAUjK,GAyE1D,OAtEAk+D,EAAM+D,OAAO+J,EAAcR,GAE3BQ,EAAaxtE,UAAUJ,KAAO,SAAUskB,EAAWqkD,GACjDiF,EAAa1J,UAAUlkE,KAAKrB,KAAKkD,KAAMyiB,EAAWqkD,GAElD9mE,KAAK0rE,WAAW1rE,KAAKisE,iBAAiBjsE,KAAKgsE,kBAG7CD,EAAaxtE,UAAUo4C,OAAS,SAAU70C,GACxC,IAAIujE,EAAUrlE,KAAKgK,SAASpI,KAAK,UAAU+K,QAAO,SAAUhQ,EAAGuvE,GAC7D,OAAOA,EAAItuE,OAASkE,EAAK4T,GAAGuU,cAGP,IAAnBo7C,EAAQtjE,SACVsjE,EAAUrlE,KAAKkiD,OAAOpgD,GAEtB9B,KAAK0rE,WAAWrG,IAGlB0G,EAAa1J,UAAU1rB,OAAO75C,KAAKkD,KAAM8B,IAG3CiqE,EAAaxtE,UAAU0tE,iBAAmB,SAAUnqE,GAClD,IAAI6vB,EAAO3xB,KAEPmsE,EAAYnsE,KAAKgK,SAASpI,KAAK,UAC/BwqE,EAAcD,EAAUzrD,KAAI,WAC9B,OAAOiR,EAAK7Q,KAAKniB,EAAEqB,OAAO0V,MACzBlY,MAEC4nE,EAAW,GAGf,SAASiH,EAAUvrD,GACjB,OAAO,WACL,OAAOniB,EAAEqB,MAAM0uB,OAAS5N,EAAKpL,IAIjC,IAAK,IAAIzY,EAAI,EAAGA,EAAI6E,EAAKC,OAAQ9E,IAAK,CACpC,IAAI6jB,EAAO9gB,KAAK6rE,eAAe/pE,EAAK7E,IAGpC,GAAI0B,EAAE6wB,QAAQ1O,EAAKpL,GAAI02D,IAAgB,EAAvC,CACE,IAAIE,EAAkBH,EAAUx/D,OAAO0/D,EAASvrD,IAE5CyrD,EAAevsE,KAAK8gB,KAAKwrD,GACzBE,EAAU7tE,EAAEsB,QAAO,EAAM,GAAI6gB,EAAMyrD,GAEnCE,EAAazsE,KAAKkiD,OAAOsqB,GAE7BF,EAAgBI,YAAYD,OAR9B,CAaA,IAAIpH,EAAUrlE,KAAKkiD,OAAOphC,GAE1B,GAAIA,EAAKlN,SAAU,CACjB,IAAI+yD,EAAY3mE,KAAKisE,iBAAiBnrD,EAAKlN,UAE3CqqD,EAAMiG,WAAWmB,EAASsB,GAG5BvB,EAASt4D,KAAKu4D,IAGhB,OAAOD,GAGF2G,KAGT3N,EAAGK,OAAO,oBAAoB,CAC5B,UACA,WACA,WACC,SAAUsN,EAAc9N,EAAOt/D,GAChC,SAASguE,EAAa3iE,EAAUjK,GAC9BC,KAAK4sE,YAAc5sE,KAAK6sE,eAAe9sE,EAAQvC,IAAI,SAEZ,MAAnCwC,KAAK4sE,YAAYE,iBACnB9sE,KAAK8sE,eAAiB9sE,KAAK4sE,YAAYE,gBAGzCH,EAAYtK,UAAUpkD,YAAYnhB,KAAKkD,KAAMgK,EAAUjK,GAgGzD,OA7FAk+D,EAAM+D,OAAO2K,EAAaZ,GAE1BY,EAAYpuE,UAAUsuE,eAAiB,SAAU9sE,GAC/C,IAAIhB,EAAW,CACb+C,KAAM,SAAUshE,GACd,OAAOzkE,EAAEsB,OAAO,GAAImjE,EAAQ,CAC1B2J,EAAG3J,EAAOqH,QAGduC,UAAW,SAAU5J,EAAQh+D,EAAS6nE,GACpC,IAAIC,EAAWvuE,EAAEyF,KAAKg/D,GAKtB,OAHA8J,EAAS/mE,KAAKf,GACd8nE,EAASC,KAAKF,GAEPC,IAIX,OAAOvuE,EAAEsB,OAAO,GAAIlB,EAAUgB,GAAS,IAGzC4sE,EAAYpuE,UAAUuuE,eAAiB,SAAUl9C,GAC/C,OAAOA,GAGT+8C,EAAYpuE,UAAU8sE,MAAQ,SAAUjI,EAAQpoD,GAC9C,IACI2W,EAAO3xB,KAEU,MAAjBA,KAAKotE,WAEHzuE,EAAEwkC,WAAWnjC,KAAKotE,SAASC,QAC7BrtE,KAAKotE,SAASC,QAGhBrtE,KAAKotE,SAAW,MAGlB,IAAIrtE,EAAUpB,EAAEsB,OAAO,CACrB6K,KAAM,OACL9K,KAAK4sE,aAUR,SAASU,IACP,IAAIJ,EAAWntE,EAAQitE,UAAUjtE,GAAS,SAAU+B,GAClD,IAAI8tB,EAAU+B,EAAKm7C,eAAehrE,EAAMshE,GAEpCzxC,EAAK5xB,QAAQvC,IAAI,UAAYoB,OAAOiG,SAAWA,QAAQI,QAEpD2qB,GAAYA,EAAQA,SAAYjxB,EAAE4uB,QAAQqC,EAAQA,UACrD/qB,QAAQI,MACN,4FAMN+V,EAAS4U,MACR,WAGG,WAAYs9C,IACS,IAApBA,EAAS7nE,QAAoC,MAApB6nE,EAAS7nE,SAIvCssB,EAAKtwB,QAAQ,kBAAmB,CAC9BqsB,QAAS,oBAIbiE,EAAKy7C,SAAWF,EApCS,mBAAhBntE,EAAQwE,MACjBxE,EAAQwE,IAAMxE,EAAQwE,IAAIzH,KAAKkD,KAAKgK,SAAUo5D,IAGpB,mBAAjBrjE,EAAQ+B,OACjB/B,EAAQ+B,KAAO/B,EAAQ+B,KAAKhF,KAAKkD,KAAKgK,SAAUo5D,IAkC9CpjE,KAAK4sE,YAAY1mD,OAAwB,MAAfk9C,EAAOqH,MAC/BzqE,KAAKutE,eACP3uE,OAAO8T,aAAa1S,KAAKutE,eAG3BvtE,KAAKutE,cAAgB3uE,OAAO0D,WAAWgrE,EAASttE,KAAK4sE,YAAY1mD,QAEjEonD,KAIGX,KAGTvO,EAAGK,OAAO,oBAAoB,CAC5B,WACC,SAAU9/D,GACX,SAAS6uE,EAAMzE,EAAW/+D,EAAUjK,GAClC,IAAI0tE,EAAO1tE,EAAQvC,IAAI,QAEnBkwE,EAAY3tE,EAAQvC,IAAI,kBAEVivB,IAAdihD,IACF1tE,KAAK0tE,UAAYA,GAGnB,IAAIC,EAAY5tE,EAAQvC,IAAI,aAQ5B,QANkBivB,IAAdkhD,IACA3tE,KAAK2tE,UAAYA,GAGrB5E,EAAUjsE,KAAKkD,KAAMgK,EAAUjK,GAE3BpB,EAAE4uB,QAAQkgD,GACZ,IAAK,IAAI5vE,EAAI,EAAGA,EAAI4vE,EAAK1rE,OAAQlE,IAAK,CACpC,IAAI+vE,EAAMH,EAAK5vE,GACXijB,EAAO9gB,KAAK6rE,eAAe+B,GAE3BvI,EAAUrlE,KAAKkiD,OAAOphC,GAE1B9gB,KAAKgK,SAAS3G,OAAOgiE,IAiG3B,OA5FAmI,EAAKjvE,UAAU8sE,MAAQ,SAAUtC,EAAW3F,EAAQpoD,GAClD,IAAI2W,EAAO3xB,KAEXA,KAAK6tE,iBAEc,MAAfzK,EAAOqH,MAA+B,MAAfrH,EAAOn9D,KAuDlC8iE,EAAUjsE,KAAKkD,KAAMojE,GAlDrB,SAAS0K,EAASzhE,EAAK8hB,GAGrB,IAFA,IAAIrsB,EAAOuK,EAAIujB,QAENjzB,EAAI,EAAGA,EAAImF,EAAKC,OAAQpF,IAAK,CACpC,IAAIulD,EAASpgD,EAAKnF,GAEdoxE,EACiB,MAAnB7rB,EAAOtuC,WACNk6D,EAAQ,CACPl+C,QAASsyB,EAAOtuC,WACf,GAQL,IALkBsuC,EAAO97C,MAAQ,IAAIkM,iBACnB8wD,EAAOqH,MAAQ,IAAIn4D,eAIpBy7D,EACf,OAAI5/C,IAIJ9hB,EAAIvK,KAAOA,OACXkZ,EAAS3O,IAMb,GAAI8hB,EACF,OAAO,EAGT,IAAIy/C,EAAMj8C,EAAK+7C,UAAUtK,GAEzB,GAAW,MAAPwK,EAAa,CACf,IAAIvI,EAAU1zC,EAAKuwB,OAAO0rB,GAC1BvI,EAAQtiE,KAAK,oBAAoB,GAEjC4uB,EAAK+5C,WAAW,CAACrG,IAEjB1zC,EAAKg8C,UAAU7rE,EAAM8rE,GAGvBvhE,EAAIujB,QAAU9tB,EAEdkZ,EAAS3O,MAnDT08D,EAAUjsE,KAAKkD,KAAMojE,EAAQpoD,IAyDjCwyD,EAAKjvE,UAAUmvE,UAAY,SAAU3E,EAAW3F,GAC9C,IAAIqH,EAAO9rE,EAAEmsB,KAAKs4C,EAAOqH,MAEzB,MAAa,KAATA,EACK,KAGF,CACL/0D,GAAI+0D,EACJrkE,KAAMqkE,IAIV+C,EAAKjvE,UAAUovE,UAAY,SAAU1E,EAAGnnE,EAAM8rE,GAC5C9rE,EAAKiqD,QAAQ6hB,IAGfJ,EAAKjvE,UAAUsvE,eAAiB,SAAU5E,GACzBjpE,KAAKgK,SAASpI,KAAK,4BAEzBsF,MAAK,WACRlH,KAAK6lE,UAITlnE,EAAEqB,MAAM6J,aAIL2jE,KAGTpP,EAAGK,OAAO,yBAAyB,CACjC,WACC,SAAU9/D,GACX,SAASqvE,EAAWjF,EAAW/+D,EAAUjK,GACvC,IAAIgkD,EAAYhkD,EAAQvC,IAAI,kBAEVivB,IAAds3B,IACF/jD,KAAK+jD,UAAYA,GAGnBglB,EAAUjsE,KAAKkD,KAAMgK,EAAUjK,GAwGjC,OArGAiuE,EAAUzvE,UAAUJ,KAAO,SAAU4qE,EAAWtmD,EAAWqkD,GACzDiC,EAAUjsE,KAAKkD,KAAMyiB,EAAWqkD,GAEhC9mE,KAAK8pE,QAAWrnD,EAAUwrD,SAASnE,SAAWrnD,EAAU0rB,UAAU27B,SAChEhD,EAAWllE,KAAK,2BAGpBosE,EAAUzvE,UAAU8sE,MAAQ,SAAUtC,EAAW3F,EAAQpoD,GACvD,IAAI2W,EAAO3xB,KA+BXojE,EAAOqH,KAAOrH,EAAOqH,MAAQ,GAE7B,IAAIyD,EAAYluE,KAAK+jD,UAAUqf,EAAQpjE,KAAKD,SA/B5C,SAA0B+B,GAExB,IAAIgf,EAAO6Q,EAAKk6C,eAAe/pE,GAS/B,IALuB6vB,EAAK3nB,SAASpI,KAAK,UAAU+K,QAAO,WACzD,OAAOhO,EAAEqB,MAAM0uB,QAAU5N,EAAKpL,MAIV3T,OAAQ,CAC5B,IAAIsjE,EAAU1zC,EAAKuwB,OAAOphC,GAC1BukD,EAAQtiE,KAAK,oBAAoB,GAEjC4uB,EAAKk8C,iBACLl8C,EAAK+5C,WAAW,CAACrG,KAOrB,SAAiBvjE,GACf6vB,EAAKtwB,QAAQ,SAAU,CACrBS,KAAMA,IALR60C,CAAO71B,MAaLotD,EAAUzD,OAASrH,EAAOqH,OAExBzqE,KAAK8pE,QAAQ/nE,SACf/B,KAAK8pE,QAAQp7C,IAAIw/C,EAAUzD,MAC3BzqE,KAAK8pE,QAAQzoE,QAAQ,UAGvB+hE,EAAOqH,KAAOyD,EAAUzD,MAG1B1B,EAAUjsE,KAAKkD,KAAMojE,EAAQpoD,IAG/BgzD,EAAUzvE,UAAUwlD,UAAY,SAAUklB,EAAG7F,EAAQrjE,EAASib,GAY5D,IAXA,IAAImzD,EAAapuE,EAAQvC,IAAI,oBAAsB,GAC/CitE,EAAOrH,EAAOqH,KACd9tE,EAAI,EAEJ+wE,EAAY1tE,KAAK0tE,WAAa,SAAUtK,GAC1C,MAAO,CACL1tD,GAAI0tD,EAAOqH,KACXrkE,KAAMg9D,EAAOqH,OAIV9tE,EAAI8tE,EAAK1oE,QAAQ,CACtB,IAAIqsE,EAAW3D,EAAK9tE,GAEpB,IAAyC,IAArCgC,EAAE6wB,QAAQ4+C,EAAUD,GAAxB,CAMA,IAAIrO,EAAO2K,EAAK/tB,OAAO,EAAG//C,GAKtBmF,EAAO4rE,EAJM/uE,EAAEsB,OAAO,GAAImjE,EAAQ,CACpCqH,KAAM3K,KAKI,MAARh+D,GAKJkZ,EAASlZ,GAGT2oE,EAAOA,EAAK/tB,OAAO//C,EAAI,IAAM,GAC7BA,EAAI,GARFA,SAbAA,IAwBJ,MAAO,CACL8tE,KAAMA,IAIHuD,KAGT5P,EAAGK,OAAO,kCAAkC,IAEzC,WACD,SAAS4P,EAAoBtF,EAAWuF,EAAIvuE,GAC1CC,KAAKuuE,mBAAqBxuE,EAAQvC,IAAI,sBAEtCurE,EAAUjsE,KAAKkD,KAAMsuE,EAAIvuE,GAsB3B,OAnBAsuE,EAAmB9vE,UAAU8sE,MAAQ,SAAUtC,EAAW3F,EAAQpoD,GAChEooD,EAAOqH,KAAOrH,EAAOqH,MAAQ,GAEzBrH,EAAOqH,KAAK1oE,OAAS/B,KAAKuuE,mBAC5BvuE,KAAKqB,QAAQ,kBAAmB,CAC9BqsB,QAAS,gBACTiB,KAAM,CACJ6/C,QAASxuE,KAAKuuE,mBACd1jE,MAAOu4D,EAAOqH,KACdrH,OAAQA,KAOd2F,EAAUjsE,KAAKkD,KAAMojE,EAAQpoD,IAGxBqzD,KAGTjQ,EAAGK,OAAO,kCAAkC,IAEzC,WACD,SAASgQ,EAAoB1F,EAAWuF,EAAIvuE,GAC1CC,KAAK0uE,mBAAqB3uE,EAAQvC,IAAI,sBAEtCurE,EAAUjsE,KAAKkD,KAAMsuE,EAAIvuE,GAuB3B,OApBA0uE,EAAmBlwE,UAAU8sE,MAAQ,SAAUtC,EAAW3F,EAAQpoD,GAChEooD,EAAOqH,KAAOrH,EAAOqH,MAAQ,GAEzBzqE,KAAK0uE,mBAAqB,GAC1BtL,EAAOqH,KAAK1oE,OAAS/B,KAAK0uE,mBAC5B1uE,KAAKqB,QAAQ,kBAAmB,CAC9BqsB,QAAS,eACTiB,KAAM,CACJggD,QAAS3uE,KAAK0uE,mBACd7jE,MAAOu4D,EAAOqH,KACdrH,OAAQA,KAOd2F,EAAUjsE,KAAKkD,KAAMojE,EAAQpoD,IAGxByzD,KAGTrQ,EAAGK,OAAO,sCAAsC,IAE7C,WACD,SAASmQ,EAAwB7F,EAAWuF,EAAIvuE,GAC9CC,KAAK6uE,uBAAyB9uE,EAAQvC,IAAI,0BAE1CurE,EAAUjsE,KAAKkD,KAAMsuE,EAAIvuE,GA8C3B,OA3CA6uE,EAAuBrwE,UAAUJ,KAC/B,SAAU4qE,EAAWtmD,EAAWqkD,GAC9B,IAAIn1C,EAAO3xB,KAEX+oE,EAAUjsE,KAAKkD,KAAMyiB,EAAWqkD,GAEhCrkD,EAAU9hB,GAAG,UAAU,WACrBgxB,EAAKm9C,8BAIXF,EAAuBrwE,UAAU8sE,MAC/B,SAAUtC,EAAW3F,EAAQpoD,GAC3B,IAAI2W,EAAO3xB,KAEXA,KAAK8uE,yBAAwB,WAC3B/F,EAAUjsE,KAAK60B,EAAMyxC,EAAQpoD,OAInC4zD,EAAuBrwE,UAAUuwE,wBAC/B,SAAU7F,EAAG8F,GACX,IAAIp9C,EAAO3xB,KAEXA,KAAK4lE,SAAQ,SAAU4F,GACrB,IAAI7tC,EAAuB,MAAf6tC,EAAsBA,EAAYzpE,OAAS,EACnD4vB,EAAKk9C,uBAAyB,GAChClxC,GAAShM,EAAKk9C,uBACdl9C,EAAKtwB,QAAQ,kBAAmB,CAC9BqsB,QAAS,kBACTiB,KAAM,CACJggD,QAASh9C,EAAKk9C,0BAMhBE,GACFA,QAKDH,KAGTxQ,EAAGK,OAAO,mBAAmB,CAC3B,SACA,YACC,SAAU9/D,EAAGs/D,GACd,SAAS+Q,EAAUhlE,EAAUjK,GAC3BC,KAAKgK,SAAWA,EAChBhK,KAAKD,QAAUA,EAEfivE,EAAS3M,UAAUpkD,YAAYnhB,KAAKkD,MAgCtC,OA7BAi+D,EAAM+D,OAAOgN,EAAU/Q,EAAMiF,YAE7B8L,EAASzwE,UAAUsmE,OAAS,WAC1B,IAAIS,EAAY3mE,EACd,+EASF,OAJA2mE,EAAUviE,KAAK,MAAO/C,KAAKD,QAAQvC,IAAI,QAEvCwC,KAAKslE,UAAYA,EAEVA,GAGT0J,EAASzwE,UAAUJ,KAAO,aAI1B6wE,EAASzwE,UAAUgwC,SAAW,SAAU+2B,EAAWwB,KAInDkI,EAASzwE,UAAUypB,QAAU,WAE3BhoB,KAAKslE,UAAUz7D,UAGVmlE,KAGT5Q,EAAGK,OAAO,0BAA0B,CAClC,SACA,aACC,SAAU9/D,EAAGs/D,GACd,SAAS4L,KA6GT,OA3GAA,EAAOtrE,UAAUsmE,OAAS,SAAUkE,GAClC,IAAIN,EAAYM,EAAUjsE,KAAKkD,MAE3B8pE,EAAUnrE,EACZ,4PAYF,OALAqB,KAAK+pE,iBAAmBD,EACxB9pE,KAAK8pE,QAAUA,EAAQloE,KAAK,SAE5B6mE,EAAUtC,QAAQ2D,GAEXrB,GAGToB,EAAOtrE,UAAUJ,KAAO,SAAU4qE,EAAWtmD,EAAWqkD,GACtD,IAAIn1C,EAAO3xB,KAEPmoE,EAAY1lD,EAAU/M,GAAK,WAE/BqzD,EAAUjsE,KAAKkD,KAAMyiB,EAAWqkD,GAEhC9mE,KAAK8pE,QAAQnpE,GAAG,WAAW,SAAUinE,GACnCj2C,EAAKtwB,QAAQ,WAAYumE,GAEzBj2C,EAAKs4C,gBAAkBrC,EAAIl/D,wBAM7B1I,KAAK8pE,QAAQnpE,GAAG,SAAS,SAAUinE,GAEjCjpE,EAAEqB,MAAMgB,IAAI,YAGdhB,KAAK8pE,QAAQnpE,GAAG,eAAe,SAAUinE,GACvCj2C,EAAK24C,aAAa1C,MAGpBnlD,EAAU9hB,GAAG,QAAQ,WACnBgxB,EAAKm4C,QAAQ/mE,KAAK,WAAY,GAC9B4uB,EAAKm4C,QAAQ/mE,KAAK,gBAAiBolE,GAEnCx2C,EAAKm4C,QAAQzoE,QAAQ,SAErBzC,OAAO0D,YAAW,WAChBqvB,EAAKm4C,QAAQzoE,QAAQ,WACpB,MAGLohB,EAAU9hB,GAAG,SAAS,WACpBgxB,EAAKm4C,QAAQ/mE,KAAK,YAAa,GAC/B4uB,EAAKm4C,QAAQ/C,WAAW,iBACxBp1C,EAAKm4C,QAAQ/C,WAAW,yBAExBp1C,EAAKm4C,QAAQp7C,IAAI,IACjBiD,EAAKm4C,QAAQzoE,QAAQ,WAGvBohB,EAAU9hB,GAAG,SAAS,WACf8hB,EAAUtL,UACbwa,EAAKm4C,QAAQzoE,QAAQ,YAIzBohB,EAAU9hB,GAAG,eAAe,SAAUyiE,GACX,MAArBA,EAAOiI,MAAMZ,MAAsC,KAAtBrH,EAAOiI,MAAMZ,OAC3B94C,EAAKs9C,WAAW7L,GAG/BzxC,EAAKo4C,iBAAiBrpE,YAAY,wBAElCixB,EAAKo4C,iBAAiBtpE,SAAS,4BAKrCgiB,EAAU9hB,GAAG,iBAAiB,SAAUyiE,GAClCA,EAAOthE,KAAK0kE,UACd70C,EAAKm4C,QAAQ/mE,KAAK,wBAAyBqgE,EAAOthE,KAAK0kE,WAEvD70C,EAAKm4C,QAAQ/C,WAAW,6BAK9B8C,EAAOtrE,UAAU+rE,aAAe,SAAU1C,GACxC,IAAK5nE,KAAKiqE,gBAAiB,CACzB,IAAIp/D,EAAQ7K,KAAK8pE,QAAQp7C,MAEzB1uB,KAAKqB,QAAQ,QAAS,CACpBopE,KAAM5/D,IAIV7K,KAAKiqE,iBAAkB,GAGzBJ,EAAOtrE,UAAU0wE,WAAa,SAAUhG,EAAG7F,GACzC,OAAO,GAGFyG,KAGTzL,EAAGK,OAAO,mCAAmC,IAE1C,WACD,SAASyQ,EAAiBnG,EAAW/+D,EAAUjK,EAAS6kE,GACtD5kE,KAAK4kC,YAAc5kC,KAAKgpE,qBAAqBjpE,EAAQvC,IAAI,gBAEzDurE,EAAUjsE,KAAKkD,KAAMgK,EAAUjK,EAAS6kE,GAkC1C,OA/BAsK,EAAgB3wE,UAAU8E,OAAS,SAAU0lE,EAAWjnE,GACtDA,EAAK8tB,QAAU5vB,KAAKmvE,kBAAkBrtE,EAAK8tB,SAE3Cm5C,EAAUjsE,KAAKkD,KAAM8B,IAGvBotE,EAAgB3wE,UAAUyqE,qBAAuB,SAAUC,EAAGrkC,GAQ5D,MAP2B,iBAAhBA,IACTA,EAAc,CACZlvB,GAAI,GACJtP,KAAMw+B,IAIHA,GAGTsqC,EAAgB3wE,UAAU4wE,kBAAoB,SAAUlG,EAAGnnE,GAGzD,IAFA,IAAIstE,EAAettE,EAAK8J,MAAM,GAErB3O,EAAI6E,EAAKC,OAAS,EAAG9E,GAAK,EAAGA,IAAK,CACzC,IAAI6jB,EAAOhf,EAAK7E,GAEZ+C,KAAK4kC,YAAYlvB,KAAOoL,EAAKpL,IAC/B05D,EAAa73C,OAAOt6B,EAAG,GAI3B,OAAOmyE,GAGFF,KAGT9Q,EAAGK,OAAO,kCAAkC,CAC1C,WACC,SAAU9/D,GACX,SAAS0wE,EAAgBtG,EAAW/+D,EAAUjK,EAAS6kE,GACrD5kE,KAAKsvE,WAAa,GAElBvG,EAAUjsE,KAAKkD,KAAMgK,EAAUjK,EAAS6kE,GAExC5kE,KAAKuvE,aAAevvE,KAAKwvE,oBACzBxvE,KAAKgmE,SAAU,EAiFjB,OA9EAqJ,EAAe9wE,UAAU8E,OAAS,SAAU0lE,EAAWjnE,GACrD9B,KAAKuvE,aAAa1lE,SAClB7J,KAAKgmE,SAAU,EAEf+C,EAAUjsE,KAAKkD,KAAM8B,GAEjB9B,KAAKyvE,gBAAgB3tE,KACvB9B,KAAK8kE,SAASzhE,OAAOrD,KAAKuvE,cAC1BvvE,KAAK0vE,qBAITL,EAAe9wE,UAAUJ,KAAO,SAAU4qE,EAAWtmD,EAAWqkD,GAC9D,IAAIn1C,EAAO3xB,KAEX+oE,EAAUjsE,KAAKkD,KAAMyiB,EAAWqkD,GAEhCrkD,EAAU9hB,GAAG,SAAS,SAAUyiE,GAC9BzxC,EAAK29C,WAAalM,EAClBzxC,EAAKq0C,SAAU,KAGjBvjD,EAAU9hB,GAAG,gBAAgB,SAAUyiE,GACrCzxC,EAAK29C,WAAalM,EAClBzxC,EAAKq0C,SAAU,KAGjBhmE,KAAK8kE,SAASnkE,GAAG,SAAUX,KAAK0vE,iBAAiBvxE,KAAK6B,QAGxDqvE,EAAe9wE,UAAUmxE,iBAAmB,WAC1C,IAAIC,EAAoBhxE,EAAEsM,SACxBpM,SAASsR,gBACTnQ,KAAKuvE,aAAa,KAGhBvvE,KAAKgmE,SAAY2J,GAID3vE,KAAK8kE,SAAS7lD,SAAS4B,IACzC7gB,KAAK8kE,SAAS3gE,aAAY,GAIR,IAHInE,KAAKuvE,aAAatwD,SAAS4B,IACjD7gB,KAAKuvE,aAAaprE,aAAY,IAG9BnE,KAAK4vE,YAITP,EAAe9wE,UAAUqxE,SAAW,WAClC5vE,KAAKgmE,SAAU,EAEf,IAAI5C,EAASzkE,EAAEsB,OAAO,GAAI,CAACgG,KAAM,GAAIjG,KAAKsvE,YAE1ClM,EAAOn9D,OAEPjG,KAAKqB,QAAQ,eAAgB+hE,IAG/BiM,EAAe9wE,UAAUkxE,gBAAkB,SAAUxG,EAAGnnE,GACtD,OAAOA,EAAK+tE,YAAc/tE,EAAK+tE,WAAWC,MAG5CT,EAAe9wE,UAAUixE,kBAAoB,WAC3C,IAAInK,EAAU1mE,EACZ,kHAKE+uB,EAAU1tB,KAAKD,QAAQvC,IAAI,gBAAgBA,IAAI,eAInD,OAFA6nE,EAAQriE,KAAK0qB,EAAQ1tB,KAAKsvE,aAEnBjK,GAGFgK,KAGTjR,EAAGK,OAAO,8BAA8B,CACtC,SACA,aACC,SAAU9/D,EAAGs/D,GACd,SAAS8R,EAAYhH,EAAW/+D,EAAUjK,GACxCC,KAAKgwE,gBAAkBrxE,EAAEoB,EAAQvC,IAAI,mBAAqBqB,SAASmb,MAEnE+uD,EAAUjsE,KAAKkD,KAAMgK,EAAUjK,GAwPjC,OArPAgwE,EAAWxxE,UAAUJ,KAAO,SAAU4qE,EAAWtmD,EAAWqkD,GAC1D,IAAIn1C,EAAO3xB,KAEX+oE,EAAUjsE,KAAKkD,KAAMyiB,EAAWqkD,GAEhCrkD,EAAU9hB,GAAG,QAAQ,WACnBgxB,EAAKs+C,gBACLt+C,EAAKu+C,0BAA0BztD,GAG/BkP,EAAKw+C,6BAA6B1tD,MAGpCA,EAAU9hB,GAAG,SAAS,WACpBgxB,EAAKy+C,gBACLz+C,EAAK0+C,0BAA0B5tD,MAGjCziB,KAAKswE,mBAAmB3vE,GAAG,aAAa,SAAUinE,GAChDA,EAAI9mE,sBAIRivE,EAAWxxE,UAAUypB,QAAU,SAAU+gD,GACvCA,EAAUjsE,KAAKkD,MAEfA,KAAKswE,mBAAmBzmE,UAG1BkmE,EAAWxxE,UAAUgwC,SAAW,SAAUw6B,EAAWzD,EAAWwB,GAE9DxB,EAAUviE,KAAK,QAAS+jE,EAAW/jE,KAAK,UAExCuiE,EAAU5kE,YAAY,WACtB4kE,EAAU7kE,SAAS,2BAEnB6kE,EAAUhiE,IAAI,CACZirC,SAAU,WACV1tB,KAAM,SAGR7gB,KAAK8mE,WAAaA,GAGpBiJ,EAAWxxE,UAAUsmE,OAAS,SAAUkE,GACtC,IAAIjC,EAAanoE,EAAE,iBAEf2mE,EAAYyD,EAAUjsE,KAAKkD,MAK/B,OAJA8mE,EAAWzjE,OAAOiiE,GAElBtlE,KAAKswE,mBAAqBxJ,EAEnBA,GAGTiJ,EAAWxxE,UAAU6xE,cAAgB,SAAUrH,GAC7C/oE,KAAKswE,mBAAmB1mE,UAG1BmmE,EAAWxxE,UAAU4xE,6BACjB,SAAUpH,EAAWtmD,GAGvB,IAAIziB,KAAKuwE,+BAAT,CAIA,IAAI5+C,EAAO3xB,KAEXyiB,EAAU9hB,GAAG,eAAe,WAC1BgxB,EAAK6+C,oBACL7+C,EAAK8+C,qBAGPhuD,EAAU9hB,GAAG,kBAAkB,WAC7BgxB,EAAK6+C,oBACL7+C,EAAK8+C,qBAGPhuD,EAAU9hB,GAAG,mBAAmB,WAC9BgxB,EAAK6+C,oBACL7+C,EAAK8+C,qBAGPhuD,EAAU9hB,GAAG,UAAU,WACrBgxB,EAAK6+C,oBACL7+C,EAAK8+C,qBAGPhuD,EAAU9hB,GAAG,YAAY,WACvBgxB,EAAK6+C,oBACL7+C,EAAK8+C,qBAGPzwE,KAAKuwE,gCAAiC,IAGxCR,EAAWxxE,UAAU2xE,0BACjB,SAAUnH,EAAWtmD,GACvB,IAAIkP,EAAO3xB,KAEP0wE,EAAc,kBAAoBjuD,EAAU/M,GAC5Ci7D,EAAc,kBAAoBluD,EAAU/M,GAC5Ck7D,EAAmB,6BAA+BnuD,EAAU/M,GAE5Dm7D,EAAY7wE,KAAK8mE,WAAWjlD,UAAUlV,OAAOsxD,EAAM4F,WACvDgN,EAAU3pE,MAAK,WACb+2D,EAAMuG,UAAUxkE,KAAM,0BAA2B,CAC/CwzB,EAAG70B,EAAEqB,MAAM61C,aACXniB,EAAG/0B,EAAEqB,MAAMoa,iBAIfy2D,EAAUlwE,GAAG+vE,GAAa,SAAU5+C,GAClC,IAAIyc,EAAW0vB,EAAMwG,QAAQzkE,KAAM,2BACnCrB,EAAEqB,MAAMoa,UAAUm0B,EAAS7a,MAG7B/0B,EAAEC,QAAQ+B,GAAG+vE,EAAc,IAAMC,EAAc,IAAMC,GACnD,SAAUhwE,GACV+wB,EAAK6+C,oBACL7+C,EAAK8+C,sBAITV,EAAWxxE,UAAU8xE,0BACjB,SAAUtH,EAAWtmD,GACvB,IAAIiuD,EAAc,kBAAoBjuD,EAAU/M,GAC5Ci7D,EAAc,kBAAoBluD,EAAU/M,GAC5Ck7D,EAAmB,6BAA+BnuD,EAAU/M,GAEhD1V,KAAK8mE,WAAWjlD,UAAUlV,OAAOsxD,EAAM4F,WAC7C7iE,IAAI0vE,GAEd/xE,EAAEC,QAAQoC,IAAI0vE,EAAc,IAAMC,EAAc,IAAMC,IAGxDb,EAAWxxE,UAAUiyE,kBAAoB,WACvC,IAAIM,EAAUnyE,EAAEC,QAEZmyE,EAAmB/wE,KAAKslE,UAAU9kE,SAAS,2BAC3CwwE,EAAmBhxE,KAAKslE,UAAU9kE,SAAS,2BAE3CywE,EAAe,KAEfhyD,EAASjf,KAAK8mE,WAAW7nD,SAE7BA,EAAOi0C,OAASj0C,EAAO4B,IAAM7gB,KAAK8mE,WAAW3iE,aAAY,GAEzD,IAAIse,EAAY,CACdlf,OAAQvD,KAAK8mE,WAAW3iE,aAAY,IAGtCse,EAAU5B,IAAM5B,EAAO4B,IACvB4B,EAAUywC,OAASj0C,EAAO4B,IAAM4B,EAAUlf,OAE1C,IAAI0qE,EACMjuE,KAAKslE,UAAUnhE,aAAY,GAGjC+sE,EACGJ,EAAQ12D,YADX82D,EAEMJ,EAAQ12D,YAAc02D,EAAQvtE,SAGpC4tE,EAAkBD,EAAgBjyD,EAAO4B,IAAMotD,EAC/CmD,EAAkBF,EAAmBjyD,EAAOi0C,OAAS+a,EAErD3qE,EAAM,CACRyY,KAAMkD,EAAOlD,KACb8E,IAAK4B,EAAUywC,QAIbme,EAAgBrxE,KAAKgwE,gBAIa,WAAlCqB,EAAc/tE,IAAI,cACpB+tE,EAAgBA,EAAc5f,gBAGhC,IAAI6f,EAAe,CACjBzwD,IAAK,EACL9E,KAAM,IAINpd,EAAEsM,SAASpM,SAASmb,KAAMq3D,EAAc,KACxCA,EAAc,GAAGE,eAEjBD,EAAeD,EAAcpyD,UAG/B3b,EAAIud,KAAOywD,EAAazwD,IACxBvd,EAAIyY,MAAQu1D,EAAav1D,KAEpBg1D,GAAqBC,IACxBC,EAAe,SAGZG,IAAmBD,GAAoBJ,GAEhCI,GAAmBC,GAAmBL,IAChDE,EAAe,SAFfA,EAAe,SAKG,SAAhBA,GACDF,GAAqC,UAAjBE,KACrB3tE,EAAIud,IAAM4B,EAAU5B,IAAMywD,EAAazwD,IAAMotD,GAG3B,MAAhBgD,IACFjxE,KAAKslE,UACF5kE,YAAY,mDACZD,SAAS,qBAAuBwwE,GACnCjxE,KAAK8mE,WACFpmE,YAAY,qDACZD,SAAS,sBAAwBwwE,IAGtCjxE,KAAKswE,mBAAmBhtE,IAAIA,IAG9BysE,EAAWxxE,UAAUkyE,gBAAkB,WACrC,IAAIntE,EAAM,CACR2Z,MAAOjd,KAAK8mE,WAAW0K,YAAW,GAAS,MAGzCxxE,KAAKD,QAAQvC,IAAI,uBACnB8F,EAAImuE,SAAWnuE,EAAI2Z,MACnB3Z,EAAIirC,SAAW,WACfjrC,EAAI2Z,MAAQ,QAGdjd,KAAKslE,UAAUhiE,IAAIA,IAGrBysE,EAAWxxE,UAAU0xE,cAAgB,SAAUlH,GAC7C/oE,KAAKswE,mBAAmBj1D,SAASrb,KAAKgwE,iBAEtChwE,KAAKwwE,oBACLxwE,KAAKywE,mBAGAV,KAGT3R,EAAGK,OAAO,2CAA2C,IAElD,WAiBD,SAASiT,EAAyB3I,EAAW/+D,EAAUjK,EAAS6kE,GAC9D5kE,KAAK2xE,wBAA0B5xE,EAAQvC,IAAI,2BAEvCwC,KAAK2xE,wBAA0B,IACjC3xE,KAAK2xE,wBAA0BC,KAGjC7I,EAAUjsE,KAAKkD,KAAMgK,EAAUjK,EAAS6kE,GAW1C,OARA8M,EAAwBnzE,UAAU0wE,WAAa,SAAUlG,EAAW3F,GAClE,QA3BF,SAASyO,EAAc/vE,GAGrB,IAFA,IAAI67B,EAAQ,EAEH1gC,EAAI,EAAGA,EAAI6E,EAAKC,OAAQ9E,IAAK,CACpC,IAAI6jB,EAAOhf,EAAK7E,GAEZ6jB,EAAKlN,SACP+pB,GAASk0C,EAAa/wD,EAAKlN,UAE3B+pB,IAIJ,OAAOA,EAcHk0C,CAAazO,EAAOthE,KAAK8tB,SAAW5vB,KAAK2xE,0BAItC5I,EAAUjsE,KAAKkD,KAAMojE,IAGvBsO,KAGTtT,EAAGK,OAAO,iCAAiC,CACzC,aACC,SAAUR,GACX,SAAS6T,KA6CT,OA3CAA,EAAcvzE,UAAUJ,KAAO,SAAU4qE,EAAWtmD,EAAWqkD,GAC7D,IAAIn1C,EAAO3xB,KAEX+oE,EAAUjsE,KAAKkD,KAAMyiB,EAAWqkD,GAEhCrkD,EAAU9hB,GAAG,SAAS,SAAUyiE,GAC9BzxC,EAAKogD,qBAAqB3O,OAI9B0O,EAAcvzE,UAAUwzE,qBAAuB,SAAU9I,EAAG7F,GAC1D,GAAIA,GAAyC,MAA/BA,EAAO4O,qBAA8B,CACjD,IAAIvoE,EAAQ25D,EAAO4O,qBAInB,GAAoB,WAAhBvoE,EAAM45D,OAAsC,aAAhB55D,EAAM45D,MACpC,OAIJ,IAAI4O,EAAsBjyE,KAAKinE,wBAG/B,KAAIgL,EAAoBlwE,OAAS,GAAjC,CAIA,IAAID,EAAOm8D,EAAMwG,QAAQwN,EAAoB,GAAI,QAI9B,MAAhBnwE,EAAKnC,SAAmBmC,EAAKnC,QAAQkmE,UACrB,MAAhB/jE,EAAKnC,SAAmBmC,EAAK+jE,UAKhC7lE,KAAKqB,QAAQ,SAAU,CACnBS,KAAMA,MAILgwE,KAGT1T,EAAGK,OAAO,iCAAiC,IAExC,WACD,SAASyT,KA8BT,OA5BAA,EAAc3zE,UAAUJ,KAAO,SAAU4qE,EAAWtmD,EAAWqkD,GAC7D,IAAIn1C,EAAO3xB,KAEX+oE,EAAUjsE,KAAKkD,KAAMyiB,EAAWqkD,GAEhCrkD,EAAU9hB,GAAG,UAAU,SAAUinE,GAC/Bj2C,EAAKwgD,iBAAiBvK,MAGxBnlD,EAAU9hB,GAAG,YAAY,SAAUinE,GACjCj2C,EAAKwgD,iBAAiBvK,OAI1BsK,EAAc3zE,UAAU4zE,iBAAmB,SAAUlJ,EAAGrB,GACtD,IAAIx1D,EAAgBw1D,EAAIx1D,cAGpBA,IAAkBA,EAAcmoC,SAAWnoC,EAAc8pC,UAI7Dl8C,KAAKqB,QAAQ,QAAS,CACpB+Q,cAAeA,EACf4/D,qBAAsBpK,KAInBsK,KAGT9T,EAAGK,OAAO,kBAAkB,IAAG,WAE7B,MAAO,CACL2T,aAAc,WACZ,MAAO,oCAETC,aAAc,SAAU1jD,GACtB,IAAI2jD,EAAY3jD,EAAK9jB,MAAM9I,OAAS4sB,EAAKggD,QAErCjhD,EAAU,iBAAmB4kD,EAAY,aAM7C,OAJiB,GAAbA,IACF5kD,GAAW,KAGNA,GAET6kD,cAAe,SAAU5jD,GAKvB,MAFc,iBAFOA,EAAK6/C,QAAU7/C,EAAK9jB,MAAM9I,QAEE,uBAInDkkE,YAAa,WACX,MAAO,yBAETuM,gBAAiB,SAAU7jD,GACzB,IAAIjB,EAAU,uBAAyBiB,EAAKggD,QAAU,QAMtD,OAJoB,GAAhBhgD,EAAKggD,UACPjhD,GAAW,KAGNA,GAET+kD,UAAW,WACT,MAAO,oBAETC,UAAW,WACT,MAAO,cAETC,eAAgB,WACd,MAAO,wBAKbvU,EAAGK,OAAO,mBAAmB,CAC3B,SACA,UAEA,YAEA,qBACA,uBACA,0BACA,yBACA,qBACA,yBAEA,UACA,gBACA,eAEA,gBACA,eACA,cACA,cACA,mBACA,4BACA,4BACA,gCAEA,aACA,oBACA,6BACA,4BACA,wBACA,qCACA,2BACA,2BAEA,cACC,SAAU9/D,EAAG6/D,EAEHoU,EAEApK,EAAiBI,EAAmBE,EAAaO,EACjDwJ,EAAiBnI,EAEjBzM,EAAO4M,EAAaiI,EAEpBC,EAAYC,EAAWC,EAAUzF,EAAMQ,EACvCK,EAAoBI,EAAoBG,EAExCI,EAAUkE,EAAgBhE,EAAiBG,EAC3CU,EAAY2B,EAAyBI,EAAeI,EAEpDiB,GACX,SAAS9Y,IACPr6D,KAAKy+B,QAkZP,OA/YA47B,EAAS97D,UAAUwO,MAAQ,SAAUhN,GAGnC,GAA2B,OAF3BA,EAAUpB,EAAEsB,QAAO,EAAM,GAAID,KAAKjB,SAAUgB,IAEhC6kE,YAAqB,CAyC/B,GAxCoB,MAAhB7kE,EAAQqE,KACVrE,EAAQ6kE,YAAcqO,EACG,MAAhBlzE,EAAQ+B,KACjB/B,EAAQ6kE,YAAcoO,EAEtBjzE,EAAQ6kE,YAAcmO,EAGpBhzE,EAAQwuE,mBAAqB,IAC/BxuE,EAAQ6kE,YAAc3G,EAAMqE,SAC1BviE,EAAQ6kE,YACRyJ,IAIAtuE,EAAQ2uE,mBAAqB,IAC/B3uE,EAAQ6kE,YAAc3G,EAAMqE,SAC1BviE,EAAQ6kE,YACR6J,IAIA1uE,EAAQ8uE,uBAAyB,IACnC9uE,EAAQ6kE,YAAc3G,EAAMqE,SAC1BviE,EAAQ6kE,YACRgK,IAIA7uE,EAAQ0tE,OACV1tE,EAAQ6kE,YAAc3G,EAAMqE,SAASviE,EAAQ6kE,YAAa4I,IAG7B,MAA3BztE,EAAQqzE,iBAAgD,MAArBrzE,EAAQgkD,YAC7ChkD,EAAQ6kE,YAAc3G,EAAMqE,SAC1BviE,EAAQ6kE,YACRoJ,IAIiB,MAAjBjuE,EAAQsrE,MAAe,CACzB,IAAIgI,EAAQ7U,EAAQz+D,EAAQuzE,QAAU,gBAEtCvzE,EAAQ6kE,YAAc3G,EAAMqE,SAC1BviE,EAAQ6kE,YACRyO,GAIJ,GAA6B,MAAzBtzE,EAAQwzE,cAAuB,CACjC,IAAIC,EAAgBhV,EAAQz+D,EAAQuzE,QAAU,wBAE9CvzE,EAAQ6kE,YAAc3G,EAAMqE,SAC1BviE,EAAQ6kE,YACR4O,IA8BN,GAzB8B,MAA1BzzE,EAAQ0zE,iBACV1zE,EAAQ0zE,eAAiBb,EAEL,MAAhB7yE,EAAQqE,OACVrE,EAAQ0zE,eAAiBxV,EAAMqE,SAC7BviE,EAAQ0zE,eACRpE,IAIuB,MAAvBtvE,EAAQ6kC,cACV7kC,EAAQ0zE,eAAiBxV,EAAMqE,SAC7BviE,EAAQ0zE,eACRvE,IAIAnvE,EAAQ2zE,gBACV3zE,EAAQ0zE,eAAiBxV,EAAMqE,SAC7BviE,EAAQ0zE,eACR3B,KAKyB,MAA3B/xE,EAAQ4zE,gBAAyB,CACnC,GAAI5zE,EAAQ6zE,SACV7zE,EAAQ4zE,gBAAkB3E,MACrB,CACL,IAAI6E,EAAqB5V,EAAMqE,SAAS0M,EAAUkE,GAElDnzE,EAAQ4zE,gBAAkBE,EAiB5B,GAdwC,IAApC9zE,EAAQ4xE,0BACV5xE,EAAQ4zE,gBAAkB1V,EAAMqE,SAC9BviE,EAAQ4zE,gBACRjC,IAIA3xE,EAAQ+zE,gBACV/zE,EAAQ4zE,gBAAkB1V,EAAMqE,SAC9BviE,EAAQ4zE,gBACRzB,IAK0B,MAA5BnyE,EAAQg0E,kBACe,MAAvBh0E,EAAQi0E,aACyB,MAAjCj0E,EAAQk0E,sBACR,CACA,IAAIC,EAAc1V,EAAQz+D,EAAQuzE,QAAU,sBAE5CvzE,EAAQ4zE,gBAAkB1V,EAAMqE,SAC9BviE,EAAQ4zE,gBACRO,GAIJn0E,EAAQ4zE,gBAAkB1V,EAAMqE,SAC9BviE,EAAQ4zE,gBACR5D,GAIJ,GAAgC,MAA5BhwE,EAAQo0E,iBAA0B,CA6BpC,GA5BIp0E,EAAQ6zE,SACV7zE,EAAQo0E,iBAAmBvL,EAE3B7oE,EAAQo0E,iBAAmB3L,EAIF,MAAvBzoE,EAAQ6kC,cACV7kC,EAAQo0E,iBAAmBlW,EAAMqE,SAC/BviE,EAAQo0E,iBACRrL,IAIA/oE,EAAQq0E,aACVr0E,EAAQo0E,iBAAmBlW,EAAMqE,SAC/BviE,EAAQo0E,iBACR9K,IAIAtpE,EAAQ6zE,WACV7zE,EAAQo0E,iBAAmBlW,EAAMqE,SAC/BviE,EAAQo0E,iBACRtB,IAK2B,MAA7B9yE,EAAQs0E,mBACgB,MAAxBt0E,EAAQu0E,cAC0B,MAAlCv0E,EAAQw0E,uBACR,CACA,IAAIC,EAAehW,EAAQz+D,EAAQuzE,QAAU,uBAE7CvzE,EAAQo0E,iBAAmBlW,EAAMqE,SAC/BviE,EAAQo0E,iBACRK,GAIJz0E,EAAQo0E,iBAAmBlW,EAAMqE,SAC/BviE,EAAQo0E,iBACRzJ,GAMJ3qE,EAAQ00E,SAAWz0E,KAAK00E,iBAAiB30E,EAAQ00E,UAGjD10E,EAAQ00E,SAAS3nE,KAAK,MAItB,IAFA,IAAI6nE,EAAkB,GAEb/3E,EAAI,EAAGA,EAAImD,EAAQ00E,SAAS1yE,OAAQnF,IAAK,CAChD,IAAI63E,EAAW10E,EAAQ00E,SAAS73E,IAEW,IAAvC+3E,EAAgBjvE,QAAQ+uE,IAC1BE,EAAgB7nE,KAAK2nE,GAWzB,OAPA10E,EAAQ00E,SAAWE,EAEnB50E,EAAQorE,aAAenrE,KAAK40E,qBAC1B70E,EAAQ00E,SACR10E,EAAQ80E,OAGH90E,GAGTs6D,EAAS97D,UAAUkgC,MAAQ,WACzB,SAASq2C,EAAiB1uE,GAMxB,OAAOA,EAAKT,QAAQ,qBAJpB,SAAeqb,GACb,OAAO8xD,EAAW9xD,IAAMA,KAmD5BhhB,KAAKjB,SAAW,CACdu0E,QAAS,KACTyB,gBAAiB,UACjBjB,eAAe,EACfe,OAAO,EACPG,mBAAmB,EACnBlR,aAAc7F,EAAM6F,aACpB2Q,SAAU,GACV3I,QArDF,SAASA,EAAS1I,EAAQthE,GAExB,GAA4B,KAAxBnD,EAAEmsB,KAAKs4C,EAAOqH,MAChB,OAAO3oE,EAIT,GAAIA,EAAK8R,UAAY9R,EAAK8R,SAAS7R,OAAS,EAAG,CAM7C,IAHA,IAAImB,EAAQvE,EAAEsB,QAAO,EAAM,GAAI6B,GAGtB9E,EAAI8E,EAAK8R,SAAS7R,OAAS,EAAG/E,GAAK,EAAGA,IAM9B,MAHD8uE,EAAQ1I,EAFVthE,EAAK8R,SAAS5W,KAMxBkG,EAAM0Q,SAAS2jB,OAAOv6B,EAAG,GAK7B,OAAIkG,EAAM0Q,SAAS7R,OAAS,EACnBmB,EAIF4oE,EAAQ1I,EAAQlgE,GAGzB,IAAI+xE,EAAWH,EAAgBhzE,EAAKsE,MAAMkM,cACtCm4D,EAAOqK,EAAgB1R,EAAOqH,MAAMn4D,cAGxC,OAAI2iE,EAASvvE,QAAQ+kE,IAAS,EACrB3oE,EAIF,MAYPysE,mBAAoB,EACpBG,mBAAoB,EACpBG,uBAAwB,EACxB8C,wBAAyB,EACzB+B,eAAe,EACfwB,mBAAmB,EACnB3P,OAAQ,SAAUzjE,GAChB,OAAOA,GAETqzE,eAAgB,SAAUtlC,GACxB,OAAOA,EAAOzpC,MAEhBgvE,kBAAmB,SAAUjnC,GAC3B,OAAOA,EAAU/nC,MAEnBnH,MAAO,UACPge,MAAO,YAIXo9C,EAAS97D,UAAU82E,iBAAmB,SAAUt1E,EAASiK,GACvD,IAAIsrE,EAAiBv1E,EAAQ00E,SACzBc,EAAkBv1E,KAAKjB,SAAS01E,SAChCe,EAAkBxrE,EAAS+lB,KAAK,QAChC0lD,EAAiBzrE,EAASd,QAAQ,UAAU6mB,KAAK,QAEjD2lD,EAAYpoD,MAAM/uB,UAAUinB,OAAO1oB,KACrCkD,KAAK00E,iBAAiBc,GACtBx1E,KAAK00E,iBAAiBY,GACtBt1E,KAAK00E,iBAAiBa,GACtBv1E,KAAK00E,iBAAiBe,IAKxB,OAFA11E,EAAQ00E,SAAWiB,EAEZ31E,GAGTs6D,EAAS97D,UAAUm2E,iBAAmB,SAAUD,GAC9C,IAAKA,EACH,MAAO,GAGT,GAAI91E,EAAEg3E,cAAclB,GAClB,MAAO,GAGT,GAAI91E,EAAEukC,cAAcuxC,GAClB,MAAO,CAACA,GAGV,IAAIiB,EAKFA,EAHG/2E,EAAE4uB,QAAQknD,GAGDA,EAFA,CAACA,GAOf,IAFA,IAAImB,EAAoB,GAEfh5E,EAAI,EAAGA,EAAI84E,EAAU3zE,OAAQnF,IAGpC,GAFAg5E,EAAkB9oE,KAAK4oE,EAAU94E,IAEL,iBAAjB84E,EAAU94E,IAAmB84E,EAAU94E,GAAG8I,QAAQ,KAAO,EAAG,CAErE,IACImwE,EADgBH,EAAU94E,GAAG+kB,MAAM,KACN,GAEjCi0D,EAAkB9oE,KAAK+oE,GAI3B,OAAOD,GAGTvb,EAAS97D,UAAUq2E,qBAAuB,SAAUc,EAAWb,GAG7D,IAFA,IAAI1J,EAAe,IAAIN,EAEdjuE,EAAI,EAAGA,EAAI84E,EAAU3zE,OAAQnF,IAAK,CACzC,IAAIk5E,EAAe,IAAIjL,EAEnB4J,EAAWiB,EAAU94E,GAEzB,GAAwB,iBAAb63E,EACT,IAEEqB,EAAejL,EAAYI,SAASwJ,GACpC,MAAO7zE,GACP,IAEE6zE,EAAWz0E,KAAKjB,SAASg2E,gBAAkBN,EAC3CqB,EAAejL,EAAYI,SAASwJ,GACpC,MAAOsB,GAIHlB,GAASj2E,OAAOiG,SAAWA,QAAQgpB,MACrChpB,QAAQgpB,KACN,mCAAqC4mD,EAAW,+EAOxDqB,EADSn3E,EAAEukC,cAAcuxC,GACV,IAAI5J,EAAY4J,GAEhBA,EAGjBtJ,EAAalrE,OAAO61E,GAGtB,OAAO3K,GAGT9Q,EAAS97D,UAAUw8B,IAAM,SAAU78B,EAAKN,GACtC,IAEIkE,EAAO,GACXA,EAHenD,EAAEq3E,UAAU93E,IAGVN,EAEjB,IAAIq4E,EAAgBhY,EAAMyF,aAAa5hE,GAEvCnD,EAAEsB,QAAO,EAAMD,KAAKjB,SAAUk3E,IAGjB,IAAI5b,KAKrB+D,EAAGK,OAAO,kBAAkB,CAC1B,UACA,SACA,aACA,YACC,SAAUD,EAAS7/D,EAAG07D,EAAU4D,GACjC,SAASiY,EAASn2E,EAASiK,GAazB,GAZAhK,KAAKD,QAAUA,EAEC,MAAZiK,GACFhK,KAAKm2E,YAAYnsE,GAGH,MAAZA,IACFhK,KAAKD,QAAUs6D,EAASgb,iBAAiBr1E,KAAKD,QAASiK,IAGzDhK,KAAKD,QAAUs6D,EAASttD,MAAM/M,KAAKD,SAE/BiK,GAAYA,EAAS+G,GAAG,SAAU,CACpC,IAAIqlE,EAAc5X,EAAQx+D,KAAKxC,IAAI,WAAa,oBAEhDwC,KAAKD,QAAQ6kE,YAAc3G,EAAMqE,SAC/BtiE,KAAKD,QAAQ6kE,YACbwR,IAoHN,OA/GAF,EAAQ33E,UAAU43E,YAAc,SAAU7H,GACxC,IAAI+H,EAAe,CAAC,WAES,MAAzBr2E,KAAKD,QAAQ6zE,WACf5zE,KAAKD,QAAQ6zE,SAAWtF,EAAGv+C,KAAK,aAGL,MAAzB/vB,KAAKD,QAAQs6C,WACfr6C,KAAKD,QAAQs6C,SAAWi0B,EAAGv+C,KAAK,aAGV,MAApB/vB,KAAKD,QAAQ4gD,MACX2tB,EAAGv+C,KAAK,OACV/vB,KAAKD,QAAQ4gD,IAAM2tB,EAAGv+C,KAAK,OAClBu+C,EAAGplE,QAAQ,SAAS6mB,KAAK,OAClC/vB,KAAKD,QAAQ4gD,IAAM2tB,EAAGplE,QAAQ,SAAS6mB,KAAK,OAE5C/vB,KAAKD,QAAQ4gD,IAAM,OAIvB2tB,EAAGv+C,KAAK,WAAY/vB,KAAKD,QAAQs6C,UACjCi0B,EAAGv+C,KAAK,WAAY/vB,KAAKD,QAAQ6zE,UAE7B3V,EAAMwG,QAAQ6J,EAAG,GAAI,iBACnBtuE,KAAKD,QAAQ80E,OAASj2E,OAAOiG,SAAWA,QAAQgpB,MAClDhpB,QAAQgpB,KACN,2KAMJowC,EAAMuG,UAAU8J,EAAG,GAAI,OAAQrQ,EAAMwG,QAAQ6J,EAAG,GAAI,gBACpDrQ,EAAMuG,UAAU8J,EAAG,GAAI,QAAQ,IAG7BrQ,EAAMwG,QAAQ6J,EAAG,GAAI,aACnBtuE,KAAKD,QAAQ80E,OAASj2E,OAAOiG,SAAWA,QAAQgpB,MAClDhpB,QAAQgpB,KACN,gKAMJygD,EAAGvrE,KAAK,YAAak7D,EAAMwG,QAAQ6J,EAAG,GAAI,YAC1CrQ,EAAMuG,UAAU8J,EAAG,GAAI,WAAYrQ,EAAMwG,QAAQ6J,EAAG,GAAI,aAG1D,IAAIgI,EAAU,GAEd,SAASC,EAAgBtN,EAAGuN,GAC1B,OAAOA,EAAOlkE,cAIhB,IAAK,IAAIvP,EAAO,EAAGA,EAAOurE,EAAG,GAAGhpD,WAAWvjB,OAAQgB,IAAQ,CACzD,IAAI0zE,EAAgBnI,EAAG,GAAGhpD,WAAWviB,GAAM7F,KAG3C,GAFa,SAETu5E,EAAc/5B,OAAO,EAFZ,QAEsB36C,QAAmB,CAEpD,IAAI20E,EAAWD,EAAcxyE,UAJlB,QAImClC,QAI1C40E,EAAY1Y,EAAMwG,QAAQ6J,EAAG,GAAIoI,GAMrCJ,EAHoBI,EAAS/wE,QAAQ,YAAa4wE,IAGzBI,GAMzBh4E,EAAEsI,GAAG+P,QAAsC,MAA5BrY,EAAEsI,GAAG+P,OAAO0lC,OAAO,EAAG,IAAc4xB,EAAG,GAAGgI,UAC3DA,EAAU33E,EAAEsB,QAAO,EAAM,GAAIquE,EAAG,GAAGgI,QAASA,IAI9C,IAAIx0E,EAAOnD,EAAEsB,QAAO,EAAM,GAAIg+D,EAAMwG,QAAQ6J,EAAG,IAAKgI,GAIpD,IAAK,IAAIp4E,KAFT4D,EAAOm8D,EAAMyF,aAAa5hE,GAGpBnD,EAAE6wB,QAAQtxB,EAAKm4E,IAAiB,IAIhC13E,EAAEukC,cAAcljC,KAAKD,QAAQ7B,IAC/BS,EAAEsB,OAAOD,KAAKD,QAAQ7B,GAAM4D,EAAK5D,IAEjC8B,KAAKD,QAAQ7B,GAAO4D,EAAK5D,IAI7B,OAAO8B,MAGTk2E,EAAQ33E,UAAUf,IAAM,SAAUU,GAChC,OAAO8B,KAAKD,QAAQ7B,IAGtBg4E,EAAQ33E,UAAUw8B,IAAM,SAAU78B,EAAKwwB,GACrC1uB,KAAKD,QAAQ7B,GAAOwwB,GAGfwnD,KAGT9X,EAAGK,OAAO,eAAe,CACvB,SACA,YACA,UACA,WACC,SAAU9/D,EAAGu3E,EAASjY,EAAO8J,GAC9B,IAAI6O,EAAU,SAAU5sE,EAAUjK,GACa,MAAzCk+D,EAAMwG,QAAQz6D,EAAS,GAAI,YAC7Bi0D,EAAMwG,QAAQz6D,EAAS,GAAI,WAAWge,UAGxChoB,KAAKgK,SAAWA,EAEhBhK,KAAK0V,GAAK1V,KAAK62E,YAAY7sE,GAE3BjK,EAAUA,GAAW,GAErBC,KAAKD,QAAU,IAAIm2E,EAAQn2E,EAASiK,GAEpC4sE,EAAQvU,UAAUpkD,YAAYnhB,KAAKkD,MAInC,IAAI82E,EAAW9sE,EAASjH,KAAK,aAAe,EAC5Ck7D,EAAMuG,UAAUx6D,EAAS,GAAI,eAAgB8sE,GAC7C9sE,EAASjH,KAAK,WAAY,MAI1B,IAAIg0E,EAAc/2E,KAAKD,QAAQvC,IAAI,eACnCwC,KAAK4kE,YAAc,IAAImS,EAAY/sE,EAAUhK,KAAKD,SAElD,IAAI+mE,EAAa9mE,KAAK6kE,SAEtB7kE,KAAKg3E,gBAAgBlQ,GAErB,IAAImQ,EAAmBj3E,KAAKD,QAAQvC,IAAI,oBACxCwC,KAAKmuC,UAAY,IAAI8oC,EAAiBjtE,EAAUhK,KAAKD,SACrDC,KAAKioE,WAAajoE,KAAKmuC,UAAU02B,SAEjC7kE,KAAKmuC,UAAUI,SAASvuC,KAAKioE,WAAYnB,GAEzC,IAAIoQ,EAAkBl3E,KAAKD,QAAQvC,IAAI,mBACvCwC,KAAKiuE,SAAW,IAAIiJ,EAAgBltE,EAAUhK,KAAKD,SACnDC,KAAKslE,UAAYtlE,KAAKiuE,SAASpJ,SAE/B7kE,KAAKiuE,SAAS1/B,SAASvuC,KAAKslE,UAAWwB,GAEvC,IAAIqQ,EAAiBn3E,KAAKD,QAAQvC,IAAI,kBACtCwC,KAAK4vB,QAAU,IAAIunD,EAAentE,EAAUhK,KAAKD,QAASC,KAAK4kE,aAC/D5kE,KAAK8kE,SAAW9kE,KAAK4vB,QAAQi1C,SAE7B7kE,KAAK4vB,QAAQ2e,SAASvuC,KAAK8kE,SAAU9kE,KAAKslE,WAI1C,IAAI3zC,EAAO3xB,KAGXA,KAAKo3E,gBAGLp3E,KAAKq3E,qBAGLr3E,KAAKs3E,sBACLt3E,KAAKu3E,2BACLv3E,KAAKw3E,0BACLx3E,KAAKy3E,yBACLz3E,KAAK03E,kBAGL13E,KAAK4kE,YAAYgB,SAAQ,SAAU+R,GACjChmD,EAAKtwB,QAAQ,mBAAoB,CAC/BS,KAAM61E,OAKV3tE,EAASvJ,SAAS,6BAClBuJ,EAASjH,KAAK,cAAe,QAG7B/C,KAAK43E,kBAEL3Z,EAAMuG,UAAUx6D,EAAS,GAAI,UAAWhK,MAGxCgK,EAASlI,KAAK,UAAW9B,OAshB3B,OAnhBAi+D,EAAM+D,OAAO4U,EAAS3Y,EAAMiF,YAE5B0T,EAAQr4E,UAAUs4E,YAAc,SAAU7sE,GAcxC,MAFK,YATsB,MAAvBA,EAASjH,KAAK,MACXiH,EAASjH,KAAK,MACe,MAAzBiH,EAASjH,KAAK,QAClBiH,EAASjH,KAAK,QAAU,IAAMk7D,EAAMsF,cAAc,GAElDtF,EAAMsF,cAAc,IAGnB59D,QAAQ,kBAAmB,KAMrCixE,EAAQr4E,UAAUy4E,gBAAkB,SAAUlQ,GAC5CA,EAAW+Q,YAAY73E,KAAKgK,UAE5B,IAAIiT,EAAQjd,KAAK83E,cAAc93E,KAAKgK,SAAUhK,KAAKD,QAAQvC,IAAI,UAElD,MAATyf,GACF6pD,EAAWxjE,IAAI,QAAS2Z,IAI5B25D,EAAQr4E,UAAUu5E,cAAgB,SAAU9tE,EAAUvF,GACpD,IAAIszE,EAAQ,gEAEZ,GAAc,WAAVtzE,EAAqB,CACvB,IAAIuzE,EAAah4E,KAAK83E,cAAc9tE,EAAU,SAE9C,OAAkB,MAAdguE,EACKA,EAGFh4E,KAAK83E,cAAc9tE,EAAU,WAGtC,GAAc,WAAVvF,EAAqB,CACvB,IAAIwzE,EAAejuE,EAASwnE,YAAW,GAEvC,OAAIyG,GAAgB,EACX,OAGFA,EAAe,KAGxB,GAAc,SAAVxzE,EAAmB,CACrB,IAAIgS,EAAQzM,EAASjH,KAAK,SAE1B,GAAsB,iBAAZ,EACR,OAAO,KAKT,IAFA,IAAIqjE,EAAQ3vD,EAAMkL,MAAM,KAEfhlB,EAAI,EAAGC,EAAIwpE,EAAMrkE,OAAQpF,EAAIC,EAAGD,GAAQ,EAAG,CAClD,IACIqK,EADOo/D,EAAMzpE,GAAGgJ,QAAQ,MAAO,IAChBzC,MAAM60E,GAEzB,GAAgB,OAAZ/wE,GAAoBA,EAAQjF,QAAU,EACxC,OAAOiF,EAAQ,GAInB,OAAO,KAGT,MAAc,iBAAVvC,EACkB7F,OAAO82C,iBAAiB1rC,EAAS,IAEhCiT,MAGhBxY,GAGTmyE,EAAQr4E,UAAU64E,cAAgB,WAChCp3E,KAAK4kE,YAAYzmE,KAAK6B,KAAMA,KAAK8mE,YACjC9mE,KAAKmuC,UAAUhwC,KAAK6B,KAAMA,KAAK8mE,YAE/B9mE,KAAKiuE,SAAS9vE,KAAK6B,KAAMA,KAAK8mE,YAC9B9mE,KAAK4vB,QAAQzxB,KAAK6B,KAAMA,KAAK8mE,aAG/B8P,EAAQr4E,UAAU84E,mBAAqB,WACrC,IAAI1lD,EAAO3xB,KAEXA,KAAKgK,SAASrJ,GAAG,kBAAkB,WACjCgxB,EAAKizC,YAAYgB,SAAQ,SAAU9jE,GACjC6vB,EAAKtwB,QAAQ,mBAAoB,CAC/BS,KAAMA,UAKZ9B,KAAKgK,SAASrJ,GAAG,iBAAiB,SAAUinE,GAC1Cj2C,EAAKtwB,QAAQ,QAASumE,MAGxB5nE,KAAKk4E,OAASja,EAAM9/D,KAAK6B,KAAK43E,gBAAiB53E,MAC/CA,KAAKm4E,OAASla,EAAM9/D,KAAK6B,KAAKo4E,aAAcp4E,MAExCA,KAAKgK,SAAS,GAAGquE,aACnBr4E,KAAKgK,SAAS,GAAGquE,YAAY,mBAAoBr4E,KAAKk4E,QAGxD,IAAII,EAAW15E,OAAO25E,kBACpB35E,OAAO45E,wBACP55E,OAAO65E,oBAGO,MAAZH,GACFt4E,KAAK04E,UAAY,IAAIJ,GAAS,SAAUK,GACtCh6E,EAAEuI,KAAKyxE,EAAWhnD,EAAKumD,QACvBv5E,EAAEuI,KAAKyxE,EAAWhnD,EAAKwmD,WAEzBn4E,KAAK04E,UAAUE,QAAQ54E,KAAKgK,SAAS,GAAI,CACvCsb,YAAY,EACZuzD,WAAW,EACXC,SAAS,KAEF94E,KAAKgK,SAAS,GAAGklB,mBAC1BlvB,KAAKgK,SAAS,GAAGklB,iBACf,kBACAyC,EAAKumD,QACL,GAEFl4E,KAAKgK,SAAS,GAAGklB,iBACf,kBACAyC,EAAKwmD,QACL,GAEFn4E,KAAKgK,SAAS,GAAGklB,iBACf,iBACAyC,EAAKwmD,QACL,KAKNvB,EAAQr4E,UAAU+4E,oBAAsB,WACtC,IAAI3lD,EAAO3xB,KAEXA,KAAK4kE,YAAYjkE,GAAG,KAAK,SAAUzD,EAAMkmE,GACvCzxC,EAAKtwB,QAAQnE,EAAMkmE,OAIvBwT,EAAQr4E,UAAUg5E,yBAA2B,WAC3C,IAAI5lD,EAAO3xB,KACP+4E,EAAiB,CAAC,SAAU,SAEhC/4E,KAAKmuC,UAAUxtC,GAAG,UAAU,WAC1BgxB,EAAKqnD,oBAGPh5E,KAAKmuC,UAAUxtC,GAAG,SAAS,SAAUyiE,GACnCzxC,EAAKvmB,MAAMg4D,MAGbpjE,KAAKmuC,UAAUxtC,GAAG,KAAK,SAAUzD,EAAMkmE,IACI,IAArCzkE,EAAE6wB,QAAQtyB,EAAM67E,IAIpBpnD,EAAKtwB,QAAQnE,EAAMkmE,OAIvBwT,EAAQr4E,UAAUi5E,wBAA0B,WAC1C,IAAI7lD,EAAO3xB,KAEXA,KAAKiuE,SAASttE,GAAG,KAAK,SAAUzD,EAAMkmE,GACpCzxC,EAAKtwB,QAAQnE,EAAMkmE,OAIvBwT,EAAQr4E,UAAUk5E,uBAAyB,WACzC,IAAI9lD,EAAO3xB,KAEXA,KAAK4vB,QAAQjvB,GAAG,KAAK,SAAUzD,EAAMkmE,GACnCzxC,EAAKtwB,QAAQnE,EAAMkmE,OAIvBwT,EAAQr4E,UAAUm5E,gBAAkB,WAClC,IAAI/lD,EAAO3xB,KAEXA,KAAKW,GAAG,QAAQ,WACdgxB,EAAKm1C,WAAWrmE,SAAS,8BAG3BT,KAAKW,GAAG,SAAS,WACfgxB,EAAKm1C,WAAWpmE,YAAY,8BAG9BV,KAAKW,GAAG,UAAU,WAChBgxB,EAAKm1C,WAAWpmE,YAAY,kCAG9BV,KAAKW,GAAG,WAAW,WACjBgxB,EAAKm1C,WAAWrmE,SAAS,kCAG3BT,KAAKW,GAAG,QAAQ,WACdgxB,EAAKm1C,WAAWpmE,YAAY,+BAG9BV,KAAKW,GAAG,SAAS,SAAUyiE,GACpBzxC,EAAKxa,UACRwa,EAAKtwB,QAAQ,OAAQ,IAGvBrB,KAAK4kE,YAAYyG,MAAMjI,GAAQ,SAAUthE,GACvC6vB,EAAKtwB,QAAQ,cAAe,CAC1BS,KAAMA,EACNupE,MAAOjI,UAKbpjE,KAAKW,GAAG,gBAAgB,SAAUyiE,GAChCpjE,KAAK4kE,YAAYyG,MAAMjI,GAAQ,SAAUthE,GACvC6vB,EAAKtwB,QAAQ,iBAAkB,CAC7BS,KAAMA,EACNupE,MAAOjI,UAKbpjE,KAAKW,GAAG,YAAY,SAAUinE,GAC5B,IAAI1pE,EAAM0pE,EAAIzmE,MAEVwwB,EAAKxa,SACHjZ,IAAQ6pE,EAAKD,KAAO5pE,IAAQ6pE,EAAKttB,KAChCv8C,IAAQ6pE,EAAK/hB,IAAM4hB,EAAI/rB,QAC1BlqB,EAAKnrB,QAELohE,EAAI/mE,kBACK3C,IAAQ6pE,EAAK5rB,OACtBxqB,EAAKtwB,QAAQ,iBAAkB,IAE/BumE,EAAI/mE,kBACM3C,IAAQ6pE,EAAKr6B,OAASk6B,EAAIrtB,SACpC5oB,EAAKtwB,QAAQ,iBAAkB,IAE/BumE,EAAI/mE,kBACK3C,IAAQ6pE,EAAK/hB,IACtBr0B,EAAKtwB,QAAQ,mBAAoB,IAEjCumE,EAAI/mE,kBACK3C,IAAQ6pE,EAAKziB,OACtB3zB,EAAKtwB,QAAQ,eAAgB,IAE7BumE,EAAI/mE,mBAGF3C,IAAQ6pE,EAAK5rB,OAASj+C,IAAQ6pE,EAAKr6B,OAClCxvC,IAAQ6pE,EAAKziB,MAAQsiB,EAAI/rB,UAC5BlqB,EAAKsnD,OAELrR,EAAI/mE,sBAMZ+1E,EAAQr4E,UAAUq5E,gBAAkB,WAClC53E,KAAKD,QAAQg7B,IAAI,WAAY/6B,KAAKgK,SAAS+lB,KAAK,aAE5C/vB,KAAKD,QAAQvC,IAAI,aACfwC,KAAKmX,UACPnX,KAAKwG,QAGPxG,KAAKqB,QAAQ,UAAW,KAExBrB,KAAKqB,QAAQ,SAAU,KAI3Bu1E,EAAQr4E,UAAU65E,aAAe,SAAUxQ,EAAK+Q,GAC9C,IAAIxgD,GAAU,EACVxG,EAAO3xB,KAIX,IACE4nE,IAAOA,EAAIjhE,QACe,WAAxBihE,EAAIjhE,OAAO0b,UAAiD,aAAxBulD,EAAIjhE,OAAO0b,SAFnD,CAQA,GAAKs2D,EAIE,GAAIA,EAAUO,YAAcP,EAAUO,WAAWn3E,OAAS,EAC/D,IAAK,IAAI3D,EAAI,EAAGA,EAAIu6E,EAAUO,WAAWn3E,OAAQ3D,IACpCu6E,EAAUO,WAAW96E,GAEvBynE,WACP1tC,GAAU,QAGLwgD,EAAUQ,cAAgBR,EAAUQ,aAAap3E,OAAS,IACnEo2B,GAAU,QAVVA,GAAU,EAcRA,GACFn4B,KAAK4kE,YAAYgB,SAAQ,SAAU4F,GACjC75C,EAAKtwB,QAAQ,mBAAoB,CAC/BS,KAAM0pE,SAUdoL,EAAQr4E,UAAU8C,QAAU,SAAUnE,EAAMyxB,GAC1C,IAAIyqD,EAAgBxC,EAAQvU,UAAUhhE,QAClCg4E,EAAgB,CAClB,KAAQ,UACR,MAAS,UACT,OAAU,YACV,SAAY,cACZ,MAAS,YAOX,QAJa5sD,IAATkC,IACFA,EAAO,IAGLzxB,KAAQm8E,EAAe,CACzB,IAAIC,EAAiBD,EAAcn8E,GAC/Bq8E,EAAiB,CACnB79C,WAAW,EACXx+B,KAAMA,EACNyxB,KAAMA,GAKR,GAFAyqD,EAAct8E,KAAKkD,KAAMs5E,EAAgBC,GAErCA,EAAe79C,UAGjB,YAFA/M,EAAK+M,WAAY,GAMrB09C,EAAct8E,KAAKkD,KAAM9C,EAAMyxB,IAGjCioD,EAAQr4E,UAAUy6E,eAAiB,WAC7Bh5E,KAAKD,QAAQvC,IAAI,cAIjBwC,KAAKmX,SACPnX,KAAKwG,QAELxG,KAAKi5E,SAITrC,EAAQr4E,UAAU06E,KAAO,WACnBj5E,KAAKmX,UAITnX,KAAKqB,QAAQ,QAAS,KAGxBu1E,EAAQr4E,UAAUiI,MAAQ,WACnBxG,KAAKmX,UAIVnX,KAAKqB,QAAQ,QAAS,KAGxBu1E,EAAQr4E,UAAU4Y,OAAS,WACzB,OAAOnX,KAAK8mE,WAAWtmE,SAAS,4BAGlCo2E,EAAQr4E,UAAUi7E,SAAW,WAC3B,OAAOx5E,KAAK8mE,WAAWtmE,SAAS,6BAGlCo2E,EAAQr4E,UAAU6M,MAAQ,SAAUtJ,GAE9B9B,KAAKw5E,aAITx5E,KAAK8mE,WAAWrmE,SAAS,4BACzBT,KAAKqB,QAAQ,QAAS,MAGxBu1E,EAAQr4E,UAAU8oB,OAAS,SAAUsH,GAC/B3uB,KAAKD,QAAQvC,IAAI,UAAYoB,OAAOiG,SAAWA,QAAQgpB,MACzDhpB,QAAQgpB,KACN,qJAMQ,MAARc,GAAgC,IAAhBA,EAAK5sB,SACvB4sB,EAAO,EAAC,IAGV,IAAI0rB,GAAY1rB,EAAK,GAErB3uB,KAAKgK,SAAS+lB,KAAK,WAAYsqB,IAGjCu8B,EAAQr4E,UAAUuD,KAAO,WACnB9B,KAAKD,QAAQvC,IAAI,UACjByP,UAAUlL,OAAS,GAAKnD,OAAOiG,SAAWA,QAAQgpB,MACpDhpB,QAAQgpB,KACN,qIAKJ,IAAI/rB,EAAO,GAMX,OAJA9B,KAAK4kE,YAAYgB,SAAQ,SAAU4F,GACjC1pE,EAAO0pE,KAGF1pE,GAGT80E,EAAQr4E,UAAUmwB,IAAM,SAAUC,GAQhC,GAPI3uB,KAAKD,QAAQvC,IAAI,UAAYoB,OAAOiG,SAAWA,QAAQgpB,MACzDhpB,QAAQgpB,KACN,uIAKQ,MAARc,GAAgC,IAAhBA,EAAK5sB,OACvB,OAAO/B,KAAKgK,SAAS0kB,MAGvB,IAAI+qD,EAAS9qD,EAAK,GAEdhwB,EAAE4uB,QAAQksD,KACZA,EAAS96E,EAAE+hB,IAAI+4D,GAAQ,SAAUptE,GAC/B,OAAOA,EAAI4d,eAIfjqB,KAAKgK,SAAS0kB,IAAI+qD,GAAQp4E,QAAQ,WAGpCu1E,EAAQr4E,UAAUypB,QAAU,WAC1BhoB,KAAK8mE,WAAWj9D,SAEZ7J,KAAKgK,SAAS,GAAG0vE,aACnB15E,KAAKgK,SAAS,GAAG0vE,YAAY,mBAAoB15E,KAAKk4E,QAGlC,MAAlBl4E,KAAK04E,WACP14E,KAAK04E,UAAUiB,aACf35E,KAAK04E,UAAY,MACR14E,KAAKgK,SAAS,GAAGolB,sBAC1BpvB,KAAKgK,SAAS,GACXolB,oBAAoB,kBAAmBpvB,KAAKk4E,QAAQ,GACvDl4E,KAAKgK,SAAS,GACXolB,oBAAoB,kBAAmBpvB,KAAKm4E,QAAQ,GACvDn4E,KAAKgK,SAAS,GACXolB,oBAAoB,iBAAkBpvB,KAAKm4E,QAAQ,IAGxDn4E,KAAKk4E,OAAS,KACdl4E,KAAKm4E,OAAS,KAEdn4E,KAAKgK,SAAShJ,IAAI,YAClBhB,KAAKgK,SAASjH,KAAK,WACnBk7D,EAAMwG,QAAQzkE,KAAKgK,SAAS,GAAI,iBAEhChK,KAAKgK,SAAStJ,YAAY,6BAC1BV,KAAKgK,SAASjH,KAAK,cAAe,SAClCk7D,EAAMyG,WAAW1kE,KAAKgK,SAAS,IAC/BhK,KAAKgK,SAASnB,WAAW,WAEzB7I,KAAK4kE,YAAY58C,UACjBhoB,KAAKmuC,UAAUnmB,UACfhoB,KAAKiuE,SAASjmD,UACdhoB,KAAK4vB,QAAQ5H,UAEbhoB,KAAK4kE,YAAc,KACnB5kE,KAAKmuC,UAAY,KACjBnuC,KAAKiuE,SAAW,KAChBjuE,KAAK4vB,QAAU,MAGjBgnD,EAAQr4E,UAAUsmE,OAAS,WACzB,IAAIiC,EAAanoE,EACf,2IAcF,OARAmoE,EAAW/jE,KAAK,MAAO/C,KAAKD,QAAQvC,IAAI,QAExCwC,KAAK8mE,WAAaA,EAElB9mE,KAAK8mE,WAAWrmE,SAAS,sBAAwBT,KAAKD,QAAQvC,IAAI,UAElEygE,EAAMuG,UAAUsC,EAAW,GAAI,UAAW9mE,KAAKgK,UAExC88D,GAGF8P,KAGTxY,EAAGK,OAAO,oBAAoB,CAC5B,WACC,SAAU9/D,GAEX,OAAOA,KAGTy/D,EAAGK,OAAO,iBAAiB,CACzB,SACA,oBAEA,iBACA,qBACA,oBACC,SAAU9/D,EAAGsqE,EAAG2N,EAASvc,EAAU4D,GACpC,GAAoB,MAAhBt/D,EAAEsI,GAAGo3D,QAAiB,CAExB,IAAIub,EAAc,CAAC,OAAQ,QAAS,WAEpCj7E,EAAEsI,GAAGo3D,QAAU,SAAUt+D,GAGvB,GAAuB,iBAFvBA,EAAUA,GAAW,IASnB,OANAC,KAAKkH,MAAK,WACR,IAAI2yE,EAAkBl7E,EAAEsB,QAAO,EAAM,GAAIF,GAE1B,IAAI62E,EAAQj4E,EAAEqB,MAAO65E,MAG/B75E,KACF,GAAuB,iBAAZD,EAAsB,CACtC,IAAIqhE,EACAzyC,EAAOrB,MAAM/uB,UAAUqN,MAAM9O,KAAKmQ,UAAW,GAgBjD,OAdAjN,KAAKkH,MAAK,WACR,IAAIkjB,EAAW6zC,EAAMwG,QAAQzkE,KAAM,WAEnB,MAAZoqB,GAAoBxrB,OAAOiG,SAAWA,QAAQI,OAChDJ,QAAQI,MACN,gBAAmBlF,EAAU,iEAKjCqhE,EAAMh3C,EAASrqB,GAASgN,MAAMqd,EAAUuE,MAItChwB,EAAE6wB,QAAQzvB,EAAS65E,IAAgB,EAC9B55E,KAGFohE,EAEP,MAAM,IAAIn5C,MAAM,kCAAoCloB,IAS1D,OAJ6B,MAAzBpB,EAAEsI,GAAGo3D,QAAQt/D,WACfJ,EAAEsI,GAAGo3D,QAAQt/D,SAAWs7D,GAGnBuc,KAIA,CACLnY,OAAQL,EAAGK,OACXD,QAASJ,EAAGI,SA12LN,GAg3LJH,EAAUD,EAAGI,QAAQ,kBAQzB,OAHAp3D,EAAOH,GAAGo3D,QAAQC,IAAMF,EAGjBC,IAn5LqB,gC,oFCV9B,kBACmkCz9D,EAAnkChC,OAAOynE,UAAUA,QAAQ9nE,UAAU2K,UAAUm9D,QAAQ9nE,UAAU2K,QAAQ,SAAStI,GAAG,IAAI/C,EAAEO,GAAG4B,KAAKnB,UAAUmB,KAAKqoB,eAAexc,iBAAiBjL,GAAGxD,EAAE4C,KAAK,GAAG,IAAInC,EAAEO,EAAE2D,SAASlE,GAAG,GAAGO,EAAE0iB,KAAKjjB,KAAKT,WAAWS,EAAE,IAAIT,EAAEA,EAAE82D,gBAAgB,OAAO92D,IAAI,WAAY,SAASwD,EAAEA,EAAE/C,GAAGA,EAAEA,GAAG,CAACi8E,SAAQ,EAAGC,YAAW,EAAGC,YAAO,GAAQ,IAAI57E,EAAES,SAASqiC,YAAY,eAAe,OAAO9iC,EAAE67E,gBAAgBr5E,EAAE/C,EAAEi8E,QAAQj8E,EAAEk8E,WAAWl8E,EAAEm8E,QAAQ57E,EAAE,GAAG,mBAAmBQ,OAAOs7E,YAAY,OAAM,EAAGt5E,EAAErC,UAAUK,OAAOgJ,MAAMrJ,UAAUK,OAAOs7E,YAAYt5E,EAA1R,GAAgS,WAAY,IAAI,IAAIA,EAAE,EAAE/C,EAAE,CAAC,KAAK,MAAM,SAAS,KAAKO,EAAE,EAAEA,EAAEP,EAAEkE,SAASnD,OAAOo/D,wBAAwB5/D,EAAEQ,OAAOo/D,sBAAsBp/D,OAAOf,EAAEO,GAAG,yBAAyBQ,OAAOu5D,qBAAqBv5D,OAAOf,EAAEO,GAAG,yBAAyBQ,OAAOf,EAAEO,GAAG,+BAA+BQ,OAAOo/D,wBAAwBp/D,OAAOo/D,sBAAsB,SAASngE,EAAEO,GAAG,IAAIhB,GAAE,IAAK4vB,MAAMmtD,UAAUx9E,EAAEkV,KAAKuP,IAAI,EAAE,IAAIhkB,EAAEwD,IAAInD,EAAEmB,OAAO0D,YAAW,WAAYzE,EAAET,EAAET,KAAKA,GAAG,OAAOiE,EAAExD,EAAET,EAAEc,IAAImB,OAAOu5D,uBAAuBv5D,OAAOu5D,qBAAqB,SAASv3D,GAAG8R,aAAa9R,KAAhiB,GAAmjBA,OAAmJ,IAAoBs9D,EAAOA,EAAO,oBAAoBt/D,OAAOA,OAAOoB,UAA1I,KAAzB,aAAa,OAA2J,SAAUY,GAAG,aAAa,IAAI/C,EAAE,CAACu8E,OAAO,uBAAuBC,OAAO,KAAKC,gBAAe,EAAGC,MAAM,IAAIC,MAAK,EAAGv7D,OAAO,EAAEw7D,OAAO,iBAAiBC,aAAa,KAAKC,WAAU,EAAGC,UAAS,EAAGC,YAAW,GAAyIz9E,EAAE,WAAW,IAAI,IAAIwD,EAAE,GAAG/C,EAAE,EAAEA,EAAEoP,UAAUlL,OAAOlE,KAAK,SAAUA,GAAG,IAAI,IAAIO,KAAKP,EAAEA,EAAEW,eAAeJ,KAAKwC,EAAExC,GAAGP,EAAEO,IAAzD,CAA+D6O,UAAUpP,IAAI,OAAO+C,GAA+FnD,EAAE,SAASI,GAAG,OAAO0W,SAAS3T,EAAE80C,iBAAiB73C,GAAG0F,OAAO,KAAKyd,EAAE,SAASpgB,GAAG,IAAI/C,EAAE,IAAIA,EAAEi9E,mBAAmBl6E,GAAG,MAAMxC,GAAGP,EAAE+C,EAAE,OAAO/C,GAAGymB,EAAE,SAAS1jB,GAAG,MAAMA,EAAEmyC,OAAO,KAAKnyC,EAAEA,EAAE87C,OAAO,IAAI,IAAI,IAAI7+C,EAAEO,EAAEovC,OAAO5sC,GAAGxD,EAAEgB,EAAE2D,OAAOpF,GAAG,EAAEc,EAAE,GAAGujB,EAAE5iB,EAAEy1C,WAAW,KAAKl3C,EAAES,GAAG,CAAC,GAAG,KAAKS,EAAEO,EAAEy1C,WAAWl3C,IAAI,MAAM,IAAIo+E,sBAAsB,iDAAuHt9E,GAAtEI,GAAG,GAAGA,GAAG,IAAI,KAAKA,GAAG,IAAIlB,GAAGkB,GAAG,IAAIA,GAAG,IAAI,IAAIlB,GAAGkB,GAAG,IAAIA,GAAG,IAAI,KAAKmjB,EAAK,KAAKnjB,EAAEosB,SAAS,IAAI,IAAOpsB,GAAG,KAAK,KAAKA,GAAG,KAAKA,GAAGA,GAAG,IAAIA,GAAG,IAAIA,GAAG,IAAIA,GAAG,IAAIA,GAAG,IAAIA,GAAG,IAAIO,EAAE20C,OAAOp2C,GAAG,KAAKyB,EAAE20C,OAAOp2C,GAAG,IAAI2nB,EAAE,IAAIA,EAAEw2D,mBAAmB,IAAIr9E,GAAG,MAAMmD,GAAG0jB,EAAE,IAAI7mB,EAAE,OAAO6mB,GAAqoB5lB,EAAE,WAAW,OAAOmT,KAAKuP,IAAIviB,SAASmb,KAAK0B,aAAa7c,SAASsR,gBAAgBuL,aAAa7c,SAASmb,KAAKmR,aAAatsB,SAASsR,gBAAgBgb,aAAatsB,SAASmb,KAAK2B,aAAa9c,SAASsR,gBAAgBwL,eAA4K5e,EAAE,SAAS6D,GAAG,OAAOA,EAAEnD,EAAEmD,GAAGA,EAAEo6E,UAAU,GAAmWnyB,EAAE,SAAShrD,EAAEO,EAAEhB,EAAET,GAAG,GAAGyB,EAAEy8E,YAAY,mBAAmBj6E,EAAEs5E,YAAY,CAAC,IAAIz8E,EAAE,IAAIy8E,YAAYr8E,EAAE,CAACi8E,SAAQ,EAAGE,OAAO,CAACiB,OAAO79E,EAAEsN,OAAO/N,KAAKkC,SAASwiC,cAAc5jC,KAAK,OAAO,SAASA,EAAEgB,GAAG,IAAIy8E,EAAIC,EAAEznD,EAAE0nD,EAAEn6D,EAAEo6D,EAAEnyB,EAAE,CAAG,aAAe,SAAStoD,GAAGu3D,qBAAqBkjB,GAAGA,EAAE,KAAKz6E,GAAGioD,EAAE,eAAeqyB,IAAI,cAAgB,SAAS98E,EAAEzB,EAAEc,GAAG,IAAIujB,EAAE5jB,EAAE89E,GAAGr9E,EAAEJ,GAAG,IAAI6mB,EAAE,oBAAoBjnB,OAAOkB,UAAU0rB,SAASntB,KAAKsB,GAAGK,EAAE6lB,IAAIlmB,EAAE+M,QAAQ,KAAK/M,EAAE,GAAGkmB,GAAG7lB,EAAE,CAAC,IAAIk2B,EAAE/zB,EAAEugB,YAAYH,EAAEq5D,SAAS3mD,IAAIA,EAAE70B,SAASoK,cAAc+X,EAAEq5D,SAASe,IAAIA,EAAEr+E,EAAE22B,IAAI,IAAIynD,EAAEl6D,EAAEq6D,EAAEC,EAAEj3D,EAAElmB,EAArjC,SAASP,EAAEO,EAAEhB,EAAET,GAAG,IAAIc,EAAE,EAAE,GAAGI,EAAE4zD,aAAa,GAAGh0D,GAAGI,EAAEm9E,UAAUn9E,EAAEA,EAAE4zD,mBAAmB5zD,GAAG,OAAOJ,EAAEoU,KAAKuP,IAAI3jB,EAAEW,EAAEhB,EAAE,GAAGT,IAAIc,EAAEoU,KAAK66B,IAAIjvC,EAAEiB,IAAIkC,EAAE0gB,cAAc7jB,EAA+5Bb,CAAE6B,EAAE28E,EAAE7mE,SAAS,mBAAmByM,EAAE/B,OAAO+B,EAAE/B,OAAO7gB,EAAEzB,GAAGqkB,EAAE/B,OAAO,IAAI+B,EAAEw5D,MAAMgB,EAAED,EAAE5mD,EAAEo4C,EAAEruE,IAAI+8E,EAAE,EAAEC,EAAE,SAAS79E,EAAET,GAAG,IAAIK,EAAEmD,EAAEugB,YAAY,GAAGtjB,GAAGT,GAAGK,GAAGL,IAAIu3B,EAAEv3B,GAAGwD,EAAE0gB,YAAY7jB,IAAIsvE,EAAE,OAAO7jB,EAAEyyB,cAAa,GAA93B,SAAS99E,EAAEO,EAAEhB,GAAG,IAAIS,GAAGgB,SAASmb,KAAK5O,QAAQhO,IAAIS,EAAEuN,QAAQvM,SAASqM,gBAAgBrN,IAAIA,EAAEyN,aAAa,WAAW,MAAMzN,EAAEuN,QAAQvN,EAAE4Y,MAAMmlE,QAAQ,QAAQh7E,EAAEi7E,SAAS,EAAEz9E,IAA2tB2iE,CAAE3iE,EAAEhB,EAAEknB,GAAGukC,EAAE,aAAa7nC,EAAE5iB,EAAEzB,GAAGw+E,EAAE,KAAKE,EAAE,MAAK,GAAIS,EAAE,SAASj+E,GAAGs9E,IAAIA,EAAEt9E,GAAUojB,GAAPw6D,GAAG59E,EAAEs9E,GAAM5mE,SAASyM,EAAEu5D,MAAM,IAAce,EAAE3mD,EAAE6mD,EAAttE,SAAS56E,EAAE/C,GAAG,IAAIO,EAAE,MAAM,eAAewC,EAAE65E,SAASr8E,EAAEP,EAAEA,GAAG,gBAAgB+C,EAAE65E,SAASr8E,EAAEP,GAAG,EAAEA,IAAI,kBAAkB+C,EAAE65E,SAASr8E,EAAEP,EAAE,GAAG,EAAEA,EAAEA,GAAG,EAAE,EAAEA,GAAGA,EAAE,GAAG,gBAAgB+C,EAAE65E,SAASr8E,EAAEP,EAAEA,EAAEA,GAAG,iBAAiB+C,EAAE65E,SAASr8E,IAAIP,EAAEA,EAAEA,EAAE,GAAG,mBAAmB+C,EAAE65E,SAASr8E,EAAEP,EAAE,GAAG,EAAEA,EAAEA,EAAEA,GAAGA,EAAE,IAAI,EAAEA,EAAE,IAAI,EAAEA,EAAE,GAAG,GAAG,gBAAgB+C,EAAE65E,SAASr8E,EAAEP,EAAEA,EAAEA,EAAEA,GAAG,iBAAiB+C,EAAE65E,SAASr8E,EAAE,KAAKP,EAAEA,EAAEA,EAAEA,GAAG,mBAAmB+C,EAAE65E,SAASr8E,EAAEP,EAAE,GAAG,EAAEA,EAAEA,EAAEA,EAAEA,EAAE,EAAE,IAAIA,EAAEA,EAAEA,EAAEA,GAAG,gBAAgB+C,EAAE65E,SAASr8E,EAAEP,EAAEA,EAAEA,EAAEA,EAAEA,GAAG,iBAAiB+C,EAAE65E,SAASr8E,EAAE,IAAIP,EAAEA,EAAEA,EAAEA,EAAEA,GAAG,mBAAmB+C,EAAE65E,SAASr8E,EAAEP,EAAE,GAAG,GAAGA,EAAEA,EAAEA,EAAEA,EAAEA,EAAE,EAAE,KAAKA,EAAEA,EAAEA,EAAEA,EAAEA,GAAG+C,EAAE85E,eAAet8E,EAAEwC,EAAE85E,aAAa78E,IAAIO,GAAGP,EAA2lDb,CAAEgkB,EAAlBC,EAAEA,EAAE,EAAE,EAAEA,GAAergB,EAAEi7E,SAAS,EAAEhqE,KAAKo4C,MAAMqxB,IAAII,EAAEJ,EAAEC,KAAKF,EAAEz6E,EAAEo9D,sBAAsB8d,GAAGX,EAAEt9E,IAAI,IAAI+C,EAAEugB,aAAavgB,EAAEi7E,SAAS,EAAE,GAA3xC,SAASj7E,EAAE/C,EAAEO,GAAGP,GAAGkI,QAAQC,WAAW5H,EAAEu8E,WAAW50E,QAAQC,UAAU,CAAC+1E,aAAaz5B,KAAK05B,UAAU59E,GAAG68E,OAAOr6E,EAAE8U,IAAI7W,SAAS2G,MAAM5E,IAAI/B,SAASsR,gBAAgB,OAAO,IAAIvP,EAAE8U,IAAmnCzY,CAAEmB,EAAEkmB,EAAEtD,GAAG6nC,EAAE,cAAc7nC,EAAE5iB,EAAEzB,GAAGusD,EAAEyyB,cAAa,GAAI/6E,EAAEo9D,sBAAsB8d,MAASR,EAAE,SAASz9E,GAAG,KAAhmG,eAAe+C,GAAGA,EAAEmG,WAAW,4BAA4BC,UAA8iG,IAAInJ,EAAE2N,SAAS3N,EAAEq+C,UAAUr+C,EAAE08C,SAAS,YAAY18C,EAAE8I,SAASw0E,EAAEt9E,EAAE8I,OAAOuC,QAAQzL,KAAK,MAAM09E,EAAEhwE,QAAQia,gBAAgBvnB,EAAE8I,OAAOuC,QAAQgyE,EAAEd,SAASe,EAAEc,WAAWr7E,EAAEmE,SAASk3E,UAAUd,EAAEe,WAAWt7E,EAAEmE,SAASm3E,UAAU,IAAIxwE,KAAKyvE,EAAEr4E,MAAM,CAAC,IAAI1E,EAAEkmB,EAAEtD,EAAEm6D,EAAE3lB,OAAOp4D,EAAE89E,EAAEZ,gBAAgB,MAAMl8E,EAAES,SAASsR,gBAAgBtR,SAASoK,cAAc7K,IAAGhB,EAAEA,GAAG,SAASgB,EAAEhB,EAAEyB,SAASsR,mBAAoBtS,EAAEgD,iBAAiBqoD,EAAEizB,cAAc/+E,EAAE+9E,MAAMI,EAAE,SAAS36E,GAAG,GAAG,OAAOmF,QAAQw2B,OAAOx2B,QAAQw2B,MAAMw/C,cAAch2E,QAAQw2B,MAAMw/C,eAAez5B,KAAK05B,UAAUd,IAAIn1E,QAAQw2B,MAAM0+C,OAAO,CAAC,IAAIp9E,EAAEgB,SAASoK,cAAcqb,EAAEtD,EAAEjb,QAAQw2B,MAAM0+C,UAAUp9E,GAAGqrD,EAAEizB,cAAct+E,EAAE,KAAK,CAAC88E,WAAU,MAAOa,EAAE,SAAS56E,GAAGqgB,IAAIA,EAAE3e,YAAW,WAAY2e,EAAE,KAAKm6D,EAAEr+E,EAAE22B,KAAK,MAAM,OAAOw1B,EAAElhC,QAAQ,WAAWkzD,IAAIr8E,SAASuwB,oBAAoB,QAAQksD,GAAE,GAAI16E,EAAEwuB,oBAAoB,SAASosD,GAAE,GAAI56E,EAAEwuB,oBAAoB,WAAWmsD,GAAE,GAAIryB,EAAEyyB,eAAeT,EAAE,KAAYC,EAAE,KAAKznD,EAAE,KAAK0nD,EAAE,KAAKn6D,EAAE,KAAKo6D,EAAE,OAAOnyB,EAAE9oD,KAAK,SAASzD,GAAG,KAA/zI,kBAAkBkC,UAAU,qBAAqB+B,GAAG,0BAA0BA,GAAG,YAAYA,EAAEylE,QAAQ9nE,WAAguI,KAAK,iGAAiG2qD,EAAElhC,UAAUkzD,EAAE99E,EAAES,EAAElB,GAAG,IAAI+2B,EAAEwnD,EAAEb,OAAOx7E,SAASoK,cAAciyE,EAAEb,QAAQ,KAAKe,EAAEr+E,EAAE22B,GAAG70B,SAASqwB,iBAAiB,QAAQosD,GAAE,GAAI5nD,GAAG9yB,EAAEsuB,iBAAiB,SAASssD,GAAE,GAAIN,EAAEP,WAAWO,EAAEN,UAAUh6E,EAAEsuB,iBAAiB,WAAWqsD,GAAE,IAAKryB,EAAE9oD,KAAK3B,GAAGyqD,GAApgKrrD,CAAE+C,IAAG,QAA3B,OAA2B,e,mHCDhpC,IAAIs6E,EAGJA,EAAI,WACH,OAAOl7E,KADJ,GAIJ,IAECk7E,EAAIA,GAAK,IAAIkB,SAAS,cAAb,GACR,MAAOx7E,GAEc,iBAAXhC,SAAqBs8E,EAAIt8E,QAOrClC,EAAOD,QAAUy+E,G,qDCnBjB,IAAIx6D,EAAM,CACT,WAAY,mBACZ,eAAgB,uBAChB,eAAgB,uBAChB,eAAgB,wBAIjB,SAAS27D,EAAe/vD,GACvB,IAAI5W,EAAK4mE,EAAsBhwD,GAC/B,OAAO/vB,EAAoBmZ,GAE5B,SAAS4mE,EAAsBhwD,GAC9B,IAAI/vB,EAAoBa,EAAEsjB,EAAK4L,GAAM,CACpC,IAAI1rB,EAAI,IAAIqnB,MAAM,uBAAyBqE,EAAM,KAEjD,MADA1rB,EAAEK,KAAO,mBACHL,EAEP,OAAO8f,EAAI4L,GAEZ+vD,EAAe7vE,KAAO,WACrB,OAAOnP,OAAOmP,KAAKkU,IAEpB27D,EAAe9vD,QAAU+vD,EACzB5/E,EAAOD,QAAU4/E,EACjBA,EAAe3mE,GAAK,sC,iCCzBpBhZ,EAAOD,QAAU,iB,qCCAjBC,EAAOD,QAAU,qB,qCCAjBC,EAAOD,QAAU,qB,qCCAjBC,EAAOD,QAAU,uB,6ECAjB,SAAS8/E,EAAM9yE,GACb,GAAkB,mBAAP7F,GAAX,CAOA,IAHA,IAAItC,EAAKmI,EAAM+yE,YAAc/yE,EAAM9C,OAIjCrF,SACsB,IAAdA,EAAG6J,SACmB,KAA5B7J,EAAG6J,QAAQia,gBACV9jB,EAAGwB,OAENxB,EAAKA,EAAGsR,WAGV,GAAItR,GAAMA,EAAGwB,KAAM,CAEjB,IAAIP,EAAOjB,EAAGwB,KACd,IAAoC,GAAhCP,EAAKmD,QAAQX,SAAS0rD,QAAgBluD,EAAKW,MAAM,iBAAkB,CAGrE,IAIIyD,KACFrF,EAAGqF,QAAWrF,EAAGqF,OAAOzD,MAAM,2BAC1B5B,EAAGqF,OAGT/C,GACE,OACA,QACA,iBACArB,EACA1D,SAASkG,SAASm3E,SAAWr9E,SAASkG,SAAS80D,OAC/C,CAAE4iB,YAfU,SAASl6E,EAAMoE,GAC3BA,EAAS/H,OAAOq6E,KAAK12E,EAAMoE,GAAW/H,OAAOmG,SAASjC,KAAOP,EAc9Cm6E,CAAQn6E,EAAMoE,KAI/B8C,EAAM5I,eAAiB4I,EAAM5I,iBAAoB4I,EAAMkzE,aAAc,KAM3E,IAAIxB,EAAIv8E,OACRu8E,EAAEjsD,iBACEisD,EAAEjsD,iBACF,QACA,WACErwB,SAASmb,KAAKkV,iBAAiB,QAASqtD,GAAO,MAEjD,GAEApB,EAAE9C,aACF8C,EAAE9C,YAAY,UAAU,WACtBx5E,SAASmb,KAAKq+D,YAAY,UAAWkE,O,uWC3D3C,IA2MeK,EA3MH,CACVx8E,KAAM,WAsMJ,OAtMU,YAER,WAAYL,I,4FAAS,e,iKAAA,0DAEb88E,EAAKA,EAFQ,OAInBA,EAAGC,OAAO/8E,EAAQ2gB,KAClBm8D,EAAGtuC,SAAWxuC,EAAQwuC,SACtBsuC,EAAG75E,KAAOjD,EAAQiD,KACdjD,EAAQiD,KACR,uFACJ65E,EAAGE,SAAWh9E,EAAQg9E,SACtBF,EAAGG,MAAQj9E,EAAQi9E,MACnBH,EAAGI,YAAcl9E,EAAQ80E,MACzBgI,EAAGK,QAAUn9E,EAAQm9E,QACrBL,EAAGM,YAAcp9E,EAAQo9E,YAEzBN,EAAGO,UAAY,SAAC/vD,GACd,MAAmB,kBAARA,GAObwvD,EAAGQ,eAAiB,SAAChwD,GACnB,YAAmB,IAARA,GAObwvD,EAAGS,WAAa,SAACjwD,GACf,OAAIA,EAAItrB,OAAS,GAOnB86E,EAAGU,SAAW,SAAClwD,GACb,MAAmB,iBAARA,GAObwvD,EAAG15C,WAAa,SAAC9V,GACf,MAAmB,mBAARA,GAhDM,EAFb,O,yTAAA,GAC0BmwD,OAAOC,KAAKC,aADtC,mCA0DN,IAAMb,EAAK78E,KAGX68E,EAAGx5D,IAAMxkB,SAASsc,cAAc,OAChC0hE,EAAGx5D,IAAI5M,MAAM83B,SAAW,WAGpBsuC,EAAGQ,eAAeR,EAAGE,WAAaF,EAAGS,WAAWT,EAAGE,YACrDF,EAAGx5D,IAAIjI,UAAYyhE,EAAGE,UAItBF,EAAGQ,eAAeR,EAAG75E,OACrB65E,EAAGS,WAAWT,EAAG75E,OACjB65E,EAAGU,SAASV,EAAG75E,QAEf65E,EAAGx5D,IAAI0C,UAAY82D,EAAG75E,MAGpB65E,EAAGO,UAAUP,EAAGI,cAAgBJ,EAAGI,cACrCJ,EAAGx5D,IAAIjI,UAAY,aACnByhE,EAAGx5D,IAAI0C,UACL,sTAEF82D,EAAGx5D,IAAI/X,aACL,QACA,oIAWJuxE,EAAGc,WAAWC,mBAAmB3jE,YAAY4iE,EAAGx5D,KAGhDm6D,OAAOC,KAAKh0E,MAAMo0E,eAAehB,EAAGx5D,IAAK,SAAS,SAAC5Z,GACjD+zE,OAAOC,KAAKh0E,MAAMpI,QAAQw7E,EAAI,SAC1BA,EAAG15C,WAAW05C,EAAGK,UAAUL,EAAGK,UAClCzzE,EAAM3I,qBAGR08E,OAAOC,KAAKh0E,MAAMo0E,eAAehB,EAAGx5D,IAAK,aAAa,SAAC5Z,GACrD+zE,OAAOC,KAAKh0E,MAAMpI,QAAQw7E,EAAI,aAC1BA,EAAG15C,WAAW05C,EAAGM,cAAcN,EAAGM,cACtC1zE,EAAM3I,uBA3GF,6BAgHN,IAAM+7E,EAAK78E,KACP89E,EAAOn/E,EAAEk+E,EAAGx5D,KAAKzhB,KACnB,uDAEGk8E,EAAK/7E,SACR+7E,EAAOn/E,EAAEk+E,EAAGx5D,MAId,IAAM06D,EAAmBlB,EACtBmB,gBACAC,qBAAqB,IAAIT,OAAOC,KAAKS,OAAOrB,EAAGtuC,WAG5CtvB,EAAS,CACbyU,OAAGjH,EACH+G,OAAG/G,GAEC0xD,EAAWL,EAAKtM,aAChB4M,EAAYN,EAAK35E,cAEvB,OAAQmpB,MAAMC,QAAQsvD,EAAGG,OAASH,EAAGG,MAAMh+D,KAAK,KAAO,IACrD,IAAK,WACHC,EAAOyU,EAAI0qD,EACXn/D,EAAOuU,EAAI2qD,EACX,MACF,IAAK,cACHl/D,EAAOyU,EAAI0qD,EAAY,EACvBn/D,EAAOuU,EAAI2qD,EACX,MACF,IAAK,cACHl/D,EAAOyU,EAAI,EACXzU,EAAOuU,EAAI2qD,EACX,MACF,IAAK,aACHl/D,EAAOyU,EAAI0qD,EACXn/D,EAAOuU,EAAI2qD,EAAW,EACtB,MACF,IAAK,gBACHl/D,EAAOyU,EAAI0qD,EAAY,EACvBn/D,EAAOuU,EAAI2qD,EAAW,EACtB,MACF,IAAK,gBACHl/D,EAAOyU,EAAI,EACXzU,EAAOuU,EAAI2qD,EAAW,EACtB,MACF,IAAK,YACHl/D,EAAOyU,EAAI0qD,EACXn/D,EAAOuU,EAAI,EACX,MACF,IAAK,eACHvU,EAAOyU,EAAI0qD,EAAY,EACvBn/D,EAAOuU,EAAI,EACX,MACF,IAAK,eACHvU,EAAOyU,EAAI,EACXzU,EAAOuU,EAAI,EACX,MACF,QACEvU,EAAOyU,EAAI0qD,EAAY,EACvBn/D,EAAOuU,EAAI2qD,EAAW,EAK1BtB,EAAGx5D,IAAI5M,MAAMoK,IAASk9D,EAAiBrqD,EAAIzU,EAAOyU,EAAlD,KACAmpD,EAAGx5D,IAAI5M,MAAMsF,KAAUgiE,EAAiBvqD,EAAIvU,EAAOuU,EAAnD,OAlLM,oCAuLN,OADWxzB,KACDuuC,WAvLJ,+BA4LN,OADWvuC,KACDqjB,MA5LJ,kCA+LIkrB,EAAUyuC,GACTh9E,KACRuuC,SAAWA,EADHvuC,KAERg9E,MAAQA,EAFAh9E,KAGRq+E,WAnMG,O,qPCKd,ICCMC,EAAS,CACbC,KAAM,CACJ,KACA,KACA,KACA,KACA,KACA,MACA,QAEFC,WDXwB,SAAC7/E,GAoQzB,OApQ+B,yB,4FAAA,qDAG3B,MAAO,qBAHoB,2BAMxB4C,GAAkB,IAAbwI,EAAa,uDAAJ,GACX8yE,EAAK78E,KACLy+E,EAAI7/E,OAEVi+E,EAAGt7E,IAAMA,EACTs7E,EAAG9yE,OAASA,EACZ8yE,EAAG6B,QAAU,GAEbD,SAAS5B,EAAG8B,WAAe,WACzB9B,EAAG+B,mBAGLjgF,EAAE,QAAQ0E,OAAV,wEAEI0G,EAAA,IAFJ,iBAGmB8yE,EAAG8B,UAHtB,kBAlB2B,wCA0B3B,IAAM9B,EAAK78E,KAELuB,EAAMs7E,EAAGt7E,IACTwI,EAAS8yE,EAAG9yE,OACZ80E,EAAUt9E,EAAIK,KAAK,eAEnB6B,EAAOsG,EAAA,QAAoBA,EAAA,QAAoB,GAC/C8oB,EAAS9oB,EAAA,OACX,CACA+0E,IAAK/0E,EAAA,OAAiB,GACtBg1E,IAAKh1E,EAAA,OAAiB,IAEtB,CACA+0E,IAAK,EACLC,IAAK,GAEHtoE,EAAQ1M,EAAA,MAAkBA,EAAA,MAAkB,KAElDlF,QAAQC,IAAO+3E,EAAG8B,UAAlB,mBAEA9B,EAAGmC,SAAWA,EAAS5+E,KAAKzB,GAE5Bk+E,EAAGn8D,IAAM,IAAI88D,OAAOC,KAAKwB,IAAIJ,EAAQ,GAAI,CACvCp7E,OACAovB,SACAqsD,mBAAmB,EACnB1sB,OAAQ/7C,IAGVomE,EAAGsC,aAAe17E,EAElBo7E,EAAQp+E,SAAS,gBAEjBo8E,EAAGuC,MAAQ,IAAIvC,EAAGmC,SAAS,CACzBt+D,IAAKm8D,EAAGn8D,IACRs8D,MAAO,CAAC,SAAU,OAClBD,SAAU,2DACV/5E,KACE,oMAMJ65E,EAAGwC,SAAW,IAAI7B,OAAOC,KAAK6B,SAE9B/9E,EAAIF,QAAQk+E,IAAOC,gBAxEQ,gCA2EnBC,EAAM11E,GACd,IAAM8yE,EAAK78E,KAEL0mC,EAAM,CACVo4C,IAAKW,EAAK,GACVV,IAAKU,EAAK,IAGNC,EAAS,IAAI7C,EAAGmC,SAAS,CAC7BzwC,SAAU7H,EACVhmB,IAAKm8D,EAAGn8D,IACRs8D,MAAO,CAAC,SAAU,OAClBh6E,oDAAqD+G,EAAA,GAArD,cAA+EA,EAAA,GAA/E,oBAA+GA,EAAA,KAA/G,eACAmzE,QAAS,WACP,IAAM37E,EAAM5C,EAAEA,UAAUoL,EAAA,IACxB8yE,EAAG8C,UAAUj5C,EAAK38B,EAAA,SAElBxI,EAAIF,QAAQk+E,IAAOK,mBAMvB,OAFA/C,EAAG6B,QAAQ5xE,KAAK4yE,GAETA,IAlGoB,gCAqGnBh5C,EAAKllC,GACb,IAAMq7E,EAAK78E,KACL6/E,EAASlhF,EAAEk+E,EAAGuC,MAAMU,UAEtBjD,EAAG9yE,OAAH,cACF8yE,EAAGn8D,IAAIq/D,UAAUr5C,GACjBm2C,EAAGn8D,IAAIs/D,QAAQ,KAIjBH,EAAOv8E,IAAI,CACT28E,QAAS,MAEXJ,EAAOn/E,YAAY,UAEnBm/E,EAAOj+E,KAAK,iCAAiCoB,KAAKxB,GAElDq+E,EAAOj+E,KAAK,gCAAgCjB,GAAG,SAAS,SAACC,GACvDA,EAAEC,iBACFg8E,EAAGqD,eAILrD,EAAGuC,MAAMe,YAAYz5C,EAAK,CAAC,SAAU,QAGrCm5C,EAAOv8E,IAAI,CACT,aAAc,QACd28E,QAAS,QAjIgB,kCAuIZthF,EADJqB,KACSo/E,MAAMU,UAEnBr/E,SAAS,UAHLT,KAIRogF,gBAJQpgF,KAMRuB,IAAIF,QAAQk+E,IAAOc,iBA5IK,8BA+IrBC,EAAMtlE,GACZ,IAAM6hE,EAAK78E,KAEX68E,EAAGwC,SAASkB,QACV,CACEC,QAASF,IAEX,SAAC1wD,EAASvqB,GACR,GAAe,OAAXA,EAOF,MAJwB,mBAAb2V,GACTA,EAAS4U,GAGJA,EAEP/qB,QAAQI,MACH43E,EAAG8B,UADR,0DAC2Et5E,QAjKtD,qCAwKdo7E,EAAQzlE,GACrB,IAAM6hE,EAAK78E,KAEX68E,EAAGwC,SAASkB,QACV,CACEx7E,SAAU27E,SAEZ,SAAC9wD,EAASvqB,GACR,GAAe,OAAXA,EAOF,MAJwB,mBAAb2V,GACTA,EAAS4U,GAGJA,EAEP/qB,QAAQI,MACH43E,EAAG8B,UADR,oEACqFt5E,QA1LhE,iCAiMlB0E,GACT,IAAM8yE,EAAK78E,KAIL2gF,GAFc52E,EAAA,QAAkB62E,SAAS,GAAGC,SAASC,YAE5C,IAAItD,OAAOC,KAAKsD,cAG/Bh3E,EAAA,QAAkB62E,SAASzzE,SAAQ,SAACuyE,GAClC,IAAMhqE,EAAKgqE,EAAOhqE,GACZ+pE,EAAOC,EAAOmB,SAASC,YACvBt/E,EAAUk+E,EAAOrxD,WAAW7sB,QAElCq7E,EAAGmE,UAAUvB,EAAM,CACjB/pE,KACAlU,UACAy/E,KAAMvB,EAAOuB,KACbC,YAAan3E,EAAA,cAGf42E,EAAO1gF,OAAO,CACZ6+E,IAAKW,EAAK,GACVV,IAAKU,EAAK,QAId5C,EAAGn8D,IAAIygE,UAAUR,EAAQ,CACvB/jE,QAAS,KAGXigE,EAAGuE,eAAiBT,EACpB9D,EAAGsC,aAAetC,EAAGn8D,IAAI2gE,YAhOE,+BAqO3B,OADWrhF,KACD0gB,MArOiB,iCA0O3B,OADW1gB,KACDo/E,QA1OiB,sCA8O3B,IAAMvC,EAAK78E,KAEP68E,EAAGuE,eACLvE,EAAGn8D,IAAIygE,UAAUtE,EAAGuE,eAAgB,CAClCxkE,QAAS,MAGPigE,EAAG6B,QAAQ,IACb7B,EAAGn8D,IAAIq/D,UAAUlD,EAAG6B,QAAQ,GAAG4C,eAGjCzE,EAAG0E,iBAzPsB,oCA8PhBvhF,KAER0gB,IAAIs/D,QAFIhgF,KAEOm/E,kBAhQS,KAAP,CAqQvBxgF,MCvPY2/E,O,oCChBf5hF,EAAOD,QAAU,CACf+kF,KAAM,YACNC,OAAQ,OACRC,UAAW,aACXlC,aAAc,iBACdI,eAAgB,mBAChBS,cAAe,kBACflhE,OAAQ,SACRzH,OAAQ,SACRiqE,kBAAmB,oBACnBC,cAAe,gBACfC,iBAAkB,cAClBC,kBAAmB,oBACnBC,mBAAoB,qBACpBC,yBAA0B,2BAC1BC,kBAAmB,oBACnBC,uBAAwB,yBACxBC,sBAAuB,gBACvBC,wBAAyB,kBACzBC,uBAAwB,iBACxBC,YAAa,0B,gxBCfE,SAAC3jF,GAEhB,IAAM8/E,EAAI7/E,OAKJyL,GAJIxL,SACIF,EAAE,QACFA,EAAE,QAEH,aACP2O,EAAWjD,EAEXk4E,EAVgB,WAYpB,WAAYjhF,I,4FAAI,SACd,IAAMu7E,EAAK78E,KACLuB,EAAM5C,EAAE2C,GACdu7E,EAAGt7E,IAAMA,EAGT,IAAIihF,EAAUjhF,EAAIsgB,QAAQ,wBAC1B2gE,EAAUA,GAAWA,EAAQzgF,OAASygF,EAAQngF,QAAU,KAExDw6E,EAAG2F,QAAUA,EAGb,IAAI97E,EAAUnF,EAAIO,KAAK,UAQvB,KANA4E,GADAA,EAAUA,GAAWA,EAAQ3E,OAAS2E,EAAU,QAG5C87E,EACEA,EAAQ5gF,KAAK,kBACb,SAEW8E,EAAQ3E,OAGvB,OAFA8C,QAAQgpB,KAAQxjB,EAAhB,8BACAxF,QAAQgpB,KAAKtsB,GAIfs7E,EAAGn2E,QAAUA,EAEb,IAAM+7E,EAAUD,GAAoBjhF,EACpCs7E,EAAG4F,QAAUA,EAGb9jF,EAAE,4BAA4BgC,GAAG,eAAe,SAACC,GAC/Ci8E,EAAG76E,UAGAy8E,EAAErnD,SACLqrD,EAAQ3/C,YAAY,CAClBV,YAAa,GACb30B,SAAU,GACVo1B,KAAM,WACJg6C,EAAG56E,QAELmhC,IAAK,WACHy5C,EAAG76E,UAKTT,EAAIZ,GAAG,eAAe,SAACC,GAChBW,EAAIO,KAAK,gBACZlB,EAAEC,iBAGAg8E,EAAG6F,UACL7F,EAAG76E,OAEH66E,EAAG56E,UAIPV,EAAIO,KAAKuI,EAAMwyE,GACf4F,EAAQhiF,SAAY4J,EAApB,WA1EkB,4CA8ElB,OAAOrK,KAAK0G,QAAQlG,SAAS,UA9EX,6BAkFPR,KACRuB,IACAsgB,QAAQ,aACRxL,IAAI,WACJnP,MAAK,SAACvK,EAAG2E,GACR,IAAMC,EAAM5C,EAAE2C,GACdC,EAAIK,KAAK,aAAalB,YAAY,QAClCa,EAAId,SAAS,WAPNT,KAUR0G,QAAQjG,SAAS,UA5FF,6BAgGlB,IACMc,EADKvB,KACI0G,QACfnF,EAAIb,YAAY,QAChBa,EAAIK,KAAK,kBAAkBlB,YAAY,QACvCa,EAAIyH,OAAO,aAAatI,YAAY,UApGlB,gCAwGlB,IAAMm8E,EAAK78E,KACLuB,EAAMs7E,EAAGt7E,IAEfs7E,EAAG4F,QAAQ/hF,YAAe2J,EAA1B,WACA1L,EAAEkK,WAAWtH,EAAK+L,GAElBuvE,EAAGt7E,IAAM,KACTs7E,EAAG2F,QAAU,KACb3F,EAAGn2E,QAAU,KACbm2E,EAAG4F,QAAU,QAjHK,0CAqHlB,OAAOziF,KAAKkH,MAAK,WAEf,IAAM3F,EAAM5C,EAAEqB,MACV8B,EAAOP,EAAIO,KAAKwL,GAEfxL,IACHA,EAAO,IAAIygF,EAAQviF,MACnBuB,EAAIO,KAAKwL,EAAUxL,WA5HL,KAmItBnD,EAAEsI,GAAGoD,GAAQk4E,EAAQz4E,iBACrBnL,EAAEsI,GAAGoD,GAAMlC,YAAco6E,EACzB5jF,EAAEsI,GAAGoD,GAAMF,WAAa,WAEtB,OADAxL,EAAEsI,GAAGoD,GAAQ1C,mBACN46E,EAAQz4E,kBAIjBnL,EAAE,yBAAyBgkF,OAAM,WAC/BhkF,EAAE,yBAAyBikF,eAI7BjkF,EAAE,4BAA4BgC,GAAG,eAAe,SAACC,GAC/CA,EAAEC,iBAEF,IACM2hF,EADM7jF,EAAEiC,EAAEwW,eACIpO,OAAO,aAG3Bw5E,EACGx5E,SACApH,KAAK,6BACLlB,YAAY,QAEX8hF,EAAQhiF,SAAS,SACnBgiF,EAAQ9hF,YAAY,QACpB8hF,EAAQ5gF,KAAK,kBAAkBlB,YAAY,UAE3C8hF,EAAQ/hF,SAAS,QACjB+hF,EAAQ5gF,KAAK,kBAAkBnB,SAAS,YAjK7B,CAsKd9B,KAtKH,I,sPCFoB,SAACA,GAEnB,IAEMkkF,EAJmB,yB,4FAAA,qDAOX7nE,GACVrc,EAAE,gBAAgBuI,MAAK,SAACvK,EAAGiE,GACzBoa,EAASre,EAAGgC,EAAEiC,SATK,6BAcrBZ,KAAK4I,UAEL5I,KAAKkH,MAAK,SAACvK,EAAGiE,GACZ,IAAM0tE,EAAK3vE,EAAEiC,GACX8U,EAAKA,WAAW/Y,EAElB2xE,EAAGvrE,KAAK,KAAM2S,GACd44D,EAAGxsE,KAAK,KAAMnF,GAEd,IACEghC,EADah/B,EAAEiC,GAAGgB,KAAK,kBACRG,OACjB,GAAK47B,EAAL,CAKA,GAAI2wC,EAAGxsE,KAAK,cAAe,CACzB,IAAMghF,EAAcnkF,EAAE,yCACtBmkF,EAAYz/E,OAAZ,qBAA0CqS,EAA1C,4CACA,IAAK,IAAI/Y,EAAI,EAAGA,EAAIghC,EAAOhhC,IACzBmmF,EAAYz/E,OAAZ,qBAA0CqS,EAA1C,oBAAoE/Y,EAApE,WAEF2xE,EAAGnI,QAAQ2c,GAITxU,EAAGxsE,KAAK,YACVwsE,EAAGnI,QAAH,kDAA+DzwD,EAA/D,+HACA44D,EAAGnI,QAAH,kDAA+DzwD,EAA/D,6HAIF44D,EAAGyU,WAEH,IAAMC,EAAiB1U,EAAG1sE,KAAK,iDAE/B0sE,EAAG3tE,GAAG,qBAAqB,WACrBqiF,EAAejhF,QACjBihF,EAAe97E,MAAK,SAACvK,EAAGiE,GACtB,IAAM0tE,EAAK3vE,EAAEiC,GACb,IACE0tE,EAAGxsE,KAAK,SAAU,IAAImhF,GAAGC,OAAOtiF,EAAG,CACjCogC,OAAQ,CACN,QAAW,WACTstC,EAAGxsE,KAAK,UAAUqhF,kBAKxB7U,EAAGxsE,KAAK,UAAUqhF,aAClB,MAAOviF,WAKf0tE,EAAG1sE,KAAK,0BAA0BjB,GAAG,SAAS,SAACC,GAC7CA,EAAEC,iBACFytE,EAAGyU,SAAS,WAGdzU,EAAG1sE,KAAK,0BAA0BjB,GAAG,SAAS,SAACC,GAC7CA,EAAEC,iBACFytE,EAAGyU,SAAS,WAIdzU,EAAGvsC,SAAS5jC,KAAK,qBAAqB,SAACyC,GACrCjC,EAAE8K,MAAM9C,QAAQo8E,SAAS,WAG3BzU,EAAGvsC,SAAS5jC,KAAK,uBAAuB,SAACyC,GACvCjC,EAAE8K,MAAM9C,QAAQo8E,SAAS,iBArFR,gCA+FrB/iF,KAAKkH,MAAK,SAACvK,EAAGiE,GACZjC,EAAEiC,GAAGmiF,SAAS,kBAhGK,KAqGzBpkF,EAAEC,QAAQ+B,GAAM4+E,IAAOiC,KAAvB,IAA+BjC,IAAOkC,QAAU,WAC9CoB,EAAWziF,UAtGK,CA0GjBzB,KA1GH,I,sPCLqB,SAACA,GAEpB,IAAM0L,EAAO,gBACPiD,EAAWjD,EAEX+4E,EALoB,WAOxB,WAAYzjF,I,4FAAS,SACnBK,KAAKkI,SAAWvI,EAChB,IAAMqK,EAAWrL,EAAEqB,KAAKkI,UACxB8B,EAASvJ,SAAY4J,EAArB,WAGA1L,EAAEC,QAAQ+B,GAAG,SAAS,SAACC,GACL,KAAZA,EAAEO,OACJ6I,EAASpI,KAAK,qCAAqC+lB,WAfjC,4CAsBtB9iB,QAAQC,IAAR,cAA0BuF,EAA1B,aAEA1L,EAAEqB,KAAKkI,UAAUxH,YAAe2J,EAAhC,WACA1L,EAAEkK,WAAW7I,KAAKkI,SAAUoF,GAC5BtN,KAAKkI,SAAW,QA1BM,0CA8BtB,OAAOlI,KAAKkH,MAAK,WAEf,IAAM8C,EAAWrL,EAAEqB,MACf8B,EAAOkI,EAASlI,KAAKwL,GAEpBxL,IACHA,EAAO,IAAIshF,EAAYpjF,MACvBgK,EAASlI,KAAKwL,EAAUxL,WArCN,KA4C1BnD,EAAEsI,GAAGoD,GAAQ+4E,EAAYt5E,iBACzBnL,EAAEsI,GAAGoD,GAAMlC,YAAci7E,EACzBzkF,EAAEsI,GAAGoD,GAAMF,WAAa,WAEtB,OADAxL,EAAEsI,GAAGoD,GAAQ1C,mBACNy7E,EAAYt5E,kBAIrBnL,SAAS0L,GAAQs4E,OAAM,WACrBhkF,SAAS0L,GAAQg5E,oBArDA,CAyDlB1kF,K,iPAzDH,I,qPCAA,IA8Be2kF,EA9BG,SAAC3kF,GACjB,IAAM4kF,EAAI1kF,SACAD,OAyBV,OA3BuB,yB,4FAAA,oDAKV1B,GACT,OAAOqmF,EAAEC,OAAO7hE,MAAM,MAAMu4C,QAAO,SAACz8D,EAAGk3B,GACrC,IAAMksC,EAAQlsC,EAAEhT,MAAM,KACtB,OAAOk/C,EAAM,KAAO3jE,EAAO49E,mBAAmBja,EAAM,IAAMpjE,IACzD,MATgB,0BAYVP,EAAMU,GAA6B,IAAtB6lF,EAAsB,uDAAf,EAAGvY,EAAY,uDAAL,IACjCwY,EAAU,IAAI12D,KAAKA,KAAKD,MAAe,MAAP02D,GAAcE,cACpDJ,EAAEC,OACGtmF,EADL,IAGI0mF,mBAAmBhmF,GAHvB,aAKI8lF,EALJ,UAOIxY,MArBe,KAAP,CA4BfvsE,G,sPCvBe,SAACA,GACjB,IAAM8/E,EAAI7/E,OAIJyL,GAHIxL,SACIF,EAAE,QAEH,YAIPklF,EATiB,yB,4FAAA,uDAWnB,IAAMhH,EAAK78E,KAIX,GAFA68E,EAAGiH,OAASnlF,EAAEA,WAAW0L,IAEpBwyE,EAAGiH,OAAO/hF,OACb,OAAO,EAGT,IAAMgiF,EAASlH,EAAGiH,OAAOliF,KAAV,2BACfi7E,EAAGiH,OAAOhiF,KAAKuI,EAAMwyE,GAEjBkH,EAAOhiF,QACTgiF,EAAOpjF,GAAG,SAAS,WACjBk8E,EAAG76E,UAIP,IAAMA,EAAOshF,EAAS9lF,IAtBR6M,iBAwBT05E,EAAOhiF,QAAWC,GAAiB,SAATA,GAC7BM,YAAW,WACTu6E,EAAG56E,SAzBK,OAPO,2BAsCT+Y,GACChb,KAER8jF,OAAOrjF,SAAV,6BAzCmB,2BA4CTua,GAGVsoE,EAASvoD,IAzCK1wB,gBAyCO,OAAQ,GAFlBrK,KAGR8jF,OAAOpjF,YAAV,+BAhDmB,KAoDvB/B,EAAE8/E,GAAG99E,GAAM4+E,IAAOiC,KAAlB,IAA0BjC,IAAOkC,QAAU,WACzCoC,EAASzjF,UAGXq+E,EAAEoF,SAAWA,EAxDG,CA2DfllF,KC5DH,MAAMqlF,EAAgB,MAMlB,MAAMz2E,EAAY,iBAGZ02E,EAAW,CAMfC,WAAY,EAMZC,cAAe,EAMfC,mBAAmB,EAMnBC,qBAAsB,wBAMtBC,YAAa,aAMbC,cAAc,EAMd9S,UAAU,GAWZ,MAAMuS,EAQJ,YAAYQ,EAASzkF,EAAU,IAK7B,GAJAC,KAAKD,QAAUikF,EAAc/jF,OAAOgkF,EAAUlkF,GAG9CC,KAAKwkF,QAAW,iBAAoBA,EAAY3lF,SAASoK,cAAcu7E,GAAWA,OAC9E,IAAuBxkF,KAAKwkF,QAC9B,MAAM,IAAIv8D,MAAM,yCAElBjoB,KAAKykF,cAAe,EACpBzkF,KAAKyiB,UAAYziB,KAAKwkF,QAAQtwB,cAG9Bl0D,KAAK0kF,YAAc,SACnB1kF,KAAKyR,UAAY,OACjBzR,KAAK2kF,QAAU,CACb9pB,WAAa,EACb+pB,aAAa,GAGf5kF,KAAK6kF,cAAe,EACpB7kF,KAAK8kF,UAAW,EAChB9kF,KAAK+kF,aAAc,EACnB/kF,KAAKglF,iBAAmB,GAGxBhlF,KAAKilF,WAAa,CAChBC,WAAY,EACZhB,WAAY,EACZiB,eAAgB,EAChBhB,cAAe,EACfiB,kBAAmB,EACnBC,cAAe,EACfC,aAAc,EACdC,aAAc,EACdC,gBAAiB,EACjBC,eAAgB,EAChBC,YAAa,EACbC,gBAAiB,GAInB,CAAC,eAAex4E,QAAU1I,IACxBzE,KAAKyE,GAAUzE,KAAKyE,GAAQtG,KAAK6B,QAInCA,KAAK4lF,aAQP,aAWE,GAVA5lF,KAAK6lF,sBAGD7lF,KAAKD,QAAQskF,uBACfrkF,KAAKykF,aAAezkF,KAAKwkF,QAAQv7E,cAAcjJ,KAAKD,QAAQskF,sBAExD,OAASrkF,KAAKykF,eAChBzkF,KAAKykF,cAAe,KAGlBzkF,KAAKykF,aAAc,CACvB,IAAI3W,EAAUjvE,SAASsc,cAAc,OAIrC,IAHA2yD,EAAQxiE,aAAa,QAAS,wBAC9BtL,KAAKwkF,QAAQvqE,YAAY6zD,GAElB9tE,KAAKwkF,QAAQxuC,YAAc83B,GAChCA,EAAQ7zD,YAAYja,KAAKwkF,QAAQxuC,YAEnCh2C,KAAKykF,aAAezkF,KAAKwkF,QAAQv7E,cAAc,yBAIjD,GAAIjJ,KAAKD,QAAQqkF,kBAAmB,CAClC,IAAI0B,EAAajnF,SAASgN,iBAAiB7L,KAAKD,QAAQqkF,mBAQxD,GAPA0B,EAAax4D,MAAM/uB,UAAUqN,MAAM9O,KAAKgpF,GAExCA,EAAW34E,QAAQ,CAACsV,EAAW3B,KACvB2B,EAAUxX,SAASjL,KAAKwkF,WAC9BxkF,KAAKyiB,UAAYA,MAGbqjE,EAAW/jF,OACf,MAAM,IAAIkmB,MAAM,mDAIhB,mBAAsBjoB,KAAKD,QAAQmkF,aACrClkF,KAAKD,QAAQmkF,WAAa3vE,SAASvU,KAAKD,QAAQmkF,aAAe,GAE7D,mBAAsBlkF,KAAKD,QAAQokF,gBACrCnkF,KAAKD,QAAQokF,cAAgB5vE,SAASvU,KAAKD,QAAQokF,gBAAkB,GAGvEnkF,KAAK+lF,mBAGL/lF,KAAKgmF,iBAGLhmF,KAAKimF,iBAGLjmF,KAAKkmF,aAGLlmF,KAAK6kF,cAAe,EAOtB,aACEjmF,OAAOswB,iBAAiB,SAAUlvB,KAAM,CAAC43D,SAAS,EAAMuuB,SAAS,IACjEvnF,OAAOswB,iBAAiB,SAAUlvB,KAAM,CAAC43D,SAAS,EAAMuuB,SAAS,IAEjEnmF,KAAKwkF,QAAQt1D,iBAAiB,SAAW3hB,EAAWvN,MAEhDA,KAAKD,QAAQwkF,cAAgB,oBAAuB6B,eACtD,IAAIA,aAAapmF,KAAKykF,aAAczkF,KAAKqmF,aACzC,IAAID,aAAapmF,KAAKyiB,UAAWziB,KAAKqmF,cAQ1C,YAAY58E,GACVzJ,KAAKsmF,aAAa78E,GAOpB,iBACE,IAAIzJ,KAAK+kF,YAAT,CACA,IAAIwB,EAAOvmF,KAAKilF,WAGhBsB,EAAKhB,aAAkBvB,EAAcwC,eAAexmF,KAAKyiB,WAAW5B,IACpE0lE,EAAKf,gBAAkBxlF,KAAKyiB,UAAU9G,aACtC4qE,EAAKE,gBAAkBF,EAAKhB,aAAegB,EAAKf,gBAGhDe,EAAKlB,cAAgBrlF,KAAKykF,aAAat5D,aACvCo7D,EAAKjB,aAAgBtlF,KAAKwkF,QAAQ1sC,YAGlCyuC,EAAKd,eAAiB7mF,OAAO0iB,YAE7BthB,KAAK0mF,6BAOP,4BACE,IAAIH,EAAOvmF,KAAKilF,WAEhBsB,EAAKI,YAAc3C,EAAcwC,eAAexmF,KAAKwkF,SAASzoE,KAE9DwqE,EAAKb,YAAiB7mF,SAASsR,gBAAgBiK,WAAavb,SAASmb,KAAKI,UAC1EmsE,EAAKK,eAAiBL,EAAKb,YAAca,EAAKd,eAC9Cc,EAAKM,aAAiBhoF,SAASsR,gBAAgB0lC,YAAch3C,SAASmb,KAAK67B,WAE3E0wC,EAAKrC,WAAgBlkF,KAAKD,QAAQmkF,WAClCqC,EAAKpC,cAAgBnkF,KAAKD,QAAQokF,cAE9B,mBAAsBoC,EAAKrC,aAC3BqC,EAAKrC,WAAa3vE,SAASgyE,EAAKrC,WAAWlkF,KAAKwkF,WAAa,GAE7D,mBAAsB+B,EAAKpC,gBAC3BoC,EAAKpC,cAAgB5vE,SAASgyE,EAAKpC,cAAcnkF,KAAKwkF,WAAa,GAEnE,iBAAmBxkF,KAAK0kF,YAEtB6B,EAAKrC,WAAaqC,EAAKpB,iBACzBoB,EAAKrB,YAAcqB,EAAKpB,eAAiBoB,EAAKrC,WAC9ClkF,KAAK8kF,UAAW,GAGT,oBAAsB9kF,KAAK0kF,aAEhC6B,EAAKpC,cAAgBoC,EAAKnB,oBAC5BmB,EAAKrB,YAAcqB,EAAKnB,kBAAoBmB,EAAKpC,cACjDnkF,KAAK8kF,UAAW,GAIpByB,EAAKpB,eAAoBoB,EAAKrC,WAC9BqC,EAAKnB,kBAAoBmB,EAAKpC,cAQhC,wBACE,OAAOnkF,KAAKilF,WAAWI,cAAgBrlF,KAAKilF,WAAWQ,eAMzD,mBACE,IAAIc,EAAOvmF,KAAKilF,WAChB,GAAIsB,EAAKZ,kBAAoBY,EAAKb,YAAlC,CAEA,IAAIoB,EAAW,SAAW9mF,KAAKyR,UAAYI,KAAK66B,IAAM76B,KAAKuP,IAGvDmlE,EAAKb,cAAgBoB,EAASP,EAAKb,YAAaa,EAAKZ,mBACvD3lF,KAAKyR,UAAY,SAAWzR,KAAKyR,UAAa,KAAO,SAUzD,eACE,IAAI80E,EAAOvmF,KAAKilF,WAAY8B,GAAY,EAExC/mF,KAAK0mF,4BAEL,IAAIM,EAAgBT,EAAKlB,cAAgBkB,EAAKhB,aAC1C0B,EAAcV,EAAKb,YAAca,EAAKrC,WACtCgD,EAAiBX,EAAKK,eAAiBL,EAAKpC,cAkDhD,MA/CI,OAASnkF,KAAKyR,UACZw1E,GAAeV,EAAKhB,cACtBgB,EAAKrB,WAAa,EAClB6B,EAAY,UAEHE,GAAeV,EAAKrB,WAAaqB,EAAKhB,cAC/CgB,EAAKrB,WAAa+B,EAAcV,EAAKhB,aACrCwB,EAAY,iBAED/mF,KAAKmnF,yBAA2BZ,EAAKhB,cAAgB0B,IAChEF,EAAY,qBAKV/mF,KAAKmnF,wBAEHZ,EAAKlB,cAAgB4B,GAAeV,EAAKE,iBAC3CF,EAAKrB,WAAaqB,EAAKE,gBAAkBO,EACzCD,EAAY,oBAEHE,GAAeV,EAAKhB,eAC7BgB,EAAKrB,WAAa+B,EAAcV,EAAKhB,aACrCwB,EAAY,gBAKVR,EAAKE,iBAAmBS,GAC1BX,EAAKrB,WAAaqB,EAAKE,gBAAkBO,EACzCD,EAAY,oBAEHC,EAAgBT,EAAKrB,YAAcgC,GAC5CX,EAAKrB,WAAagC,EAAiBF,EACnCD,EAAY,mBAEHR,EAAKhB,aAAegB,EAAKrB,YAAc+B,IAChDF,EAAY,qBAMlBR,EAAKrB,WAAarzE,KAAKuP,IAAI,EAAGmlE,EAAKrB,YACnCqB,EAAKrB,WAAarzE,KAAK66B,IAAI65C,EAAKf,gBAAiBe,EAAKrB,YAEtDqB,EAAKZ,gBAAkBY,EAAKb,YACrBqB,EAUT,UAAUA,GACR,QAAI,IAAuBA,EAA3B,CAEA,IAAItwE,EAAQ,CAACkmD,MAAO,GAAIyqB,MAAO,IAC3Bb,EAAOvmF,KAAKilF,WAEhB,OAAQ8B,GACN,IAAK,eACHtwE,EAAMkmD,MAAQ,CAACpuB,SAAU,QAAS1tB,IAAK0lE,EAAKrC,WACtCnoE,KAAMwqE,EAAKI,YAAcJ,EAAKM,aAAc5pE,MAAOspE,EAAKjB,cAC9D,MACF,IAAK,kBACH7uE,EAAMkmD,MAAQ,CAACpuB,SAAU,QAAS1tB,IAAK,OAAQ9E,KAAMwqE,EAAKI,YACpDzzB,OAAQqzB,EAAKpC,cAAelnE,MAAOspE,EAAKjB,cAC9C,MACF,IAAK,mBACL,IAAK,oBACH,IAAI+B,EAAYrnF,KAAKsnF,cAAc,EAAGf,EAAKrB,WAAa,MAGtDzuE,EAAMkmD,MADJ0qB,EACY,CAACxsB,UAAWwsB,GAEZ,CAAC94C,SAAU,WAAY1tB,IAAK0lE,EAAKrB,WAAYjoE,MAAOspE,EAAKjB,cAI7E,OAAQyB,GACN,IAAK,eACL,IAAK,kBACL,IAAK,oBACL,IAAK,mBACHtwE,EAAM2wE,MAAQ,CAAC7jF,OAAQgjF,EAAKlB,cAAe92C,SAAU,YAQzD,OAJA93B,EAAM2wE,MAAQpD,EAAc/jF,OAAO,CAACsD,OAAQ,GAAIgrC,SAAU,IAAK93B,EAAM2wE,OACrE3wE,EAAMkmD,MAAQqnB,EAAc/jF,OAAO,CAACsuC,SAAU,WAAY1tB,IAAK,GAAI9E,KAAM,GACrEm3C,OAAQ,GAAIj2C,MAAO,GAAK49C,UAAW76D,KAAKsnF,iBAAkB7wE,EAAMkmD,OAE7DlmD,GAUT,eAAemqB,GACb,IAAI5gC,KAAK+kF,YAAT,CAEAnkD,EAAQ5gC,KAAK8kF,UAAYlkD,IAAS,EAElB5gC,KAAKD,QAAQmkF,WACVlkF,KAAKD,QAAQokF,cADhC,IAGI4C,EAAY/mF,KAAKunF,eACjB9wE,EAAQzW,KAAKwnF,UAAUT,GAE3B,IAAK/mF,KAAK0kF,aAAeqC,GAAanmD,IAAUmmD,EAAW,CACzD,IAAIU,EAAa,SAAWV,EAAU3hE,cAAczf,QAAQ,YAAa,IAAM4H,EAC/Ey2E,EAAc0D,aAAa1nF,KAAKwkF,QAASiD,GAErC,WAAaV,EACf/C,EAActjF,YAAYV,KAAKwkF,QAASxkF,KAAKD,QAAQukF,aAErDN,EAAcvjF,SAAST,KAAKwkF,QAASxkF,KAAKD,QAAQukF,aAEpD,IAAK,IAAIpmF,KAAOuY,EAAM2wE,MAAO,CACM3wE,EAAM2wE,MAAMlpF,GAC7C8B,KAAKwkF,QAAQ/tE,MAAMvY,GAAOuY,EAAM2wE,MAAMlpF,GAGxC,IAAK,IAAIA,KAAOuY,EAAMkmD,MAAO,CAC3B,IAAIgrB,EAAS,iBAAoBlxE,EAAMkmD,MAAMz+D,GAAQ,KAAO,GAC5D8B,KAAKykF,aAAahuE,MAAMvY,GAAOuY,EAAMkmD,MAAMz+D,GAAOypF,EAGpD,IAAIC,EAAe,WAAYb,EAAU3hE,cAAczf,QAAQ,YAAa,IAAM4H,EAClFy2E,EAAc0D,aAAa1nF,KAAKwkF,QAASoD,QAErC5nF,KAAK6kF,eAAe7kF,KAAKykF,aAAahuE,MAAMsF,KAAOtF,EAAMkmD,MAAM5gD,MAGrE/b,KAAK0kF,YAAcqC,GAOrB,mBAEMnoF,OAAOqd,YAAcjc,KAAKD,QAAQ0xE,UACpCzxE,KAAK+kF,aAAc,EACnB/kF,KAAK0kF,YAAc,SAEnB1kF,KAAKwkF,QAAQrqE,gBAAgB,SAC7B6pE,EAActjF,YAAYV,KAAKwkF,QAASxkF,KAAKD,QAAQukF,aACrDtkF,KAAKykF,aAAatqE,gBAAgB,UAElCna,KAAK+kF,aAAc,EASvB,aAAat7E,EAAQ,IACfzJ,KAAK6nF,WACT7nF,KAAK6nF,UAAW,EAEhB,CAAE71D,IAEAgsC,sBAAsB,KACpB,OAAQhsC,GAGN,IAAK,SACHhyB,KAAK0mF,4BACL1mF,KAAK8nF,mBACL9nF,KAAKimF,iBACL,MAIF,IAAK,SACL,QACEjmF,KAAK+lF,mBACL/lF,KAAKgmF,iBACLhmF,KAAKimF,gBAAe,GAGxBjmF,KAAK6nF,UAAW,KArBpB,CAuBGp+E,EAAMqB,OAOX,sBACE,IAAI65E,EAAU3kF,KAAK2kF,QAEnBA,EAAQ9pB,UAAYmpB,EAAc+D,mBAClCpD,EAAQC,YAAcZ,EAAc+D,kBAAiB,GAWvD,cAAcr0D,EAAI,EAAGF,EAAI,EAAGw0D,EAAI,GAC9B,OAAIhoF,KAAK2kF,QAAQC,YAAqB,eAAiBlxD,EAAG,KAAMF,EAAG,KAAMw0D,EAAG,MACnEhoF,KAAK2kF,QAAQ0C,WAAmB,aAAc3zD,EAAG,KAAMF,EAAG,IAQrE,UACE50B,OAAOwwB,oBAAoB,SAAUpvB,KAAM,CAACioF,SAAS,IACrDrpF,OAAOwwB,oBAAoB,SAAUpvB,KAAM,CAACioF,SAAS,IAErDjoF,KAAKwkF,QAAQx5E,UAAUnB,OAAO7J,KAAKD,QAAQukF,aAC3CtkF,KAAKwkF,QAAQ/tE,MAAMyxE,UAAY,GAE/BloF,KAAKwkF,QAAQp1D,oBAAoB,SAAW7hB,EAAWvN,MAEvD,IAAImoF,EAAa,CAACxrB,MAAO,GAAIyqB,MAAO,IAEpCe,EAAWxrB,MAAQ,CAACpuB,SAAU,GAAI1tB,IAAK,GAAI9E,KAAM,GAAIm3C,OAAQ,GAAIj2C,MAAO,GAAK49C,UAAW,IACxFstB,EAAWf,MAAQ,CAAC7jF,OAAQ,GAAIgrC,SAAU,IAE1C,IAAK,IAAIrwC,KAAOiqF,EAAWf,MACzBpnF,KAAKwkF,QAAQ/tE,MAAMvY,GAAOiqF,EAAWf,MAAMlpF,GAE7C,IAAK,IAAIA,KAAOiqF,EAAWxrB,MACzB38D,KAAKykF,aAAahuE,MAAMvY,GAAOiqF,EAAWxrB,MAAMz+D,GAE9C8B,KAAKD,QAAQwkF,cAAgB,oBAAuB6B,eACtDA,aAAax8E,OAAO5J,KAAKykF,aAAczkF,KAAKqmF,aAC5CD,aAAax8E,OAAO5J,KAAKyiB,UAAWziB,KAAKqmF,cAW7C,wBAAwBzB,GACtB,IAAI/0C,GAAS,EACTvxC,EAAW,EAAgB,cAAgB,YAC3C8pF,EAAQ9pF,EAASy0C,OAAO,GAAGzgC,cAAgBhU,EAASsN,MAAM,GAG1D6K,EADU5X,SAASsc,cAAc,WACjB1E,MAQpB,OANCnY,EAAW,IAJG,CAAC,SAAU,MAAO,IAAK,MAIX0gB,KAAKopE,EAAQ,KAAOA,GAAOzmE,MAAM,KAAKxU,SAAQ,SAAS7O,EAAU3B,GAC1F,QAAwB8vB,IAApBhW,EAAMnY,GAER,OADAuxC,EAASvxC,GACF,KAGJuxC,EAUT,oBAAoBlwC,EAASu6C,EAAWp4C,GACtC,IACE,IAAI2H,EAAQ,IAAIywE,YAAYhgC,EAAW,CAAC8/B,OAAQl4E,IAChD,MAAMlB,IACF6I,EAAQ5K,SAASqiC,YAAY,gBAC3B+4C,gBAAgB//B,GAAW,GAAM,EAAMp4C,GAE/CnC,EAAQ0hC,cAAc53B,GAQxB,cAAc1K,EAAUgB,GACtB,IAAI6vB,EAAU,GACd,IAAK,IAAI1xB,KAAOa,OACV,IAAuBgB,EAAQ7B,GAAO0xB,EAAQ1xB,GAAO6B,EAAQ7B,GAC5D0xB,EAAQ1xB,GAAOa,EAASb,GAE/B,OAAO0xB,EAOT,sBAAsBjwB,GACpB,IAAIkwC,EAAS,CAAC9zB,KAAM,EAAG8E,IAAK,GAE5B,EAAE,CACA,IAAIm6D,EAAYr7E,EAAQq7E,UACpBqN,EAAa1oF,EAAQ0oF,WAEnB77C,MAAMwuC,KACVnrC,EAAOhvB,KAAOm6D,GAEVxuC,MAAM67C,KACVx4C,EAAO9zB,MAAQssE,GAEjB1oF,EAAY,SAAWA,EAAQwL,QACnBxL,EAAQu0D,cAAgBv0D,EAAQ8xD,mBACtC9xD,GACR,OAAOkwC,EAST,gBAAgBlwC,EAASyb,GACjB4oE,EAAcxjF,SAASb,EAASyb,KAChCzb,EAAQqL,UACVrL,EAAQqL,UAAUe,IAAIqP,GAEtBzb,EAAQyb,WAAa,IAAMA,GAUjC,mBAAmBzb,EAASyb,GACtB4oE,EAAcxjF,SAASb,EAASyb,KAC9Bzb,EAAQqL,UACVrL,EAAQqL,UAAUnB,OAAOuR,GAEzBzb,EAAQyb,UAAYzb,EAAQyb,UAAUzV,QAAQ,IAAI4X,OAAO,UAAYnC,EAAUuG,MAAM,KAAK3C,KAAK,KAAO,UAAW,MAAO,MAU9H,gBAAgBrf,EAASyb,GACvB,OAAIzb,EAAQqL,UACHrL,EAAQqL,UAAUC,SAASmQ,GAE3B,IAAImC,OAAO,QAAUnC,EAAY,QAAS,MAAM1P,KAAK/L,EAAQyb,YAI1E,OAAO4oE,GA9qBW,GAirBL,QAIfplF,OAAOolF,cAAgBA,E,0PCtrBN,SAACrlF,GACRE,SAAV,IACM4/E,EAAI7/E,OACJ0pF,EAAQ3pF,EAAE,aACV0L,EAAO,YAGPk+E,EAPkB,yB,4FAAA,uDAYpB,GAHWvoF,KACR4I,UAEEjK,EAAEA,gBAAiBoD,OAAxB,CAIA8C,QAAQC,IAAR,iBAA6BuF,GAE7B,IAAMm+E,EAAS,IAAIxE,EAAJ,eAAmC,CAChDK,6CAGFiE,EAAM3nF,GAAM4+E,IAAOpgE,OAAnB,IAA6BogE,IAAO7nE,QAAU,SAAC9W,GAC7C4nF,EAAOlC,aAAa1lF,SAvBF,gCA4BpBiE,QAAQC,IAAR,eAA2BuF,OA5BP,KAgCxB1L,EAAE8/E,GAAG99E,GAAM4+E,IAAOiC,KAAlB,IAA0BjC,IAAOkC,QAAU,WACzC8G,EAAUnoF,UAGZq+E,EAAE8J,UAAY,IAAIA,EApCD,CAuChB5pF,GAvCH,I,gRCHA,IAce8pF,EAdI,SAAC9pF,GAWlB,OAXwB,yB,4FAAA,qDAEVqc,GACVrc,EAAE,gBAAgBsD,KAAK,EAAG+Y,KAHN,2BAMVA,GACVrc,EAAE,gBAAgBqD,KAAK,OAAQgZ,OAPX,KAAP,CAYhBrc,K,icCRH,IA+Pe+pF,EA/PC,SAAC/pF,GAEf,IAAMgqF,EAAI/pF,OACJ2kF,EAAI1kF,SACJ+pF,EAAQjqF,EAAE,QACV2pF,EAAQ3pF,EAAE,QAEV0L,EAAO,WACPiD,EAAWjD,EAEXq+E,EAVe,WAYnB,WAAY/oF,I,4FAAS,SACnBK,KAAKkI,SAAWvI,EAChB,IAAMqK,EAAWrL,EAAEqB,KAAKkI,UACxB8B,EAASvJ,SAAY4J,EAArB,WAEAL,EAAS7L,KAAK,SAAS,SAASyC,GAC9BA,EAAEC,iBAEF,IAAMR,EAAQ1B,EAAEqB,MAEhBrB,EAAE,SAASuI,MAAK,WACd,IAAM7G,EAAQ1B,EAAEqB,MAChBK,EAAMK,YAAY,UAClBL,EAAMwhB,QAAQ,aAAanhB,YAAY,aAGzCL,EAAMI,SAAS,WAEfioF,EAAOnnB,KAAKlhE,EAAM0C,KAAK,SAAS,WAC9B1C,EAAMK,YAAY,WAClBL,EAAMwhB,QAAQ,aAAaphB,SAAS,UACpCJ,EAAMI,SAAS,gBAjCF,4CA+LA9B,EAAEqB,KAAKkI,UAEfxH,YAAe2J,EAAxB,WACA1L,EAAEkK,WAAW7I,KAAKkI,SAAUoF,GAC5BtN,KAAKkI,SAAW,QAnMC,4BAuCP3D,EAAKyW,GAEf6tE,EAAQ5mF,MAAK,WACXqmF,EAAM5nF,YAAY,aAIpBioF,EAAEG,OAAOC,eAAexkF,GAExB,IAAMykF,EAAmBL,EAAEM,WAAF,KAAuBN,EAAEM,WAAF,SAAyBhlF,UAAU,GAC/E+kF,IAAqBL,EAAE5jF,SAASjC,MAClC6lF,EAAE5iF,QAAQC,UAAU,CAClB5B,MAAM,EACN6B,KAAM+iF,GACLnqF,SAAS2G,MAAOwjF,GAGrBrqF,EAAEyF,KAAK,CACLC,MAAM,EACNC,OAAO,EACPC,MACAC,SAAU,OACVC,OAAQ,MACRC,OAAO,EACPO,MAPK,SAOCC,GACJL,QAAQgpB,KAAR,yBAAsC3oB,EAAMC,YAC5CwjF,EAAE5jF,SAASjC,KAAOyB,EAGE,mBAATokF,EAAE/kF,IACX+kF,EAAE/kF,GAAG,OAAQ,QAAS,QAAS,aAAcsB,EAAMC,aAGvDC,QAhBK,SAgBGtD,EAAMuD,EAAQH,GACpBwjF,EAAOhqD,QAAQ58B,EAAMoD,EAAO8V,GAGR,mBAAT2tE,EAAE/kF,KACX+kF,EAAE/kF,GAAG,MAAO,CACVqC,KAAM0iF,EAAEM,WAAF,SAA2BN,EAAEM,WAAF,KACjCzjF,MAAON,EAAMO,kBAAkB,aAEjCkjF,EAAE/kF,GAAG,OAAQ,kBAjFF,8BAuFJ9B,EAAMoD,EAAO8V,GAAU,WAC9B1X,EAAM4B,EAAMO,kBAAkB,iBAAiBkc,MAAM,MAAQ,GAC7DunE,EAAKhkF,EAAMO,kBAAkB,gBAAgBkc,MAAM,MAAQ,GAGjE,GAA6B,WAAzB,EAAO7f,EAAKqnF,SACd,IAAK,IAAMjrF,KAAO4D,EAAKqnF,QACa,iBAAvBrnF,EAAKqnF,QAAQjrF,IACtBwqF,EAAOU,cAActnF,EAAKqnF,QAAQjrF,GAAMA,GAM9CS,EAAE,yBAAyBuI,MAAK,WAC9B,IAAMvK,EAAI2G,EAAIoC,QAAQ/G,EAAEqB,MAAM+C,KAAK,SAC/BpG,GAAK,EACP2G,EAAIi0B,OAAO56B,EAAG,GACJ2rF,EAAMxmF,KAAK,oBACrB+C,QAAQC,IAAR,cAA4BnG,EAAEqB,MAAM+C,KAAK,SACzCpE,EAAEqB,MAAM6J,aAIZlL,EAAE,kCAAkCuI,MAAK,WACvC,IAAMvK,EAAIusF,EAAGxjF,QAAQ/G,EAAEqB,MAAM+C,KAAK,QAC9BpG,GAAK,EACPusF,EAAG3xD,OAAO56B,EAAG,GACH2rF,EAAMxmF,KAAK,oBACrB+C,QAAQC,IAAR,cAA4BnG,EAAEqB,MAAM+C,KAAK,QACzCpE,EAAEqB,MAAM6J,aAKZ7J,KAAKqpF,QAAQ/lF,GAAK6C,MAAK,WACrB,IAAMmjF,EAAQ3qF,EAAE,QAChB2E,EAAI6J,SAAQ,SAAC7L,GACXgoF,EAAMjmF,OAAN,gDAA6D/B,EAA7D,WAIF,EAAK+nF,QAAQH,EAAI,UAAU/iF,MAAK,WAS9B,GAPA+iF,EAAG/7E,SAAQ,SAAC7L,GACVgnF,EAAMjlF,OAAN,uDAAoE/B,EAApE,mBAGFuD,QAAQC,IAAI,uBAGgB,WAAxB,EAAOhD,EAAKk/B,QACd,IAAK,IAAMkZ,KAAap4C,EAAKk/B,OAC3BriC,EAAE4kF,GAAGliF,QAAQ64C,EAAW,CAACp4C,EAAKk/B,OAAOkZ,UAIjB,IAAbl/B,GACTA,IAGFrc,EAAEgqF,GAAGtnF,QAAQk+E,IAAOiC,cApJP,8BAyJJ+H,GAA0D,IAAnDz+E,EAAmD,uDAA5C,OAAQpG,IAAoC,yDAAtB8kF,EAAsB,wDACvE,IAAKD,EAAMxnF,OACT,OAAOpD,EAAE8qF,WAAWl9D,UAAUm9D,UAGhC,IAAMC,EAAO,GAmBb,OAlBAJ,EAAMp8E,SAAQ,SAAC5I,EAAK5H,GAClB,IAAMitF,EAAMjrF,EAAE8qF,WAEd9qF,EAAEyF,KAAK,CACLI,SAAUsG,EACVpG,QACAH,QACCslF,QAAO,WACRD,EAAIr9D,UACAi9D,GACFA,EAAa7sF,EAAG4H,MAIpBolF,EAAK78E,KAAK88E,MAILjrF,EAAEmrF,KAAF,MAAAnrF,EAAUgrF,KAjLA,oCAoLE3mF,EAAM9E,GACzB,IAAM6rF,EAAUprF,EAAEA,sBAAsBT,EAAxB,MAEZ6rF,EAAQhoF,OACVgoF,EAAQljF,QAAQxD,OAAOL,GAEvB6B,QAAQgpB,KAAK,0CA1LE,yCAuMjB,OAAO7tB,KAAKkH,MAAK,WAEf,IAAM8C,EAAWrL,EAAEqB,MACf8B,EAAOkI,EAASlI,KAAKwL,GAEpBxL,IACHA,EAAO,IAAI4mF,EAAO1oF,MAClBgK,EAASlI,KAAKwL,EAAUxL,WA9MX,KA4PrB,OAvCAnD,EAAEsI,GAAGoD,GAAQq+E,EAAO5+E,iBACpBnL,EAAEsI,GAAGoD,GAAMlC,YAAcugF,EACzB/pF,EAAEsI,GAAGoD,GAAMF,WAAa,WAEtB,OADAxL,EAAEsI,GAAGoD,GAAQ1C,mBACN+gF,EAAO5+E,kBAIhBnL,EAAE,SAASgkF,OAAM,WACfhkF,EAAE,SAASqrF,cAIbrrF,EAAE4kF,GAAG5iF,GAAG,iBAAiB,SAACC,EAAGkB,GAC3ByhF,EAAE/9E,MAAQ1D,EAAKmoF,MAEfrB,EAAM7lF,KAAK,QAAS,IAChBjB,EAAKkG,WACP4gF,EAAMnoF,SAASqB,EAAKkG,cAMxB2gF,EAAEuB,WAAa,SAASzgF,GACtB,IAAM0gF,EAAgBxrF,EAAEA,YAAc4kF,EAAEx+E,SAAlB,MAEF,OAAhB0E,EAAM8yB,OAAkB9yB,EAAM8yB,MAAMn4B,MACtCS,QAAQC,IAAI,uBACZ4jF,EAAOnnB,KAAK93D,EAAM8yB,MAAMt2B,OACfkkF,EAAcpoF,QAAUooF,EAAc3pF,SAAS,SACxDqE,QAAQC,IAAI,sBACZqlF,EAAc9oF,QAAQ,WAEtBwD,QAAQC,IAAI,iBACZ6jF,EAAE5jF,SAASjC,KAAOygF,EAAEx+E,WAIjB2jF,EA5PO,CA6Pb/pF,K,2WChQH,IAiKeyrF,EAjKM,SAACzrF,GAEpB,IAAM0L,EAAO,gBACPiD,EAAWjD,EACXu+E,EAAQjqF,EAAE,cAEVyrF,EANoB,WAQxB,WAAY9oF,I,4FAAI,SACd,IAAMu7E,EAAK78E,KA8BX,OA5BA68E,EAAGt7E,IAAM5C,EAAE2C,GACXu7E,EAAGwN,OAAQ,EAEXxN,EAAGt7E,IAAIO,KAAKwL,EAAUuvE,GAGtBA,EAAGyN,KAAO,CACR,IAAOzN,EAAGt7E,IAAImtB,MACd,QAAWmuD,EAAGt7E,IAAIwP,GAAG,aAIvB8rE,EAAGt7E,IAAIsgB,QAAQ,cAAcxL,IAAI,UAAU3V,YAAY,YACvDm8E,EAAG0N,UAAY1N,EAAGt7E,IAAIsgB,QAAQ,mBAAmBxL,IAAI,cAAchU,QAC/Dw6E,EAAG0N,UAAUxoF,SACf86E,EAAGt7E,IAAIb,YAAY,YAEnBm8E,EAAG0N,UAAU5pF,GAAG,oBAAoB,SAACC,GACnCi8E,EAAG56E,UAGL46E,EAAG0N,UAAU5pF,GAAG,sBAAsB,SAACC,GACrCi8E,EAAG76E,WAIP66E,EAAGt7E,IAAId,SAAY4J,EAAnB,WAEOwyE,EAvCe,4CA4CtB,IACMt7E,EADKvB,KACIuB,IAEfA,EAAIb,YAAe2J,EAAnB,WACA1L,EAAEkK,WAAWtH,EAAI,GAAI+L,KAhDC,6BAoDtB,IACM/L,EADKvB,KACIuB,IADJvB,KAGRwqF,UAHQxqF,KAIRqqF,OAAQ,EAUX9oF,EAAIF,QAAJ,SAAuBgJ,KAlED,6BAsEtB,IACM9I,EADKvB,KACIuB,IADJvB,KAGRyqF,OAHQzqF,KAIRqqF,OAAQ,EAWX9oF,EAAIF,QAAJ,UAAwBgJ,KArFF,6BAyFtB,IACM9I,EADKvB,KACIuB,IADJvB,KAGRsqF,KAAO,CACR,KAAQ/oF,EAAIwB,KAAK,QACjB,IAAOxB,EAAImtB,MACX,QAAWntB,EAAIwP,GAAG,aAGpBxP,EAAImtB,IAAI,IACRntB,EAAIwuB,KAAK,WAAW,KAnGE,gCAuGtB,IACMxuB,EADKvB,KACIuB,IACTwJ,EAFK/K,KAEQsqF,KAAH,QAEhB/oF,EAAImtB,IAJO1uB,KAIAsqF,KAAH,KACR/oF,EAAIwuB,KAAK,UAAWhlB,KA5GE,iCA+Gb2/E,GAAmC,IAA9B5/E,EAA8B,uDAAvB,KAAM+wE,IAAiB,yDACtCgB,EAAK78E,KACL2qF,EAAS9N,EAAGt7E,IAAI2H,QAAQ,UAQ9B,GALAyhF,EAAOlqF,SAAS,eACZiqF,GACFC,EAAOtnF,OAAP,6BAA6CyH,EAA7C,KAA0D4/E,EAA1D,UAGE7O,EAAU,CACZ,IAAMn1C,EAAMikD,EAAO1rE,SAAS4B,IAC5B8pE,EAAOv/E,QACPw9E,EAAMxuE,UAAUssB,EAAM,QA5HF,uCAiItB,IACMikD,EADK3qF,KACOuB,IAAI2H,QAAQ,UAE9ByhF,EAAOjqF,YAAY,eACnBiqF,EAAO/oF,KAAK,YAAYiI,YArIF,0CAyItB,OAAO7J,KAAKkH,MAAK,WAEf,IAAM3F,EAAM5C,EAAEqB,MACV8B,EAAOP,EAAIO,KAAKwL,GAEfxL,IACHA,EAAO,IAAIsoF,EAAYpqF,MACvBuB,EAAIO,KAAKwL,EAAUxL,WAhJD,KA8J1B,OAPAnD,EAAEsI,GAAGoD,GAAQ+/E,EAAYtgF,iBACzBnL,EAAEsI,GAAGoD,GAAMlC,YAAciiF,EACzBzrF,EAAEsI,GAAGoD,GAAMF,WAAa,WAEtB,OADAxL,EAAEsI,GAAGoD,GAAQ1C,mBACNyiF,EAAYtgF,kBAGdsgF,EA9JY,CA+JlBzrF,K,sPCtJiB,SAACA,GAEnB,IAAM0L,EAAO,eACPiD,EAAWjD,EAEXo0E,GADQ9/E,EAAE,cACNC,QAGJgsF,GAFI/rF,SANe,WAUvB,WAAYyC,I,4FAAI,SACd,IACMC,EAAM5C,EAAE2C,GADHtB,KAGR6qF,IAAMvpF,EACTC,EAAIO,KAAKwL,EAAUtN,MAEnBrB,EAAE,oBAAoB8zC,YAEtB,IAAMq4C,EAAUvpF,EAAIK,KAAK29E,IAAO+C,aAEhCwI,EAAQ5jF,MAAK,SAACvK,EAAG2E,GAEf,IAAI8oF,EAAY9oF,MAGlB,IAAMypF,EAAgBxpF,EAAIK,KAAK,0BACzBopF,EAAgBzpF,EAAIK,KAAK,uBAE/BmpF,EAAc7jF,MAAK,SAACvK,EAAG2E,GACrB3C,EAAE2C,GAAI+8D,aAGRysB,EAAQ5jF,MAAK,SAACtG,EAAGU,GACf,IAAMC,EAAM5C,EAAE2C,IAEVC,EAAIf,SAAS,aAAee,EAAIwB,KAAK,mBACvCxB,EAAI2H,QAAQ,UAAUzI,SAAS,eAInCuqF,EAAc9jF,MAAK,SAACtG,EAAGU,GACrB,IAAMC,EAAM5C,EAAE2C,GAEVC,EAAIwP,GAAG,aACTxP,EAAIsgB,QAAQ,UAAUphB,SAAS,cAInCuqF,EAAcrqF,GAAG,UAAU,SAACC,GAC1B,IAAMW,EAAM5C,EAAEiC,EAAEwW,eACVorE,EAAUjhF,EAAIsgB,QAAQ,UAE5B2gE,EAAQyI,SAAS,UAAU/jF,MAAK,SAACvK,EAAG2E,GAClC,IAAMC,EAAM5C,EAAE2C,GAETC,EAAIK,KAAK,SAASmP,GAAG,aACxBxP,EAAIb,YAAY,cAIhBa,EAAIwP,GAAG,aACTyxE,EAAQ/hF,SAAS,cAIrBc,EAAIZ,GAAG,UAAU,SAACC,GAChB6nF,EAAUxmF,UAGZV,EAAId,SAAY4J,EAAhB,WACA9I,EAAIF,QAAQk+E,IAAOsC,kBAvEE,4CA4ErB,IAAMtgF,EAAM5C,EAAEqB,KAAK6qF,KAEGtpF,EAAIK,KAAK,0BACjBsF,MAAK,SAACvK,EAAG2E,GACrB3C,EAAE2C,GAAI+8D,QAAQ,cAGhB98D,EAAIb,YAAe2J,EAAnB,WACA1L,EAAEkK,WAAW7I,KAAK6qF,IAAKv9E,GACvBtN,KAAK6qF,IAAM,QArFU,0CAwFG,WACxB,OAAO7qF,KAAKkH,MAAK,WAEf,IAAM3F,EAAM5C,EAAE,GACVmD,EAAOP,EAAIO,KAAKwL,GAEfxL,IACHA,EAAO,IAAI8oF,EAAW,GACtBrpF,EAAIO,KAAKwL,EAAUxL,WAhGF,MAuGzBnD,EAAEsI,GAAGoD,GAAQugF,EAAW9gF,iBACxBnL,EAAEsI,GAAGoD,GAAMlC,YAAcyiF,EACzBjsF,EAAEsI,GAAGoD,GAAMF,WAAa,WAEtB,OADAxL,EAAEsI,GAAGoD,GAAQ1C,mBACNijF,EAAW9gF,kBAQpBnL,EAAE8/E,GAAG99E,GAAM4+E,IAAOiC,KAAlB,IAA0BjC,IAAOkC,QAAU,WAJzC9iF,EAAE,QAAQusF,kBA/GM,CAwHjBvsF,KAxHH,I,sUCGA,IAAMo9E,EAAeoP,M,GAEL,SAACxsF,GAEf,IAAM8/E,EAAI7/E,OACJ2kF,EAAI1kF,SACJypF,EAAQ3pF,EAAE,QAOVysF,EAAezsF,EAAE,gBACjB0sF,EAAmB1sF,EAAE,oBAQ3B4kF,EAAEr0D,iBAH4B,oBAGY,WAJvB,WAKbq0D,EAAElyE,iBACJxM,QAAQC,IAAI,eACZwjF,EAAM7nF,SAAS,aACf6nF,EAAMjnF,QAAQ,eAEdwD,QAAQC,IAAI,gBACZwjF,EAAM5nF,YAAY,aAClB4nF,EAAMjnF,QAAQ,kBAKlB,IAAMiqF,EAAqB,WACpBl7E,UAAUm7E,QAKb1mF,QAAQC,IAAI,eACZwjF,EAAM5nF,YAAY,cAClB4nF,EAAMjnF,QAAQ,YANdwD,QAAQC,IAAI,gBACZwjF,EAAM7nF,SAAS,cACf6nF,EAAMjnF,QAAQ,kBAQc,IAArB+O,UAAUm7E,SACnB9M,EAAEvvD,iBACA,WACA,WACEo8D,OAEF,GAGF7M,EAAEvvD,iBACA,UACA,WACEo8D,OAEF,GAGF7M,EAAEvvD,iBAAiB,QAAQ,WACzBo8D,QAKJ,IAYME,EAAep6E,aAAY,WAC3Bk3E,EAAM9nF,SAAS,eAInB7B,EAAEyF,KAAK,CACLC,MAAM,EACNC,OAAO,EACPI,OAAO,EACPH,IAAK,iBACL25D,QAAQ,EACRpzD,KAAM,OACNyX,SAPK,SAOIzgB,EAAM2pF,GACM,YAAfA,GACFt6E,cAAcq6E,GAEdlD,EAAM7nF,SAAS,eAGf6nF,EAAM5nF,YAAY,mBAIvB,KAEH+9E,EAAEwK,WAAa,CACb76D,KAAMzvB,EAAE,QAAQoE,KAAK,QACrB2oF,SAAU,IACVl2B,KAAM,IA5Ga,IA+GfszB,EA/Ge,yB,4FAAA,uDAmHjB9oF,KAAK4I,UAEL/D,QAAQC,IAAR,wBAGA9E,KAAK+oF,iBAGD,WAAYtK,GACd9/E,EAAE,aAAa8B,SAAS,qBAG1BT,KAAK2rF,aAGL3rF,KAAK4rF,4BAGLjtF,EAAE,gCAAgCoE,KAAK,SAAU,UA0BjDpE,EAAE,gBAAgBgC,GAAG,SAAS,SAACC,GAC7BA,EAAEC,iBACF,IA7FYQ,EAASyH,EA6FfxH,EAAKV,EAAEwW,cACP7V,EAAM5C,EAAEiC,EAAEwW,eA9FJ/V,EAgGHC,EAhGYwH,EAgGRvH,EAAIwB,KAAK,eA/F1Bg5E,EAAaI,cAAcoH,EAAEt6E,cAAcH,GAAWzH,EAAS,CAC7Dk5E,MAAO,IACPt7D,QAAS,QAiGLtgB,EAAE,kBAAkBoD,QACtBpD,EAAEktF,UACA,wDACA,WACE,IAAMC,EAAQ,GAEdntF,EAAE,kBAAkBuI,MAAK,SAACvK,EAAG2E,GAC3BwqF,EAAMnvF,GAAKgC,EAAE2C,GAAIyB,KAAK,mBAGxB07E,EAAEsN,QAAQxqB,KAAK,CACbic,OAAQ,CACNwO,SAAUF,QAQpBntF,EAAE,qBAAqBgC,GAAG,SAAS,SAACC,GAClC,IAAMW,EAAM5C,EAAEiC,EAAEwW,eACV1Q,EAAU/H,EAAE4C,EAAIO,KAAK,eAEtB4E,EAAQ3E,SAIb2E,EAAQQ,MAAK,SAACvK,EAAGsvF,GACf,IAAMC,EAAYvtF,EAAEstF,GACdre,EAAMse,EAAUn8D,KAAK,WAAW3K,cAE1B,UAARwoD,GAA2B,WAARA,EACrBse,EAAUx9D,IAAIntB,EAAIO,KAAK,YACboqF,EAAU1rF,SAAS,UAC7B0rF,EAAU9lF,KAAK7E,EAAIO,KAAK,eAI5BP,EAAIF,QAAQk+E,IAAOoC,mBACnBj7E,EAAQwC,QAAQ,QAAQ7H,QAAQk+E,IAAOoC,uBAIzCkH,EAAQ7mF,MAAK,WACXsmF,EAAM7nF,SAAS,aAIbg+E,EAAEwK,WAAF,KAAqBvjF,QAAQ,cAAgB,GAC/C+4E,EAAE0N,QAGJ7D,EAAMxmF,KAvNG,SAuNQ9B,QA7NA,kDAiOjB,IAAMuB,EAAM5C,EAAE,gCACRytF,EAAOA,GAAPA,O,sHAAAA,CAAWC,IAAO9N,OAExB+J,EAAMjlF,OAAO9B,GACb,IAAI+qF,EAASF,EAAK5gD,QALe,uBAOjC,YAAkB4gD,EAAK3mD,UAAvB,+CAAkC,KAAvB8mD,EAAuB,QAEhC,GADAhrF,EAAId,SAAJ,KAAkB8rF,EAAlB,SACIhrF,EAAIwP,GAAG,WAAY,CACrBu7E,EAASC,EACT,QAX6B,6EAmBjC,OAJAhrF,EAAIsI,SACJy+E,EAAM5nF,YAAY0rF,GAClB9D,EAAM7nF,SAAS6rF,GAERA,IAnPU,qCAsPG/nF,GACpB,IAAIQ,EAAWR,GAAOk6E,EAAE15E,SAASjC,KAE3B0yD,GADNzwD,EAAWA,EAASY,QAAQ84E,EAAEwK,WAAF,KAAsB,MAC5BvjF,QAAQ,KAE9B+4E,EAAEwK,WAAWyC,SAAW3mF,EAAS4c,MAAM,KAAK,GAC5C88D,EAAEwK,WAAWzzB,KACXA,GAAQ,EAAIzwD,EAAS23C,OAAO33C,EAASW,QAAQ,MAAQ,KA7PtC,4BAiQNglF,EAAK8B,GAChBnB,EAAiBoB,QAAQ,QAEzBpB,EAAiBroF,KAAjB,mDACqDwpF,EADrD,sDAC8G9B,EAD9G,gBAGAW,EAAiBzpF,KAAK,eAAe8qF,QAErCrB,EAAiBzpF,KAAK,gCAAgC+lB,OAAM,WAC1D0jE,EAAiBoB,QAAQ,QAAQ,WAC/BpB,EAAiBzpF,KAAK,eAAe8qF,MAAM,eAI/CrB,EAAiBsB,OAAO,QAEpBvB,EAAarpF,QACfqpF,EAAa,GAAGwB,OAGlBjuF,EAAE8/E,GAAGp9E,QAAQ,oBArRI,kCA0Re,IAA5BgqF,EAAiBtpF,QACnBspF,EAAiBoB,QAAQ,QAAQ,WAC/BpB,EAAiBzpF,KAAK,UAAU8qF,MAAM,YAItCtB,EAAarpF,aAA0C,IAAzBqpF,EAAa,GAAGzqD,MAChDyqD,EAAa,GAAGzqD,OAGlBhiC,EAAE8/E,GAAGp9E,QAAQ,mBApSI,mCAySjB,IAAMwrF,EAAQvE,EAAM1mF,KAAK,OACnBkrF,EAAW,GACXC,EAAe,GAGrBF,EAAM3lF,MAAK,SAACvK,EAAG2E,GACb,IAAMC,EAAM5C,EAAE2C,GACRoB,EAAMnB,EAAIwB,KAAK,OACfiqF,EAAUzrF,EAAIO,KAAK,YAErBY,GAAOA,EAAIX,QACb+qF,EAAShgF,KAAKpK,GAEZsqF,GAAWA,EAAQjrF,SACrBgrF,EAAajgF,KAAKkgF,GAClBzrF,EAAId,SAAS,WAEbioF,EAAOW,QAAQ,CAAC2D,IAAU7mF,MAAK,WAC7B5E,EAAIwB,KAAK,MAAOiqF,GAEhBzrF,EAAId,SAAS,UACbc,EAAIb,YAAY,WAEhBa,EAAIF,QAAQ,4BAMlBinF,EAAM1mF,KAAK,kBAAkBsF,MAAK,SAACvK,EAAG2E,GACpC,IAAMC,EAAM5C,EAAE2C,GACR0rF,EAAUzrF,EAAIO,KAAK,WAErBkrF,GAAWA,EAAQjrF,SACrBgrF,EAAajgF,KAAKkgF,GAClBzrF,EAAId,SAAS,WAEbioF,EAAOW,QAAQ,CAAC2D,IAAU7mF,MAAK,WAC7B5E,EAAI+B,IAAI,CAAE,mBAAoB,OAAS0pF,EAA7B,MAEVzrF,EAAId,SAAS,UACbc,EAAIb,YAAY,WAEhBa,EAAIF,QAAQ,+BAMlBqnF,EAAOW,QAAQyD,GAAU3mF,MAAK,WAC5BxH,EAAE8/E,GAAGp9E,QAAQ,iBAGbqnF,EAAOW,QAAQ0D,GAAc5mF,MAAK,WAChCtB,QAAQC,IAAI,0BAEZnG,EAAE8/E,GAAGp9E,QAAQ,8BAjWA,gCAuWjBwD,QAAQC,IAAR,0BAvWiB,KA2WrBnG,EAAE8/E,GAAG99E,GAAM4+E,IAAOiC,KAAlB,IAA0BjC,IAAOkC,QAAU,WACzCqH,EAAO1oF,UAGTzB,EAAE8/E,GAAG99E,GAAG,UAAU,WAChBmoF,EAAO8C,+BAGTjtF,EAAE8/E,GAAG99E,GAAG,uBAAuB,WAC7BkoF,EAAQ5mF,MAAK,WACXqmF,EAAM5nF,YAAY,gBAItB+9E,EAAEqK,OAASA,EAzXG,CA4XbnqF,K,qPCrYqB,SAACA,GAEvB,IAAM0L,EAAO,mBACPiD,EAAWjD,EAKX4iF,GAHIruF,OACAC,SANmB,WAU3B,WAAYyC,I,4FAAI,SACduD,QAAQC,IAAR,iBAA6BuF,GAE7B,IAAMwyE,EAAK78E,KACX68E,EAAGqQ,KAAOvuF,EAAE2C,GACZu7E,EAAG92D,UAAY82D,EAAGqQ,KAAK,GAAGnnE,UAE1B82D,EAAGqQ,KAAKprF,KAAKwL,EAAUtN,MACvB,IAOIyC,EAPEK,EAAO+5E,EAAGqQ,KAAKnqF,KAAK,SAAW85E,EAAGqQ,KAAKprF,KAAK,QASlD,GAAIW,EAAQK,EAAKI,MAAM,kFAAmF,CACxG,IAAIiqF,SAMJ,GAJiB,YAAb1qF,EAAM,IAAiC,qBAAbA,EAAM,IAA0C,UAAbA,EAAM,KACrE0qF,EAZiB,SAAC5oF,GAEpB,OADA6oF,UAAY7oF,EAAIod,MAAM,mDACf8K,IAAc2gE,UAAU,GAAKA,UAAU,GAAGzrE,MAAM,gBAAgB,GAAKyrE,UAAU,GAUzEC,CAAavqF,IAGV,SAAZL,EAAM,GAeR,OAdA0qF,EAAW1qF,EAAM,GACjBo6E,EAAGqQ,KAAKzsF,SAAS,gBACjB9B,EAAEyF,KAAK,CACL0G,KAAM,MACNvG,sCAAyC4oF,EAAzC,QACAG,MAAO,WACP9oF,SAAU,QACVY,QAAS,SAAStD,GAChB,IAAMyrF,EAAgBzrF,EAAK,GAAG0rF,gBAC9B3Q,EAAG56E,KAAKsrF,GACR1Q,EAAGqQ,KAAKxsF,YAAY,cAOtBysF,GACFtQ,EAAG56E,KAAH,qBAA6BkrF,EAA7B,WArDqB,uCA0DtBzqF,GACQ1C,KACRktF,KAAK,GAAGnnE,UAAY,GADZ/lB,KAERktF,KAAK7pF,OAAR,aAA4BX,EAA5B,uBA7DyB,iCAiEzBmC,QAAQC,IAAR,eAA2BuF,GAC3BwyE,GAAGqQ,KAAK,GAAGnnE,UAAY82D,GAAG92D,YAlED,yCAsEzB,OAAO/lB,KAAKkH,MAAK,SAACvK,EAAG2E,GAEnB,IAAMC,EAAM5C,EAAE2C,GACVQ,EAAOP,EAAIO,KAAKwL,GAEfxL,IACHA,EAAO,IAAImrF,EAAe3rF,GAC1BC,EAAIO,KAAKwL,EAAUxL,WA7EE,MAoF7BnD,EAAEsI,GAAGoD,GAAQ4iF,EAAenjF,iBAC5BnL,EAAEsI,GAAGoD,GAAMlC,YAAc8kF,EACzBtuF,EAAEsI,GAAGoD,GAAMF,WAAa,WAEtB,OADAxL,EAAEsI,GAAGoD,GAAQ1C,mBACNslF,EAAenjF,kBAIxBnL,EAAEC,QAAQ+B,GAAM4+E,IAAOiC,KAAvB,IAA+BjC,IAAOkC,QAAU,WAC9C9iF,EAAE,+BAA+B8uF,uBA7Fb,CAiGrB9uF,K,4HAjGH,I,sPCFkB,SAACA,GAEjB,IAAM8/E,EAAI7/E,OAcJ8uF,GAbI7uF,SACIF,EAAE,QAJO,yB,4FAAA,uDAkBRqB,KACR4I,UAEH/D,QAAQC,IAAR,4BArBmB,gCA2BnBD,QAAQC,IAAR,4BA3BmB,MA+BvBnG,EAAE8/E,GAAG99E,GAAM4+E,IAAOiC,KAAlB,IAA0BjC,IAAOkC,QAAU,WACzCiM,EAASttF,UAGXq+E,EAAEiP,SAAWA,GAnCG,CAsCf/uF,K,kECwCH,SAASgvF,EAAUlwF,GACjB,OAAOA,EAAE+O,OAAOkU,IAAIjjB,GAGPkwF,EACbnvB,yCAEkBmvB,EAClBnvB,yE,2DC5FF9hE,EAAOD,QAAU2K","file":"js/app.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 = \"/mnt/data/srv/dist/repositories/webpack-bootstrap-ui-kit/dist\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/js/app.js\");\n","/*\n * MetaLightbox v0.61\n * https://tony.twma.pro\n *\n */\n\n//=require ../../bower_components/jquery-zoom/jquery.zoom.js\n\n(function($, window, document) {\n\n var pluginName = 'metaLightbox',\n defaults = {\n effect: 'fade',\n theme: 'default',\n keyboardNav: true,\n clickOverlayToClose: true,\n onInit: function() {},\n beforeShowLightbox: function() {},\n afterShowLightbox: function(lightbox) {},\n beforeHideLightbox: function() {},\n afterHideLightbox: function() {},\n onPrev: function(element) {},\n onNext: function(element) {},\n errorMessage: 'The requested content cannot be loaded. Please try again later.',\n };\n\n function MetaLightbox(element, options) {\n /*this.el = element;\n this.$el = $(this.el);*/\n\n this.options = $.extend({}, defaults, options);\n\n this._defaults = defaults;\n this._name = pluginName;\n\n this.init();\n }\n\n MetaLightbox.prototype = {\n\n init: function() {\n var $this = this,\n $html = $('html');\n\n this.ajaxLoaded = false;\n\n // make object globally accessible\n document.MetaLightbox = this;\n\n // Need this so we don't use CSS transitions in mobile\n if (!$html.hasClass('meta-lightbox-notouch')) $html.addClass('meta-lightbox-notouch');\n if ('ontouchstart' in document) $html.removeClass('meta-lightbox-notouch');\n\n // Setup the click\n $(document).on('click', '[data-toggle=\"lightbox\"],[data-lightbox-gallery]', function(e) {\n e.preventDefault();\n e.stopPropagation();\n\n $this.showLightbox(this);\n return false;\n });\n\n // keyboardNav\n if (this.options.keyboardNav) {\n $('body').off('keyup').on('keyup', (e) => {\n var code = (e.keyCode ? e.keyCode : e.which);\n // Escape\n if (code === 27) {\n $this.destructLightbox();\n }\n // Left\n if (code === 37) {\n $('.meta-lightbox-prev').trigger('click');\n }\n // Right\n if (code === 39) {\n $('.meta-lightbox-next').trigger('click');\n }\n });\n }\n\n this.options.onInit.call(this);\n\n },\n\n showLightbox: function(element) {\n this.el = element;\n this.$el = $(this.el);\n\n var $this = this,\n lightbox, content, currentLink, galleryItems;\n\n this.options.beforeShowLightbox.call(this);\n\n lightbox = this.constructLightbox();\n if (!lightbox) return;\n content = lightbox.find('.meta-lightbox-content');\n if (!content) return;\n currentLink = this.$el;\n $('body').addClass(`meta-lightbox-body-effect-${ this.options.effect}`);\n\n // Add content\n this.processContent(content, currentLink);\n\n // Nav\n if (this.$el.data('lightbox-gallery')) {\n galleryItems = $(`[data-lightbox-gallery=\"${ this.$el.data('lightbox-gallery') }\"]`);\n\n if (galleryItems.length === 1) {\n $('.meta-lightbox-nav').hide();\n } else {\n $('.meta-lightbox-nav').show();\n }\n\n // Prev\n $('.meta-lightbox-prev').off('click').on('click', function(e) {\n e.preventDefault();\n var index = galleryItems.index(currentLink);\n currentLink = galleryItems.eq(index - 1);\n if (!$(currentLink).length) currentLink = galleryItems.last();\n $this.processContent(content, currentLink);\n $this.options.onPrev.call(this, [currentLink]);\n });\n\n // Next\n $('.meta-lightbox-next').off('click').on('click', function(e) {\n e.preventDefault();\n var index = galleryItems.index(currentLink);\n currentLink = galleryItems.eq(index + 1);\n if (!$(currentLink).length) currentLink = galleryItems.first();\n $this.processContent(content, currentLink);\n $this.options.onNext.call(this, [currentLink]);\n });\n }\n\n setTimeout(function() {\n lightbox.addClass('meta-lightbox-open');\n $this.options.afterShowLightbox.call(this, [lightbox]);\n }, 1); // For CSS transitions\n },\n\n processContent: function(content, link) {\n var $this = this,\n img, video, src, classTerm, iframe, wrap;\n\n href = link.attr('href');\n if (!href) {\n href = link.data('href');\n }\n\n content.html('').addClass('meta-lightbox-loading');\n\n // Is HiDPI?\n if (this.isHidpi() && link.data('lightbox-hidpi')) {\n href = link.data('lightbox-hidpi');\n }\n\n // Image\n if (href.match(/\\.(jpeg|jpg|gif|png)$/i) != null) {\n /*if ($(window).width() < 768) {\n window.open(href, '_blank');\n }*/\n img = $('<img>', {\n src: href,\n });\n img.on('load', () => {\n var wrap = $('<div class=\"meta-lightbox-image\"></div>'),\n $content = $('.meta-lightbox-content'),\n imgwrapper = $('<span class=\"meta-lightbox-zoom-wrapper\"></span>');\n\n imgwrapper.append(img);\n wrap.append(imgwrapper);\n\n // Vertically center images\n wrap.css({\n 'line-height': `${$content.height() }px`,\n 'height': `${$content.height() }px`, // For Firefox\n });\n $(window).resize(() => {\n wrap.css({\n 'line-height': `${$content.height() }px`,\n 'height': `${$content.height() }px`, // For Firefox\n });\n });\n\n if (typeof imgwrapper['zoom'] !== 'undefined') {\n imgwrapper.zoom();\n }\n\n content.html(wrap).removeClass('meta-lightbox-loading');\n $this.contentLoaded();\n\n });\n /*.each(function () {\n if (this.complete) $(this).load();\n });*/\n\n img.on('error', () => {\n var wrap = $(`<div class=\"meta-lightbox-error\"><p>${ $this.options.errorMessage }</p></div>`);\n content.html(wrap).removeClass('meta-lightbox-loading');\n $this.contentLoaded();\n });\n\n // Set the title\n if (link.data('title')) {\n $this.setTitle(link.data('title'));\n } else if (link.attr('title')) {\n $this.setTitle(link.attr('title'));\n } else {\n $('.meta-lightbox-title-wrap').html('');\n }\n\n // google analytics\n if (typeof ga === 'function') {\n ga('send', 'event', 'meta', 'Image Click', href);\n }\n }\n // Video (Youtube/Vimeo)\n else if (video = href.match(/(youtube|youtube-nocookie|youtu|vimeo)\\.(com|be)\\/(watch\\?v=([\\w-]+)|([\\w-]+))/)) {\n src = '';\n classTerm = 'meta-lightbox-video';\n\n if (video[1] == 'youtube') {\n src = `https://www.youtube.com/embed/${ video[4]}`;\n classTerm = 'meta-lightbox-youtube';\n }\n if (video[1] == 'youtu') {\n src = `https://www.youtube.com/embed/${ video[3]}`;\n classTerm = 'meta-lightbox-youtube';\n }\n if (video[1] == 'youtube-nocookie') {\n src = `https://www.youtube-nocookie.com/embed/${ video[4]}`;\n classTerm = 'nivo-lightbox-youtube';\n }\n if (video[1] == 'vimeo') {\n src = `https://player.vimeo.com/video/${ video[3]}`;\n classTerm = 'meta-lightbox-vimeo';\n }\n\n if (src) {\n iframe = $('<iframe>', {\n src,\n 'class': classTerm,\n frameborder: 0,\n vspace: 0,\n hspace: 0,\n scrolling: 'auto',\n });\n content.html(iframe);\n iframe.on('load', () => {\n content.removeClass('meta-lightbox-loading');\n $this.contentLoaded();\n });\n }\n\n // Set the title\n if (link.data('title')) {\n $this.setTitle(link.data('title'));\n } else if (link.attr('title')) {\n $this.setTitle(link.attr('title'));\n } else {\n $('.meta-lightbox-title-wrap').html('');\n }\n\n // google analytics\n if (typeof ga === 'function') {\n ga('send', 'event', 'meta', 'Video Click', video);\n }\n }\n // Inline HTML\n else if (href.substring(0, 1) == '#') {\n if ($(href).length) {\n wrap = $('<div class=\"meta-lightbox-inline\" />');\n wrap.append($(href).clone().show());\n\n // Vertically center html\n if (wrap.outerHeight() < content.height()) {\n wrap.css({\n 'position': 'relative',\n 'top': '50%',\n 'margin-top': `${-(wrap.outerHeight() / 2) }px`,\n });\n }\n $(window).resize(() => {\n if (wrap.outerHeight() < content.height()) {\n wrap.css({\n 'position': 'relative',\n 'top': '50%',\n 'margin-top': `${-(wrap.outerHeight() / 2) }px`,\n });\n }\n });\n\n content.html(wrap).removeClass('meta-lightbox-loading');\n $this.contentLoaded();\n } else {\n wrap = $(`<div class=\"meta-lightbox-error\"><p>${ $this.options.errorMessage }</p></div>`);\n content.html(wrap).removeClass('meta-lightbox-loading');\n $this.contentLoaded();\n }\n\n $('.meta-lightbox-title-wrap').html('');\n\n // google analytics\n if (typeof ga === 'function') {\n ga('send', 'event', 'meta', 'inline HTML click', href);\n }\n }\n // AJAX/iFrame (default)\n else {\n $.ajax({\n sync: false,\n async: true,\n url: href,\n dataType: 'html',\n method: 'GET',\n cache: false,\n statusCode: {\n 404: function() {\n console.log('page not found');\n window.location.href = url;\n },\n 302: function() {\n console.log('redirect 302');\n window.location.href = url;\n },\n },\n error: function(jqXHR) {\n console.log(`AJAX request failure.${ jqXHR.statusText}`);\n\n var wrap = $(`<div class=\"meta-lightbox-error\"><p>${ $this.options.errorMessage }</p></div>`);\n content.html(wrap).removeClass('meta-lightbox-loading');\n $this.contentLoaded();\n\n // google analytics\n if (typeof ga === 'function') {\n ga('send', 'event', 'error', 'AJAX ERROR', jqXHR.statusText);\n }\n },\n success: function(data, status, jqXHR) {\n try {\n const dataJson = $.parseJSON(data);\n if (typeof(dataJson) === 'object') {\n // Replace regions\n if (typeof(dataJson['regions']) === 'object' && typeof dataJson['regions']['LayoutAjax'] !== 'undefinded') {\n var wrap = $('<div class=\"meta-lightbox-ajax\" />');\n wrap.html(dataJson['regions']['LayoutAjax']);\n content.html(wrap).removeClass('meta-lightbox-loading');\n }\n\n // trigger events\n /*if (typeof (data['events']) === 'object') {\n for (var eventName in data.events) {\n $(document).trigger(eventName, [data['events'][eventName]]);\n }\n }*/\n\n\n var title = jqXHR.getResponseHeader('X-Title'),\n link = jqXHR.getResponseHeader('X-Link');\n\n if (\n title && title.length &&\n link && link.length &&\n link !== window.location.href &&\n link.substring(0, link.indexOf('#')) !== window.location.href.replace($('base').attr('href'), '/')\n ) {\n $('.meta-lightbox-ajax').data('curr-title', document.title);\n $('.meta-lightbox-ajax').data('curr-link', window.location.href);\n\n if (typeof window.localStorage !== 'undefined' && link !== '/') {\n window.localStorage.setItem('current-page', link);\n }\n\n if (\n document.URL !== link &&\n document.URL !== $('base').attr('href') + link &&\n document.URL !== `${$('base').attr('href') }/${ link}`\n ) {\n window.history.pushState({\n title,\n page: link,\n ajax: 'true',\n }, title, link);\n }\n\n // update redirect urls\n /*var pattern = new RegExp('\\\\b(redirect_uri=).*?(&|$)');\n $('a').each(function () {\n var $this = $(this);\n $this.attr('href', $this.attr('href').replace(pattern, 'redirect_uri=' + encodeURI($('base').attr('href') + link)));\n });*/\n\n $('.meta-lightbox-title-wrap').html('');\n\n // google analytics\n if (typeof ga === 'function') {\n ga('set', {\n page: link.replace($('base').attr('href'), ''),\n title,\n });\n ga('send', 'pageview');\n }\n }\n }\n } catch (e) {\n var wrap = $('<div class=\"meta-lightbox-ajax\" />');\n wrap.append(data);\n content.html(wrap).removeClass('meta-lightbox-loading');\n }\n\n // Vertically center html\n if (wrap.outerHeight() < content.height()) {\n wrap.css({\n 'position': 'relative',\n 'top': '50%',\n 'margin-top': `${-(wrap.outerHeight() / 2) }px`,\n });\n }\n $(window).resize(() => {\n if (wrap.outerHeight() < content.height()) {\n wrap.css({\n 'position': 'relative',\n 'top': '50%',\n 'margin-top': `${-(wrap.outerHeight() / 2) }px`,\n });\n }\n });\n\n setTimeout(() => {\n $(window).resize();\n\n window.imagesLoaded().then(() => {\n $(window).resize();\n });\n }, 500);\n\n $this.contentLoaded();\n },\n });\n }\n },\n\n setTitle: function(text) {\n var titleWrap = $('<div>', {\n 'class': 'meta-lightbox-title',\n });\n titleWrap.text(text);\n $('.meta-lightbox-title-wrap').html(titleWrap);\n },\n\n contentLoaded: function() {\n setTimeout(() => {\n $(window).trigger('meta-lightbox-loaded');\n }, 1); // For CSS transitions\n\n setTimeout(() => {\n $('body').addClass('meta-lightbox-body-effect-fade');\n }, 600);\n },\n\n\n\n constructLightbox: function() {\n var $this = this,\n overlay = $('<div>', {\n 'class': `meta-lightbox-overlay meta-lightbox-theme-${ this.options.theme } meta-lightbox-effect-${ this.options.effect}`,\n }),\n wrap = $('<div>', {\n 'class': 'meta-lightbox-wrap',\n }),\n content = $('<div>', {\n 'class': 'meta-lightbox-content',\n }),\n nav = $('<a href=\"#\" class=\"meta-lightbox-nav meta-lightbox-prev\"><i class=\"fa fa-chevron-left\"></i> <span class=\"sr-only\">Previous</span></a><a href=\"#\" class=\"meta-lightbox-nav meta-lightbox-next\"><i class=\"fa fa-chevron-right\"></i> <span class=\"sr-only\">Next</span></a>'),\n close = $('<a href=\"#\" class=\"meta-lightbox-close fa fa-times\" title=\"Close\"><span class=\"sr-only\">Close</span></a>'),\n title = $('<div>', {\n 'class': 'meta-lightbox-title-wrap',\n }),\n isMSIE = /*@cc_on!@*/ 0,\n $overlay = $('.meta-lightbox-overlay');\n\n if ($overlay.length) return $overlay;\n\n\n if (isMSIE) overlay.addClass('meta-lightbox-ie');\n\n wrap.append(content);\n wrap.append(title);\n overlay.append(wrap);\n overlay.append(nav);\n overlay.append(close);\n $('body').append(overlay);\n\n if ($this.options.clickOverlayToClose) {\n overlay.on('click', (e) => {\n var $target = $(e.target);\n\n if (\n $target.hasClass('meta-lightbox-zoom-wrapper') ||\n $target.hasClass('meta-lightbox-content') ||\n $target.hasClass('meta-lightbox-wrap') ||\n $target.hasClass('meta-lightbox-image') ||\n $target.hasClass('meta-lightbox-overlay')\n ) {\n $this.destructLightbox();\n }\n });\n }\n\n close.on('click', (e) => {\n e.preventDefault();\n $this.destructLightbox();\n });\n\n return overlay;\n },\n\n destructLightbox: function() {\n var $this = this,\n $overlay = $('.meta-lightbox-overlay'),\n isMSIE = /*@cc_on!@*/ 0;\n this.options.beforeHideLightbox.call(this);\n\n var title = $('.meta-lightbox-ajax').data('curr-title'),\n link = $('.meta-lightbox-ajax').data('curr-link');\n if (title && link) {\n\n if (typeof window.localStorage !== 'undefined' && link !== '/') {\n window.localStorage.setItem('current-page', link);\n }\n\n if (\n document.URL !== link &&\n document.URL !== $('base').attr('href') + link &&\n document.URL !== `${$('base').attr('href') }/${ link}`\n ) {\n window.history.replaceState({\n title,\n page: link,\n ajax: 'true',\n }, title, link);\n }\n\n // update redirect urls\n /*var pattern = new RegExp('\\\\b(redirect_uri=).*?(&|$)');\n $('a').each(function () {\n var $this = $(this);\n $this.attr('href', $this.attr('href').replace(pattern, 'redirect_uri=' + encodeURI($('base').attr('href') + link)));\n });*/\n }\n\n $overlay.removeClass('meta-lightbox-open');\n $('.meta-lightbox-nav').hide();\n $('body').removeClass(`meta-lightbox-body-effect-${ $this.options.effect}`);\n $('.meta-lightbox-content .meta-lightbox-zoom-wrapper').trigger('zoom.destroy');\n\n // For IE\n if (isMSIE) {\n $overlay.find('iframe').attr(\"src\", \" \");\n $overlay.find('iframe').remove();\n }\n $('.meta-lightbox-prev').off('click');\n\n // Remove click handlers\n $('.meta-lightbox-next').off('click');\n\n // Empty content (for videos)\n $('.meta-lightbox-content').empty();\n\n $('body').removeClass('meta-lightbox-body-effect-fade');\n\n this.options.afterHideLightbox.call(this);\n\n },\n\n isHidpi: function() {\n var mediaQuery = \"(-webkit-min-device-pixel-ratio: 1.5),\\\n (min--moz-device-pixel-ratio: 1.5),\\\n (-o-min-device-pixel-ratio: 3/2),\\\n (min-resolution: 1.5dppx)\";\n if (window.devicePixelRatio > 1) return true;\n return (window.matchMedia && window.matchMedia(mediaQuery).matches);\n },\n\n };\n\n $.fn[pluginName] = function(options) {\n return this.each(function() {\n if (!$.data(this, pluginName)) {\n $.data(this, pluginName, new MetaLightbox(this, options));\n }\n });\n };\n\n $(document).metaLightbox();\n\n})(jQuery, this, document);\n","/*!\n * Bootstrap alert.js v4.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) :\n typeof define === 'function' && define.amd ? define(['jquery', './util.js'], factory) :\n (global = global || self, global.Alert = factory(global.jQuery, global.Util));\n}(this, (function ($, Util) { 'use strict';\n\n $ = $ && $.hasOwnProperty('default') ? $['default'] : $;\n Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util;\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME = 'alert';\n var VERSION = '4.4.1';\n var DATA_KEY = 'bs.alert';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $.fn[NAME];\n var Selector = {\n DISMISS: '[data-dismiss=\"alert\"]'\n };\n var Event = {\n CLOSE: \"close\" + EVENT_KEY,\n CLOSED: \"closed\" + EVENT_KEY,\n CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n };\n var ClassName = {\n ALERT: 'alert',\n FADE: 'fade',\n SHOW: 'show'\n };\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n var Alert =\n /*#__PURE__*/\n function () {\n function Alert(element) {\n this._element = element;\n } // Getters\n\n\n var _proto = Alert.prototype;\n\n // Public\n _proto.close = function close(element) {\n var rootElement = this._element;\n\n if (element) {\n rootElement = this._getRootElement(element);\n }\n\n var customEvent = this._triggerCloseEvent(rootElement);\n\n if (customEvent.isDefaultPrevented()) {\n return;\n }\n\n this._removeElement(rootElement);\n };\n\n _proto.dispose = function dispose() {\n $.removeData(this._element, DATA_KEY);\n this._element = null;\n } // Private\n ;\n\n _proto._getRootElement = function _getRootElement(element) {\n var selector = Util.getSelectorFromElement(element);\n var parent = false;\n\n if (selector) {\n parent = document.querySelector(selector);\n }\n\n if (!parent) {\n parent = $(element).closest(\".\" + ClassName.ALERT)[0];\n }\n\n return parent;\n };\n\n _proto._triggerCloseEvent = function _triggerCloseEvent(element) {\n var closeEvent = $.Event(Event.CLOSE);\n $(element).trigger(closeEvent);\n return closeEvent;\n };\n\n _proto._removeElement = function _removeElement(element) {\n var _this = this;\n\n $(element).removeClass(ClassName.SHOW);\n\n if (!$(element).hasClass(ClassName.FADE)) {\n this._destroyElement(element);\n\n return;\n }\n\n var transitionDuration = Util.getTransitionDurationFromElement(element);\n $(element).one(Util.TRANSITION_END, function (event) {\n return _this._destroyElement(element, event);\n }).emulateTransitionEnd(transitionDuration);\n };\n\n _proto._destroyElement = function _destroyElement(element) {\n $(element).detach().trigger(Event.CLOSED).remove();\n } // Static\n ;\n\n Alert._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var $element = $(this);\n var data = $element.data(DATA_KEY);\n\n if (!data) {\n data = new Alert(this);\n $element.data(DATA_KEY, data);\n }\n\n if (config === 'close') {\n data[config](this);\n }\n });\n };\n\n Alert._handleDismiss = function _handleDismiss(alertInstance) {\n return function (event) {\n if (event) {\n event.preventDefault();\n }\n\n alertInstance.close(this);\n };\n };\n\n _createClass(Alert, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }]);\n\n return Alert;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert()));\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Alert._jQueryInterface;\n $.fn[NAME].Constructor = Alert;\n\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return Alert._jQueryInterface;\n };\n\n return Alert;\n\n})));\n//# sourceMappingURL=alert.js.map\n","/*!\n * Bootstrap button.js v4.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery')) :\n typeof define === 'function' && define.amd ? define(['jquery'], factory) :\n (global = global || self, global.Button = factory(global.jQuery));\n}(this, (function ($) { 'use strict';\n\n $ = $ && $.hasOwnProperty('default') ? $['default'] : $;\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME = 'button';\n var VERSION = '4.4.1';\n var DATA_KEY = 'bs.button';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $.fn[NAME];\n var ClassName = {\n ACTIVE: 'active',\n BUTTON: 'btn',\n FOCUS: 'focus'\n };\n var Selector = {\n DATA_TOGGLE_CARROT: '[data-toggle^=\"button\"]',\n DATA_TOGGLES: '[data-toggle=\"buttons\"]',\n DATA_TOGGLE: '[data-toggle=\"button\"]',\n DATA_TOGGLES_BUTTONS: '[data-toggle=\"buttons\"] .btn',\n INPUT: 'input:not([type=\"hidden\"])',\n ACTIVE: '.active',\n BUTTON: '.btn'\n };\n var Event = {\n CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY,\n FOCUS_BLUR_DATA_API: \"focus\" + EVENT_KEY + DATA_API_KEY + \" \" + (\"blur\" + EVENT_KEY + DATA_API_KEY),\n LOAD_DATA_API: \"load\" + EVENT_KEY + DATA_API_KEY\n };\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n var Button =\n /*#__PURE__*/\n function () {\n function Button(element) {\n this._element = element;\n } // Getters\n\n\n var _proto = Button.prototype;\n\n // Public\n _proto.toggle = function toggle() {\n var triggerChangeEvent = true;\n var addAriaPressed = true;\n var rootElement = $(this._element).closest(Selector.DATA_TOGGLES)[0];\n\n if (rootElement) {\n var input = this._element.querySelector(Selector.INPUT);\n\n if (input) {\n if (input.type === 'radio') {\n if (input.checked && this._element.classList.contains(ClassName.ACTIVE)) {\n triggerChangeEvent = false;\n } else {\n var activeElement = rootElement.querySelector(Selector.ACTIVE);\n\n if (activeElement) {\n $(activeElement).removeClass(ClassName.ACTIVE);\n }\n }\n } else if (input.type === 'checkbox') {\n if (this._element.tagName === 'LABEL' && input.checked === this._element.classList.contains(ClassName.ACTIVE)) {\n triggerChangeEvent = false;\n }\n } else {\n // if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input\n triggerChangeEvent = false;\n }\n\n if (triggerChangeEvent) {\n input.checked = !this._element.classList.contains(ClassName.ACTIVE);\n $(input).trigger('change');\n }\n\n input.focus();\n addAriaPressed = false;\n }\n }\n\n if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) {\n if (addAriaPressed) {\n this._element.setAttribute('aria-pressed', !this._element.classList.contains(ClassName.ACTIVE));\n }\n\n if (triggerChangeEvent) {\n $(this._element).toggleClass(ClassName.ACTIVE);\n }\n }\n };\n\n _proto.dispose = function dispose() {\n $.removeData(this._element, DATA_KEY);\n this._element = null;\n } // Static\n ;\n\n Button._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $(this).data(DATA_KEY);\n\n if (!data) {\n data = new Button(this);\n $(this).data(DATA_KEY, data);\n }\n\n if (config === 'toggle') {\n data[config]();\n }\n });\n };\n\n _createClass(Button, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }]);\n\n return Button;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) {\n var button = event.target;\n\n if (!$(button).hasClass(ClassName.BUTTON)) {\n button = $(button).closest(Selector.BUTTON)[0];\n }\n\n if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) {\n event.preventDefault(); // work around Firefox bug #1540995\n } else {\n var inputBtn = button.querySelector(Selector.INPUT);\n\n if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) {\n event.preventDefault(); // work around Firefox bug #1540995\n\n return;\n }\n\n Button._jQueryInterface.call($(button), 'toggle');\n }\n }).on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) {\n var button = $(event.target).closest(Selector.BUTTON)[0];\n $(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type));\n });\n $(window).on(Event.LOAD_DATA_API, function () {\n // ensure correct active class is set to match the controls' actual values/states\n // find all checkboxes/readio buttons inside data-toggle groups\n var buttons = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLES_BUTTONS));\n\n for (var i = 0, len = buttons.length; i < len; i++) {\n var button = buttons[i];\n var input = button.querySelector(Selector.INPUT);\n\n if (input.checked || input.hasAttribute('checked')) {\n button.classList.add(ClassName.ACTIVE);\n } else {\n button.classList.remove(ClassName.ACTIVE);\n }\n } // find all button toggles\n\n\n buttons = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE));\n\n for (var _i = 0, _len = buttons.length; _i < _len; _i++) {\n var _button = buttons[_i];\n\n if (_button.getAttribute('aria-pressed') === 'true') {\n _button.classList.add(ClassName.ACTIVE);\n } else {\n _button.classList.remove(ClassName.ACTIVE);\n }\n }\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Button._jQueryInterface;\n $.fn[NAME].Constructor = Button;\n\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return Button._jQueryInterface;\n };\n\n return Button;\n\n})));\n//# sourceMappingURL=button.js.map\n","/*!\n * Bootstrap carousel.js v4.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) :\n typeof define === 'function' && define.amd ? define(['jquery', './util.js'], factory) :\n (global = global || self, global.Carousel = factory(global.jQuery, global.Util));\n}(this, (function ($, Util) { 'use strict';\n\n $ = $ && $.hasOwnProperty('default') ? $['default'] : $;\n Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util;\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n }\n\n function ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n }\n\n function _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n }\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME = 'carousel';\n var VERSION = '4.4.1';\n var DATA_KEY = 'bs.carousel';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $.fn[NAME];\n var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key\n\n var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key\n\n var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n var SWIPE_THRESHOLD = 40;\n var Default = {\n interval: 5000,\n keyboard: true,\n slide: false,\n pause: 'hover',\n wrap: true,\n touch: true\n };\n var DefaultType = {\n interval: '(number|boolean)',\n keyboard: 'boolean',\n slide: '(boolean|string)',\n pause: '(string|boolean)',\n wrap: 'boolean',\n touch: 'boolean'\n };\n var Direction = {\n NEXT: 'next',\n PREV: 'prev',\n LEFT: 'left',\n RIGHT: 'right'\n };\n var Event = {\n SLIDE: \"slide\" + EVENT_KEY,\n SLID: \"slid\" + EVENT_KEY,\n KEYDOWN: \"keydown\" + EVENT_KEY,\n MOUSEENTER: \"mouseenter\" + EVENT_KEY,\n MOUSELEAVE: \"mouseleave\" + EVENT_KEY,\n TOUCHSTART: \"touchstart\" + EVENT_KEY,\n TOUCHMOVE: \"touchmove\" + EVENT_KEY,\n TOUCHEND: \"touchend\" + EVENT_KEY,\n POINTERDOWN: \"pointerdown\" + EVENT_KEY,\n POINTERUP: \"pointerup\" + EVENT_KEY,\n DRAG_START: \"dragstart\" + EVENT_KEY,\n LOAD_DATA_API: \"load\" + EVENT_KEY + DATA_API_KEY,\n CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n };\n var ClassName = {\n CAROUSEL: 'carousel',\n ACTIVE: 'active',\n SLIDE: 'slide',\n RIGHT: 'carousel-item-right',\n LEFT: 'carousel-item-left',\n NEXT: 'carousel-item-next',\n PREV: 'carousel-item-prev',\n ITEM: 'carousel-item',\n POINTER_EVENT: 'pointer-event'\n };\n var Selector = {\n ACTIVE: '.active',\n ACTIVE_ITEM: '.active.carousel-item',\n ITEM: '.carousel-item',\n ITEM_IMG: '.carousel-item img',\n NEXT_PREV: '.carousel-item-next, .carousel-item-prev',\n INDICATORS: '.carousel-indicators',\n DATA_SLIDE: '[data-slide], [data-slide-to]',\n DATA_RIDE: '[data-ride=\"carousel\"]'\n };\n var PointerType = {\n TOUCH: 'touch',\n PEN: 'pen'\n };\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n var Carousel =\n /*#__PURE__*/\n function () {\n function Carousel(element, config) {\n this._items = null;\n this._interval = null;\n this._activeElement = null;\n this._isPaused = false;\n this._isSliding = false;\n this.touchTimeout = null;\n this.touchStartX = 0;\n this.touchDeltaX = 0;\n this._config = this._getConfig(config);\n this._element = element;\n this._indicatorsElement = this._element.querySelector(Selector.INDICATORS);\n this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent);\n\n this._addEventListeners();\n } // Getters\n\n\n var _proto = Carousel.prototype;\n\n // Public\n _proto.next = function next() {\n if (!this._isSliding) {\n this._slide(Direction.NEXT);\n }\n };\n\n _proto.nextWhenVisible = function nextWhenVisible() {\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden && $(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden') {\n this.next();\n }\n };\n\n _proto.prev = function prev() {\n if (!this._isSliding) {\n this._slide(Direction.PREV);\n }\n };\n\n _proto.pause = function pause(event) {\n if (!event) {\n this._isPaused = true;\n }\n\n if (this._element.querySelector(Selector.NEXT_PREV)) {\n Util.triggerTransitionEnd(this._element);\n this.cycle(true);\n }\n\n clearInterval(this._interval);\n this._interval = null;\n };\n\n _proto.cycle = function cycle(event) {\n if (!event) {\n this._isPaused = false;\n }\n\n if (this._interval) {\n clearInterval(this._interval);\n this._interval = null;\n }\n\n if (this._config.interval && !this._isPaused) {\n this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n }\n };\n\n _proto.to = function to(index) {\n var _this = this;\n\n this._activeElement = this._element.querySelector(Selector.ACTIVE_ITEM);\n\n var activeIndex = this._getItemIndex(this._activeElement);\n\n if (index > this._items.length - 1 || index < 0) {\n return;\n }\n\n if (this._isSliding) {\n $(this._element).one(Event.SLID, function () {\n return _this.to(index);\n });\n return;\n }\n\n if (activeIndex === index) {\n this.pause();\n this.cycle();\n return;\n }\n\n var direction = index > activeIndex ? Direction.NEXT : Direction.PREV;\n\n this._slide(direction, this._items[index]);\n };\n\n _proto.dispose = function dispose() {\n $(this._element).off(EVENT_KEY);\n $.removeData(this._element, DATA_KEY);\n this._items = null;\n this._config = null;\n this._element = null;\n this._interval = null;\n this._isPaused = null;\n this._isSliding = null;\n this._activeElement = null;\n this._indicatorsElement = null;\n } // Private\n ;\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread2({}, Default, {}, config);\n Util.typeCheckConfig(NAME, config, DefaultType);\n return config;\n };\n\n _proto._handleSwipe = function _handleSwipe() {\n var absDeltax = Math.abs(this.touchDeltaX);\n\n if (absDeltax <= SWIPE_THRESHOLD) {\n return;\n }\n\n var direction = absDeltax / this.touchDeltaX;\n this.touchDeltaX = 0; // swipe left\n\n if (direction > 0) {\n this.prev();\n } // swipe right\n\n\n if (direction < 0) {\n this.next();\n }\n };\n\n _proto._addEventListeners = function _addEventListeners() {\n var _this2 = this;\n\n if (this._config.keyboard) {\n $(this._element).on(Event.KEYDOWN, function (event) {\n return _this2._keydown(event);\n });\n }\n\n if (this._config.pause === 'hover') {\n $(this._element).on(Event.MOUSEENTER, function (event) {\n return _this2.pause(event);\n }).on(Event.MOUSELEAVE, function (event) {\n return _this2.cycle(event);\n });\n }\n\n if (this._config.touch) {\n this._addTouchEventListeners();\n }\n };\n\n _proto._addTouchEventListeners = function _addTouchEventListeners() {\n var _this3 = this;\n\n if (!this._touchSupported) {\n return;\n }\n\n var start = function start(event) {\n if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n _this3.touchStartX = event.originalEvent.clientX;\n } else if (!_this3._pointerEvent) {\n _this3.touchStartX = event.originalEvent.touches[0].clientX;\n }\n };\n\n var move = function move(event) {\n // ensure swiping with one touch and not pinching\n if (event.originalEvent.touches && event.originalEvent.touches.length > 1) {\n _this3.touchDeltaX = 0;\n } else {\n _this3.touchDeltaX = event.originalEvent.touches[0].clientX - _this3.touchStartX;\n }\n };\n\n var end = function end(event) {\n if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n _this3.touchDeltaX = event.originalEvent.clientX - _this3.touchStartX;\n }\n\n _this3._handleSwipe();\n\n if (_this3._config.pause === 'hover') {\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n _this3.pause();\n\n if (_this3.touchTimeout) {\n clearTimeout(_this3.touchTimeout);\n }\n\n _this3.touchTimeout = setTimeout(function (event) {\n return _this3.cycle(event);\n }, TOUCHEVENT_COMPAT_WAIT + _this3._config.interval);\n }\n };\n\n $(this._element.querySelectorAll(Selector.ITEM_IMG)).on(Event.DRAG_START, function (e) {\n return e.preventDefault();\n });\n\n if (this._pointerEvent) {\n $(this._element).on(Event.POINTERDOWN, function (event) {\n return start(event);\n });\n $(this._element).on(Event.POINTERUP, function (event) {\n return end(event);\n });\n\n this._element.classList.add(ClassName.POINTER_EVENT);\n } else {\n $(this._element).on(Event.TOUCHSTART, function (event) {\n return start(event);\n });\n $(this._element).on(Event.TOUCHMOVE, function (event) {\n return move(event);\n });\n $(this._element).on(Event.TOUCHEND, function (event) {\n return end(event);\n });\n }\n };\n\n _proto._keydown = function _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return;\n }\n\n switch (event.which) {\n case ARROW_LEFT_KEYCODE:\n event.preventDefault();\n this.prev();\n break;\n\n case ARROW_RIGHT_KEYCODE:\n event.preventDefault();\n this.next();\n break;\n }\n };\n\n _proto._getItemIndex = function _getItemIndex(element) {\n this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(Selector.ITEM)) : [];\n return this._items.indexOf(element);\n };\n\n _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) {\n var isNextDirection = direction === Direction.NEXT;\n var isPrevDirection = direction === Direction.PREV;\n\n var activeIndex = this._getItemIndex(activeElement);\n\n var lastItemIndex = this._items.length - 1;\n var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex;\n\n if (isGoingToWrap && !this._config.wrap) {\n return activeElement;\n }\n\n var delta = direction === Direction.PREV ? -1 : 1;\n var itemIndex = (activeIndex + delta) % this._items.length;\n return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];\n };\n\n _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {\n var targetIndex = this._getItemIndex(relatedTarget);\n\n var fromIndex = this._getItemIndex(this._element.querySelector(Selector.ACTIVE_ITEM));\n\n var slideEvent = $.Event(Event.SLIDE, {\n relatedTarget: relatedTarget,\n direction: eventDirectionName,\n from: fromIndex,\n to: targetIndex\n });\n $(this._element).trigger(slideEvent);\n return slideEvent;\n };\n\n _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {\n if (this._indicatorsElement) {\n var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector.ACTIVE));\n $(indicators).removeClass(ClassName.ACTIVE);\n\n var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];\n\n if (nextIndicator) {\n $(nextIndicator).addClass(ClassName.ACTIVE);\n }\n }\n };\n\n _proto._slide = function _slide(direction, element) {\n var _this4 = this;\n\n var activeElement = this._element.querySelector(Selector.ACTIVE_ITEM);\n\n var activeElementIndex = this._getItemIndex(activeElement);\n\n var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);\n\n var nextElementIndex = this._getItemIndex(nextElement);\n\n var isCycling = Boolean(this._interval);\n var directionalClassName;\n var orderClassName;\n var eventDirectionName;\n\n if (direction === Direction.NEXT) {\n directionalClassName = ClassName.LEFT;\n orderClassName = ClassName.NEXT;\n eventDirectionName = Direction.LEFT;\n } else {\n directionalClassName = ClassName.RIGHT;\n orderClassName = ClassName.PREV;\n eventDirectionName = Direction.RIGHT;\n }\n\n if (nextElement && $(nextElement).hasClass(ClassName.ACTIVE)) {\n this._isSliding = false;\n return;\n }\n\n var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n if (slideEvent.isDefaultPrevented()) {\n return;\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n return;\n }\n\n this._isSliding = true;\n\n if (isCycling) {\n this.pause();\n }\n\n this._setActiveIndicatorElement(nextElement);\n\n var slidEvent = $.Event(Event.SLID, {\n relatedTarget: nextElement,\n direction: eventDirectionName,\n from: activeElementIndex,\n to: nextElementIndex\n });\n\n if ($(this._element).hasClass(ClassName.SLIDE)) {\n $(nextElement).addClass(orderClassName);\n Util.reflow(nextElement);\n $(activeElement).addClass(directionalClassName);\n $(nextElement).addClass(directionalClassName);\n var nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10);\n\n if (nextElementInterval) {\n this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n this._config.interval = nextElementInterval;\n } else {\n this._config.interval = this._config.defaultInterval || this._config.interval;\n }\n\n var transitionDuration = Util.getTransitionDurationFromElement(activeElement);\n $(activeElement).one(Util.TRANSITION_END, function () {\n $(nextElement).removeClass(directionalClassName + \" \" + orderClassName).addClass(ClassName.ACTIVE);\n $(activeElement).removeClass(ClassName.ACTIVE + \" \" + orderClassName + \" \" + directionalClassName);\n _this4._isSliding = false;\n setTimeout(function () {\n return $(_this4._element).trigger(slidEvent);\n }, 0);\n }).emulateTransitionEnd(transitionDuration);\n } else {\n $(activeElement).removeClass(ClassName.ACTIVE);\n $(nextElement).addClass(ClassName.ACTIVE);\n this._isSliding = false;\n $(this._element).trigger(slidEvent);\n }\n\n if (isCycling) {\n this.cycle();\n }\n } // Static\n ;\n\n Carousel._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $(this).data(DATA_KEY);\n\n var _config = _objectSpread2({}, Default, {}, $(this).data());\n\n if (typeof config === 'object') {\n _config = _objectSpread2({}, _config, {}, config);\n }\n\n var action = typeof config === 'string' ? config : _config.slide;\n\n if (!data) {\n data = new Carousel(this, _config);\n $(this).data(DATA_KEY, data);\n }\n\n if (typeof config === 'number') {\n data.to(config);\n } else if (typeof action === 'string') {\n if (typeof data[action] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + action + \"\\\"\");\n }\n\n data[action]();\n } else if (_config.interval && _config.ride) {\n data.pause();\n data.cycle();\n }\n });\n };\n\n Carousel._dataApiClickHandler = function _dataApiClickHandler(event) {\n var selector = Util.getSelectorFromElement(this);\n\n if (!selector) {\n return;\n }\n\n var target = $(selector)[0];\n\n if (!target || !$(target).hasClass(ClassName.CAROUSEL)) {\n return;\n }\n\n var config = _objectSpread2({}, $(target).data(), {}, $(this).data());\n\n var slideIndex = this.getAttribute('data-slide-to');\n\n if (slideIndex) {\n config.interval = false;\n }\n\n Carousel._jQueryInterface.call($(target), config);\n\n if (slideIndex) {\n $(target).data(DATA_KEY).to(slideIndex);\n }\n\n event.preventDefault();\n };\n\n _createClass(Carousel, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }]);\n\n return Carousel;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $(document).on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler);\n $(window).on(Event.LOAD_DATA_API, function () {\n var carousels = [].slice.call(document.querySelectorAll(Selector.DATA_RIDE));\n\n for (var i = 0, len = carousels.length; i < len; i++) {\n var $carousel = $(carousels[i]);\n\n Carousel._jQueryInterface.call($carousel, $carousel.data());\n }\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Carousel._jQueryInterface;\n $.fn[NAME].Constructor = Carousel;\n\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return Carousel._jQueryInterface;\n };\n\n return Carousel;\n\n})));\n//# sourceMappingURL=carousel.js.map\n","/*!\n * Bootstrap collapse.js v4.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) :\n typeof define === 'function' && define.amd ? define(['jquery', './util.js'], factory) :\n (global = global || self, global.Collapse = factory(global.jQuery, global.Util));\n}(this, (function ($, Util) { 'use strict';\n\n $ = $ && $.hasOwnProperty('default') ? $['default'] : $;\n Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util;\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n }\n\n function ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n }\n\n function _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n }\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME = 'collapse';\n var VERSION = '4.4.1';\n var DATA_KEY = 'bs.collapse';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $.fn[NAME];\n var Default = {\n toggle: true,\n parent: ''\n };\n var DefaultType = {\n toggle: 'boolean',\n parent: '(string|element)'\n };\n var Event = {\n SHOW: \"show\" + EVENT_KEY,\n SHOWN: \"shown\" + EVENT_KEY,\n HIDE: \"hide\" + EVENT_KEY,\n HIDDEN: \"hidden\" + EVENT_KEY,\n CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n };\n var ClassName = {\n SHOW: 'show',\n COLLAPSE: 'collapse',\n COLLAPSING: 'collapsing',\n COLLAPSED: 'collapsed'\n };\n var Dimension = {\n WIDTH: 'width',\n HEIGHT: 'height'\n };\n var Selector = {\n ACTIVES: '.show, .collapsing',\n DATA_TOGGLE: '[data-toggle=\"collapse\"]'\n };\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n var Collapse =\n /*#__PURE__*/\n function () {\n function Collapse(element, config) {\n this._isTransitioning = false;\n this._element = element;\n this._config = this._getConfig(config);\n this._triggerArray = [].slice.call(document.querySelectorAll(\"[data-toggle=\\\"collapse\\\"][href=\\\"#\" + element.id + \"\\\"],\" + (\"[data-toggle=\\\"collapse\\\"][data-target=\\\"#\" + element.id + \"\\\"]\")));\n var toggleList = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE));\n\n for (var i = 0, len = toggleList.length; i < len; i++) {\n var elem = toggleList[i];\n var selector = Util.getSelectorFromElement(elem);\n var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) {\n return foundElem === element;\n });\n\n if (selector !== null && filterElement.length > 0) {\n this._selector = selector;\n\n this._triggerArray.push(elem);\n }\n }\n\n this._parent = this._config.parent ? this._getParent() : null;\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n }\n\n if (this._config.toggle) {\n this.toggle();\n }\n } // Getters\n\n\n var _proto = Collapse.prototype;\n\n // Public\n _proto.toggle = function toggle() {\n if ($(this._element).hasClass(ClassName.SHOW)) {\n this.hide();\n } else {\n this.show();\n }\n };\n\n _proto.show = function show() {\n var _this = this;\n\n if (this._isTransitioning || $(this._element).hasClass(ClassName.SHOW)) {\n return;\n }\n\n var actives;\n var activesData;\n\n if (this._parent) {\n actives = [].slice.call(this._parent.querySelectorAll(Selector.ACTIVES)).filter(function (elem) {\n if (typeof _this._config.parent === 'string') {\n return elem.getAttribute('data-parent') === _this._config.parent;\n }\n\n return elem.classList.contains(ClassName.COLLAPSE);\n });\n\n if (actives.length === 0) {\n actives = null;\n }\n }\n\n if (actives) {\n activesData = $(actives).not(this._selector).data(DATA_KEY);\n\n if (activesData && activesData._isTransitioning) {\n return;\n }\n }\n\n var startEvent = $.Event(Event.SHOW);\n $(this._element).trigger(startEvent);\n\n if (startEvent.isDefaultPrevented()) {\n return;\n }\n\n if (actives) {\n Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide');\n\n if (!activesData) {\n $(actives).data(DATA_KEY, null);\n }\n }\n\n var dimension = this._getDimension();\n\n $(this._element).removeClass(ClassName.COLLAPSE).addClass(ClassName.COLLAPSING);\n this._element.style[dimension] = 0;\n\n if (this._triggerArray.length) {\n $(this._triggerArray).removeClass(ClassName.COLLAPSED).attr('aria-expanded', true);\n }\n\n this.setTransitioning(true);\n\n var complete = function complete() {\n $(_this._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).addClass(ClassName.SHOW);\n _this._element.style[dimension] = '';\n\n _this.setTransitioning(false);\n\n $(_this._element).trigger(Event.SHOWN);\n };\n\n var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n var scrollSize = \"scroll\" + capitalizedDimension;\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n this._element.style[dimension] = this._element[scrollSize] + \"px\";\n };\n\n _proto.hide = function hide() {\n var _this2 = this;\n\n if (this._isTransitioning || !$(this._element).hasClass(ClassName.SHOW)) {\n return;\n }\n\n var startEvent = $.Event(Event.HIDE);\n $(this._element).trigger(startEvent);\n\n if (startEvent.isDefaultPrevented()) {\n return;\n }\n\n var dimension = this._getDimension();\n\n this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + \"px\";\n Util.reflow(this._element);\n $(this._element).addClass(ClassName.COLLAPSING).removeClass(ClassName.COLLAPSE).removeClass(ClassName.SHOW);\n var triggerArrayLength = this._triggerArray.length;\n\n if (triggerArrayLength > 0) {\n for (var i = 0; i < triggerArrayLength; i++) {\n var trigger = this._triggerArray[i];\n var selector = Util.getSelectorFromElement(trigger);\n\n if (selector !== null) {\n var $elem = $([].slice.call(document.querySelectorAll(selector)));\n\n if (!$elem.hasClass(ClassName.SHOW)) {\n $(trigger).addClass(ClassName.COLLAPSED).attr('aria-expanded', false);\n }\n }\n }\n }\n\n this.setTransitioning(true);\n\n var complete = function complete() {\n _this2.setTransitioning(false);\n\n $(_this2._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).trigger(Event.HIDDEN);\n };\n\n this._element.style[dimension] = '';\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n };\n\n _proto.setTransitioning = function setTransitioning(isTransitioning) {\n this._isTransitioning = isTransitioning;\n };\n\n _proto.dispose = function dispose() {\n $.removeData(this._element, DATA_KEY);\n this._config = null;\n this._parent = null;\n this._element = null;\n this._triggerArray = null;\n this._isTransitioning = null;\n } // Private\n ;\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread2({}, Default, {}, config);\n config.toggle = Boolean(config.toggle); // Coerce string values\n\n Util.typeCheckConfig(NAME, config, DefaultType);\n return config;\n };\n\n _proto._getDimension = function _getDimension() {\n var hasWidth = $(this._element).hasClass(Dimension.WIDTH);\n return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT;\n };\n\n _proto._getParent = function _getParent() {\n var _this3 = this;\n\n var parent;\n\n if (Util.isElement(this._config.parent)) {\n parent = this._config.parent; // It's a jQuery object\n\n if (typeof this._config.parent.jquery !== 'undefined') {\n parent = this._config.parent[0];\n }\n } else {\n parent = document.querySelector(this._config.parent);\n }\n\n var selector = \"[data-toggle=\\\"collapse\\\"][data-parent=\\\"\" + this._config.parent + \"\\\"]\";\n var children = [].slice.call(parent.querySelectorAll(selector));\n $(children).each(function (i, element) {\n _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);\n });\n return parent;\n };\n\n _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {\n var isOpen = $(element).hasClass(ClassName.SHOW);\n\n if (triggerArray.length) {\n $(triggerArray).toggleClass(ClassName.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);\n }\n } // Static\n ;\n\n Collapse._getTargetFromElement = function _getTargetFromElement(element) {\n var selector = Util.getSelectorFromElement(element);\n return selector ? document.querySelector(selector) : null;\n };\n\n Collapse._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var $this = $(this);\n var data = $this.data(DATA_KEY);\n\n var _config = _objectSpread2({}, Default, {}, $this.data(), {}, typeof config === 'object' && config ? config : {});\n\n if (!data && _config.toggle && /show|hide/.test(config)) {\n _config.toggle = false;\n }\n\n if (!data) {\n data = new Collapse(this, _config);\n $this.data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n _createClass(Collapse, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }]);\n\n return Collapse;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n if (event.currentTarget.tagName === 'A') {\n event.preventDefault();\n }\n\n var $trigger = $(this);\n var selector = Util.getSelectorFromElement(this);\n var selectors = [].slice.call(document.querySelectorAll(selector));\n $(selectors).each(function () {\n var $target = $(this);\n var data = $target.data(DATA_KEY);\n var config = data ? 'toggle' : $trigger.data();\n\n Collapse._jQueryInterface.call($target, config);\n });\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Collapse._jQueryInterface;\n $.fn[NAME].Constructor = Collapse;\n\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return Collapse._jQueryInterface;\n };\n\n return Collapse;\n\n})));\n//# sourceMappingURL=collapse.js.map\n","/*!\n * Bootstrap modal.js v4.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) :\n typeof define === 'function' && define.amd ? define(['jquery', './util.js'], factory) :\n (global = global || self, global.Modal = factory(global.jQuery, global.Util));\n}(this, (function ($, Util) { 'use strict';\n\n $ = $ && $.hasOwnProperty('default') ? $['default'] : $;\n Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util;\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n }\n\n function ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n }\n\n function _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n }\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME = 'modal';\n var VERSION = '4.4.1';\n var DATA_KEY = 'bs.modal';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $.fn[NAME];\n var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n var Default = {\n backdrop: true,\n keyboard: true,\n focus: true,\n show: true\n };\n var DefaultType = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n focus: 'boolean',\n show: 'boolean'\n };\n var Event = {\n HIDE: \"hide\" + EVENT_KEY,\n HIDE_PREVENTED: \"hidePrevented\" + EVENT_KEY,\n HIDDEN: \"hidden\" + EVENT_KEY,\n SHOW: \"show\" + EVENT_KEY,\n SHOWN: \"shown\" + EVENT_KEY,\n FOCUSIN: \"focusin\" + EVENT_KEY,\n RESIZE: \"resize\" + EVENT_KEY,\n CLICK_DISMISS: \"click.dismiss\" + EVENT_KEY,\n KEYDOWN_DISMISS: \"keydown.dismiss\" + EVENT_KEY,\n MOUSEUP_DISMISS: \"mouseup.dismiss\" + EVENT_KEY,\n MOUSEDOWN_DISMISS: \"mousedown.dismiss\" + EVENT_KEY,\n CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n };\n var ClassName = {\n SCROLLABLE: 'modal-dialog-scrollable',\n SCROLLBAR_MEASURER: 'modal-scrollbar-measure',\n BACKDROP: 'modal-backdrop',\n OPEN: 'modal-open',\n FADE: 'fade',\n SHOW: 'show',\n STATIC: 'modal-static'\n };\n var Selector = {\n DIALOG: '.modal-dialog',\n MODAL_BODY: '.modal-body',\n DATA_TOGGLE: '[data-toggle=\"modal\"]',\n DATA_DISMISS: '[data-dismiss=\"modal\"]',\n FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',\n STICKY_CONTENT: '.sticky-top'\n };\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n var Modal =\n /*#__PURE__*/\n function () {\n function Modal(element, config) {\n this._config = this._getConfig(config);\n this._element = element;\n this._dialog = element.querySelector(Selector.DIALOG);\n this._backdrop = null;\n this._isShown = false;\n this._isBodyOverflowing = false;\n this._ignoreBackdropClick = false;\n this._isTransitioning = false;\n this._scrollbarWidth = 0;\n } // Getters\n\n\n var _proto = Modal.prototype;\n\n // Public\n _proto.toggle = function toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget);\n };\n\n _proto.show = function show(relatedTarget) {\n var _this = this;\n\n if (this._isShown || this._isTransitioning) {\n return;\n }\n\n if ($(this._element).hasClass(ClassName.FADE)) {\n this._isTransitioning = true;\n }\n\n var showEvent = $.Event(Event.SHOW, {\n relatedTarget: relatedTarget\n });\n $(this._element).trigger(showEvent);\n\n if (this._isShown || showEvent.isDefaultPrevented()) {\n return;\n }\n\n this._isShown = true;\n\n this._checkScrollbar();\n\n this._setScrollbar();\n\n this._adjustDialog();\n\n this._setEscapeEvent();\n\n this._setResizeEvent();\n\n $(this._element).on(Event.CLICK_DISMISS, Selector.DATA_DISMISS, function (event) {\n return _this.hide(event);\n });\n $(this._dialog).on(Event.MOUSEDOWN_DISMISS, function () {\n $(_this._element).one(Event.MOUSEUP_DISMISS, function (event) {\n if ($(event.target).is(_this._element)) {\n _this._ignoreBackdropClick = true;\n }\n });\n });\n\n this._showBackdrop(function () {\n return _this._showElement(relatedTarget);\n });\n };\n\n _proto.hide = function hide(event) {\n var _this2 = this;\n\n if (event) {\n event.preventDefault();\n }\n\n if (!this._isShown || this._isTransitioning) {\n return;\n }\n\n var hideEvent = $.Event(Event.HIDE);\n $(this._element).trigger(hideEvent);\n\n if (!this._isShown || hideEvent.isDefaultPrevented()) {\n return;\n }\n\n this._isShown = false;\n var transition = $(this._element).hasClass(ClassName.FADE);\n\n if (transition) {\n this._isTransitioning = true;\n }\n\n this._setEscapeEvent();\n\n this._setResizeEvent();\n\n $(document).off(Event.FOCUSIN);\n $(this._element).removeClass(ClassName.SHOW);\n $(this._element).off(Event.CLICK_DISMISS);\n $(this._dialog).off(Event.MOUSEDOWN_DISMISS);\n\n if (transition) {\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n $(this._element).one(Util.TRANSITION_END, function (event) {\n return _this2._hideModal(event);\n }).emulateTransitionEnd(transitionDuration);\n } else {\n this._hideModal();\n }\n };\n\n _proto.dispose = function dispose() {\n [window, this._element, this._dialog].forEach(function (htmlElement) {\n return $(htmlElement).off(EVENT_KEY);\n });\n /**\n * `document` has 2 events `Event.FOCUSIN` and `Event.CLICK_DATA_API`\n * Do not move `document` in `htmlElements` array\n * It will remove `Event.CLICK_DATA_API` event that should remain\n */\n\n $(document).off(Event.FOCUSIN);\n $.removeData(this._element, DATA_KEY);\n this._config = null;\n this._element = null;\n this._dialog = null;\n this._backdrop = null;\n this._isShown = null;\n this._isBodyOverflowing = null;\n this._ignoreBackdropClick = null;\n this._isTransitioning = null;\n this._scrollbarWidth = null;\n };\n\n _proto.handleUpdate = function handleUpdate() {\n this._adjustDialog();\n } // Private\n ;\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread2({}, Default, {}, config);\n Util.typeCheckConfig(NAME, config, DefaultType);\n return config;\n };\n\n _proto._triggerBackdropTransition = function _triggerBackdropTransition() {\n var _this3 = this;\n\n if (this._config.backdrop === 'static') {\n var hideEventPrevented = $.Event(Event.HIDE_PREVENTED);\n $(this._element).trigger(hideEventPrevented);\n\n if (hideEventPrevented.defaultPrevented) {\n return;\n }\n\n this._element.classList.add(ClassName.STATIC);\n\n var modalTransitionDuration = Util.getTransitionDurationFromElement(this._element);\n $(this._element).one(Util.TRANSITION_END, function () {\n _this3._element.classList.remove(ClassName.STATIC);\n }).emulateTransitionEnd(modalTransitionDuration);\n\n this._element.focus();\n } else {\n this.hide();\n }\n };\n\n _proto._showElement = function _showElement(relatedTarget) {\n var _this4 = this;\n\n var transition = $(this._element).hasClass(ClassName.FADE);\n var modalBody = this._dialog ? this._dialog.querySelector(Selector.MODAL_BODY) : null;\n\n if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n // Don't move modal's DOM position\n document.body.appendChild(this._element);\n }\n\n this._element.style.display = 'block';\n\n this._element.removeAttribute('aria-hidden');\n\n this._element.setAttribute('aria-modal', true);\n\n if ($(this._dialog).hasClass(ClassName.SCROLLABLE) && modalBody) {\n modalBody.scrollTop = 0;\n } else {\n this._element.scrollTop = 0;\n }\n\n if (transition) {\n Util.reflow(this._element);\n }\n\n $(this._element).addClass(ClassName.SHOW);\n\n if (this._config.focus) {\n this._enforceFocus();\n }\n\n var shownEvent = $.Event(Event.SHOWN, {\n relatedTarget: relatedTarget\n });\n\n var transitionComplete = function transitionComplete() {\n if (_this4._config.focus) {\n _this4._element.focus();\n }\n\n _this4._isTransitioning = false;\n $(_this4._element).trigger(shownEvent);\n };\n\n if (transition) {\n var transitionDuration = Util.getTransitionDurationFromElement(this._dialog);\n $(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration);\n } else {\n transitionComplete();\n }\n };\n\n _proto._enforceFocus = function _enforceFocus() {\n var _this5 = this;\n\n $(document).off(Event.FOCUSIN) // Guard against infinite focus loop\n .on(Event.FOCUSIN, function (event) {\n if (document !== event.target && _this5._element !== event.target && $(_this5._element).has(event.target).length === 0) {\n _this5._element.focus();\n }\n });\n };\n\n _proto._setEscapeEvent = function _setEscapeEvent() {\n var _this6 = this;\n\n if (this._isShown && this._config.keyboard) {\n $(this._element).on(Event.KEYDOWN_DISMISS, function (event) {\n if (event.which === ESCAPE_KEYCODE) {\n _this6._triggerBackdropTransition();\n }\n });\n } else if (!this._isShown) {\n $(this._element).off(Event.KEYDOWN_DISMISS);\n }\n };\n\n _proto._setResizeEvent = function _setResizeEvent() {\n var _this7 = this;\n\n if (this._isShown) {\n $(window).on(Event.RESIZE, function (event) {\n return _this7.handleUpdate(event);\n });\n } else {\n $(window).off(Event.RESIZE);\n }\n };\n\n _proto._hideModal = function _hideModal() {\n var _this8 = this;\n\n this._element.style.display = 'none';\n\n this._element.setAttribute('aria-hidden', true);\n\n this._element.removeAttribute('aria-modal');\n\n this._isTransitioning = false;\n\n this._showBackdrop(function () {\n $(document.body).removeClass(ClassName.OPEN);\n\n _this8._resetAdjustments();\n\n _this8._resetScrollbar();\n\n $(_this8._element).trigger(Event.HIDDEN);\n });\n };\n\n _proto._removeBackdrop = function _removeBackdrop() {\n if (this._backdrop) {\n $(this._backdrop).remove();\n this._backdrop = null;\n }\n };\n\n _proto._showBackdrop = function _showBackdrop(callback) {\n var _this9 = this;\n\n var animate = $(this._element).hasClass(ClassName.FADE) ? ClassName.FADE : '';\n\n if (this._isShown && this._config.backdrop) {\n this._backdrop = document.createElement('div');\n this._backdrop.className = ClassName.BACKDROP;\n\n if (animate) {\n this._backdrop.classList.add(animate);\n }\n\n $(this._backdrop).appendTo(document.body);\n $(this._element).on(Event.CLICK_DISMISS, function (event) {\n if (_this9._ignoreBackdropClick) {\n _this9._ignoreBackdropClick = false;\n return;\n }\n\n if (event.target !== event.currentTarget) {\n return;\n }\n\n _this9._triggerBackdropTransition();\n });\n\n if (animate) {\n Util.reflow(this._backdrop);\n }\n\n $(this._backdrop).addClass(ClassName.SHOW);\n\n if (!callback) {\n return;\n }\n\n if (!animate) {\n callback();\n return;\n }\n\n var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n $(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);\n } else if (!this._isShown && this._backdrop) {\n $(this._backdrop).removeClass(ClassName.SHOW);\n\n var callbackRemove = function callbackRemove() {\n _this9._removeBackdrop();\n\n if (callback) {\n callback();\n }\n };\n\n if ($(this._element).hasClass(ClassName.FADE)) {\n var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n\n $(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);\n } else {\n callbackRemove();\n }\n } else if (callback) {\n callback();\n }\n } // ----------------------------------------------------------------------\n // the following methods are used to handle overflowing modals\n // todo (fat): these should probably be refactored out of modal.js\n // ----------------------------------------------------------------------\n ;\n\n _proto._adjustDialog = function _adjustDialog() {\n var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n if (!this._isBodyOverflowing && isModalOverflowing) {\n this._element.style.paddingLeft = this._scrollbarWidth + \"px\";\n }\n\n if (this._isBodyOverflowing && !isModalOverflowing) {\n this._element.style.paddingRight = this._scrollbarWidth + \"px\";\n }\n };\n\n _proto._resetAdjustments = function _resetAdjustments() {\n this._element.style.paddingLeft = '';\n this._element.style.paddingRight = '';\n };\n\n _proto._checkScrollbar = function _checkScrollbar() {\n var rect = document.body.getBoundingClientRect();\n this._isBodyOverflowing = rect.left + rect.right < window.innerWidth;\n this._scrollbarWidth = this._getScrollbarWidth();\n };\n\n _proto._setScrollbar = function _setScrollbar() {\n var _this10 = this;\n\n if (this._isBodyOverflowing) {\n // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n var fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT));\n var stickyContent = [].slice.call(document.querySelectorAll(Selector.STICKY_CONTENT)); // Adjust fixed content padding\n\n $(fixedContent).each(function (index, element) {\n var actualPadding = element.style.paddingRight;\n var calculatedPadding = $(element).css('padding-right');\n $(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this10._scrollbarWidth + \"px\");\n }); // Adjust sticky content margin\n\n $(stickyContent).each(function (index, element) {\n var actualMargin = element.style.marginRight;\n var calculatedMargin = $(element).css('margin-right');\n $(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this10._scrollbarWidth + \"px\");\n }); // Adjust body padding\n\n var actualPadding = document.body.style.paddingRight;\n var calculatedPadding = $(document.body).css('padding-right');\n $(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + \"px\");\n }\n\n $(document.body).addClass(ClassName.OPEN);\n };\n\n _proto._resetScrollbar = function _resetScrollbar() {\n // Restore fixed content padding\n var fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT));\n $(fixedContent).each(function (index, element) {\n var padding = $(element).data('padding-right');\n $(element).removeData('padding-right');\n element.style.paddingRight = padding ? padding : '';\n }); // Restore sticky content\n\n var elements = [].slice.call(document.querySelectorAll(\"\" + Selector.STICKY_CONTENT));\n $(elements).each(function (index, element) {\n var margin = $(element).data('margin-right');\n\n if (typeof margin !== 'undefined') {\n $(element).css('margin-right', margin).removeData('margin-right');\n }\n }); // Restore body padding\n\n var padding = $(document.body).data('padding-right');\n $(document.body).removeData('padding-right');\n document.body.style.paddingRight = padding ? padding : '';\n };\n\n _proto._getScrollbarWidth = function _getScrollbarWidth() {\n // thx d.walsh\n var scrollDiv = document.createElement('div');\n scrollDiv.className = ClassName.SCROLLBAR_MEASURER;\n document.body.appendChild(scrollDiv);\n var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;\n document.body.removeChild(scrollDiv);\n return scrollbarWidth;\n } // Static\n ;\n\n Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n var data = $(this).data(DATA_KEY);\n\n var _config = _objectSpread2({}, Default, {}, $(this).data(), {}, typeof config === 'object' && config ? config : {});\n\n if (!data) {\n data = new Modal(this, _config);\n $(this).data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config](relatedTarget);\n } else if (_config.show) {\n data.show(relatedTarget);\n }\n });\n };\n\n _createClass(Modal, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }]);\n\n return Modal;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n var _this11 = this;\n\n var target;\n var selector = Util.getSelectorFromElement(this);\n\n if (selector) {\n target = document.querySelector(selector);\n }\n\n var config = $(target).data(DATA_KEY) ? 'toggle' : _objectSpread2({}, $(target).data(), {}, $(this).data());\n\n if (this.tagName === 'A' || this.tagName === 'AREA') {\n event.preventDefault();\n }\n\n var $target = $(target).one(Event.SHOW, function (showEvent) {\n if (showEvent.isDefaultPrevented()) {\n // Only register focus restorer if modal will actually get shown\n return;\n }\n\n $target.one(Event.HIDDEN, function () {\n if ($(_this11).is(':visible')) {\n _this11.focus();\n }\n });\n });\n\n Modal._jQueryInterface.call($(target), config, this);\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Modal._jQueryInterface;\n $.fn[NAME].Constructor = Modal;\n\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return Modal._jQueryInterface;\n };\n\n return Modal;\n\n})));\n//# sourceMappingURL=modal.js.map\n","/*!\n * Bootstrap popover.js v4.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./tooltip.js')) :\n typeof define === 'function' && define.amd ? define(['jquery', './tooltip.js'], factory) :\n (global = global || self, global.Popover = factory(global.jQuery, global.Tooltip));\n}(this, (function ($, Tooltip) { 'use strict';\n\n $ = $ && $.hasOwnProperty('default') ? $['default'] : $;\n Tooltip = Tooltip && Tooltip.hasOwnProperty('default') ? Tooltip['default'] : Tooltip;\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n }\n\n function ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n }\n\n function _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n }\n\n function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n }\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME = 'popover';\n var VERSION = '4.4.1';\n var DATA_KEY = 'bs.popover';\n var EVENT_KEY = \".\" + DATA_KEY;\n var JQUERY_NO_CONFLICT = $.fn[NAME];\n var CLASS_PREFIX = 'bs-popover';\n var BSCLS_PREFIX_REGEX = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX + \"\\\\S+\", 'g');\n\n var Default = _objectSpread2({}, Tooltip.Default, {\n placement: 'right',\n trigger: 'click',\n content: '',\n template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div></div>'\n });\n\n var DefaultType = _objectSpread2({}, Tooltip.DefaultType, {\n content: '(string|element|function)'\n });\n\n var ClassName = {\n FADE: 'fade',\n SHOW: 'show'\n };\n var Selector = {\n TITLE: '.popover-header',\n CONTENT: '.popover-body'\n };\n var Event = {\n HIDE: \"hide\" + EVENT_KEY,\n HIDDEN: \"hidden\" + EVENT_KEY,\n SHOW: \"show\" + EVENT_KEY,\n SHOWN: \"shown\" + EVENT_KEY,\n INSERTED: \"inserted\" + EVENT_KEY,\n CLICK: \"click\" + EVENT_KEY,\n FOCUSIN: \"focusin\" + EVENT_KEY,\n FOCUSOUT: \"focusout\" + EVENT_KEY,\n MOUSEENTER: \"mouseenter\" + EVENT_KEY,\n MOUSELEAVE: \"mouseleave\" + EVENT_KEY\n };\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n var Popover =\n /*#__PURE__*/\n function (_Tooltip) {\n _inheritsLoose(Popover, _Tooltip);\n\n function Popover() {\n return _Tooltip.apply(this, arguments) || this;\n }\n\n var _proto = Popover.prototype;\n\n // Overrides\n _proto.isWithContent = function isWithContent() {\n return this.getTitle() || this._getContent();\n };\n\n _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(CLASS_PREFIX + \"-\" + attachment);\n };\n\n _proto.getTipElement = function getTipElement() {\n this.tip = this.tip || $(this.config.template)[0];\n return this.tip;\n };\n\n _proto.setContent = function setContent() {\n var $tip = $(this.getTipElement()); // We use append for html objects to maintain js events\n\n this.setElementContent($tip.find(Selector.TITLE), this.getTitle());\n\n var content = this._getContent();\n\n if (typeof content === 'function') {\n content = content.call(this.element);\n }\n\n this.setElementContent($tip.find(Selector.CONTENT), content);\n $tip.removeClass(ClassName.FADE + \" \" + ClassName.SHOW);\n } // Private\n ;\n\n _proto._getContent = function _getContent() {\n return this.element.getAttribute('data-content') || this.config.content;\n };\n\n _proto._cleanTipClass = function _cleanTipClass() {\n var $tip = $(this.getTipElement());\n var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);\n\n if (tabClass !== null && tabClass.length > 0) {\n $tip.removeClass(tabClass.join(''));\n }\n } // Static\n ;\n\n Popover._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $(this).data(DATA_KEY);\n\n var _config = typeof config === 'object' ? config : null;\n\n if (!data && /dispose|hide/.test(config)) {\n return;\n }\n\n if (!data) {\n data = new Popover(this, _config);\n $(this).data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n _createClass(Popover, null, [{\n key: \"VERSION\",\n // Getters\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }, {\n key: \"NAME\",\n get: function get() {\n return NAME;\n }\n }, {\n key: \"DATA_KEY\",\n get: function get() {\n return DATA_KEY;\n }\n }, {\n key: \"Event\",\n get: function get() {\n return Event;\n }\n }, {\n key: \"EVENT_KEY\",\n get: function get() {\n return EVENT_KEY;\n }\n }, {\n key: \"DefaultType\",\n get: function get() {\n return DefaultType;\n }\n }]);\n\n return Popover;\n }(Tooltip);\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n\n $.fn[NAME] = Popover._jQueryInterface;\n $.fn[NAME].Constructor = Popover;\n\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return Popover._jQueryInterface;\n };\n\n return Popover;\n\n})));\n//# sourceMappingURL=popover.js.map\n","/*!\n * Bootstrap scrollspy.js v4.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) :\n typeof define === 'function' && define.amd ? define(['jquery', './util.js'], factory) :\n (global = global || self, global.ScrollSpy = factory(global.jQuery, global.Util));\n}(this, (function ($, Util) { 'use strict';\n\n $ = $ && $.hasOwnProperty('default') ? $['default'] : $;\n Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util;\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n }\n\n function ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n }\n\n function _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n }\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME = 'scrollspy';\n var VERSION = '4.4.1';\n var DATA_KEY = 'bs.scrollspy';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $.fn[NAME];\n var Default = {\n offset: 10,\n method: 'auto',\n target: ''\n };\n var DefaultType = {\n offset: 'number',\n method: 'string',\n target: '(string|element)'\n };\n var Event = {\n ACTIVATE: \"activate\" + EVENT_KEY,\n SCROLL: \"scroll\" + EVENT_KEY,\n LOAD_DATA_API: \"load\" + EVENT_KEY + DATA_API_KEY\n };\n var ClassName = {\n DROPDOWN_ITEM: 'dropdown-item',\n DROPDOWN_MENU: 'dropdown-menu',\n ACTIVE: 'active'\n };\n var Selector = {\n DATA_SPY: '[data-spy=\"scroll\"]',\n ACTIVE: '.active',\n NAV_LIST_GROUP: '.nav, .list-group',\n NAV_LINKS: '.nav-link',\n NAV_ITEMS: '.nav-item',\n LIST_ITEMS: '.list-group-item',\n DROPDOWN: '.dropdown',\n DROPDOWN_ITEMS: '.dropdown-item',\n DROPDOWN_TOGGLE: '.dropdown-toggle'\n };\n var OffsetMethod = {\n OFFSET: 'offset',\n POSITION: 'position'\n };\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n var ScrollSpy =\n /*#__PURE__*/\n function () {\n function ScrollSpy(element, config) {\n var _this = this;\n\n this._element = element;\n this._scrollElement = element.tagName === 'BODY' ? window : element;\n this._config = this._getConfig(config);\n this._selector = this._config.target + \" \" + Selector.NAV_LINKS + \",\" + (this._config.target + \" \" + Selector.LIST_ITEMS + \",\") + (this._config.target + \" \" + Selector.DROPDOWN_ITEMS);\n this._offsets = [];\n this._targets = [];\n this._activeTarget = null;\n this._scrollHeight = 0;\n $(this._scrollElement).on(Event.SCROLL, function (event) {\n return _this._process(event);\n });\n this.refresh();\n\n this._process();\n } // Getters\n\n\n var _proto = ScrollSpy.prototype;\n\n // Public\n _proto.refresh = function refresh() {\n var _this2 = this;\n\n var autoMethod = this._scrollElement === this._scrollElement.window ? OffsetMethod.OFFSET : OffsetMethod.POSITION;\n var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0;\n this._offsets = [];\n this._targets = [];\n this._scrollHeight = this._getScrollHeight();\n var targets = [].slice.call(document.querySelectorAll(this._selector));\n targets.map(function (element) {\n var target;\n var targetSelector = Util.getSelectorFromElement(element);\n\n if (targetSelector) {\n target = document.querySelector(targetSelector);\n }\n\n if (target) {\n var targetBCR = target.getBoundingClientRect();\n\n if (targetBCR.width || targetBCR.height) {\n // TODO (fat): remove sketch reliance on jQuery position/offset\n return [$(target)[offsetMethod]().top + offsetBase, targetSelector];\n }\n }\n\n return null;\n }).filter(function (item) {\n return item;\n }).sort(function (a, b) {\n return a[0] - b[0];\n }).forEach(function (item) {\n _this2._offsets.push(item[0]);\n\n _this2._targets.push(item[1]);\n });\n };\n\n _proto.dispose = function dispose() {\n $.removeData(this._element, DATA_KEY);\n $(this._scrollElement).off(EVENT_KEY);\n this._element = null;\n this._scrollElement = null;\n this._config = null;\n this._selector = null;\n this._offsets = null;\n this._targets = null;\n this._activeTarget = null;\n this._scrollHeight = null;\n } // Private\n ;\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread2({}, Default, {}, typeof config === 'object' && config ? config : {});\n\n if (typeof config.target !== 'string') {\n var id = $(config.target).attr('id');\n\n if (!id) {\n id = Util.getUID(NAME);\n $(config.target).attr('id', id);\n }\n\n config.target = \"#\" + id;\n }\n\n Util.typeCheckConfig(NAME, config, DefaultType);\n return config;\n };\n\n _proto._getScrollTop = function _getScrollTop() {\n return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n };\n\n _proto._getScrollHeight = function _getScrollHeight() {\n return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n };\n\n _proto._getOffsetHeight = function _getOffsetHeight() {\n return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n };\n\n _proto._process = function _process() {\n var scrollTop = this._getScrollTop() + this._config.offset;\n\n var scrollHeight = this._getScrollHeight();\n\n var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n if (this._scrollHeight !== scrollHeight) {\n this.refresh();\n }\n\n if (scrollTop >= maxScroll) {\n var target = this._targets[this._targets.length - 1];\n\n if (this._activeTarget !== target) {\n this._activate(target);\n }\n\n return;\n }\n\n if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n this._activeTarget = null;\n\n this._clear();\n\n return;\n }\n\n var offsetLength = this._offsets.length;\n\n for (var i = offsetLength; i--;) {\n var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n if (isActiveTarget) {\n this._activate(this._targets[i]);\n }\n }\n };\n\n _proto._activate = function _activate(target) {\n this._activeTarget = target;\n\n this._clear();\n\n var queries = this._selector.split(',').map(function (selector) {\n return selector + \"[data-target=\\\"\" + target + \"\\\"],\" + selector + \"[href=\\\"\" + target + \"\\\"]\";\n });\n\n var $link = $([].slice.call(document.querySelectorAll(queries.join(','))));\n\n if ($link.hasClass(ClassName.DROPDOWN_ITEM)) {\n $link.closest(Selector.DROPDOWN).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE);\n $link.addClass(ClassName.ACTIVE);\n } else {\n // Set triggered link as active\n $link.addClass(ClassName.ACTIVE); // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n\n $link.parents(Selector.NAV_LIST_GROUP).prev(Selector.NAV_LINKS + \", \" + Selector.LIST_ITEMS).addClass(ClassName.ACTIVE); // Handle special case when .nav-link is inside .nav-item\n\n $link.parents(Selector.NAV_LIST_GROUP).prev(Selector.NAV_ITEMS).children(Selector.NAV_LINKS).addClass(ClassName.ACTIVE);\n }\n\n $(this._scrollElement).trigger(Event.ACTIVATE, {\n relatedTarget: target\n });\n };\n\n _proto._clear = function _clear() {\n [].slice.call(document.querySelectorAll(this._selector)).filter(function (node) {\n return node.classList.contains(ClassName.ACTIVE);\n }).forEach(function (node) {\n return node.classList.remove(ClassName.ACTIVE);\n });\n } // Static\n ;\n\n ScrollSpy._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $(this).data(DATA_KEY);\n\n var _config = typeof config === 'object' && config;\n\n if (!data) {\n data = new ScrollSpy(this, _config);\n $(this).data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n _createClass(ScrollSpy, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }]);\n\n return ScrollSpy;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $(window).on(Event.LOAD_DATA_API, function () {\n var scrollSpys = [].slice.call(document.querySelectorAll(Selector.DATA_SPY));\n var scrollSpysLength = scrollSpys.length;\n\n for (var i = scrollSpysLength; i--;) {\n var $spy = $(scrollSpys[i]);\n\n ScrollSpy._jQueryInterface.call($spy, $spy.data());\n }\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = ScrollSpy._jQueryInterface;\n $.fn[NAME].Constructor = ScrollSpy;\n\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return ScrollSpy._jQueryInterface;\n };\n\n return ScrollSpy;\n\n})));\n//# sourceMappingURL=scrollspy.js.map\n","/*!\n * Bootstrap tab.js v4.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) :\n typeof define === 'function' && define.amd ? define(['jquery', './util.js'], factory) :\n (global = global || self, global.Tab = factory(global.jQuery, global.Util));\n}(this, (function ($, Util) { 'use strict';\n\n $ = $ && $.hasOwnProperty('default') ? $['default'] : $;\n Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util;\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME = 'tab';\n var VERSION = '4.4.1';\n var DATA_KEY = 'bs.tab';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $.fn[NAME];\n var Event = {\n HIDE: \"hide\" + EVENT_KEY,\n HIDDEN: \"hidden\" + EVENT_KEY,\n SHOW: \"show\" + EVENT_KEY,\n SHOWN: \"shown\" + EVENT_KEY,\n CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n };\n var ClassName = {\n DROPDOWN_MENU: 'dropdown-menu',\n ACTIVE: 'active',\n DISABLED: 'disabled',\n FADE: 'fade',\n SHOW: 'show'\n };\n var Selector = {\n DROPDOWN: '.dropdown',\n NAV_LIST_GROUP: '.nav, .list-group',\n ACTIVE: '.active',\n ACTIVE_UL: '> li > .active',\n DATA_TOGGLE: '[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]',\n DROPDOWN_TOGGLE: '.dropdown-toggle',\n DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active'\n };\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n var Tab =\n /*#__PURE__*/\n function () {\n function Tab(element) {\n this._element = element;\n } // Getters\n\n\n var _proto = Tab.prototype;\n\n // Public\n _proto.show = function show() {\n var _this = this;\n\n if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(ClassName.ACTIVE) || $(this._element).hasClass(ClassName.DISABLED)) {\n return;\n }\n\n var target;\n var previous;\n var listElement = $(this._element).closest(Selector.NAV_LIST_GROUP)[0];\n var selector = Util.getSelectorFromElement(this._element);\n\n if (listElement) {\n var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? Selector.ACTIVE_UL : Selector.ACTIVE;\n previous = $.makeArray($(listElement).find(itemSelector));\n previous = previous[previous.length - 1];\n }\n\n var hideEvent = $.Event(Event.HIDE, {\n relatedTarget: this._element\n });\n var showEvent = $.Event(Event.SHOW, {\n relatedTarget: previous\n });\n\n if (previous) {\n $(previous).trigger(hideEvent);\n }\n\n $(this._element).trigger(showEvent);\n\n if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) {\n return;\n }\n\n if (selector) {\n target = document.querySelector(selector);\n }\n\n this._activate(this._element, listElement);\n\n var complete = function complete() {\n var hiddenEvent = $.Event(Event.HIDDEN, {\n relatedTarget: _this._element\n });\n var shownEvent = $.Event(Event.SHOWN, {\n relatedTarget: previous\n });\n $(previous).trigger(hiddenEvent);\n $(_this._element).trigger(shownEvent);\n };\n\n if (target) {\n this._activate(target, target.parentNode, complete);\n } else {\n complete();\n }\n };\n\n _proto.dispose = function dispose() {\n $.removeData(this._element, DATA_KEY);\n this._element = null;\n } // Private\n ;\n\n _proto._activate = function _activate(element, container, callback) {\n var _this2 = this;\n\n var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? $(container).find(Selector.ACTIVE_UL) : $(container).children(Selector.ACTIVE);\n var active = activeElements[0];\n var isTransitioning = callback && active && $(active).hasClass(ClassName.FADE);\n\n var complete = function complete() {\n return _this2._transitionComplete(element, active, callback);\n };\n\n if (active && isTransitioning) {\n var transitionDuration = Util.getTransitionDurationFromElement(active);\n $(active).removeClass(ClassName.SHOW).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n } else {\n complete();\n }\n };\n\n _proto._transitionComplete = function _transitionComplete(element, active, callback) {\n if (active) {\n $(active).removeClass(ClassName.ACTIVE);\n var dropdownChild = $(active.parentNode).find(Selector.DROPDOWN_ACTIVE_CHILD)[0];\n\n if (dropdownChild) {\n $(dropdownChild).removeClass(ClassName.ACTIVE);\n }\n\n if (active.getAttribute('role') === 'tab') {\n active.setAttribute('aria-selected', false);\n }\n }\n\n $(element).addClass(ClassName.ACTIVE);\n\n if (element.getAttribute('role') === 'tab') {\n element.setAttribute('aria-selected', true);\n }\n\n Util.reflow(element);\n\n if (element.classList.contains(ClassName.FADE)) {\n element.classList.add(ClassName.SHOW);\n }\n\n if (element.parentNode && $(element.parentNode).hasClass(ClassName.DROPDOWN_MENU)) {\n var dropdownElement = $(element).closest(Selector.DROPDOWN)[0];\n\n if (dropdownElement) {\n var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(Selector.DROPDOWN_TOGGLE));\n $(dropdownToggleList).addClass(ClassName.ACTIVE);\n }\n\n element.setAttribute('aria-expanded', true);\n }\n\n if (callback) {\n callback();\n }\n } // Static\n ;\n\n Tab._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var $this = $(this);\n var data = $this.data(DATA_KEY);\n\n if (!data) {\n data = new Tab(this);\n $this.data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n _createClass(Tab, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }]);\n\n return Tab;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n event.preventDefault();\n\n Tab._jQueryInterface.call($(this), 'show');\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Tab._jQueryInterface;\n $.fn[NAME].Constructor = Tab;\n\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return Tab._jQueryInterface;\n };\n\n return Tab;\n\n})));\n//# sourceMappingURL=tab.js.map\n","/*!\n * Bootstrap tooltip.js v4.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('popper.js'), require('./util.js')) :\n typeof define === 'function' && define.amd ? define(['jquery', 'popper.js', './util.js'], factory) :\n (global = global || self, global.Tooltip = factory(global.jQuery, global.Popper, global.Util));\n}(this, (function ($, Popper, Util) { 'use strict';\n\n $ = $ && $.hasOwnProperty('default') ? $['default'] : $;\n Popper = Popper && Popper.hasOwnProperty('default') ? Popper['default'] : Popper;\n Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util;\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n }\n\n function ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n }\n\n function _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n }\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.4.1): tools/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href'];\n var ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n var DefaultWhitelist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n };\n /**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\n var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi;\n /**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\n var DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;\n\n function allowedAttribute(attr, allowedAttributeList) {\n var attrName = attr.nodeName.toLowerCase();\n\n if (allowedAttributeList.indexOf(attrName) !== -1) {\n if (uriAttrs.indexOf(attrName) !== -1) {\n return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN));\n }\n\n return true;\n }\n\n var regExp = allowedAttributeList.filter(function (attrRegex) {\n return attrRegex instanceof RegExp;\n }); // Check if a regular expression validates the attribute.\n\n for (var i = 0, l = regExp.length; i < l; i++) {\n if (attrName.match(regExp[i])) {\n return true;\n }\n }\n\n return false;\n }\n\n function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n if (unsafeHtml.length === 0) {\n return unsafeHtml;\n }\n\n if (sanitizeFn && typeof sanitizeFn === 'function') {\n return sanitizeFn(unsafeHtml);\n }\n\n var domParser = new window.DOMParser();\n var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n var whitelistKeys = Object.keys(whiteList);\n var elements = [].slice.call(createdDocument.body.querySelectorAll('*'));\n\n var _loop = function _loop(i, len) {\n var el = elements[i];\n var elName = el.nodeName.toLowerCase();\n\n if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {\n el.parentNode.removeChild(el);\n return \"continue\";\n }\n\n var attributeList = [].slice.call(el.attributes);\n var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);\n attributeList.forEach(function (attr) {\n if (!allowedAttribute(attr, whitelistedAttributes)) {\n el.removeAttribute(attr.nodeName);\n }\n });\n };\n\n for (var i = 0, len = elements.length; i < len; i++) {\n var _ret = _loop(i);\n\n if (_ret === \"continue\") continue;\n }\n\n return createdDocument.body.innerHTML;\n }\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME = 'tooltip';\n var VERSION = '4.4.1';\n var DATA_KEY = 'bs.tooltip';\n var EVENT_KEY = \".\" + DATA_KEY;\n var JQUERY_NO_CONFLICT = $.fn[NAME];\n var CLASS_PREFIX = 'bs-tooltip';\n var BSCLS_PREFIX_REGEX = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX + \"\\\\S+\", 'g');\n var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'];\n var DefaultType = {\n animation: 'boolean',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string',\n delay: '(number|object)',\n html: 'boolean',\n selector: '(string|boolean)',\n placement: '(string|function)',\n offset: '(number|string|function)',\n container: '(string|element|boolean)',\n fallbackPlacement: '(string|array)',\n boundary: '(string|element)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n whiteList: 'object',\n popperConfig: '(null|object)'\n };\n var AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: 'right',\n BOTTOM: 'bottom',\n LEFT: 'left'\n };\n var Default = {\n animation: true,\n template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<div class=\"tooltip-inner\"></div></div>',\n trigger: 'hover focus',\n title: '',\n delay: 0,\n html: false,\n selector: false,\n placement: 'top',\n offset: 0,\n container: false,\n fallbackPlacement: 'flip',\n boundary: 'scrollParent',\n sanitize: true,\n sanitizeFn: null,\n whiteList: DefaultWhitelist,\n popperConfig: null\n };\n var HoverState = {\n SHOW: 'show',\n OUT: 'out'\n };\n var Event = {\n HIDE: \"hide\" + EVENT_KEY,\n HIDDEN: \"hidden\" + EVENT_KEY,\n SHOW: \"show\" + EVENT_KEY,\n SHOWN: \"shown\" + EVENT_KEY,\n INSERTED: \"inserted\" + EVENT_KEY,\n CLICK: \"click\" + EVENT_KEY,\n FOCUSIN: \"focusin\" + EVENT_KEY,\n FOCUSOUT: \"focusout\" + EVENT_KEY,\n MOUSEENTER: \"mouseenter\" + EVENT_KEY,\n MOUSELEAVE: \"mouseleave\" + EVENT_KEY\n };\n var ClassName = {\n FADE: 'fade',\n SHOW: 'show'\n };\n var Selector = {\n TOOLTIP: '.tooltip',\n TOOLTIP_INNER: '.tooltip-inner',\n ARROW: '.arrow'\n };\n var Trigger = {\n HOVER: 'hover',\n FOCUS: 'focus',\n CLICK: 'click',\n MANUAL: 'manual'\n };\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n var Tooltip =\n /*#__PURE__*/\n function () {\n function Tooltip(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper.js (https://popper.js.org/)');\n } // private\n\n\n this._isEnabled = true;\n this._timeout = 0;\n this._hoverState = '';\n this._activeTrigger = {};\n this._popper = null; // Protected\n\n this.element = element;\n this.config = this._getConfig(config);\n this.tip = null;\n\n this._setListeners();\n } // Getters\n\n\n var _proto = Tooltip.prototype;\n\n // Public\n _proto.enable = function enable() {\n this._isEnabled = true;\n };\n\n _proto.disable = function disable() {\n this._isEnabled = false;\n };\n\n _proto.toggleEnabled = function toggleEnabled() {\n this._isEnabled = !this._isEnabled;\n };\n\n _proto.toggle = function toggle(event) {\n if (!this._isEnabled) {\n return;\n }\n\n if (event) {\n var dataKey = this.constructor.DATA_KEY;\n var context = $(event.currentTarget).data(dataKey);\n\n if (!context) {\n context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n $(event.currentTarget).data(dataKey, context);\n }\n\n context._activeTrigger.click = !context._activeTrigger.click;\n\n if (context._isWithActiveTrigger()) {\n context._enter(null, context);\n } else {\n context._leave(null, context);\n }\n } else {\n if ($(this.getTipElement()).hasClass(ClassName.SHOW)) {\n this._leave(null, this);\n\n return;\n }\n\n this._enter(null, this);\n }\n };\n\n _proto.dispose = function dispose() {\n clearTimeout(this._timeout);\n $.removeData(this.element, this.constructor.DATA_KEY);\n $(this.element).off(this.constructor.EVENT_KEY);\n $(this.element).closest('.modal').off('hide.bs.modal', this._hideModalHandler);\n\n if (this.tip) {\n $(this.tip).remove();\n }\n\n this._isEnabled = null;\n this._timeout = null;\n this._hoverState = null;\n this._activeTrigger = null;\n\n if (this._popper) {\n this._popper.destroy();\n }\n\n this._popper = null;\n this.element = null;\n this.config = null;\n this.tip = null;\n };\n\n _proto.show = function show() {\n var _this = this;\n\n if ($(this.element).css('display') === 'none') {\n throw new Error('Please use show on visible elements');\n }\n\n var showEvent = $.Event(this.constructor.Event.SHOW);\n\n if (this.isWithContent() && this._isEnabled) {\n $(this.element).trigger(showEvent);\n var shadowRoot = Util.findShadowRoot(this.element);\n var isInTheDom = $.contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element);\n\n if (showEvent.isDefaultPrevented() || !isInTheDom) {\n return;\n }\n\n var tip = this.getTipElement();\n var tipId = Util.getUID(this.constructor.NAME);\n tip.setAttribute('id', tipId);\n this.element.setAttribute('aria-describedby', tipId);\n this.setContent();\n\n if (this.config.animation) {\n $(tip).addClass(ClassName.FADE);\n }\n\n var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;\n\n var attachment = this._getAttachment(placement);\n\n this.addAttachmentClass(attachment);\n\n var container = this._getContainer();\n\n $(tip).data(this.constructor.DATA_KEY, this);\n\n if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {\n $(tip).appendTo(container);\n }\n\n $(this.element).trigger(this.constructor.Event.INSERTED);\n this._popper = new Popper(this.element, tip, this._getPopperConfig(attachment));\n $(tip).addClass(ClassName.SHOW); // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().on('mouseover', null, $.noop);\n }\n\n var complete = function complete() {\n if (_this.config.animation) {\n _this._fixTransition();\n }\n\n var prevHoverState = _this._hoverState;\n _this._hoverState = null;\n $(_this.element).trigger(_this.constructor.Event.SHOWN);\n\n if (prevHoverState === HoverState.OUT) {\n _this._leave(null, _this);\n }\n };\n\n if ($(this.tip).hasClass(ClassName.FADE)) {\n var transitionDuration = Util.getTransitionDurationFromElement(this.tip);\n $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n } else {\n complete();\n }\n }\n };\n\n _proto.hide = function hide(callback) {\n var _this2 = this;\n\n var tip = this.getTipElement();\n var hideEvent = $.Event(this.constructor.Event.HIDE);\n\n var complete = function complete() {\n if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) {\n tip.parentNode.removeChild(tip);\n }\n\n _this2._cleanTipClass();\n\n _this2.element.removeAttribute('aria-describedby');\n\n $(_this2.element).trigger(_this2.constructor.Event.HIDDEN);\n\n if (_this2._popper !== null) {\n _this2._popper.destroy();\n }\n\n if (callback) {\n callback();\n }\n };\n\n $(this.element).trigger(hideEvent);\n\n if (hideEvent.isDefaultPrevented()) {\n return;\n }\n\n $(tip).removeClass(ClassName.SHOW); // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop);\n }\n\n this._activeTrigger[Trigger.CLICK] = false;\n this._activeTrigger[Trigger.FOCUS] = false;\n this._activeTrigger[Trigger.HOVER] = false;\n\n if ($(this.tip).hasClass(ClassName.FADE)) {\n var transitionDuration = Util.getTransitionDurationFromElement(tip);\n $(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n } else {\n complete();\n }\n\n this._hoverState = '';\n };\n\n _proto.update = function update() {\n if (this._popper !== null) {\n this._popper.scheduleUpdate();\n }\n } // Protected\n ;\n\n _proto.isWithContent = function isWithContent() {\n return Boolean(this.getTitle());\n };\n\n _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(CLASS_PREFIX + \"-\" + attachment);\n };\n\n _proto.getTipElement = function getTipElement() {\n this.tip = this.tip || $(this.config.template)[0];\n return this.tip;\n };\n\n _proto.setContent = function setContent() {\n var tip = this.getTipElement();\n this.setElementContent($(tip.querySelectorAll(Selector.TOOLTIP_INNER)), this.getTitle());\n $(tip).removeClass(ClassName.FADE + \" \" + ClassName.SHOW);\n };\n\n _proto.setElementContent = function setElementContent($element, content) {\n if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n // Content is a DOM node or a jQuery\n if (this.config.html) {\n if (!$(content).parent().is($element)) {\n $element.empty().append(content);\n }\n } else {\n $element.text($(content).text());\n }\n\n return;\n }\n\n if (this.config.html) {\n if (this.config.sanitize) {\n content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn);\n }\n\n $element.html(content);\n } else {\n $element.text(content);\n }\n };\n\n _proto.getTitle = function getTitle() {\n var title = this.element.getAttribute('data-original-title');\n\n if (!title) {\n title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title;\n }\n\n return title;\n } // Private\n ;\n\n _proto._getPopperConfig = function _getPopperConfig(attachment) {\n var _this3 = this;\n\n var defaultBsConfig = {\n placement: attachment,\n modifiers: {\n offset: this._getOffset(),\n flip: {\n behavior: this.config.fallbackPlacement\n },\n arrow: {\n element: Selector.ARROW\n },\n preventOverflow: {\n boundariesElement: this.config.boundary\n }\n },\n onCreate: function onCreate(data) {\n if (data.originalPlacement !== data.placement) {\n _this3._handlePopperPlacementChange(data);\n }\n },\n onUpdate: function onUpdate(data) {\n return _this3._handlePopperPlacementChange(data);\n }\n };\n return _objectSpread2({}, defaultBsConfig, {}, this.config.popperConfig);\n };\n\n _proto._getOffset = function _getOffset() {\n var _this4 = this;\n\n var offset = {};\n\n if (typeof this.config.offset === 'function') {\n offset.fn = function (data) {\n data.offsets = _objectSpread2({}, data.offsets, {}, _this4.config.offset(data.offsets, _this4.element) || {});\n return data;\n };\n } else {\n offset.offset = this.config.offset;\n }\n\n return offset;\n };\n\n _proto._getContainer = function _getContainer() {\n if (this.config.container === false) {\n return document.body;\n }\n\n if (Util.isElement(this.config.container)) {\n return $(this.config.container);\n }\n\n return $(document).find(this.config.container);\n };\n\n _proto._getAttachment = function _getAttachment(placement) {\n return AttachmentMap[placement.toUpperCase()];\n };\n\n _proto._setListeners = function _setListeners() {\n var _this5 = this;\n\n var triggers = this.config.trigger.split(' ');\n triggers.forEach(function (trigger) {\n if (trigger === 'click') {\n $(_this5.element).on(_this5.constructor.Event.CLICK, _this5.config.selector, function (event) {\n return _this5.toggle(event);\n });\n } else if (trigger !== Trigger.MANUAL) {\n var eventIn = trigger === Trigger.HOVER ? _this5.constructor.Event.MOUSEENTER : _this5.constructor.Event.FOCUSIN;\n var eventOut = trigger === Trigger.HOVER ? _this5.constructor.Event.MOUSELEAVE : _this5.constructor.Event.FOCUSOUT;\n $(_this5.element).on(eventIn, _this5.config.selector, function (event) {\n return _this5._enter(event);\n }).on(eventOut, _this5.config.selector, function (event) {\n return _this5._leave(event);\n });\n }\n });\n\n this._hideModalHandler = function () {\n if (_this5.element) {\n _this5.hide();\n }\n };\n\n $(this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler);\n\n if (this.config.selector) {\n this.config = _objectSpread2({}, this.config, {\n trigger: 'manual',\n selector: ''\n });\n } else {\n this._fixTitle();\n }\n };\n\n _proto._fixTitle = function _fixTitle() {\n var titleType = typeof this.element.getAttribute('data-original-title');\n\n if (this.element.getAttribute('title') || titleType !== 'string') {\n this.element.setAttribute('data-original-title', this.element.getAttribute('title') || '');\n this.element.setAttribute('title', '');\n }\n };\n\n _proto._enter = function _enter(event, context) {\n var dataKey = this.constructor.DATA_KEY;\n context = context || $(event.currentTarget).data(dataKey);\n\n if (!context) {\n context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n $(event.currentTarget).data(dataKey, context);\n }\n\n if (event) {\n context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true;\n }\n\n if ($(context.getTipElement()).hasClass(ClassName.SHOW) || context._hoverState === HoverState.SHOW) {\n context._hoverState = HoverState.SHOW;\n return;\n }\n\n clearTimeout(context._timeout);\n context._hoverState = HoverState.SHOW;\n\n if (!context.config.delay || !context.config.delay.show) {\n context.show();\n return;\n }\n\n context._timeout = setTimeout(function () {\n if (context._hoverState === HoverState.SHOW) {\n context.show();\n }\n }, context.config.delay.show);\n };\n\n _proto._leave = function _leave(event, context) {\n var dataKey = this.constructor.DATA_KEY;\n context = context || $(event.currentTarget).data(dataKey);\n\n if (!context) {\n context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n $(event.currentTarget).data(dataKey, context);\n }\n\n if (event) {\n context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false;\n }\n\n if (context._isWithActiveTrigger()) {\n return;\n }\n\n clearTimeout(context._timeout);\n context._hoverState = HoverState.OUT;\n\n if (!context.config.delay || !context.config.delay.hide) {\n context.hide();\n return;\n }\n\n context._timeout = setTimeout(function () {\n if (context._hoverState === HoverState.OUT) {\n context.hide();\n }\n }, context.config.delay.hide);\n };\n\n _proto._isWithActiveTrigger = function _isWithActiveTrigger() {\n for (var trigger in this._activeTrigger) {\n if (this._activeTrigger[trigger]) {\n return true;\n }\n }\n\n return false;\n };\n\n _proto._getConfig = function _getConfig(config) {\n var dataAttributes = $(this.element).data();\n Object.keys(dataAttributes).forEach(function (dataAttr) {\n if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {\n delete dataAttributes[dataAttr];\n }\n });\n config = _objectSpread2({}, this.constructor.Default, {}, dataAttributes, {}, typeof config === 'object' && config ? config : {});\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n };\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString();\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString();\n }\n\n Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);\n\n if (config.sanitize) {\n config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn);\n }\n\n return config;\n };\n\n _proto._getDelegateConfig = function _getDelegateConfig() {\n var config = {};\n\n if (this.config) {\n for (var key in this.config) {\n if (this.constructor.Default[key] !== this.config[key]) {\n config[key] = this.config[key];\n }\n }\n }\n\n return config;\n };\n\n _proto._cleanTipClass = function _cleanTipClass() {\n var $tip = $(this.getTipElement());\n var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);\n\n if (tabClass !== null && tabClass.length) {\n $tip.removeClass(tabClass.join(''));\n }\n };\n\n _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) {\n var popperInstance = popperData.instance;\n this.tip = popperInstance.popper;\n\n this._cleanTipClass();\n\n this.addAttachmentClass(this._getAttachment(popperData.placement));\n };\n\n _proto._fixTransition = function _fixTransition() {\n var tip = this.getTipElement();\n var initConfigAnimation = this.config.animation;\n\n if (tip.getAttribute('x-placement') !== null) {\n return;\n }\n\n $(tip).removeClass(ClassName.FADE);\n this.config.animation = false;\n this.hide();\n this.show();\n this.config.animation = initConfigAnimation;\n } // Static\n ;\n\n Tooltip._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $(this).data(DATA_KEY);\n\n var _config = typeof config === 'object' && config;\n\n if (!data && /dispose|hide/.test(config)) {\n return;\n }\n\n if (!data) {\n data = new Tooltip(this, _config);\n $(this).data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n _createClass(Tooltip, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }, {\n key: \"NAME\",\n get: function get() {\n return NAME;\n }\n }, {\n key: \"DATA_KEY\",\n get: function get() {\n return DATA_KEY;\n }\n }, {\n key: \"Event\",\n get: function get() {\n return Event;\n }\n }, {\n key: \"EVENT_KEY\",\n get: function get() {\n return EVENT_KEY;\n }\n }, {\n key: \"DefaultType\",\n get: function get() {\n return DefaultType;\n }\n }]);\n\n return Tooltip;\n }();\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n\n $.fn[NAME] = Tooltip._jQueryInterface;\n $.fn[NAME].Constructor = Tooltip;\n\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return Tooltip._jQueryInterface;\n };\n\n return Tooltip;\n\n})));\n//# sourceMappingURL=tooltip.js.map\n","/*!\n * Bootstrap util.js v4.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery')) :\n typeof define === 'function' && define.amd ? define(['jquery'], factory) :\n (global = global || self, global.Util = factory(global.jQuery));\n}(this, (function ($) { 'use strict';\n\n $ = $ && $.hasOwnProperty('default') ? $['default'] : $;\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.4.1): util.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n /**\n * ------------------------------------------------------------------------\n * Private TransitionEnd Helpers\n * ------------------------------------------------------------------------\n */\n\n var TRANSITION_END = 'transitionend';\n var MAX_UID = 1000000;\n var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n function toType(obj) {\n return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n }\n\n function getSpecialTransitionEndEvent() {\n return {\n bindType: TRANSITION_END,\n delegateType: TRANSITION_END,\n handle: function handle(event) {\n if ($(event.target).is(this)) {\n return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params\n }\n\n return undefined; // eslint-disable-line no-undefined\n }\n };\n }\n\n function transitionEndEmulator(duration) {\n var _this = this;\n\n var called = false;\n $(this).one(Util.TRANSITION_END, function () {\n called = true;\n });\n setTimeout(function () {\n if (!called) {\n Util.triggerTransitionEnd(_this);\n }\n }, duration);\n return this;\n }\n\n function setTransitionEndSupport() {\n $.fn.emulateTransitionEnd = transitionEndEmulator;\n $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();\n }\n /**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\n\n var Util = {\n TRANSITION_END: 'bsTransitionEnd',\n getUID: function getUID(prefix) {\n do {\n // eslint-disable-next-line no-bitwise\n prefix += ~~(Math.random() * MAX_UID); // \"~~\" acts like a faster Math.floor() here\n } while (document.getElementById(prefix));\n\n return prefix;\n },\n getSelectorFromElement: function getSelectorFromElement(element) {\n var selector = element.getAttribute('data-target');\n\n if (!selector || selector === '#') {\n var hrefAttr = element.getAttribute('href');\n selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '';\n }\n\n try {\n return document.querySelector(selector) ? selector : null;\n } catch (err) {\n return null;\n }\n },\n getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {\n if (!element) {\n return 0;\n } // Get transition-duration of the element\n\n\n var transitionDuration = $(element).css('transition-duration');\n var transitionDelay = $(element).css('transition-delay');\n var floatTransitionDuration = parseFloat(transitionDuration);\n var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0;\n } // If multiple durations are defined, take the first\n\n\n transitionDuration = transitionDuration.split(',')[0];\n transitionDelay = transitionDelay.split(',')[0];\n return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n },\n reflow: function reflow(element) {\n return element.offsetHeight;\n },\n triggerTransitionEnd: function triggerTransitionEnd(element) {\n $(element).trigger(TRANSITION_END);\n },\n // TODO: Remove in v5\n supportsTransitionEnd: function supportsTransitionEnd() {\n return Boolean(TRANSITION_END);\n },\n isElement: function isElement(obj) {\n return (obj[0] || obj).nodeType;\n },\n typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {\n for (var property in configTypes) {\n if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n var expectedTypes = configTypes[property];\n var value = config[property];\n var valueType = value && Util.isElement(value) ? 'element' : toType(value);\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new Error(componentName.toUpperCase() + \": \" + (\"Option \\\"\" + property + \"\\\" provided type \\\"\" + valueType + \"\\\" \") + (\"but expected type \\\"\" + expectedTypes + \"\\\".\"));\n }\n }\n }\n },\n findShadowRoot: function findShadowRoot(element) {\n if (!document.documentElement.attachShadow) {\n return null;\n } // Can find the shadow root otherwise it'll return the document\n\n\n if (typeof element.getRootNode === 'function') {\n var root = element.getRootNode();\n return root instanceof ShadowRoot ? root : null;\n }\n\n if (element instanceof ShadowRoot) {\n return element;\n } // when we don't find a shadow root\n\n\n if (!element.parentNode) {\n return null;\n }\n\n return Util.findShadowRoot(element.parentNode);\n },\n jQueryDetection: function jQueryDetection() {\n if (typeof $ === 'undefined') {\n throw new TypeError('Bootstrap\\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\\'s JavaScript.');\n }\n\n var version = $.fn.jquery.split(' ')[0].split('.');\n var minMajor = 1;\n var ltMajor = 2;\n var minMinor = 9;\n var minPatch = 1;\n var maxMajor = 4;\n\n if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {\n throw new Error('Bootstrap\\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0');\n }\n }\n };\n Util.jQueryDetection();\n setTransitionEndSupport();\n\n return Util;\n\n})));\n//# sourceMappingURL=util.js.map\n","function webpackEmptyContext(req) {\n\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\te.code = 'MODULE_NOT_FOUND';\n\tthrow e;\n}\nwebpackEmptyContext.keys = function() { return []; };\nwebpackEmptyContext.resolve = webpackEmptyContext;\nmodule.exports = webpackEmptyContext;\nwebpackEmptyContext.id = \"./node_modules/font-awesome sync \\\\.(otf|eot|svg|ttf|woff|woff2)$\";","/*! Hammer.JS - v2.0.7 - 2016-04-22\n * http://hammerjs.github.io/\n *\n * Copyright (c) 2016 Jorik Tangelder;\n * Licensed under the MIT license */\n(function(window, document, exportName, undefined) {\n 'use strict';\n\nvar VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o'];\nvar TEST_ELEMENT = document.createElement('div');\n\nvar TYPE_FUNCTION = 'function';\n\nvar round = Math.round;\nvar abs = Math.abs;\nvar now = Date.now;\n\n/**\n * set a timeout with a given scope\n * @param {Function} fn\n * @param {Number} timeout\n * @param {Object} context\n * @returns {number}\n */\nfunction setTimeoutContext(fn, timeout, context) {\n return setTimeout(bindFn(fn, context), timeout);\n}\n\n/**\n * if the argument is an array, we want to execute the fn on each entry\n * if it aint an array we don't want to do a thing.\n * this is used by all the methods that accept a single and array argument.\n * @param {*|Array} arg\n * @param {String} fn\n * @param {Object} [context]\n * @returns {Boolean}\n */\nfunction invokeArrayArg(arg, fn, context) {\n if (Array.isArray(arg)) {\n each(arg, context[fn], context);\n return true;\n }\n return false;\n}\n\n/**\n * walk objects and arrays\n * @param {Object} obj\n * @param {Function} iterator\n * @param {Object} context\n */\nfunction each(obj, iterator, context) {\n var i;\n\n if (!obj) {\n return;\n }\n\n if (obj.forEach) {\n obj.forEach(iterator, context);\n } else if (obj.length !== undefined) {\n i = 0;\n while (i < obj.length) {\n iterator.call(context, obj[i], i, obj);\n i++;\n }\n } else {\n for (i in obj) {\n obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj);\n }\n }\n}\n\n/**\n * wrap a method with a deprecation warning and stack trace\n * @param {Function} method\n * @param {String} name\n * @param {String} message\n * @returns {Function} A new function wrapping the supplied method.\n */\nfunction deprecate(method, name, message) {\n var deprecationMessage = 'DEPRECATED METHOD: ' + name + '\\n' + message + ' AT \\n';\n return function() {\n var e = new Error('get-stack-trace');\n var stack = e && e.stack ? e.stack.replace(/^[^\\(]+?[\\n$]/gm, '')\n .replace(/^\\s+at\\s+/gm, '')\n .replace(/^Object.<anonymous>\\s*\\(/gm, '{anonymous}()@') : 'Unknown Stack Trace';\n\n var log = window.console && (window.console.warn || window.console.log);\n if (log) {\n log.call(window.console, deprecationMessage, stack);\n }\n return method.apply(this, arguments);\n };\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} target\n * @param {...Object} objects_to_assign\n * @returns {Object} target\n */\nvar assign;\nif (typeof Object.assign !== 'function') {\n assign = function assign(target) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var output = Object(target);\n for (var index = 1; index < arguments.length; index++) {\n var source = arguments[index];\n if (source !== undefined && source !== null) {\n for (var nextKey in source) {\n if (source.hasOwnProperty(nextKey)) {\n output[nextKey] = source[nextKey];\n }\n }\n }\n }\n return output;\n };\n} else {\n assign = Object.assign;\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} dest\n * @param {Object} src\n * @param {Boolean} [merge=false]\n * @returns {Object} dest\n */\nvar extend = deprecate(function extend(dest, src, merge) {\n var keys = Object.keys(src);\n var i = 0;\n while (i < keys.length) {\n if (!merge || (merge && dest[keys[i]] === undefined)) {\n dest[keys[i]] = src[keys[i]];\n }\n i++;\n }\n return dest;\n}, 'extend', 'Use `assign`.');\n\n/**\n * merge the values from src in the dest.\n * means that properties that exist in dest will not be overwritten by src\n * @param {Object} dest\n * @param {Object} src\n * @returns {Object} dest\n */\nvar merge = deprecate(function merge(dest, src) {\n return extend(dest, src, true);\n}, 'merge', 'Use `assign`.');\n\n/**\n * simple class inheritance\n * @param {Function} child\n * @param {Function} base\n * @param {Object} [properties]\n */\nfunction inherit(child, base, properties) {\n var baseP = base.prototype,\n childP;\n\n childP = child.prototype = Object.create(baseP);\n childP.constructor = child;\n childP._super = baseP;\n\n if (properties) {\n assign(childP, properties);\n }\n}\n\n/**\n * simple function bind\n * @param {Function} fn\n * @param {Object} context\n * @returns {Function}\n */\nfunction bindFn(fn, context) {\n return function boundFn() {\n return fn.apply(context, arguments);\n };\n}\n\n/**\n * let a boolean value also be a function that must return a boolean\n * this first item in args will be used as the context\n * @param {Boolean|Function} val\n * @param {Array} [args]\n * @returns {Boolean}\n */\nfunction boolOrFn(val, args) {\n if (typeof val == TYPE_FUNCTION) {\n return val.apply(args ? args[0] || undefined : undefined, args);\n }\n return val;\n}\n\n/**\n * use the val2 when val1 is undefined\n * @param {*} val1\n * @param {*} val2\n * @returns {*}\n */\nfunction ifUndefined(val1, val2) {\n return (val1 === undefined) ? val2 : val1;\n}\n\n/**\n * addEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction addEventListeners(target, types, handler) {\n each(splitStr(types), function(type) {\n target.addEventListener(type, handler, false);\n });\n}\n\n/**\n * removeEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction removeEventListeners(target, types, handler) {\n each(splitStr(types), function(type) {\n target.removeEventListener(type, handler, false);\n });\n}\n\n/**\n * find if a node is in the given parent\n * @method hasParent\n * @param {HTMLElement} node\n * @param {HTMLElement} parent\n * @return {Boolean} found\n */\nfunction hasParent(node, parent) {\n while (node) {\n if (node == parent) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n}\n\n/**\n * small indexOf wrapper\n * @param {String} str\n * @param {String} find\n * @returns {Boolean} found\n */\nfunction inStr(str, find) {\n return str.indexOf(find) > -1;\n}\n\n/**\n * split string on whitespace\n * @param {String} str\n * @returns {Array} words\n */\nfunction splitStr(str) {\n return str.trim().split(/\\s+/g);\n}\n\n/**\n * find if a array contains the object using indexOf or a simple polyFill\n * @param {Array} src\n * @param {String} find\n * @param {String} [findByKey]\n * @return {Boolean|Number} false when not found, or the index\n */\nfunction inArray(src, find, findByKey) {\n if (src.indexOf && !findByKey) {\n return src.indexOf(find);\n } else {\n var i = 0;\n while (i < src.length) {\n if ((findByKey && src[i][findByKey] == find) || (!findByKey && src[i] === find)) {\n return i;\n }\n i++;\n }\n return -1;\n }\n}\n\n/**\n * convert array-like objects to real arrays\n * @param {Object} obj\n * @returns {Array}\n */\nfunction toArray(obj) {\n return Array.prototype.slice.call(obj, 0);\n}\n\n/**\n * unique array with objects based on a key (like 'id') or just by the array's value\n * @param {Array} src [{id:1},{id:2},{id:1}]\n * @param {String} [key]\n * @param {Boolean} [sort=False]\n * @returns {Array} [{id:1},{id:2}]\n */\nfunction uniqueArray(src, key, sort) {\n var results = [];\n var values = [];\n var i = 0;\n\n while (i < src.length) {\n var val = key ? src[i][key] : src[i];\n if (inArray(values, val) < 0) {\n results.push(src[i]);\n }\n values[i] = val;\n i++;\n }\n\n if (sort) {\n if (!key) {\n results = results.sort();\n } else {\n results = results.sort(function sortUniqueArray(a, b) {\n return a[key] > b[key];\n });\n }\n }\n\n return results;\n}\n\n/**\n * get the prefixed property\n * @param {Object} obj\n * @param {String} property\n * @returns {String|Undefined} prefixed\n */\nfunction prefixed(obj, property) {\n var prefix, prop;\n var camelProp = property[0].toUpperCase() + property.slice(1);\n\n var i = 0;\n while (i < VENDOR_PREFIXES.length) {\n prefix = VENDOR_PREFIXES[i];\n prop = (prefix) ? prefix + camelProp : property;\n\n if (prop in obj) {\n return prop;\n }\n i++;\n }\n return undefined;\n}\n\n/**\n * get a unique id\n * @returns {number} uniqueId\n */\nvar _uniqueId = 1;\nfunction uniqueId() {\n return _uniqueId++;\n}\n\n/**\n * get the window object of an element\n * @param {HTMLElement} element\n * @returns {DocumentView|Window}\n */\nfunction getWindowForElement(element) {\n var doc = element.ownerDocument || element;\n return (doc.defaultView || doc.parentWindow || window);\n}\n\nvar MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;\n\nvar SUPPORT_TOUCH = ('ontouchstart' in window);\nvar SUPPORT_POINTER_EVENTS = prefixed(window, 'PointerEvent') !== undefined;\nvar SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent);\n\nvar INPUT_TYPE_TOUCH = 'touch';\nvar INPUT_TYPE_PEN = 'pen';\nvar INPUT_TYPE_MOUSE = 'mouse';\nvar INPUT_TYPE_KINECT = 'kinect';\n\nvar COMPUTE_INTERVAL = 25;\n\nvar INPUT_START = 1;\nvar INPUT_MOVE = 2;\nvar INPUT_END = 4;\nvar INPUT_CANCEL = 8;\n\nvar DIRECTION_NONE = 1;\nvar DIRECTION_LEFT = 2;\nvar DIRECTION_RIGHT = 4;\nvar DIRECTION_UP = 8;\nvar DIRECTION_DOWN = 16;\n\nvar DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;\nvar DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;\nvar DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;\n\nvar PROPS_XY = ['x', 'y'];\nvar PROPS_CLIENT_XY = ['clientX', 'clientY'];\n\n/**\n * create new input type manager\n * @param {Manager} manager\n * @param {Function} callback\n * @returns {Input}\n * @constructor\n */\nfunction Input(manager, callback) {\n var self = this;\n this.manager = manager;\n this.callback = callback;\n this.element = manager.element;\n this.target = manager.options.inputTarget;\n\n // smaller wrapper around the handler, for the scope and the enabled state of the manager,\n // so when disabled the input events are completely bypassed.\n this.domHandler = function(ev) {\n if (boolOrFn(manager.options.enable, [manager])) {\n self.handler(ev);\n }\n };\n\n this.init();\n\n}\n\nInput.prototype = {\n /**\n * should handle the inputEvent data and trigger the callback\n * @virtual\n */\n handler: function() { },\n\n /**\n * bind the events\n */\n init: function() {\n this.evEl && addEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n },\n\n /**\n * unbind the events\n */\n destroy: function() {\n this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n }\n};\n\n/**\n * create new input type manager\n * called by the Manager constructor\n * @param {Hammer} manager\n * @returns {Input}\n */\nfunction createInputInstance(manager) {\n var Type;\n var inputClass = manager.options.inputClass;\n\n if (inputClass) {\n Type = inputClass;\n } else if (SUPPORT_POINTER_EVENTS) {\n Type = PointerEventInput;\n } else if (SUPPORT_ONLY_TOUCH) {\n Type = TouchInput;\n } else if (!SUPPORT_TOUCH) {\n Type = MouseInput;\n } else {\n Type = TouchMouseInput;\n }\n return new (Type)(manager, inputHandler);\n}\n\n/**\n * handle input events\n * @param {Manager} manager\n * @param {String} eventType\n * @param {Object} input\n */\nfunction inputHandler(manager, eventType, input) {\n var pointersLen = input.pointers.length;\n var changedPointersLen = input.changedPointers.length;\n var isFirst = (eventType & INPUT_START && (pointersLen - changedPointersLen === 0));\n var isFinal = (eventType & (INPUT_END | INPUT_CANCEL) && (pointersLen - changedPointersLen === 0));\n\n input.isFirst = !!isFirst;\n input.isFinal = !!isFinal;\n\n if (isFirst) {\n manager.session = {};\n }\n\n // source event is the normalized value of the domEvents\n // like 'touchstart, mouseup, pointerdown'\n input.eventType = eventType;\n\n // compute scale, rotation etc\n computeInputData(manager, input);\n\n // emit secret event\n manager.emit('hammer.input', input);\n\n manager.recognize(input);\n manager.session.prevInput = input;\n}\n\n/**\n * extend the data with some usable properties like scale, rotate, velocity etc\n * @param {Object} manager\n * @param {Object} input\n */\nfunction computeInputData(manager, input) {\n var session = manager.session;\n var pointers = input.pointers;\n var pointersLength = pointers.length;\n\n // store the first input to calculate the distance and direction\n if (!session.firstInput) {\n session.firstInput = simpleCloneInputData(input);\n }\n\n // to compute scale and rotation we need to store the multiple touches\n if (pointersLength > 1 && !session.firstMultiple) {\n session.firstMultiple = simpleCloneInputData(input);\n } else if (pointersLength === 1) {\n session.firstMultiple = false;\n }\n\n var firstInput = session.firstInput;\n var firstMultiple = session.firstMultiple;\n var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;\n\n var center = input.center = getCenter(pointers);\n input.timeStamp = now();\n input.deltaTime = input.timeStamp - firstInput.timeStamp;\n\n input.angle = getAngle(offsetCenter, center);\n input.distance = getDistance(offsetCenter, center);\n\n computeDeltaXY(session, input);\n input.offsetDirection = getDirection(input.deltaX, input.deltaY);\n\n var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY);\n input.overallVelocityX = overallVelocity.x;\n input.overallVelocityY = overallVelocity.y;\n input.overallVelocity = (abs(overallVelocity.x) > abs(overallVelocity.y)) ? overallVelocity.x : overallVelocity.y;\n\n input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;\n input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;\n\n input.maxPointers = !session.prevInput ? input.pointers.length : ((input.pointers.length >\n session.prevInput.maxPointers) ? input.pointers.length : session.prevInput.maxPointers);\n\n computeIntervalInputData(session, input);\n\n // find the correct target\n var target = manager.element;\n if (hasParent(input.srcEvent.target, target)) {\n target = input.srcEvent.target;\n }\n input.target = target;\n}\n\nfunction computeDeltaXY(session, input) {\n var center = input.center;\n var offset = session.offsetDelta || {};\n var prevDelta = session.prevDelta || {};\n var prevInput = session.prevInput || {};\n\n if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {\n prevDelta = session.prevDelta = {\n x: prevInput.deltaX || 0,\n y: prevInput.deltaY || 0\n };\n\n offset = session.offsetDelta = {\n x: center.x,\n y: center.y\n };\n }\n\n input.deltaX = prevDelta.x + (center.x - offset.x);\n input.deltaY = prevDelta.y + (center.y - offset.y);\n}\n\n/**\n * velocity is calculated every x ms\n * @param {Object} session\n * @param {Object} input\n */\nfunction computeIntervalInputData(session, input) {\n var last = session.lastInterval || input,\n deltaTime = input.timeStamp - last.timeStamp,\n velocity, velocityX, velocityY, direction;\n\n if (input.eventType != INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) {\n var deltaX = input.deltaX - last.deltaX;\n var deltaY = input.deltaY - last.deltaY;\n\n var v = getVelocity(deltaTime, deltaX, deltaY);\n velocityX = v.x;\n velocityY = v.y;\n velocity = (abs(v.x) > abs(v.y)) ? v.x : v.y;\n direction = getDirection(deltaX, deltaY);\n\n session.lastInterval = input;\n } else {\n // use latest velocity info if it doesn't overtake a minimum period\n velocity = last.velocity;\n velocityX = last.velocityX;\n velocityY = last.velocityY;\n direction = last.direction;\n }\n\n input.velocity = velocity;\n input.velocityX = velocityX;\n input.velocityY = velocityY;\n input.direction = direction;\n}\n\n/**\n * create a simple clone from the input used for storage of firstInput and firstMultiple\n * @param {Object} input\n * @returns {Object} clonedInputData\n */\nfunction simpleCloneInputData(input) {\n // make a simple copy of the pointers because we will get a reference if we don't\n // we only need clientXY for the calculations\n var pointers = [];\n var i = 0;\n while (i < input.pointers.length) {\n pointers[i] = {\n clientX: round(input.pointers[i].clientX),\n clientY: round(input.pointers[i].clientY)\n };\n i++;\n }\n\n return {\n timeStamp: now(),\n pointers: pointers,\n center: getCenter(pointers),\n deltaX: input.deltaX,\n deltaY: input.deltaY\n };\n}\n\n/**\n * get the center of all the pointers\n * @param {Array} pointers\n * @return {Object} center contains `x` and `y` properties\n */\nfunction getCenter(pointers) {\n var pointersLength = pointers.length;\n\n // no need to loop when only one touch\n if (pointersLength === 1) {\n return {\n x: round(pointers[0].clientX),\n y: round(pointers[0].clientY)\n };\n }\n\n var x = 0, y = 0, i = 0;\n while (i < pointersLength) {\n x += pointers[i].clientX;\n y += pointers[i].clientY;\n i++;\n }\n\n return {\n x: round(x / pointersLength),\n y: round(y / pointersLength)\n };\n}\n\n/**\n * calculate the velocity between two points. unit is in px per ms.\n * @param {Number} deltaTime\n * @param {Number} x\n * @param {Number} y\n * @return {Object} velocity `x` and `y`\n */\nfunction getVelocity(deltaTime, x, y) {\n return {\n x: x / deltaTime || 0,\n y: y / deltaTime || 0\n };\n}\n\n/**\n * get the direction between two points\n * @param {Number} x\n * @param {Number} y\n * @return {Number} direction\n */\nfunction getDirection(x, y) {\n if (x === y) {\n return DIRECTION_NONE;\n }\n\n if (abs(x) >= abs(y)) {\n return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n }\n return y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n}\n\n/**\n * calculate the absolute distance between two points\n * @param {Object} p1 {x, y}\n * @param {Object} p2 {x, y}\n * @param {Array} [props] containing x and y keys\n * @return {Number} distance\n */\nfunction getDistance(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n\n return Math.sqrt((x * x) + (y * y));\n}\n\n/**\n * calculate the angle between two coordinates\n * @param {Object} p1\n * @param {Object} p2\n * @param {Array} [props] containing x and y keys\n * @return {Number} angle\n */\nfunction getAngle(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n return Math.atan2(y, x) * 180 / Math.PI;\n}\n\n/**\n * calculate the rotation degrees between two pointersets\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} rotation\n */\nfunction getRotation(start, end) {\n return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY);\n}\n\n/**\n * calculate the scale factor between two pointersets\n * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} scale\n */\nfunction getScale(start, end) {\n return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY);\n}\n\nvar MOUSE_INPUT_MAP = {\n mousedown: INPUT_START,\n mousemove: INPUT_MOVE,\n mouseup: INPUT_END\n};\n\nvar MOUSE_ELEMENT_EVENTS = 'mousedown';\nvar MOUSE_WINDOW_EVENTS = 'mousemove mouseup';\n\n/**\n * Mouse events input\n * @constructor\n * @extends Input\n */\nfunction MouseInput() {\n this.evEl = MOUSE_ELEMENT_EVENTS;\n this.evWin = MOUSE_WINDOW_EVENTS;\n\n this.pressed = false; // mousedown state\n\n Input.apply(this, arguments);\n}\n\ninherit(MouseInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function MEhandler(ev) {\n var eventType = MOUSE_INPUT_MAP[ev.type];\n\n // on start we want to have the left mouse button down\n if (eventType & INPUT_START && ev.button === 0) {\n this.pressed = true;\n }\n\n if (eventType & INPUT_MOVE && ev.which !== 1) {\n eventType = INPUT_END;\n }\n\n // mouse must be down\n if (!this.pressed) {\n return;\n }\n\n if (eventType & INPUT_END) {\n this.pressed = false;\n }\n\n this.callback(this.manager, eventType, {\n pointers: [ev],\n changedPointers: [ev],\n pointerType: INPUT_TYPE_MOUSE,\n srcEvent: ev\n });\n }\n});\n\nvar POINTER_INPUT_MAP = {\n pointerdown: INPUT_START,\n pointermove: INPUT_MOVE,\n pointerup: INPUT_END,\n pointercancel: INPUT_CANCEL,\n pointerout: INPUT_CANCEL\n};\n\n// in IE10 the pointer types is defined as an enum\nvar IE10_POINTER_TYPE_ENUM = {\n 2: INPUT_TYPE_TOUCH,\n 3: INPUT_TYPE_PEN,\n 4: INPUT_TYPE_MOUSE,\n 5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816\n};\n\nvar POINTER_ELEMENT_EVENTS = 'pointerdown';\nvar POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel';\n\n// IE10 has prefixed support, and case-sensitive\nif (window.MSPointerEvent && !window.PointerEvent) {\n POINTER_ELEMENT_EVENTS = 'MSPointerDown';\n POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel';\n}\n\n/**\n * Pointer events input\n * @constructor\n * @extends Input\n */\nfunction PointerEventInput() {\n this.evEl = POINTER_ELEMENT_EVENTS;\n this.evWin = POINTER_WINDOW_EVENTS;\n\n Input.apply(this, arguments);\n\n this.store = (this.manager.session.pointerEvents = []);\n}\n\ninherit(PointerEventInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function PEhandler(ev) {\n var store = this.store;\n var removePointer = false;\n\n var eventTypeNormalized = ev.type.toLowerCase().replace('ms', '');\n var eventType = POINTER_INPUT_MAP[eventTypeNormalized];\n var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;\n\n var isTouch = (pointerType == INPUT_TYPE_TOUCH);\n\n // get index of the event in the store\n var storeIndex = inArray(store, ev.pointerId, 'pointerId');\n\n // start and mouse must be down\n if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {\n if (storeIndex < 0) {\n store.push(ev);\n storeIndex = store.length - 1;\n }\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n removePointer = true;\n }\n\n // it not found, so the pointer hasn't been down (so it's probably a hover)\n if (storeIndex < 0) {\n return;\n }\n\n // update the event in the store\n store[storeIndex] = ev;\n\n this.callback(this.manager, eventType, {\n pointers: store,\n changedPointers: [ev],\n pointerType: pointerType,\n srcEvent: ev\n });\n\n if (removePointer) {\n // remove from the store\n store.splice(storeIndex, 1);\n }\n }\n});\n\nvar SINGLE_TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\n\nvar SINGLE_TOUCH_TARGET_EVENTS = 'touchstart';\nvar SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Touch events input\n * @constructor\n * @extends Input\n */\nfunction SingleTouchInput() {\n this.evTarget = SINGLE_TOUCH_TARGET_EVENTS;\n this.evWin = SINGLE_TOUCH_WINDOW_EVENTS;\n this.started = false;\n\n Input.apply(this, arguments);\n}\n\ninherit(SingleTouchInput, Input, {\n handler: function TEhandler(ev) {\n var type = SINGLE_TOUCH_INPUT_MAP[ev.type];\n\n // should we handle the touch events?\n if (type === INPUT_START) {\n this.started = true;\n }\n\n if (!this.started) {\n return;\n }\n\n var touches = normalizeSingleTouches.call(this, ev, type);\n\n // when done, reset the started state\n if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) {\n this.started = false;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction normalizeSingleTouches(ev, type) {\n var all = toArray(ev.touches);\n var changed = toArray(ev.changedTouches);\n\n if (type & (INPUT_END | INPUT_CANCEL)) {\n all = uniqueArray(all.concat(changed), 'identifier', true);\n }\n\n return [all, changed];\n}\n\nvar TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\n\nvar TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Multi-user touch events input\n * @constructor\n * @extends Input\n */\nfunction TouchInput() {\n this.evTarget = TOUCH_TARGET_EVENTS;\n this.targetIds = {};\n\n Input.apply(this, arguments);\n}\n\ninherit(TouchInput, Input, {\n handler: function MTEhandler(ev) {\n var type = TOUCH_INPUT_MAP[ev.type];\n var touches = getTouches.call(this, ev, type);\n if (!touches) {\n return;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction getTouches(ev, type) {\n var allTouches = toArray(ev.touches);\n var targetIds = this.targetIds;\n\n // when there is only one touch, the process can be simplified\n if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {\n targetIds[allTouches[0].identifier] = true;\n return [allTouches, allTouches];\n }\n\n var i,\n targetTouches,\n changedTouches = toArray(ev.changedTouches),\n changedTargetTouches = [],\n target = this.target;\n\n // get target touches from touches\n targetTouches = allTouches.filter(function(touch) {\n return hasParent(touch.target, target);\n });\n\n // collect touches\n if (type === INPUT_START) {\n i = 0;\n while (i < targetTouches.length) {\n targetIds[targetTouches[i].identifier] = true;\n i++;\n }\n }\n\n // filter changed touches to only contain touches that exist in the collected target ids\n i = 0;\n while (i < changedTouches.length) {\n if (targetIds[changedTouches[i].identifier]) {\n changedTargetTouches.push(changedTouches[i]);\n }\n\n // cleanup removed touches\n if (type & (INPUT_END | INPUT_CANCEL)) {\n delete targetIds[changedTouches[i].identifier];\n }\n i++;\n }\n\n if (!changedTargetTouches.length) {\n return;\n }\n\n return [\n // merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'\n uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true),\n changedTargetTouches\n ];\n}\n\n/**\n * Combined touch and mouse input\n *\n * Touch has a higher priority then mouse, and while touching no mouse events are allowed.\n * This because touch devices also emit mouse events while doing a touch.\n *\n * @constructor\n * @extends Input\n */\n\nvar DEDUP_TIMEOUT = 2500;\nvar DEDUP_DISTANCE = 25;\n\nfunction TouchMouseInput() {\n Input.apply(this, arguments);\n\n var handler = bindFn(this.handler, this);\n this.touch = new TouchInput(this.manager, handler);\n this.mouse = new MouseInput(this.manager, handler);\n\n this.primaryTouch = null;\n this.lastTouches = [];\n}\n\ninherit(TouchMouseInput, Input, {\n /**\n * handle mouse and touch events\n * @param {Hammer} manager\n * @param {String} inputEvent\n * @param {Object} inputData\n */\n handler: function TMEhandler(manager, inputEvent, inputData) {\n var isTouch = (inputData.pointerType == INPUT_TYPE_TOUCH),\n isMouse = (inputData.pointerType == INPUT_TYPE_MOUSE);\n\n if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) {\n return;\n }\n\n // when we're in a touch event, record touches to de-dupe synthetic mouse event\n if (isTouch) {\n recordTouches.call(this, inputEvent, inputData);\n } else if (isMouse && isSyntheticEvent.call(this, inputData)) {\n return;\n }\n\n this.callback(manager, inputEvent, inputData);\n },\n\n /**\n * remove the event listeners\n */\n destroy: function destroy() {\n this.touch.destroy();\n this.mouse.destroy();\n }\n});\n\nfunction recordTouches(eventType, eventData) {\n if (eventType & INPUT_START) {\n this.primaryTouch = eventData.changedPointers[0].identifier;\n setLastTouch.call(this, eventData);\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n setLastTouch.call(this, eventData);\n }\n}\n\nfunction setLastTouch(eventData) {\n var touch = eventData.changedPointers[0];\n\n if (touch.identifier === this.primaryTouch) {\n var lastTouch = {x: touch.clientX, y: touch.clientY};\n this.lastTouches.push(lastTouch);\n var lts = this.lastTouches;\n var removeLastTouch = function() {\n var i = lts.indexOf(lastTouch);\n if (i > -1) {\n lts.splice(i, 1);\n }\n };\n setTimeout(removeLastTouch, DEDUP_TIMEOUT);\n }\n}\n\nfunction isSyntheticEvent(eventData) {\n var x = eventData.srcEvent.clientX, y = eventData.srcEvent.clientY;\n for (var i = 0; i < this.lastTouches.length; i++) {\n var t = this.lastTouches[i];\n var dx = Math.abs(x - t.x), dy = Math.abs(y - t.y);\n if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) {\n return true;\n }\n }\n return false;\n}\n\nvar PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction');\nvar NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined;\n\n// magical touchAction value\nvar TOUCH_ACTION_COMPUTE = 'compute';\nvar TOUCH_ACTION_AUTO = 'auto';\nvar TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented\nvar TOUCH_ACTION_NONE = 'none';\nvar TOUCH_ACTION_PAN_X = 'pan-x';\nvar TOUCH_ACTION_PAN_Y = 'pan-y';\nvar TOUCH_ACTION_MAP = getTouchActionProps();\n\n/**\n * Touch Action\n * sets the touchAction property or uses the js alternative\n * @param {Manager} manager\n * @param {String} value\n * @constructor\n */\nfunction TouchAction(manager, value) {\n this.manager = manager;\n this.set(value);\n}\n\nTouchAction.prototype = {\n /**\n * set the touchAction value on the element or enable the polyfill\n * @param {String} value\n */\n set: function(value) {\n // find out the touch-action by the event handlers\n if (value == TOUCH_ACTION_COMPUTE) {\n value = this.compute();\n }\n\n if (NATIVE_TOUCH_ACTION && this.manager.element.style && TOUCH_ACTION_MAP[value]) {\n this.manager.element.style[PREFIXED_TOUCH_ACTION] = value;\n }\n this.actions = value.toLowerCase().trim();\n },\n\n /**\n * just re-set the touchAction value\n */\n update: function() {\n this.set(this.manager.options.touchAction);\n },\n\n /**\n * compute the value for the touchAction property based on the recognizer's settings\n * @returns {String} value\n */\n compute: function() {\n var actions = [];\n each(this.manager.recognizers, function(recognizer) {\n if (boolOrFn(recognizer.options.enable, [recognizer])) {\n actions = actions.concat(recognizer.getTouchAction());\n }\n });\n return cleanTouchActions(actions.join(' '));\n },\n\n /**\n * this method is called on each input cycle and provides the preventing of the browser behavior\n * @param {Object} input\n */\n preventDefaults: function(input) {\n var srcEvent = input.srcEvent;\n var direction = input.offsetDirection;\n\n // if the touch action did prevented once this session\n if (this.manager.session.prevented) {\n srcEvent.preventDefault();\n return;\n }\n\n var actions = this.actions;\n var hasNone = inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE];\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y];\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X];\n\n if (hasNone) {\n //do not prevent defaults if this is a tap gesture\n\n var isTapPointer = input.pointers.length === 1;\n var isTapMovement = input.distance < 2;\n var isTapTouchTime = input.deltaTime < 250;\n\n if (isTapPointer && isTapMovement && isTapTouchTime) {\n return;\n }\n }\n\n if (hasPanX && hasPanY) {\n // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent\n return;\n }\n\n if (hasNone ||\n (hasPanY && direction & DIRECTION_HORIZONTAL) ||\n (hasPanX && direction & DIRECTION_VERTICAL)) {\n return this.preventSrc(srcEvent);\n }\n },\n\n /**\n * call preventDefault to prevent the browser's default behavior (scrolling in most cases)\n * @param {Object} srcEvent\n */\n preventSrc: function(srcEvent) {\n this.manager.session.prevented = true;\n srcEvent.preventDefault();\n }\n};\n\n/**\n * when the touchActions are collected they are not a valid value, so we need to clean things up. *\n * @param {String} actions\n * @returns {*}\n */\nfunction cleanTouchActions(actions) {\n // none\n if (inStr(actions, TOUCH_ACTION_NONE)) {\n return TOUCH_ACTION_NONE;\n }\n\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y);\n\n // if both pan-x and pan-y are set (different recognizers\n // for different directions, e.g. horizontal pan but vertical swipe?)\n // we need none (as otherwise with pan-x pan-y combined none of these\n // recognizers will work, since the browser would handle all panning\n if (hasPanX && hasPanY) {\n return TOUCH_ACTION_NONE;\n }\n\n // pan-x OR pan-y\n if (hasPanX || hasPanY) {\n return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;\n }\n\n // manipulation\n if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {\n return TOUCH_ACTION_MANIPULATION;\n }\n\n return TOUCH_ACTION_AUTO;\n}\n\nfunction getTouchActionProps() {\n if (!NATIVE_TOUCH_ACTION) {\n return false;\n }\n var touchMap = {};\n var cssSupports = window.CSS && window.CSS.supports;\n ['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(function(val) {\n\n // If css.supports is not supported but there is native touch-action assume it supports\n // all values. This is the case for IE 10 and 11.\n touchMap[val] = cssSupports ? window.CSS.supports('touch-action', val) : true;\n });\n return touchMap;\n}\n\n/**\n * Recognizer flow explained; *\n * All recognizers have the initial state of POSSIBLE when a input session starts.\n * The definition of a input session is from the first input until the last input, with all it's movement in it. *\n * Example session for mouse-input: mousedown -> mousemove -> mouseup\n *\n * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed\n * which determines with state it should be.\n *\n * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to\n * POSSIBLE to give it another change on the next cycle.\n *\n * Possible\n * |\n * +-----+---------------+\n * | |\n * +-----+-----+ |\n * | | |\n * Failed Cancelled |\n * +-------+------+\n * | |\n * Recognized Began\n * |\n * Changed\n * |\n * Ended/Recognized\n */\nvar STATE_POSSIBLE = 1;\nvar STATE_BEGAN = 2;\nvar STATE_CHANGED = 4;\nvar STATE_ENDED = 8;\nvar STATE_RECOGNIZED = STATE_ENDED;\nvar STATE_CANCELLED = 16;\nvar STATE_FAILED = 32;\n\n/**\n * Recognizer\n * Every recognizer needs to extend from this class.\n * @constructor\n * @param {Object} options\n */\nfunction Recognizer(options) {\n this.options = assign({}, this.defaults, options || {});\n\n this.id = uniqueId();\n\n this.manager = null;\n\n // default is enable true\n this.options.enable = ifUndefined(this.options.enable, true);\n\n this.state = STATE_POSSIBLE;\n\n this.simultaneous = {};\n this.requireFail = [];\n}\n\nRecognizer.prototype = {\n /**\n * @virtual\n * @type {Object}\n */\n defaults: {},\n\n /**\n * set options\n * @param {Object} options\n * @return {Recognizer}\n */\n set: function(options) {\n assign(this.options, options);\n\n // also update the touchAction, in case something changed about the directions/enabled state\n this.manager && this.manager.touchAction.update();\n return this;\n },\n\n /**\n * recognize simultaneous with an other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n recognizeWith: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) {\n return this;\n }\n\n var simultaneous = this.simultaneous;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n if (!simultaneous[otherRecognizer.id]) {\n simultaneous[otherRecognizer.id] = otherRecognizer;\n otherRecognizer.recognizeWith(this);\n }\n return this;\n },\n\n /**\n * drop the simultaneous link. it doesnt remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRecognizeWith: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n delete this.simultaneous[otherRecognizer.id];\n return this;\n },\n\n /**\n * recognizer can only run when an other is failing\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n requireFailure: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) {\n return this;\n }\n\n var requireFail = this.requireFail;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n if (inArray(requireFail, otherRecognizer) === -1) {\n requireFail.push(otherRecognizer);\n otherRecognizer.requireFailure(this);\n }\n return this;\n },\n\n /**\n * drop the requireFailure link. it does not remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRequireFailure: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n var index = inArray(this.requireFail, otherRecognizer);\n if (index > -1) {\n this.requireFail.splice(index, 1);\n }\n return this;\n },\n\n /**\n * has require failures boolean\n * @returns {boolean}\n */\n hasRequireFailures: function() {\n return this.requireFail.length > 0;\n },\n\n /**\n * if the recognizer can recognize simultaneous with an other recognizer\n * @param {Recognizer} otherRecognizer\n * @returns {Boolean}\n */\n canRecognizeWith: function(otherRecognizer) {\n return !!this.simultaneous[otherRecognizer.id];\n },\n\n /**\n * You should use `tryEmit` instead of `emit` directly to check\n * that all the needed recognizers has failed before emitting.\n * @param {Object} input\n */\n emit: function(input) {\n var self = this;\n var state = this.state;\n\n function emit(event) {\n self.manager.emit(event, input);\n }\n\n // 'panstart' and 'panmove'\n if (state < STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n\n emit(self.options.event); // simple 'eventName' events\n\n if (input.additionalEvent) { // additional event(panleft, panright, pinchin, pinchout...)\n emit(input.additionalEvent);\n }\n\n // panend and pancancel\n if (state >= STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n },\n\n /**\n * Check that all the require failure recognizers has failed,\n * if true, it emits a gesture event,\n * otherwise, setup the state to FAILED.\n * @param {Object} input\n */\n tryEmit: function(input) {\n if (this.canEmit()) {\n return this.emit(input);\n }\n // it's failing anyway\n this.state = STATE_FAILED;\n },\n\n /**\n * can we emit?\n * @returns {boolean}\n */\n canEmit: function() {\n var i = 0;\n while (i < this.requireFail.length) {\n if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {\n return false;\n }\n i++;\n }\n return true;\n },\n\n /**\n * update the recognizer\n * @param {Object} inputData\n */\n recognize: function(inputData) {\n // make a new copy of the inputData\n // so we can change the inputData without messing up the other recognizers\n var inputDataClone = assign({}, inputData);\n\n // is is enabled and allow recognizing?\n if (!boolOrFn(this.options.enable, [this, inputDataClone])) {\n this.reset();\n this.state = STATE_FAILED;\n return;\n }\n\n // reset when we've reached the end\n if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {\n this.state = STATE_POSSIBLE;\n }\n\n this.state = this.process(inputDataClone);\n\n // the recognizer has recognized a gesture\n // so trigger an event\n if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) {\n this.tryEmit(inputDataClone);\n }\n },\n\n /**\n * return the state of the recognizer\n * the actual recognizing happens in this method\n * @virtual\n * @param {Object} inputData\n * @returns {Const} STATE\n */\n process: function(inputData) { }, // jshint ignore:line\n\n /**\n * return the preferred touch-action\n * @virtual\n * @returns {Array}\n */\n getTouchAction: function() { },\n\n /**\n * called when the gesture isn't allowed to recognize\n * like when another is being recognized or it is disabled\n * @virtual\n */\n reset: function() { }\n};\n\n/**\n * get a usable string, used as event postfix\n * @param {Const} state\n * @returns {String} state\n */\nfunction stateStr(state) {\n if (state & STATE_CANCELLED) {\n return 'cancel';\n } else if (state & STATE_ENDED) {\n return 'end';\n } else if (state & STATE_CHANGED) {\n return 'move';\n } else if (state & STATE_BEGAN) {\n return 'start';\n }\n return '';\n}\n\n/**\n * direction cons to string\n * @param {Const} direction\n * @returns {String}\n */\nfunction directionStr(direction) {\n if (direction == DIRECTION_DOWN) {\n return 'down';\n } else if (direction == DIRECTION_UP) {\n return 'up';\n } else if (direction == DIRECTION_LEFT) {\n return 'left';\n } else if (direction == DIRECTION_RIGHT) {\n return 'right';\n }\n return '';\n}\n\n/**\n * get a recognizer by name if it is bound to a manager\n * @param {Recognizer|String} otherRecognizer\n * @param {Recognizer} recognizer\n * @returns {Recognizer}\n */\nfunction getRecognizerByNameIfManager(otherRecognizer, recognizer) {\n var manager = recognizer.manager;\n if (manager) {\n return manager.get(otherRecognizer);\n }\n return otherRecognizer;\n}\n\n/**\n * This recognizer is just used as a base for the simple attribute recognizers.\n * @constructor\n * @extends Recognizer\n */\nfunction AttrRecognizer() {\n Recognizer.apply(this, arguments);\n}\n\ninherit(AttrRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof AttrRecognizer\n */\n defaults: {\n /**\n * @type {Number}\n * @default 1\n */\n pointers: 1\n },\n\n /**\n * Used to check if it the recognizer receives valid input, like input.distance > 10.\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {Boolean} recognized\n */\n attrTest: function(input) {\n var optionPointers = this.options.pointers;\n return optionPointers === 0 || input.pointers.length === optionPointers;\n },\n\n /**\n * Process the input and return the state for the recognizer\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {*} State\n */\n process: function(input) {\n var state = this.state;\n var eventType = input.eventType;\n\n var isRecognized = state & (STATE_BEGAN | STATE_CHANGED);\n var isValid = this.attrTest(input);\n\n // on cancel input and we've recognized before, return STATE_CANCELLED\n if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) {\n return state | STATE_CANCELLED;\n } else if (isRecognized || isValid) {\n if (eventType & INPUT_END) {\n return state | STATE_ENDED;\n } else if (!(state & STATE_BEGAN)) {\n return STATE_BEGAN;\n }\n return state | STATE_CHANGED;\n }\n return STATE_FAILED;\n }\n});\n\n/**\n * Pan\n * Recognized when the pointer is down and moved in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PanRecognizer() {\n AttrRecognizer.apply(this, arguments);\n\n this.pX = null;\n this.pY = null;\n}\n\ninherit(PanRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PanRecognizer\n */\n defaults: {\n event: 'pan',\n threshold: 10,\n pointers: 1,\n direction: DIRECTION_ALL\n },\n\n getTouchAction: function() {\n var direction = this.options.direction;\n var actions = [];\n if (direction & DIRECTION_HORIZONTAL) {\n actions.push(TOUCH_ACTION_PAN_Y);\n }\n if (direction & DIRECTION_VERTICAL) {\n actions.push(TOUCH_ACTION_PAN_X);\n }\n return actions;\n },\n\n directionTest: function(input) {\n var options = this.options;\n var hasMoved = true;\n var distance = input.distance;\n var direction = input.direction;\n var x = input.deltaX;\n var y = input.deltaY;\n\n // lock to axis?\n if (!(direction & options.direction)) {\n if (options.direction & DIRECTION_HORIZONTAL) {\n direction = (x === 0) ? DIRECTION_NONE : (x < 0) ? DIRECTION_LEFT : DIRECTION_RIGHT;\n hasMoved = x != this.pX;\n distance = Math.abs(input.deltaX);\n } else {\n direction = (y === 0) ? DIRECTION_NONE : (y < 0) ? DIRECTION_UP : DIRECTION_DOWN;\n hasMoved = y != this.pY;\n distance = Math.abs(input.deltaY);\n }\n }\n input.direction = direction;\n return hasMoved && distance > options.threshold && direction & options.direction;\n },\n\n attrTest: function(input) {\n return AttrRecognizer.prototype.attrTest.call(this, input) &&\n (this.state & STATE_BEGAN || (!(this.state & STATE_BEGAN) && this.directionTest(input)));\n },\n\n emit: function(input) {\n\n this.pX = input.deltaX;\n this.pY = input.deltaY;\n\n var direction = directionStr(input.direction);\n\n if (direction) {\n input.additionalEvent = this.options.event + direction;\n }\n this._super.emit.call(this, input);\n }\n});\n\n/**\n * Pinch\n * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out).\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PinchRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(PinchRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'pinch',\n threshold: 0,\n pointers: 2\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_NONE];\n },\n\n attrTest: function(input) {\n return this._super.attrTest.call(this, input) &&\n (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN);\n },\n\n emit: function(input) {\n if (input.scale !== 1) {\n var inOut = input.scale < 1 ? 'in' : 'out';\n input.additionalEvent = this.options.event + inOut;\n }\n this._super.emit.call(this, input);\n }\n});\n\n/**\n * Press\n * Recognized when the pointer is down for x ms without any movement.\n * @constructor\n * @extends Recognizer\n */\nfunction PressRecognizer() {\n Recognizer.apply(this, arguments);\n\n this._timer = null;\n this._input = null;\n}\n\ninherit(PressRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PressRecognizer\n */\n defaults: {\n event: 'press',\n pointers: 1,\n time: 251, // minimal time of the pointer to be pressed\n threshold: 9 // a minimal movement is ok, but keep it low\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_AUTO];\n },\n\n process: function(input) {\n var options = this.options;\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTime = input.deltaTime > options.time;\n\n this._input = input;\n\n // we only allow little movement\n // and we've reached an end event, so a tap is possible\n if (!validMovement || !validPointers || (input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime)) {\n this.reset();\n } else if (input.eventType & INPUT_START) {\n this.reset();\n this._timer = setTimeoutContext(function() {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.time, this);\n } else if (input.eventType & INPUT_END) {\n return STATE_RECOGNIZED;\n }\n return STATE_FAILED;\n },\n\n reset: function() {\n clearTimeout(this._timer);\n },\n\n emit: function(input) {\n if (this.state !== STATE_RECOGNIZED) {\n return;\n }\n\n if (input && (input.eventType & INPUT_END)) {\n this.manager.emit(this.options.event + 'up', input);\n } else {\n this._input.timeStamp = now();\n this.manager.emit(this.options.event, this._input);\n }\n }\n});\n\n/**\n * Rotate\n * Recognized when two or more pointer are moving in a circular motion.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction RotateRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(RotateRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof RotateRecognizer\n */\n defaults: {\n event: 'rotate',\n threshold: 0,\n pointers: 2\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_NONE];\n },\n\n attrTest: function(input) {\n return this._super.attrTest.call(this, input) &&\n (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN);\n }\n});\n\n/**\n * Swipe\n * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction SwipeRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(SwipeRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof SwipeRecognizer\n */\n defaults: {\n event: 'swipe',\n threshold: 10,\n velocity: 0.3,\n direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,\n pointers: 1\n },\n\n getTouchAction: function() {\n return PanRecognizer.prototype.getTouchAction.call(this);\n },\n\n attrTest: function(input) {\n var direction = this.options.direction;\n var velocity;\n\n if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) {\n velocity = input.overallVelocity;\n } else if (direction & DIRECTION_HORIZONTAL) {\n velocity = input.overallVelocityX;\n } else if (direction & DIRECTION_VERTICAL) {\n velocity = input.overallVelocityY;\n }\n\n return this._super.attrTest.call(this, input) &&\n direction & input.offsetDirection &&\n input.distance > this.options.threshold &&\n input.maxPointers == this.options.pointers &&\n abs(velocity) > this.options.velocity && input.eventType & INPUT_END;\n },\n\n emit: function(input) {\n var direction = directionStr(input.offsetDirection);\n if (direction) {\n this.manager.emit(this.options.event + direction, input);\n }\n\n this.manager.emit(this.options.event, input);\n }\n});\n\n/**\n * A tap is ecognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur\n * between the given interval and position. The delay option can be used to recognize multi-taps without firing\n * a single tap.\n *\n * The eventData from the emitted event contains the property `tapCount`, which contains the amount of\n * multi-taps being recognized.\n * @constructor\n * @extends Recognizer\n */\nfunction TapRecognizer() {\n Recognizer.apply(this, arguments);\n\n // previous time and center,\n // used for tap counting\n this.pTime = false;\n this.pCenter = false;\n\n this._timer = null;\n this._input = null;\n this.count = 0;\n}\n\ninherit(TapRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'tap',\n pointers: 1,\n taps: 1,\n interval: 300, // max time between the multi-tap taps\n time: 250, // max time of the pointer to be down (like finger on the screen)\n threshold: 9, // a minimal movement is ok, but keep it low\n posThreshold: 10 // a multi-tap can be a bit off the initial position\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_MANIPULATION];\n },\n\n process: function(input) {\n var options = this.options;\n\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTouchTime = input.deltaTime < options.time;\n\n this.reset();\n\n if ((input.eventType & INPUT_START) && (this.count === 0)) {\n return this.failTimeout();\n }\n\n // we only allow little movement\n // and we've reached an end event, so a tap is possible\n if (validMovement && validTouchTime && validPointers) {\n if (input.eventType != INPUT_END) {\n return this.failTimeout();\n }\n\n var validInterval = this.pTime ? (input.timeStamp - this.pTime < options.interval) : true;\n var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold;\n\n this.pTime = input.timeStamp;\n this.pCenter = input.center;\n\n if (!validMultiTap || !validInterval) {\n this.count = 1;\n } else {\n this.count += 1;\n }\n\n this._input = input;\n\n // if tap count matches we have recognized it,\n // else it has began recognizing...\n var tapCount = this.count % options.taps;\n if (tapCount === 0) {\n // no failing requirements, immediately trigger the tap event\n // or wait as long as the multitap interval to trigger\n if (!this.hasRequireFailures()) {\n return STATE_RECOGNIZED;\n } else {\n this._timer = setTimeoutContext(function() {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.interval, this);\n return STATE_BEGAN;\n }\n }\n }\n return STATE_FAILED;\n },\n\n failTimeout: function() {\n this._timer = setTimeoutContext(function() {\n this.state = STATE_FAILED;\n }, this.options.interval, this);\n return STATE_FAILED;\n },\n\n reset: function() {\n clearTimeout(this._timer);\n },\n\n emit: function() {\n if (this.state == STATE_RECOGNIZED) {\n this._input.tapCount = this.count;\n this.manager.emit(this.options.event, this._input);\n }\n }\n});\n\n/**\n * Simple way to create a manager with a default set of recognizers.\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Hammer(element, options) {\n options = options || {};\n options.recognizers = ifUndefined(options.recognizers, Hammer.defaults.preset);\n return new Manager(element, options);\n}\n\n/**\n * @const {string}\n */\nHammer.VERSION = '2.0.7';\n\n/**\n * default settings\n * @namespace\n */\nHammer.defaults = {\n /**\n * set if DOM events are being triggered.\n * But this is slower and unused by simple implementations, so disabled by default.\n * @type {Boolean}\n * @default false\n */\n domEvents: false,\n\n /**\n * The value for the touchAction property/fallback.\n * When set to `compute` it will magically set the correct value based on the added recognizers.\n * @type {String}\n * @default compute\n */\n touchAction: TOUCH_ACTION_COMPUTE,\n\n /**\n * @type {Boolean}\n * @default true\n */\n enable: true,\n\n /**\n * EXPERIMENTAL FEATURE -- can be removed/changed\n * Change the parent input target element.\n * If Null, then it is being set the to main element.\n * @type {Null|EventTarget}\n * @default null\n */\n inputTarget: null,\n\n /**\n * force an input class\n * @type {Null|Function}\n * @default null\n */\n inputClass: null,\n\n /**\n * Default recognizer setup when calling `Hammer()`\n * When creating a new Manager these will be skipped.\n * @type {Array}\n */\n preset: [\n // RecognizerClass, options, [recognizeWith, ...], [requireFailure, ...]\n [RotateRecognizer, {enable: false}],\n [PinchRecognizer, {enable: false}, ['rotate']],\n [SwipeRecognizer, {direction: DIRECTION_HORIZONTAL}],\n [PanRecognizer, {direction: DIRECTION_HORIZONTAL}, ['swipe']],\n [TapRecognizer],\n [TapRecognizer, {event: 'doubletap', taps: 2}, ['tap']],\n [PressRecognizer]\n ],\n\n /**\n * Some CSS properties can be used to improve the working of Hammer.\n * Add them to this method and they will be set when creating a new Manager.\n * @namespace\n */\n cssProps: {\n /**\n * Disables text selection to improve the dragging gesture. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userSelect: 'none',\n\n /**\n * Disable the Windows Phone grippers when pressing an element.\n * @type {String}\n * @default 'none'\n */\n touchSelect: 'none',\n\n /**\n * Disables the default callout shown when you touch and hold a touch target.\n * On iOS, when you touch and hold a touch target such as a link, Safari displays\n * a callout containing information about the link. This property allows you to disable that callout.\n * @type {String}\n * @default 'none'\n */\n touchCallout: 'none',\n\n /**\n * Specifies whether zooming is enabled. Used by IE10>\n * @type {String}\n * @default 'none'\n */\n contentZooming: 'none',\n\n /**\n * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userDrag: 'none',\n\n /**\n * Overrides the highlight color shown when the user taps a link or a JavaScript\n * clickable element in iOS. This property obeys the alpha value, if specified.\n * @type {String}\n * @default 'rgba(0,0,0,0)'\n */\n tapHighlightColor: 'rgba(0,0,0,0)'\n }\n};\n\nvar STOP = 1;\nvar FORCED_STOP = 2;\n\n/**\n * Manager\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Manager(element, options) {\n this.options = assign({}, Hammer.defaults, options || {});\n\n this.options.inputTarget = this.options.inputTarget || element;\n\n this.handlers = {};\n this.session = {};\n this.recognizers = [];\n this.oldCssProps = {};\n\n this.element = element;\n this.input = createInputInstance(this);\n this.touchAction = new TouchAction(this, this.options.touchAction);\n\n toggleCssProps(this, true);\n\n each(this.options.recognizers, function(item) {\n var recognizer = this.add(new (item[0])(item[1]));\n item[2] && recognizer.recognizeWith(item[2]);\n item[3] && recognizer.requireFailure(item[3]);\n }, this);\n}\n\nManager.prototype = {\n /**\n * set options\n * @param {Object} options\n * @returns {Manager}\n */\n set: function(options) {\n assign(this.options, options);\n\n // Options that need a little more setup\n if (options.touchAction) {\n this.touchAction.update();\n }\n if (options.inputTarget) {\n // Clean up existing event listeners and reinitialize\n this.input.destroy();\n this.input.target = options.inputTarget;\n this.input.init();\n }\n return this;\n },\n\n /**\n * stop recognizing for this session.\n * This session will be discarded, when a new [input]start event is fired.\n * When forced, the recognizer cycle is stopped immediately.\n * @param {Boolean} [force]\n */\n stop: function(force) {\n this.session.stopped = force ? FORCED_STOP : STOP;\n },\n\n /**\n * run the recognizers!\n * called by the inputHandler function on every movement of the pointers (touches)\n * it walks through all the recognizers and tries to detect the gesture that is being made\n * @param {Object} inputData\n */\n recognize: function(inputData) {\n var session = this.session;\n if (session.stopped) {\n return;\n }\n\n // run the touch-action polyfill\n this.touchAction.preventDefaults(inputData);\n\n var recognizer;\n var recognizers = this.recognizers;\n\n // this holds the recognizer that is being recognized.\n // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED\n // if no recognizer is detecting a thing, it is set to `null`\n var curRecognizer = session.curRecognizer;\n\n // reset when the last recognizer is recognized\n // or when we're in a new session\n if (!curRecognizer || (curRecognizer && curRecognizer.state & STATE_RECOGNIZED)) {\n curRecognizer = session.curRecognizer = null;\n }\n\n var i = 0;\n while (i < recognizers.length) {\n recognizer = recognizers[i];\n\n // find out if we are allowed try to recognize the input for this one.\n // 1. allow if the session is NOT forced stopped (see the .stop() method)\n // 2. allow if we still haven't recognized a gesture in this session, or the this recognizer is the one\n // that is being recognized.\n // 3. allow if the recognizer is allowed to run simultaneous with the current recognized recognizer.\n // this can be setup with the `recognizeWith()` method on the recognizer.\n if (session.stopped !== FORCED_STOP && ( // 1\n !curRecognizer || recognizer == curRecognizer || // 2\n recognizer.canRecognizeWith(curRecognizer))) { // 3\n recognizer.recognize(inputData);\n } else {\n recognizer.reset();\n }\n\n // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the\n // current active recognizer. but only if we don't already have an active recognizer\n if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {\n curRecognizer = session.curRecognizer = recognizer;\n }\n i++;\n }\n },\n\n /**\n * get a recognizer by its event name.\n * @param {Recognizer|String} recognizer\n * @returns {Recognizer|Null}\n */\n get: function(recognizer) {\n if (recognizer instanceof Recognizer) {\n return recognizer;\n }\n\n var recognizers = this.recognizers;\n for (var i = 0; i < recognizers.length; i++) {\n if (recognizers[i].options.event == recognizer) {\n return recognizers[i];\n }\n }\n return null;\n },\n\n /**\n * add a recognizer to the manager\n * existing recognizers with the same event name will be removed\n * @param {Recognizer} recognizer\n * @returns {Recognizer|Manager}\n */\n add: function(recognizer) {\n if (invokeArrayArg(recognizer, 'add', this)) {\n return this;\n }\n\n // remove existing\n var existing = this.get(recognizer.options.event);\n if (existing) {\n this.remove(existing);\n }\n\n this.recognizers.push(recognizer);\n recognizer.manager = this;\n\n this.touchAction.update();\n return recognizer;\n },\n\n /**\n * remove a recognizer by name or instance\n * @param {Recognizer|String} recognizer\n * @returns {Manager}\n */\n remove: function(recognizer) {\n if (invokeArrayArg(recognizer, 'remove', this)) {\n return this;\n }\n\n recognizer = this.get(recognizer);\n\n // let's make sure this recognizer exists\n if (recognizer) {\n var recognizers = this.recognizers;\n var index = inArray(recognizers, recognizer);\n\n if (index !== -1) {\n recognizers.splice(index, 1);\n this.touchAction.update();\n }\n }\n\n return this;\n },\n\n /**\n * bind event\n * @param {String} events\n * @param {Function} handler\n * @returns {EventEmitter} this\n */\n on: function(events, handler) {\n if (events === undefined) {\n return;\n }\n if (handler === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function(event) {\n handlers[event] = handlers[event] || [];\n handlers[event].push(handler);\n });\n return this;\n },\n\n /**\n * unbind event, leave emit blank to remove all handlers\n * @param {String} events\n * @param {Function} [handler]\n * @returns {EventEmitter} this\n */\n off: function(events, handler) {\n if (events === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function(event) {\n if (!handler) {\n delete handlers[event];\n } else {\n handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1);\n }\n });\n return this;\n },\n\n /**\n * emit event to the listeners\n * @param {String} event\n * @param {Object} data\n */\n emit: function(event, data) {\n // we also want to trigger dom events\n if (this.options.domEvents) {\n triggerDomEvent(event, data);\n }\n\n // no handlers, so skip it all\n var handlers = this.handlers[event] && this.handlers[event].slice();\n if (!handlers || !handlers.length) {\n return;\n }\n\n data.type = event;\n data.preventDefault = function() {\n data.srcEvent.preventDefault();\n };\n\n var i = 0;\n while (i < handlers.length) {\n handlers[i](data);\n i++;\n }\n },\n\n /**\n * destroy the manager and unbinds all events\n * it doesn't unbind dom events, that is the user own responsibility\n */\n destroy: function() {\n this.element && toggleCssProps(this, false);\n\n this.handlers = {};\n this.session = {};\n this.input.destroy();\n this.element = null;\n }\n};\n\n/**\n * add/remove the css properties as defined in manager.options.cssProps\n * @param {Manager} manager\n * @param {Boolean} add\n */\nfunction toggleCssProps(manager, add) {\n var element = manager.element;\n if (!element.style) {\n return;\n }\n var prop;\n each(manager.options.cssProps, function(value, name) {\n prop = prefixed(element.style, name);\n if (add) {\n manager.oldCssProps[prop] = element.style[prop];\n element.style[prop] = value;\n } else {\n element.style[prop] = manager.oldCssProps[prop] || '';\n }\n });\n if (!add) {\n manager.oldCssProps = {};\n }\n}\n\n/**\n * trigger dom event\n * @param {String} event\n * @param {Object} data\n */\nfunction triggerDomEvent(event, data) {\n var gestureEvent = document.createEvent('Event');\n gestureEvent.initEvent(event, true, true);\n gestureEvent.gesture = data;\n data.target.dispatchEvent(gestureEvent);\n}\n\nassign(Hammer, {\n INPUT_START: INPUT_START,\n INPUT_MOVE: INPUT_MOVE,\n INPUT_END: INPUT_END,\n INPUT_CANCEL: INPUT_CANCEL,\n\n STATE_POSSIBLE: STATE_POSSIBLE,\n STATE_BEGAN: STATE_BEGAN,\n STATE_CHANGED: STATE_CHANGED,\n STATE_ENDED: STATE_ENDED,\n STATE_RECOGNIZED: STATE_RECOGNIZED,\n STATE_CANCELLED: STATE_CANCELLED,\n STATE_FAILED: STATE_FAILED,\n\n DIRECTION_NONE: DIRECTION_NONE,\n DIRECTION_LEFT: DIRECTION_LEFT,\n DIRECTION_RIGHT: DIRECTION_RIGHT,\n DIRECTION_UP: DIRECTION_UP,\n DIRECTION_DOWN: DIRECTION_DOWN,\n DIRECTION_HORIZONTAL: DIRECTION_HORIZONTAL,\n DIRECTION_VERTICAL: DIRECTION_VERTICAL,\n DIRECTION_ALL: DIRECTION_ALL,\n\n Manager: Manager,\n Input: Input,\n TouchAction: TouchAction,\n\n TouchInput: TouchInput,\n MouseInput: MouseInput,\n PointerEventInput: PointerEventInput,\n TouchMouseInput: TouchMouseInput,\n SingleTouchInput: SingleTouchInput,\n\n Recognizer: Recognizer,\n AttrRecognizer: AttrRecognizer,\n Tap: TapRecognizer,\n Pan: PanRecognizer,\n Swipe: SwipeRecognizer,\n Pinch: PinchRecognizer,\n Rotate: RotateRecognizer,\n Press: PressRecognizer,\n\n on: addEventListeners,\n off: removeEventListeners,\n each: each,\n merge: merge,\n extend: extend,\n assign: assign,\n inherit: inherit,\n bindFn: bindFn,\n prefixed: prefixed\n});\n\n// this prevents errors when Hammer is loaded in the presence of an AMD\n// style loader but by script tag, not by the loader.\nvar freeGlobal = (typeof window !== 'undefined' ? window : (typeof self !== 'undefined' ? self : {})); // jshint ignore:line\nfreeGlobal.Hammer = Hammer;\n\nif (typeof define === 'function' && define.amd) {\n define(function() {\n return Hammer;\n });\n} else if (typeof module != 'undefined' && module.exports) {\n module.exports = Hammer;\n} else {\n window[exportName] = Hammer;\n}\n\n})(window, document, 'Hammer');\n","(function(factory) {\r\n if (typeof define === 'function' && define.amd) {\r\n define(['jquery', 'hammerjs'], factory);\r\n } else if (typeof exports === 'object') {\r\n factory(require('jquery'), require('hammerjs'));\r\n } else {\r\n factory(jQuery, Hammer);\r\n }\r\n}(function($, Hammer) {\r\n function hammerify(el, options) {\r\n var $el = $(el);\r\n if(!$el.data(\"hammer\")) {\r\n $el.data(\"hammer\", new Hammer($el[0], options));\r\n }\r\n }\r\n\r\n $.fn.hammer = function(options) {\r\n return this.each(function() {\r\n hammerify(this, options);\r\n });\r\n };\r\n\r\n // extend the emit method to also trigger jQuery events\r\n Hammer.Manager.prototype.emit = (function(originalEmit) {\r\n return function(type, data) {\r\n originalEmit.call(this, type, data);\r\n $(this.element).trigger({\r\n type: type,\r\n gesture: data\r\n });\r\n };\r\n })(Hammer.Manager.prototype.emit);\r\n}));\r\n","/*!\n * hoverIntent v1.10.1 // 2019.10.05 // jQuery v1.7.0+\n * http://briancherne.github.io/jquery-hoverIntent/\n *\n * You may use hoverIntent under the terms of the MIT license. Basically that\n * means you are free to use hoverIntent as long as this header is left intact.\n * Copyright 2007-2019 Brian Cherne\n */\n\n/**\n * hoverIntent is similar to jQuery's built-in \"hover\" method except that\n * instead of firing the handlerIn function immediately, hoverIntent checks\n * to see if the user's mouse has slowed down (beneath the sensitivity\n * threshold) before firing the event. The handlerOut function is only\n * called after a matching handlerIn.\n *\n * // basic usage ... just like .hover()\n * .hoverIntent( handlerIn, handlerOut )\n * .hoverIntent( handlerInOut )\n *\n * // basic usage ... with event delegation!\n * .hoverIntent( handlerIn, handlerOut, selector )\n * .hoverIntent( handlerInOut, selector )\n *\n * // using a basic configuration object\n * .hoverIntent( config )\n *\n * @param handlerIn function OR configuration object\n * @param handlerOut function OR selector for delegation OR undefined\n * @param selector selector OR undefined\n * @author Brian Cherne <brian(at)cherne(dot)net>\n */\n\n;(function(factory) {\n 'use strict';\n if (typeof define === 'function' && define.amd) {\n define(['jquery'], factory);\n } else if (typeof module === 'object' && module.exports) {\n module.exports = factory(require('jquery'));\n } else if (jQuery && !jQuery.fn.hoverIntent) {\n factory(jQuery);\n }\n})(function($) {\n 'use strict';\n\n // default configuration values\n var _cfg = {\n interval: 100,\n sensitivity: 6,\n timeout: 0\n };\n\n // counter used to generate an ID for each instance\n var INSTANCE_COUNT = 0;\n\n // current X and Y position of mouse, updated during mousemove tracking (shared across instances)\n var cX, cY;\n\n // saves the current pointer position coordinates based on the given mousemove event\n var track = function(ev) {\n cX = ev.pageX;\n cY = ev.pageY;\n };\n\n // compares current and previous mouse positions\n var compare = function(ev,$el,s,cfg) {\n // compare mouse positions to see if pointer has slowed enough to trigger `over` function\n if ( Math.sqrt( (s.pX-cX)*(s.pX-cX) + (s.pY-cY)*(s.pY-cY) ) < cfg.sensitivity ) {\n $el.off(s.event,track);\n delete s.timeoutId;\n // set hoverIntent state as active for this element (permits `out` handler to trigger)\n s.isActive = true;\n // overwrite old mouseenter event coordinates with most recent pointer position\n ev.pageX = cX; ev.pageY = cY;\n // clear coordinate data from state object\n delete s.pX; delete s.pY;\n return cfg.over.apply($el[0],[ev]);\n } else {\n // set previous coordinates for next comparison\n s.pX = cX; s.pY = cY;\n // use self-calling timeout, guarantees intervals are spaced out properly (avoids JavaScript timer bugs)\n s.timeoutId = setTimeout( function(){compare(ev, $el, s, cfg);} , cfg.interval );\n }\n };\n\n // triggers given `out` function at configured `timeout` after a mouseleave and clears state\n var delay = function(ev,$el,s,out) {\n var data = $el.data('hoverIntent');\n if (data) {\n delete data[s.id];\n }\n return out.apply($el[0],[ev]);\n };\n\n $.fn.hoverIntent = function(handlerIn,handlerOut,selector) {\n // instance ID, used as a key to store and retrieve state information on an element\n var instanceId = INSTANCE_COUNT++;\n\n // extend the default configuration and parse parameters\n var cfg = $.extend({}, _cfg);\n if ( $.isPlainObject(handlerIn) ) {\n cfg = $.extend(cfg, handlerIn);\n if ( !$.isFunction(cfg.out) ) {\n cfg.out = cfg.over;\n }\n } else if ( $.isFunction(handlerOut) ) {\n cfg = $.extend(cfg, { over: handlerIn, out: handlerOut, selector: selector } );\n } else {\n cfg = $.extend(cfg, { over: handlerIn, out: handlerIn, selector: handlerOut } );\n }\n\n // A private function for handling mouse 'hovering'\n var handleHover = function(e) {\n // cloned event to pass to handlers (copy required for event object to be passed in IE)\n var ev = $.extend({},e);\n\n // the current target of the mouse event, wrapped in a jQuery object\n var $el = $(this);\n\n // read hoverIntent data from element (or initialize if not present)\n var hoverIntentData = $el.data('hoverIntent');\n if (!hoverIntentData) { $el.data('hoverIntent', (hoverIntentData = {})); }\n\n // read per-instance state from element (or initialize if not present)\n var state = hoverIntentData[instanceId];\n if (!state) { hoverIntentData[instanceId] = state = { id: instanceId }; }\n\n // state properties:\n // id = instance ID, used to clean up data\n // timeoutId = timeout ID, reused for tracking mouse position and delaying \"out\" handler\n // isActive = plugin state, true after `over` is called just until `out` is called\n // pX, pY = previously-measured pointer coordinates, updated at each polling interval\n // event = string representing the namespaced event used for mouse tracking\n\n // clear any existing timeout\n if (state.timeoutId) { state.timeoutId = clearTimeout(state.timeoutId); }\n\n // namespaced event used to register and unregister mousemove tracking\n var mousemove = state.event = 'mousemove.hoverIntent.hoverIntent'+instanceId;\n\n // handle the event, based on its type\n if (e.type === 'mouseenter') {\n // do nothing if already active\n if (state.isActive) { return; }\n // set \"previous\" X and Y position based on initial entry point\n state.pX = ev.pageX; state.pY = ev.pageY;\n // update \"current\" X and Y position based on mousemove\n $el.off(mousemove,track).on(mousemove,track);\n // start polling interval (self-calling timeout) to compare mouse coordinates over time\n state.timeoutId = setTimeout( function(){compare(ev,$el,state,cfg);} , cfg.interval );\n } else { // \"mouseleave\"\n // do nothing if not already active\n if (!state.isActive) { return; }\n // unbind expensive mousemove event\n $el.off(mousemove,track);\n // if hoverIntent state is true, then call the mouseOut function after the specified delay\n state.timeoutId = setTimeout( function(){delay(ev,$el,state,cfg.out);} , cfg.timeout );\n }\n };\n\n // listen for mouseenter and mouseleave\n return this.on({'mouseenter.hoverIntent':handleHover,'mouseleave.hoverIntent':handleHover}, cfg.selector);\n };\n});\n","/*!\n* jquery.inputmask.bundle.js\n* https://github.com/RobinHerbots/jquery.inputmask\n* Copyright (c) 2010 - 2016 Robin Herbots\n* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)\n* Version: 3.3.4\n*/\n!function($) {\n function Inputmask(alias, options) {\n return this instanceof Inputmask ? ($.isPlainObject(alias) ? options = alias : (options = options || {}, \n options.alias = alias), this.el = void 0, this.opts = $.extend(!0, {}, this.defaults, options), \n this.maskset = void 0, this.noMasksCache = options && void 0 !== options.definitions, \n this.userOptions = options || {}, this.events = {}, this.dataAttribute = \"data-inputmask\", \n this.isRTL = this.opts.numericInput, void resolveAlias(this.opts.alias, options, this.opts)) : new Inputmask(alias, options);\n }\n function resolveAlias(aliasStr, options, opts) {\n var aliasDefinition = opts.aliases[aliasStr];\n return aliasDefinition ? (aliasDefinition.alias && resolveAlias(aliasDefinition.alias, void 0, opts), \n $.extend(!0, opts, aliasDefinition), $.extend(!0, opts, options), !0) : (null === opts.mask && (opts.mask = aliasStr), \n !1);\n }\n function generateMaskSet(opts, nocache) {\n function generateMask(mask, metadata, opts) {\n if (null !== mask && \"\" !== mask) {\n if (1 === mask.length && opts.greedy === !1 && 0 !== opts.repeat && (opts.placeholder = \"\"), \n opts.repeat > 0 || \"*\" === opts.repeat || \"+\" === opts.repeat) {\n var repeatStart = \"*\" === opts.repeat ? 0 : \"+\" === opts.repeat ? 1 : opts.repeat;\n mask = opts.groupmarker.start + mask + opts.groupmarker.end + opts.quantifiermarker.start + repeatStart + \",\" + opts.repeat + opts.quantifiermarker.end;\n }\n var masksetDefinition;\n return void 0 === Inputmask.prototype.masksCache[mask] || nocache === !0 ? (masksetDefinition = {\n mask: mask,\n maskToken: Inputmask.prototype.analyseMask(mask, opts),\n validPositions: {},\n _buffer: void 0,\n buffer: void 0,\n tests: {},\n metadata: metadata,\n maskLength: void 0\n }, nocache !== !0 && (Inputmask.prototype.masksCache[opts.numericInput ? mask.split(\"\").reverse().join(\"\") : mask] = masksetDefinition, \n masksetDefinition = $.extend(!0, {}, Inputmask.prototype.masksCache[opts.numericInput ? mask.split(\"\").reverse().join(\"\") : mask]))) : masksetDefinition = $.extend(!0, {}, Inputmask.prototype.masksCache[opts.numericInput ? mask.split(\"\").reverse().join(\"\") : mask]), \n masksetDefinition;\n }\n }\n var ms;\n if ($.isFunction(opts.mask) && (opts.mask = opts.mask(opts)), $.isArray(opts.mask)) {\n if (opts.mask.length > 1) {\n opts.keepStatic = null === opts.keepStatic || opts.keepStatic;\n var altMask = opts.groupmarker.start;\n return $.each(opts.numericInput ? opts.mask.reverse() : opts.mask, function(ndx, msk) {\n altMask.length > 1 && (altMask += opts.groupmarker.end + opts.alternatormarker + opts.groupmarker.start), \n altMask += void 0 === msk.mask || $.isFunction(msk.mask) ? msk : msk.mask;\n }), altMask += opts.groupmarker.end, generateMask(altMask, opts.mask, opts);\n }\n opts.mask = opts.mask.pop();\n }\n return opts.mask && (ms = void 0 === opts.mask.mask || $.isFunction(opts.mask.mask) ? generateMask(opts.mask, opts.mask, opts) : generateMask(opts.mask.mask, opts.mask, opts)), \n ms;\n }\n function maskScope(actionObj, maskset, opts) {\n function getMaskTemplate(baseOnInput, minimalPos, includeMode) {\n minimalPos = minimalPos || 0;\n var ndxIntlzr, test, testPos, maskTemplate = [], pos = 0, lvp = getLastValidPosition();\n maxLength = void 0 !== el ? el.maxLength : void 0, maxLength === -1 && (maxLength = void 0);\n do baseOnInput === !0 && getMaskSet().validPositions[pos] ? (testPos = getMaskSet().validPositions[pos], \n test = testPos.match, ndxIntlzr = testPos.locator.slice(), maskTemplate.push(includeMode === !0 ? testPos.input : includeMode === !1 ? test.nativeDef : getPlaceholder(pos, test))) : (testPos = getTestTemplate(pos, ndxIntlzr, pos - 1), \n test = testPos.match, ndxIntlzr = testPos.locator.slice(), (opts.jitMasking === !1 || pos < lvp || \"number\" == typeof opts.jitMasking && isFinite(opts.jitMasking) && opts.jitMasking > pos) && maskTemplate.push(includeMode === !1 ? test.nativeDef : getPlaceholder(pos, test))), \n pos++; while ((void 0 === maxLength || pos < maxLength) && (null !== test.fn || \"\" !== test.def) || minimalPos > pos);\n return \"\" === maskTemplate[maskTemplate.length - 1] && maskTemplate.pop(), getMaskSet().maskLength = pos + 1, \n maskTemplate;\n }\n function getMaskSet() {\n return maskset;\n }\n function resetMaskSet(soft) {\n var maskset = getMaskSet();\n maskset.buffer = void 0, soft !== !0 && (maskset._buffer = void 0, maskset.validPositions = {}, \n maskset.p = 0);\n }\n function getLastValidPosition(closestTo, strict, validPositions) {\n var before = -1, after = -1, valids = validPositions || getMaskSet().validPositions;\n void 0 === closestTo && (closestTo = -1);\n for (var posNdx in valids) {\n var psNdx = parseInt(posNdx);\n valids[psNdx] && (strict || null !== valids[psNdx].match.fn) && (psNdx <= closestTo && (before = psNdx), \n psNdx >= closestTo && (after = psNdx));\n }\n return before !== -1 && closestTo - before > 1 || after < closestTo ? before : after;\n }\n function stripValidPositions(start, end, nocheck, strict) {\n function IsEnclosedStatic(pos) {\n var posMatch = getMaskSet().validPositions[pos];\n if (void 0 !== posMatch && null === posMatch.match.fn) {\n var prevMatch = getMaskSet().validPositions[pos - 1], nextMatch = getMaskSet().validPositions[pos + 1];\n return void 0 !== prevMatch && void 0 !== nextMatch;\n }\n return !1;\n }\n var i, startPos = start, positionsClone = $.extend(!0, {}, getMaskSet().validPositions), needsValidation = !1;\n for (getMaskSet().p = start, i = end - 1; i >= startPos; i--) void 0 !== getMaskSet().validPositions[i] && (nocheck !== !0 && (!getMaskSet().validPositions[i].match.optionality && IsEnclosedStatic(i) || opts.canClearPosition(getMaskSet(), i, getLastValidPosition(), strict, opts) === !1) || delete getMaskSet().validPositions[i]);\n for (resetMaskSet(!0), i = startPos + 1; i <= getLastValidPosition(); ) {\n for (;void 0 !== getMaskSet().validPositions[startPos]; ) startPos++;\n if (i < startPos && (i = startPos + 1), void 0 === getMaskSet().validPositions[i] && isMask(i)) i++; else {\n var t = getTestTemplate(i);\n needsValidation === !1 && positionsClone[startPos] && positionsClone[startPos].match.def === t.match.def ? (getMaskSet().validPositions[startPos] = $.extend(!0, {}, positionsClone[startPos]), \n getMaskSet().validPositions[startPos].input = t.input, delete getMaskSet().validPositions[i], \n i++) : positionCanMatchDefinition(startPos, t.match.def) ? isValid(startPos, t.input || getPlaceholder(i), !0) !== !1 && (delete getMaskSet().validPositions[i], \n i++, needsValidation = !0) : isMask(i) || (i++, startPos--), startPos++;\n }\n }\n resetMaskSet(!0);\n }\n function determineTestTemplate(tests, guessNextBest) {\n for (var testPos, testPositions = tests, lvp = getLastValidPosition(), lvTest = getMaskSet().validPositions[lvp] || getTests(0)[0], lvTestAltArr = void 0 !== lvTest.alternation ? lvTest.locator[lvTest.alternation].toString().split(\",\") : [], ndx = 0; ndx < testPositions.length && (testPos = testPositions[ndx], \n !(testPos.match && (opts.greedy && testPos.match.optionalQuantifier !== !0 || (testPos.match.optionality === !1 || testPos.match.newBlockMarker === !1) && testPos.match.optionalQuantifier !== !0) && (void 0 === lvTest.alternation || lvTest.alternation !== testPos.alternation || void 0 !== testPos.locator[lvTest.alternation] && checkAlternationMatch(testPos.locator[lvTest.alternation].toString().split(\",\"), lvTestAltArr))) || guessNextBest === !0 && (null !== testPos.match.fn || /[0-9a-bA-Z]/.test(testPos.match.def))); ndx++) ;\n return testPos;\n }\n function getTestTemplate(pos, ndxIntlzr, tstPs) {\n return getMaskSet().validPositions[pos] || determineTestTemplate(getTests(pos, ndxIntlzr ? ndxIntlzr.slice() : ndxIntlzr, tstPs));\n }\n function getTest(pos) {\n return getMaskSet().validPositions[pos] ? getMaskSet().validPositions[pos] : getTests(pos)[0];\n }\n function positionCanMatchDefinition(pos, def) {\n for (var valid = !1, tests = getTests(pos), tndx = 0; tndx < tests.length; tndx++) if (tests[tndx].match && tests[tndx].match.def === def) {\n valid = !0;\n break;\n }\n return valid;\n }\n function getTests(pos, ndxIntlzr, tstPs) {\n function resolveTestFromToken(maskToken, ndxInitializer, loopNdx, quantifierRecurse) {\n function handleMatch(match, loopNdx, quantifierRecurse) {\n function isFirstMatch(latestMatch, tokenGroup) {\n var firstMatch = 0 === $.inArray(latestMatch, tokenGroup.matches);\n return firstMatch || $.each(tokenGroup.matches, function(ndx, match) {\n if (match.isQuantifier === !0 && (firstMatch = isFirstMatch(latestMatch, tokenGroup.matches[ndx - 1]))) return !1;\n }), firstMatch;\n }\n function resolveNdxInitializer(pos, alternateNdx, targetAlternation) {\n var bestMatch, indexPos;\n return (getMaskSet().tests[pos] || getMaskSet().validPositions[pos]) && $.each(getMaskSet().tests[pos] || [ getMaskSet().validPositions[pos] ], function(ndx, lmnt) {\n var alternation = void 0 !== targetAlternation ? targetAlternation : lmnt.alternation, ndxPos = void 0 !== lmnt.locator[alternation] ? lmnt.locator[alternation].toString().indexOf(alternateNdx) : -1;\n (void 0 === indexPos || ndxPos < indexPos) && ndxPos !== -1 && (bestMatch = lmnt, \n indexPos = ndxPos);\n }), bestMatch ? bestMatch.locator.slice((void 0 !== targetAlternation ? targetAlternation : bestMatch.alternation) + 1) : void 0 !== targetAlternation ? resolveNdxInitializer(pos, alternateNdx) : void 0;\n }\n function staticCanMatchDefinition(source, target) {\n return null === source.match.fn && null !== target.match.fn && target.match.fn.test(source.match.def, getMaskSet(), pos, !1, opts, !1);\n }\n if (testPos > 1e4) throw \"Inputmask: There is probably an error in your mask definition or in the code. Create an issue on github with an example of the mask you are using. \" + getMaskSet().mask;\n if (testPos === pos && void 0 === match.matches) return matches.push({\n match: match,\n locator: loopNdx.reverse(),\n cd: cacheDependency\n }), !0;\n if (void 0 !== match.matches) {\n if (match.isGroup && quantifierRecurse !== match) {\n if (match = handleMatch(maskToken.matches[$.inArray(match, maskToken.matches) + 1], loopNdx)) return !0;\n } else if (match.isOptional) {\n var optionalToken = match;\n if (match = resolveTestFromToken(match, ndxInitializer, loopNdx, quantifierRecurse)) {\n if (latestMatch = matches[matches.length - 1].match, !isFirstMatch(latestMatch, optionalToken)) return !0;\n insertStop = !0, testPos = pos;\n }\n } else if (match.isAlternator) {\n var maltMatches, alternateToken = match, malternateMatches = [], currentMatches = matches.slice(), loopNdxCnt = loopNdx.length, altIndex = ndxInitializer.length > 0 ? ndxInitializer.shift() : -1;\n if (altIndex === -1 || \"string\" == typeof altIndex) {\n var amndx, currentPos = testPos, ndxInitializerClone = ndxInitializer.slice(), altIndexArr = [];\n if (\"string\" == typeof altIndex) altIndexArr = altIndex.split(\",\"); else for (amndx = 0; amndx < alternateToken.matches.length; amndx++) altIndexArr.push(amndx);\n for (var ndx = 0; ndx < altIndexArr.length; ndx++) {\n if (amndx = parseInt(altIndexArr[ndx]), matches = [], ndxInitializer = resolveNdxInitializer(testPos, amndx, loopNdxCnt) || ndxInitializerClone.slice(), \n match = handleMatch(alternateToken.matches[amndx] || maskToken.matches[amndx], [ amndx ].concat(loopNdx), quantifierRecurse) || match, \n match !== !0 && void 0 !== match && altIndexArr[altIndexArr.length - 1] < alternateToken.matches.length) {\n var ntndx = $.inArray(match, maskToken.matches) + 1;\n maskToken.matches.length > ntndx && (match = handleMatch(maskToken.matches[ntndx], [ ntndx ].concat(loopNdx.slice(1, loopNdx.length)), quantifierRecurse), \n match && (altIndexArr.push(ntndx.toString()), $.each(matches, function(ndx, lmnt) {\n lmnt.alternation = loopNdx.length - 1;\n })));\n }\n maltMatches = matches.slice(), testPos = currentPos, matches = [];\n for (var ndx1 = 0; ndx1 < maltMatches.length; ndx1++) {\n var altMatch = maltMatches[ndx1], hasMatch = !1;\n altMatch.alternation = altMatch.alternation || loopNdxCnt;\n for (var ndx2 = 0; ndx2 < malternateMatches.length; ndx2++) {\n var altMatch2 = malternateMatches[ndx2];\n if ((\"string\" != typeof altIndex || $.inArray(altMatch.locator[altMatch.alternation].toString(), altIndexArr) !== -1) && (altMatch.match.def === altMatch2.match.def || staticCanMatchDefinition(altMatch, altMatch2))) {\n hasMatch = altMatch.match.nativeDef === altMatch2.match.nativeDef, altMatch.alternation == altMatch2.alternation && altMatch2.locator[altMatch2.alternation].toString().indexOf(altMatch.locator[altMatch.alternation]) === -1 && (altMatch2.locator[altMatch2.alternation] = altMatch2.locator[altMatch2.alternation] + \",\" + altMatch.locator[altMatch.alternation], \n altMatch2.alternation = altMatch.alternation, null == altMatch.match.fn && (altMatch2.na = altMatch2.na || altMatch.locator[altMatch.alternation].toString(), \n altMatch2.na.indexOf(altMatch.locator[altMatch.alternation]) === -1 && (altMatch2.na = altMatch2.na + \",\" + altMatch.locator[altMatch.alternation])));\n break;\n }\n }\n hasMatch || malternateMatches.push(altMatch);\n }\n }\n \"string\" == typeof altIndex && (malternateMatches = $.map(malternateMatches, function(lmnt, ndx) {\n if (isFinite(ndx)) {\n var mamatch, alternation = lmnt.alternation, altLocArr = lmnt.locator[alternation].toString().split(\",\");\n lmnt.locator[alternation] = void 0, lmnt.alternation = void 0;\n for (var alndx = 0; alndx < altLocArr.length; alndx++) mamatch = $.inArray(altLocArr[alndx], altIndexArr) !== -1, \n mamatch && (void 0 !== lmnt.locator[alternation] ? (lmnt.locator[alternation] += \",\", \n lmnt.locator[alternation] += altLocArr[alndx]) : lmnt.locator[alternation] = parseInt(altLocArr[alndx]), \n lmnt.alternation = alternation);\n if (void 0 !== lmnt.locator[alternation]) return lmnt;\n }\n })), matches = currentMatches.concat(malternateMatches), testPos = pos, insertStop = matches.length > 0, \n ndxInitializer = ndxInitializerClone.slice();\n } else match = handleMatch(alternateToken.matches[altIndex] || maskToken.matches[altIndex], [ altIndex ].concat(loopNdx), quantifierRecurse);\n if (match) return !0;\n } else if (match.isQuantifier && quantifierRecurse !== maskToken.matches[$.inArray(match, maskToken.matches) - 1]) for (var qt = match, qndx = ndxInitializer.length > 0 ? ndxInitializer.shift() : 0; qndx < (isNaN(qt.quantifier.max) ? qndx + 1 : qt.quantifier.max) && testPos <= pos; qndx++) {\n var tokenGroup = maskToken.matches[$.inArray(qt, maskToken.matches) - 1];\n if (match = handleMatch(tokenGroup, [ qndx ].concat(loopNdx), tokenGroup)) {\n if (latestMatch = matches[matches.length - 1].match, latestMatch.optionalQuantifier = qndx > qt.quantifier.min - 1, \n isFirstMatch(latestMatch, tokenGroup)) {\n if (qndx > qt.quantifier.min - 1) {\n insertStop = !0, testPos = pos;\n break;\n }\n return !0;\n }\n return !0;\n }\n } else if (match = resolveTestFromToken(match, ndxInitializer, loopNdx, quantifierRecurse)) return !0;\n } else testPos++;\n }\n for (var tndx = ndxInitializer.length > 0 ? ndxInitializer.shift() : 0; tndx < maskToken.matches.length; tndx++) if (maskToken.matches[tndx].isQuantifier !== !0) {\n var match = handleMatch(maskToken.matches[tndx], [ tndx ].concat(loopNdx), quantifierRecurse);\n if (match && testPos === pos) return match;\n if (testPos > pos) break;\n }\n }\n function mergeLocators(tests) {\n var locator = [];\n return $.isArray(tests) || (tests = [ tests ]), tests.length > 0 && (void 0 === tests[0].alternation ? (locator = determineTestTemplate(tests.slice()).locator.slice(), \n 0 === locator.length && (locator = tests[0].locator.slice())) : $.each(tests, function(ndx, tst) {\n if (\"\" !== tst.def) if (0 === locator.length) locator = tst.locator.slice(); else for (var i = 0; i < locator.length; i++) tst.locator[i] && locator[i].toString().indexOf(tst.locator[i]) === -1 && (locator[i] += \",\" + tst.locator[i]);\n })), locator;\n }\n function filterTests(tests) {\n return opts.keepStatic && pos > 0 && tests.length > 1 + (\"\" === tests[tests.length - 1].match.def ? 1 : 0) && tests[0].match.optionality !== !0 && tests[0].match.optionalQuantifier !== !0 && null === tests[0].match.fn && !/[0-9a-bA-Z]/.test(tests[0].match.def) ? [ determineTestTemplate(tests) ] : tests;\n }\n var latestMatch, maskTokens = getMaskSet().maskToken, testPos = ndxIntlzr ? tstPs : 0, ndxInitializer = ndxIntlzr ? ndxIntlzr.slice() : [ 0 ], matches = [], insertStop = !1, cacheDependency = ndxIntlzr ? ndxIntlzr.join(\"\") : \"\";\n if (pos > -1) {\n if (void 0 === ndxIntlzr) {\n for (var test, previousPos = pos - 1; void 0 === (test = getMaskSet().validPositions[previousPos] || getMaskSet().tests[previousPos]) && previousPos > -1; ) previousPos--;\n void 0 !== test && previousPos > -1 && (ndxInitializer = mergeLocators(test), cacheDependency = ndxInitializer.join(\"\"), \n testPos = previousPos);\n }\n if (getMaskSet().tests[pos] && getMaskSet().tests[pos][0].cd === cacheDependency) return filterTests(getMaskSet().tests[pos]);\n for (var mtndx = ndxInitializer.shift(); mtndx < maskTokens.length; mtndx++) {\n var match = resolveTestFromToken(maskTokens[mtndx], ndxInitializer, [ mtndx ]);\n if (match && testPos === pos || testPos > pos) break;\n }\n }\n return (0 === matches.length || insertStop) && matches.push({\n match: {\n fn: null,\n cardinality: 0,\n optionality: !0,\n casing: null,\n def: \"\",\n placeholder: \"\"\n },\n locator: [],\n cd: cacheDependency\n }), void 0 !== ndxIntlzr && getMaskSet().tests[pos] ? filterTests($.extend(!0, [], matches)) : (getMaskSet().tests[pos] = $.extend(!0, [], matches), \n filterTests(getMaskSet().tests[pos]));\n }\n function getBufferTemplate() {\n return void 0 === getMaskSet()._buffer && (getMaskSet()._buffer = getMaskTemplate(!1, 1), \n void 0 === getMaskSet().buffer && getMaskSet()._buffer.slice()), getMaskSet()._buffer;\n }\n function getBuffer(noCache) {\n return void 0 !== getMaskSet().buffer && noCache !== !0 || (getMaskSet().buffer = getMaskTemplate(!0, getLastValidPosition(), !0)), \n getMaskSet().buffer;\n }\n function refreshFromBuffer(start, end, buffer) {\n var i;\n if (start === !0) resetMaskSet(), start = 0, end = buffer.length; else for (i = start; i < end; i++) delete getMaskSet().validPositions[i];\n for (i = start; i < end; i++) resetMaskSet(!0), buffer[i] !== opts.skipOptionalPartCharacter && isValid(i, buffer[i], !0, !0);\n }\n function casing(elem, test, pos) {\n switch (opts.casing || test.casing) {\n case \"upper\":\n elem = elem.toUpperCase();\n break;\n\n case \"lower\":\n elem = elem.toLowerCase();\n break;\n\n case \"title\":\n var posBefore = getMaskSet().validPositions[pos - 1];\n elem = 0 === pos || posBefore && posBefore.input === String.fromCharCode(Inputmask.keyCode.SPACE) ? elem.toUpperCase() : elem.toLowerCase();\n }\n return elem;\n }\n function checkAlternationMatch(altArr1, altArr2) {\n for (var altArrC = opts.greedy ? altArr2 : altArr2.slice(0, 1), isMatch = !1, alndx = 0; alndx < altArr1.length; alndx++) if ($.inArray(altArr1[alndx], altArrC) !== -1) {\n isMatch = !0;\n break;\n }\n return isMatch;\n }\n function isValid(pos, c, strict, fromSetValid, fromAlternate) {\n function isSelection(posObj) {\n var selection = isRTL ? posObj.begin - posObj.end > 1 || posObj.begin - posObj.end === 1 && opts.insertMode : posObj.end - posObj.begin > 1 || posObj.end - posObj.begin === 1 && opts.insertMode;\n return selection && 0 === posObj.begin && posObj.end === getMaskSet().maskLength ? \"full\" : selection;\n }\n function _isValid(position, c, strict) {\n var rslt = !1;\n return $.each(getTests(position), function(ndx, tst) {\n for (var test = tst.match, loopend = c ? 1 : 0, chrs = \"\", i = test.cardinality; i > loopend; i--) chrs += getBufferElement(position - (i - 1));\n if (c && (chrs += c), getBuffer(!0), rslt = null != test.fn ? test.fn.test(chrs, getMaskSet(), position, strict, opts, isSelection(pos)) : (c === test.def || c === opts.skipOptionalPartCharacter) && \"\" !== test.def && {\n c: test.placeholder || test.def,\n pos: position\n }, rslt !== !1) {\n var elem = void 0 !== rslt.c ? rslt.c : c;\n elem = elem === opts.skipOptionalPartCharacter && null === test.fn ? test.placeholder || test.def : elem;\n var validatedPos = position, possibleModifiedBuffer = getBuffer();\n if (void 0 !== rslt.remove && ($.isArray(rslt.remove) || (rslt.remove = [ rslt.remove ]), \n $.each(rslt.remove.sort(function(a, b) {\n return b - a;\n }), function(ndx, lmnt) {\n stripValidPositions(lmnt, lmnt + 1, !0);\n })), void 0 !== rslt.insert && ($.isArray(rslt.insert) || (rslt.insert = [ rslt.insert ]), \n $.each(rslt.insert.sort(function(a, b) {\n return a - b;\n }), function(ndx, lmnt) {\n isValid(lmnt.pos, lmnt.c, !0, fromSetValid);\n })), rslt.refreshFromBuffer) {\n var refresh = rslt.refreshFromBuffer;\n if (strict = !0, refreshFromBuffer(refresh === !0 ? refresh : refresh.start, refresh.end, possibleModifiedBuffer), \n void 0 === rslt.pos && void 0 === rslt.c) return rslt.pos = getLastValidPosition(), \n !1;\n if (validatedPos = void 0 !== rslt.pos ? rslt.pos : position, validatedPos !== position) return rslt = $.extend(rslt, isValid(validatedPos, elem, !0, fromSetValid)), \n !1;\n } else if (rslt !== !0 && void 0 !== rslt.pos && rslt.pos !== position && (validatedPos = rslt.pos, \n refreshFromBuffer(position, validatedPos, getBuffer().slice()), validatedPos !== position)) return rslt = $.extend(rslt, isValid(validatedPos, elem, !0)), \n !1;\n return (rslt === !0 || void 0 !== rslt.pos || void 0 !== rslt.c) && (ndx > 0 && resetMaskSet(!0), \n setValidPosition(validatedPos, $.extend({}, tst, {\n input: casing(elem, test, validatedPos)\n }), fromSetValid, isSelection(pos)) || (rslt = !1), !1);\n }\n }), rslt;\n }\n function alternate(pos, c, strict) {\n var lastAlt, alternation, altPos, prevAltPos, i, validPos, altNdxs, decisionPos, validPsClone = $.extend(!0, {}, getMaskSet().validPositions), isValidRslt = !1, lAltPos = getLastValidPosition();\n for (prevAltPos = getMaskSet().validPositions[lAltPos]; lAltPos >= 0; lAltPos--) if (altPos = getMaskSet().validPositions[lAltPos], \n altPos && void 0 !== altPos.alternation) {\n if (lastAlt = lAltPos, alternation = getMaskSet().validPositions[lastAlt].alternation, \n prevAltPos.locator[altPos.alternation] !== altPos.locator[altPos.alternation]) break;\n prevAltPos = altPos;\n }\n if (void 0 !== alternation) {\n decisionPos = parseInt(lastAlt);\n var decisionTaker = void 0 !== prevAltPos.locator[prevAltPos.alternation || alternation] ? prevAltPos.locator[prevAltPos.alternation || alternation] : altNdxs[0];\n decisionTaker.length > 0 && (decisionTaker = decisionTaker.split(\",\")[0]);\n var possibilityPos = getMaskSet().validPositions[decisionPos], prevPos = getMaskSet().validPositions[decisionPos - 1];\n $.each(getTests(decisionPos, prevPos ? prevPos.locator : void 0, decisionPos - 1), function(ndx, test) {\n altNdxs = test.locator[alternation] ? test.locator[alternation].toString().split(\",\") : [];\n for (var mndx = 0; mndx < altNdxs.length; mndx++) {\n var validInputs = [], staticInputsBeforePos = 0, staticInputsBeforePosAlternate = 0, verifyValidInput = !1;\n if (decisionTaker < altNdxs[mndx] && (void 0 === test.na || $.inArray(altNdxs[mndx], test.na.split(\",\")) === -1)) {\n getMaskSet().validPositions[decisionPos] = $.extend(!0, {}, test);\n var possibilities = getMaskSet().validPositions[decisionPos].locator;\n for (getMaskSet().validPositions[decisionPos].locator[alternation] = parseInt(altNdxs[mndx]), \n null == test.match.fn ? (possibilityPos.input !== test.match.def && (verifyValidInput = !0, \n possibilityPos.generatedInput !== !0 && validInputs.push(possibilityPos.input)), \n staticInputsBeforePosAlternate++, getMaskSet().validPositions[decisionPos].generatedInput = !/[0-9a-bA-Z]/.test(test.match.def), \n getMaskSet().validPositions[decisionPos].input = test.match.def) : getMaskSet().validPositions[decisionPos].input = possibilityPos.input, \n i = decisionPos + 1; i < getLastValidPosition(void 0, !0) + 1; i++) validPos = getMaskSet().validPositions[i], \n validPos && validPos.generatedInput !== !0 && /[0-9a-bA-Z]/.test(validPos.input) ? validInputs.push(validPos.input) : i < pos && staticInputsBeforePos++, \n delete getMaskSet().validPositions[i];\n for (verifyValidInput && validInputs[0] === test.match.def && validInputs.shift(), \n resetMaskSet(!0), isValidRslt = !0; validInputs.length > 0; ) {\n var input = validInputs.shift();\n if (input !== opts.skipOptionalPartCharacter && !(isValidRslt = isValid(getLastValidPosition(void 0, !0) + 1, input, !1, fromSetValid, !0))) break;\n }\n if (isValidRslt) {\n getMaskSet().validPositions[decisionPos].locator = possibilities;\n var targetLvp = getLastValidPosition(pos) + 1;\n for (i = decisionPos + 1; i < getLastValidPosition() + 1; i++) validPos = getMaskSet().validPositions[i], \n (void 0 === validPos || null == validPos.match.fn) && i < pos + (staticInputsBeforePosAlternate - staticInputsBeforePos) && staticInputsBeforePosAlternate++;\n pos += staticInputsBeforePosAlternate - staticInputsBeforePos, isValidRslt = isValid(pos > targetLvp ? targetLvp : pos, c, strict, fromSetValid, !0);\n }\n if (isValidRslt) return !1;\n resetMaskSet(), getMaskSet().validPositions = $.extend(!0, {}, validPsClone);\n }\n }\n });\n }\n return isValidRslt;\n }\n function trackbackAlternations(originalPos, newPos) {\n var vp = getMaskSet().validPositions[newPos];\n if (vp) for (var targetLocator = vp.locator, tll = targetLocator.length, ps = originalPos; ps < newPos; ps++) if (void 0 === getMaskSet().validPositions[ps] && !isMask(ps, !0)) {\n var tests = getTests(ps), bestMatch = tests[0], equality = -1;\n $.each(tests, function(ndx, tst) {\n for (var i = 0; i < tll && (void 0 !== tst.locator[i] && checkAlternationMatch(tst.locator[i].toString().split(\",\"), targetLocator[i].toString().split(\",\"))); i++) equality < i && (equality = i, \n bestMatch = tst);\n }), setValidPosition(ps, $.extend({}, bestMatch, {\n input: bestMatch.match.placeholder || bestMatch.match.def\n }), !0);\n }\n }\n function setValidPosition(pos, validTest, fromSetValid, isSelection) {\n if (isSelection || opts.insertMode && void 0 !== getMaskSet().validPositions[pos] && void 0 === fromSetValid) {\n var i, positionsClone = $.extend(!0, {}, getMaskSet().validPositions), lvp = getLastValidPosition(void 0, !0);\n for (i = pos; i <= lvp; i++) delete getMaskSet().validPositions[i];\n getMaskSet().validPositions[pos] = $.extend(!0, {}, validTest);\n var j, valid = !0, vps = getMaskSet().validPositions, needsValidation = !1, initialLength = getMaskSet().maskLength;\n for (i = j = pos; i <= lvp; i++) {\n var t = positionsClone[i];\n if (void 0 !== t) for (var posMatch = j; posMatch < getMaskSet().maskLength && (null === t.match.fn && vps[i] && (vps[i].match.optionalQuantifier === !0 || vps[i].match.optionality === !0) || null != t.match.fn); ) {\n if (posMatch++, needsValidation === !1 && positionsClone[posMatch] && positionsClone[posMatch].match.def === t.match.def) getMaskSet().validPositions[posMatch] = $.extend(!0, {}, positionsClone[posMatch]), \n getMaskSet().validPositions[posMatch].input = t.input, fillMissingNonMask(posMatch), \n j = posMatch, valid = !0; else if (positionCanMatchDefinition(posMatch, t.match.def)) {\n var result = isValid(posMatch, t.input, !0, !0);\n valid = result !== !1, j = result.caret || result.insert ? getLastValidPosition() : posMatch, \n needsValidation = !0;\n } else valid = t.generatedInput === !0;\n if (getMaskSet().maskLength < initialLength && (getMaskSet().maskLength = initialLength), \n valid) break;\n }\n if (!valid) break;\n }\n if (!valid) return getMaskSet().validPositions = $.extend(!0, {}, positionsClone), \n resetMaskSet(!0), !1;\n } else getMaskSet().validPositions[pos] = $.extend(!0, {}, validTest);\n return resetMaskSet(!0), !0;\n }\n function fillMissingNonMask(maskPos) {\n for (var pndx = maskPos - 1; pndx > -1 && !getMaskSet().validPositions[pndx]; pndx--) ;\n var testTemplate, testsFromPos;\n for (pndx++; pndx < maskPos; pndx++) void 0 === getMaskSet().validPositions[pndx] && (opts.jitMasking === !1 || opts.jitMasking > pndx) && (testsFromPos = getTests(pndx, getTestTemplate(pndx - 1).locator, pndx - 1).slice(), \n \"\" === testsFromPos[testsFromPos.length - 1].match.def && testsFromPos.pop(), testTemplate = determineTestTemplate(testsFromPos), \n testTemplate && (testTemplate.match.def === opts.radixPointDefinitionSymbol || !isMask(pndx, !0) || $.inArray(opts.radixPoint, getBuffer()) < pndx && testTemplate.match.fn && testTemplate.match.fn.test(getPlaceholder(pndx), getMaskSet(), pndx, !1, opts)) && (result = _isValid(pndx, testTemplate.match.placeholder || (null == testTemplate.match.fn ? testTemplate.match.def : \"\" !== getPlaceholder(pndx) ? getPlaceholder(pndx) : getBuffer()[pndx]), !0), \n result !== !1 && (getMaskSet().validPositions[result.pos || pndx].generatedInput = !0)));\n }\n strict = strict === !0;\n var maskPos = pos;\n void 0 !== pos.begin && (maskPos = isRTL && !isSelection(pos) ? pos.end : pos.begin);\n var result = !1, positionsClone = $.extend(!0, {}, getMaskSet().validPositions);\n if (fillMissingNonMask(maskPos), isSelection(pos) && (handleRemove(void 0, Inputmask.keyCode.DELETE, pos), \n maskPos = getMaskSet().p), maskPos < getMaskSet().maskLength && (result = _isValid(maskPos, c, strict), \n (!strict || fromSetValid === !0) && result === !1)) {\n var currentPosValid = getMaskSet().validPositions[maskPos];\n if (!currentPosValid || null !== currentPosValid.match.fn || currentPosValid.match.def !== c && c !== opts.skipOptionalPartCharacter) {\n if ((opts.insertMode || void 0 === getMaskSet().validPositions[seekNext(maskPos)]) && !isMask(maskPos, !0)) {\n var testsFromPos = getTests(maskPos).slice();\n \"\" === testsFromPos[testsFromPos.length - 1].match.def && testsFromPos.pop();\n var staticChar = determineTestTemplate(testsFromPos, !0);\n staticChar && null === staticChar.match.fn && (staticChar = staticChar.match.placeholder || staticChar.match.def, \n _isValid(maskPos, staticChar, strict), getMaskSet().validPositions[maskPos].generatedInput = !0);\n for (var nPos = maskPos + 1, snPos = seekNext(maskPos); nPos <= snPos; nPos++) if (result = _isValid(nPos, c, strict), \n result !== !1) {\n trackbackAlternations(maskPos, void 0 !== result.pos ? result.pos : nPos), maskPos = nPos;\n break;\n }\n }\n } else result = {\n caret: seekNext(maskPos)\n };\n }\n return result === !1 && opts.keepStatic && !strict && fromAlternate !== !0 && (result = alternate(maskPos, c, strict)), \n result === !0 && (result = {\n pos: maskPos\n }), $.isFunction(opts.postValidation) && result !== !1 && !strict && fromSetValid !== !0 && (result = !!opts.postValidation(getBuffer(!0), result, opts) && result), \n void 0 === result.pos && (result.pos = maskPos), result === !1 && (resetMaskSet(!0), \n getMaskSet().validPositions = $.extend(!0, {}, positionsClone)), result;\n }\n function isMask(pos, strict) {\n var test;\n if (strict ? (test = getTestTemplate(pos).match, \"\" === test.def && (test = getTest(pos).match)) : test = getTest(pos).match, \n null != test.fn) return test.fn;\n if (strict !== !0 && pos > -1) {\n var tests = getTests(pos);\n return tests.length > 1 + (\"\" === tests[tests.length - 1].match.def ? 1 : 0);\n }\n return !1;\n }\n function seekNext(pos, newBlock) {\n var maskL = getMaskSet().maskLength;\n if (pos >= maskL) return maskL;\n for (var position = pos; ++position < maskL && (newBlock === !0 && (getTest(position).match.newBlockMarker !== !0 || !isMask(position)) || newBlock !== !0 && !isMask(position)); ) ;\n return position;\n }\n function seekPrevious(pos, newBlock) {\n var tests, position = pos;\n if (position <= 0) return 0;\n for (;--position > 0 && (newBlock === !0 && getTest(position).match.newBlockMarker !== !0 || newBlock !== !0 && !isMask(position) && (tests = getTests(position), \n tests.length < 2 || 2 === tests.length && \"\" === tests[1].match.def)); ) ;\n return position;\n }\n function getBufferElement(position) {\n return void 0 === getMaskSet().validPositions[position] ? getPlaceholder(position) : getMaskSet().validPositions[position].input;\n }\n function writeBuffer(input, buffer, caretPos, event, triggerInputEvent) {\n if (event && $.isFunction(opts.onBeforeWrite)) {\n var result = opts.onBeforeWrite(event, buffer, caretPos, opts);\n if (result) {\n if (result.refreshFromBuffer) {\n var refresh = result.refreshFromBuffer;\n refreshFromBuffer(refresh === !0 ? refresh : refresh.start, refresh.end, result.buffer || buffer), \n buffer = getBuffer(!0);\n }\n void 0 !== caretPos && (caretPos = void 0 !== result.caret ? result.caret : caretPos);\n }\n }\n input.inputmask._valueSet(buffer.join(\"\")), void 0 === caretPos || void 0 !== event && \"blur\" === event.type ? renderColorMask(input, buffer, caretPos) : caret(input, caretPos), \n triggerInputEvent === !0 && (skipInputEvent = !0, $(input).trigger(\"input\"));\n }\n function getPlaceholder(pos, test) {\n if (test = test || getTest(pos).match, void 0 !== test.placeholder) return test.placeholder;\n if (null === test.fn) {\n if (pos > -1 && void 0 === getMaskSet().validPositions[pos]) {\n var prevTest, tests = getTests(pos), staticAlternations = [];\n if (tests.length > 1 + (\"\" === tests[tests.length - 1].match.def ? 1 : 0)) for (var i = 0; i < tests.length; i++) if (tests[i].match.optionality !== !0 && tests[i].match.optionalQuantifier !== !0 && (null === tests[i].match.fn || void 0 === prevTest || tests[i].match.fn.test(prevTest.match.def, getMaskSet(), pos, !0, opts) !== !1) && (staticAlternations.push(tests[i]), \n null === tests[i].match.fn && (prevTest = tests[i]), staticAlternations.length > 1 && /[0-9a-bA-Z]/.test(staticAlternations[0].match.def))) return opts.placeholder.charAt(pos % opts.placeholder.length);\n }\n return test.def;\n }\n return opts.placeholder.charAt(pos % opts.placeholder.length);\n }\n function checkVal(input, writeOut, strict, nptvl, initiatingEvent, stickyCaret) {\n function isTemplateMatch() {\n var isMatch = !1, charCodeNdx = getBufferTemplate().slice(initialNdx, seekNext(initialNdx)).join(\"\").indexOf(charCodes);\n if (charCodeNdx !== -1 && !isMask(initialNdx)) {\n isMatch = !0;\n for (var bufferTemplateArr = getBufferTemplate().slice(initialNdx, initialNdx + charCodeNdx), i = 0; i < bufferTemplateArr.length; i++) if (\" \" !== bufferTemplateArr[i]) {\n isMatch = !1;\n break;\n }\n }\n return isMatch;\n }\n var inputValue = nptvl.slice(), charCodes = \"\", initialNdx = 0, result = void 0;\n if (resetMaskSet(), getMaskSet().p = seekNext(-1), !strict) if (opts.autoUnmask !== !0) {\n var staticInput = getBufferTemplate().slice(0, seekNext(-1)).join(\"\"), matches = inputValue.join(\"\").match(new RegExp(\"^\" + Inputmask.escapeRegex(staticInput), \"g\"));\n matches && matches.length > 0 && (inputValue.splice(0, matches.length * staticInput.length), \n initialNdx = seekNext(initialNdx));\n } else initialNdx = seekNext(initialNdx);\n if ($.each(inputValue, function(ndx, charCode) {\n if (void 0 !== charCode) {\n var keypress = new $.Event(\"keypress\");\n keypress.which = charCode.charCodeAt(0), charCodes += charCode;\n var lvp = getLastValidPosition(void 0, !0), lvTest = getMaskSet().validPositions[lvp], nextTest = getTestTemplate(lvp + 1, lvTest ? lvTest.locator.slice() : void 0, lvp);\n if (!isTemplateMatch() || strict || opts.autoUnmask) {\n var pos = strict ? ndx : null == nextTest.match.fn && nextTest.match.optionality && lvp + 1 < getMaskSet().p ? lvp + 1 : getMaskSet().p;\n result = EventHandlers.keypressEvent.call(input, keypress, !0, !1, strict, pos), \n initialNdx = pos + 1, charCodes = \"\";\n } else result = EventHandlers.keypressEvent.call(input, keypress, !0, !1, !0, lvp + 1);\n if (!strict && $.isFunction(opts.onBeforeWrite) && (result = opts.onBeforeWrite(keypress, getBuffer(), result.forwardPosition, opts), \n result && result.refreshFromBuffer)) {\n var refresh = result.refreshFromBuffer;\n refreshFromBuffer(refresh === !0 ? refresh : refresh.start, refresh.end, result.buffer), \n resetMaskSet(!0), result.caret && (getMaskSet().p = result.caret);\n }\n }\n }), writeOut) {\n var caretPos = void 0, lvp = getLastValidPosition();\n document.activeElement === input && (initiatingEvent || result) && (caretPos = caret(input).begin, \n initiatingEvent && result === !1 && (caretPos = seekNext(getLastValidPosition(caretPos))), \n result && stickyCaret !== !0 && (caretPos < lvp + 1 || lvp === -1) && (caretPos = opts.numericInput && void 0 === result.caret ? seekPrevious(result.forwardPosition) : result.forwardPosition)), \n writeBuffer(input, getBuffer(), caretPos, initiatingEvent || new $.Event(\"checkval\"));\n }\n }\n function unmaskedvalue(input) {\n if (input && void 0 === input.inputmask) return input.value;\n var umValue = [], vps = getMaskSet().validPositions;\n for (var pndx in vps) vps[pndx].match && null != vps[pndx].match.fn && umValue.push(vps[pndx].input);\n var unmaskedValue = 0 === umValue.length ? \"\" : (isRTL ? umValue.reverse() : umValue).join(\"\");\n if ($.isFunction(opts.onUnMask)) {\n var bufferValue = (isRTL ? getBuffer().slice().reverse() : getBuffer()).join(\"\");\n unmaskedValue = opts.onUnMask(bufferValue, unmaskedValue, opts) || unmaskedValue;\n }\n return unmaskedValue;\n }\n function caret(input, begin, end, notranslate) {\n function translatePosition(pos) {\n if (notranslate !== !0 && isRTL && \"number\" == typeof pos && (!opts.greedy || \"\" !== opts.placeholder)) {\n var bffrLght = getBuffer().join(\"\").length;\n pos = bffrLght - pos;\n }\n return pos;\n }\n var range;\n if (\"number\" != typeof begin) return input.setSelectionRange ? (begin = input.selectionStart, \n end = input.selectionEnd) : window.getSelection ? (range = window.getSelection().getRangeAt(0), \n range.commonAncestorContainer.parentNode !== input && range.commonAncestorContainer !== input || (begin = range.startOffset, \n end = range.endOffset)) : document.selection && document.selection.createRange && (range = document.selection.createRange(), \n begin = 0 - range.duplicate().moveStart(\"character\", -input.inputmask._valueGet().length), \n end = begin + range.text.length), {\n begin: translatePosition(begin),\n end: translatePosition(end)\n };\n begin = translatePosition(begin), end = translatePosition(end), end = \"number\" == typeof end ? end : begin;\n var scrollCalc = parseInt(((input.ownerDocument.defaultView || window).getComputedStyle ? (input.ownerDocument.defaultView || window).getComputedStyle(input, null) : input.currentStyle).fontSize) * end;\n if (input.scrollLeft = scrollCalc > input.scrollWidth ? scrollCalc : 0, mobile || opts.insertMode !== !1 || begin !== end || end++, \n input.setSelectionRange) input.selectionStart = begin, input.selectionEnd = end; else if (window.getSelection) {\n if (range = document.createRange(), void 0 === input.firstChild || null === input.firstChild) {\n var textNode = document.createTextNode(\"\");\n input.appendChild(textNode);\n }\n range.setStart(input.firstChild, begin < input.inputmask._valueGet().length ? begin : input.inputmask._valueGet().length), \n range.setEnd(input.firstChild, end < input.inputmask._valueGet().length ? end : input.inputmask._valueGet().length), \n range.collapse(!0);\n var sel = window.getSelection();\n sel.removeAllRanges(), sel.addRange(range);\n } else input.createTextRange && (range = input.createTextRange(), range.collapse(!0), \n range.moveEnd(\"character\", end), range.moveStart(\"character\", begin), range.select());\n renderColorMask(input, void 0, {\n begin: begin,\n end: end\n });\n }\n function determineLastRequiredPosition(returnDefinition) {\n var pos, testPos, buffer = getBuffer(), bl = buffer.length, lvp = getLastValidPosition(), positions = {}, lvTest = getMaskSet().validPositions[lvp], ndxIntlzr = void 0 !== lvTest ? lvTest.locator.slice() : void 0;\n for (pos = lvp + 1; pos < buffer.length; pos++) testPos = getTestTemplate(pos, ndxIntlzr, pos - 1), \n ndxIntlzr = testPos.locator.slice(), positions[pos] = $.extend(!0, {}, testPos);\n var lvTestAlt = lvTest && void 0 !== lvTest.alternation ? lvTest.locator[lvTest.alternation] : void 0;\n for (pos = bl - 1; pos > lvp && (testPos = positions[pos], (testPos.match.optionality || testPos.match.optionalQuantifier || lvTestAlt && (lvTestAlt !== positions[pos].locator[lvTest.alternation] && null != testPos.match.fn || null === testPos.match.fn && testPos.locator[lvTest.alternation] && checkAlternationMatch(testPos.locator[lvTest.alternation].toString().split(\",\"), lvTestAlt.toString().split(\",\")) && \"\" !== getTests(pos)[0].def)) && buffer[pos] === getPlaceholder(pos, testPos.match)); pos--) bl--;\n return returnDefinition ? {\n l: bl,\n def: positions[bl] ? positions[bl].match : void 0\n } : bl;\n }\n function clearOptionalTail(buffer) {\n for (var rl = determineLastRequiredPosition(), lmib = buffer.length - 1; lmib > rl && !isMask(lmib); lmib--) ;\n return buffer.splice(rl, lmib + 1 - rl), buffer;\n }\n function isComplete(buffer) {\n if ($.isFunction(opts.isComplete)) return opts.isComplete(buffer, opts);\n if (\"*\" !== opts.repeat) {\n var complete = !1, lrp = determineLastRequiredPosition(!0), aml = seekPrevious(lrp.l);\n if (void 0 === lrp.def || lrp.def.newBlockMarker || lrp.def.optionality || lrp.def.optionalQuantifier) {\n complete = !0;\n for (var i = 0; i <= aml; i++) {\n var test = getTestTemplate(i).match;\n if (null !== test.fn && void 0 === getMaskSet().validPositions[i] && test.optionality !== !0 && test.optionalQuantifier !== !0 || null === test.fn && buffer[i] !== getPlaceholder(i, test)) {\n complete = !1;\n break;\n }\n }\n }\n return complete;\n }\n }\n function handleRemove(input, k, pos, strict) {\n function generalize() {\n if (opts.keepStatic) {\n for (var validInputs = [], lastAlt = getLastValidPosition(-1, !0), positionsClone = $.extend(!0, {}, getMaskSet().validPositions), prevAltPos = getMaskSet().validPositions[lastAlt]; lastAlt >= 0; lastAlt--) {\n var altPos = getMaskSet().validPositions[lastAlt];\n if (altPos) {\n if (altPos.generatedInput !== !0 && /[0-9a-bA-Z]/.test(altPos.input) && validInputs.push(altPos.input), \n delete getMaskSet().validPositions[lastAlt], void 0 !== altPos.alternation && altPos.locator[altPos.alternation] !== prevAltPos.locator[altPos.alternation]) break;\n prevAltPos = altPos;\n }\n }\n if (lastAlt > -1) for (getMaskSet().p = seekNext(getLastValidPosition(-1, !0)); validInputs.length > 0; ) {\n var keypress = new $.Event(\"keypress\");\n keypress.which = validInputs.pop().charCodeAt(0), EventHandlers.keypressEvent.call(input, keypress, !0, !1, !1, getMaskSet().p);\n } else getMaskSet().validPositions = $.extend(!0, {}, positionsClone);\n }\n }\n if ((opts.numericInput || isRTL) && (k === Inputmask.keyCode.BACKSPACE ? k = Inputmask.keyCode.DELETE : k === Inputmask.keyCode.DELETE && (k = Inputmask.keyCode.BACKSPACE), \n isRTL)) {\n var pend = pos.end;\n pos.end = pos.begin, pos.begin = pend;\n }\n k === Inputmask.keyCode.BACKSPACE && (pos.end - pos.begin < 1 || opts.insertMode === !1) ? (pos.begin = seekPrevious(pos.begin), \n void 0 === getMaskSet().validPositions[pos.begin] || getMaskSet().validPositions[pos.begin].input !== opts.groupSeparator && getMaskSet().validPositions[pos.begin].input !== opts.radixPoint || pos.begin--) : k === Inputmask.keyCode.DELETE && pos.begin === pos.end && (pos.end = isMask(pos.end, !0) ? pos.end + 1 : seekNext(pos.end) + 1, \n void 0 === getMaskSet().validPositions[pos.begin] || getMaskSet().validPositions[pos.begin].input !== opts.groupSeparator && getMaskSet().validPositions[pos.begin].input !== opts.radixPoint || pos.end++), \n stripValidPositions(pos.begin, pos.end, !1, strict), strict !== !0 && generalize();\n var lvp = getLastValidPosition(pos.begin, !0);\n lvp < pos.begin ? getMaskSet().p = seekNext(lvp) : strict !== !0 && (getMaskSet().p = pos.begin);\n }\n function initializeColorMask(input) {\n function findCaretPos(clientx) {\n var caretPos, e = document.createElement(\"span\");\n for (var style in computedStyle) isNaN(style) && style.indexOf(\"font\") !== -1 && (e.style[style] = computedStyle[style]);\n e.style.textTransform = computedStyle.textTransform, e.style.letterSpacing = computedStyle.letterSpacing, \n e.style.position = \"absolute\", e.style.height = \"auto\", e.style.width = \"auto\", \n e.style.visibility = \"hidden\", e.style.whiteSpace = \"nowrap\", document.body.appendChild(e);\n var itl, inputText = input.inputmask._valueGet(), previousWidth = 0;\n for (caretPos = 0, itl = inputText.length; caretPos <= itl; caretPos++) {\n if (e.innerHTML += inputText.charAt(caretPos) || \"_\", e.offsetWidth >= clientx) {\n var offset1 = clientx - previousWidth, offset2 = e.offsetWidth - clientx;\n e.innerHTML = inputText.charAt(caretPos), offset1 -= e.offsetWidth / 3, caretPos = offset1 < offset2 ? caretPos - 1 : caretPos;\n break;\n }\n previousWidth = e.offsetWidth;\n }\n return document.body.removeChild(e), caretPos;\n }\n function position() {\n colorMask.style.position = \"absolute\", colorMask.style.top = offset.top + \"px\", \n colorMask.style.left = offset.left + \"px\", colorMask.style.width = parseInt(input.offsetWidth) - parseInt(computedStyle.paddingLeft) - parseInt(computedStyle.paddingRight) - parseInt(computedStyle.borderLeftWidth) - parseInt(computedStyle.borderRightWidth) + \"px\", \n colorMask.style.height = parseInt(input.offsetHeight) - parseInt(computedStyle.paddingTop) - parseInt(computedStyle.paddingBottom) - parseInt(computedStyle.borderTopWidth) - parseInt(computedStyle.borderBottomWidth) + \"px\", \n colorMask.style.lineHeight = colorMask.style.height, colorMask.style.zIndex = isNaN(computedStyle.zIndex) ? -1 : computedStyle.zIndex - 1, \n colorMask.style.webkitAppearance = \"textfield\", colorMask.style.mozAppearance = \"textfield\", \n colorMask.style.Appearance = \"textfield\";\n }\n var offset = $(input).position(), computedStyle = (input.ownerDocument.defaultView || window).getComputedStyle(input, null);\n input.parentNode;\n colorMask = document.createElement(\"div\"), document.body.appendChild(colorMask);\n for (var style in computedStyle) isNaN(style) && \"cssText\" !== style && style.indexOf(\"webkit\") == -1 && (colorMask.style[style] = computedStyle[style]);\n input.style.backgroundColor = \"transparent\", input.style.color = \"transparent\", \n input.style.webkitAppearance = \"caret\", input.style.mozAppearance = \"caret\", input.style.Appearance = \"caret\", \n position(), $(window).on(\"resize\", function(e) {\n offset = $(input).position(), computedStyle = (input.ownerDocument.defaultView || window).getComputedStyle(input, null), \n position();\n }), $(input).on(\"click\", function(e) {\n return caret(input, findCaretPos(e.clientX)), EventHandlers.clickEvent.call(this, [ e ]);\n }), $(input).on(\"keydown\", function(e) {\n e.shiftKey || opts.insertMode === !1 || setTimeout(function() {\n renderColorMask(input);\n }, 0);\n });\n }\n function renderColorMask(input, buffer, caretPos) {\n function handleStatic() {\n static || null !== test.fn && void 0 !== testPos.input ? static && null !== test.fn && void 0 !== testPos.input && (static = !1, \n maskTemplate += \"</span>\") : (static = !0, maskTemplate += \"<span class='im-static''>\");\n }\n if (void 0 !== colorMask) {\n buffer = buffer || getBuffer(), void 0 === caretPos ? caretPos = caret(input) : void 0 === caretPos.begin && (caretPos = {\n begin: caretPos,\n end: caretPos\n });\n var maskTemplate = \"\", static = !1;\n if (\"\" != buffer) {\n var ndxIntlzr, test, testPos, pos = 0, lvp = getLastValidPosition();\n do pos === caretPos.begin && document.activeElement === input && (maskTemplate += \"<span class='im-caret' style='border-right-width: 1px;border-right-style: solid;'></span>\"), \n getMaskSet().validPositions[pos] ? (testPos = getMaskSet().validPositions[pos], \n test = testPos.match, ndxIntlzr = testPos.locator.slice(), handleStatic(), maskTemplate += testPos.input) : (testPos = getTestTemplate(pos, ndxIntlzr, pos - 1), \n test = testPos.match, ndxIntlzr = testPos.locator.slice(), (opts.jitMasking === !1 || pos < lvp || \"number\" == typeof opts.jitMasking && isFinite(opts.jitMasking) && opts.jitMasking > pos) && (handleStatic(), \n maskTemplate += getPlaceholder(pos, test))), pos++; while ((void 0 === maxLength || pos < maxLength) && (null !== test.fn || \"\" !== test.def) || lvp > pos);\n }\n colorMask.innerHTML = maskTemplate;\n }\n }\n function mask(elem) {\n function isElementTypeSupported(input, opts) {\n function patchValueProperty(npt) {\n function patchValhook(type) {\n if ($.valHooks && (void 0 === $.valHooks[type] || $.valHooks[type].inputmaskpatch !== !0)) {\n var valhookGet = $.valHooks[type] && $.valHooks[type].get ? $.valHooks[type].get : function(elem) {\n return elem.value;\n }, valhookSet = $.valHooks[type] && $.valHooks[type].set ? $.valHooks[type].set : function(elem, value) {\n return elem.value = value, elem;\n };\n $.valHooks[type] = {\n get: function(elem) {\n if (elem.inputmask) {\n if (elem.inputmask.opts.autoUnmask) return elem.inputmask.unmaskedvalue();\n var result = valhookGet(elem);\n return getLastValidPosition(void 0, void 0, elem.inputmask.maskset.validPositions) !== -1 || opts.nullable !== !0 ? result : \"\";\n }\n return valhookGet(elem);\n },\n set: function(elem, value) {\n var result, $elem = $(elem);\n return result = valhookSet(elem, value), elem.inputmask && $elem.trigger(\"setvalue\"), \n result;\n },\n inputmaskpatch: !0\n };\n }\n }\n function getter() {\n return this.inputmask ? this.inputmask.opts.autoUnmask ? this.inputmask.unmaskedvalue() : getLastValidPosition() !== -1 || opts.nullable !== !0 ? document.activeElement === this && opts.clearMaskOnLostFocus ? (isRTL ? clearOptionalTail(getBuffer().slice()).reverse() : clearOptionalTail(getBuffer().slice())).join(\"\") : valueGet.call(this) : \"\" : valueGet.call(this);\n }\n function setter(value) {\n valueSet.call(this, value), this.inputmask && $(this).trigger(\"setvalue\");\n }\n function installNativeValueSetFallback(npt) {\n EventRuler.on(npt, \"mouseenter\", function(event) {\n var $input = $(this), input = this, value = input.inputmask._valueGet();\n value !== getBuffer().join(\"\") && $input.trigger(\"setvalue\");\n });\n }\n var valueGet, valueSet;\n if (!npt.inputmask.__valueGet) {\n if (opts.noValuePatching !== !0) {\n if (Object.getOwnPropertyDescriptor) {\n \"function\" != typeof Object.getPrototypeOf && (Object.getPrototypeOf = \"object\" == typeof \"test\".__proto__ ? function(object) {\n return object.__proto__;\n } : function(object) {\n return object.constructor.prototype;\n });\n var valueProperty = Object.getPrototypeOf ? Object.getOwnPropertyDescriptor(Object.getPrototypeOf(npt), \"value\") : void 0;\n valueProperty && valueProperty.get && valueProperty.set ? (valueGet = valueProperty.get, \n valueSet = valueProperty.set, Object.defineProperty(npt, \"value\", {\n get: getter,\n set: setter,\n configurable: !0\n })) : \"INPUT\" !== npt.tagName && (valueGet = function() {\n return this.textContent;\n }, valueSet = function(value) {\n this.textContent = value;\n }, Object.defineProperty(npt, \"value\", {\n get: getter,\n set: setter,\n configurable: !0\n }));\n } else document.__lookupGetter__ && npt.__lookupGetter__(\"value\") && (valueGet = npt.__lookupGetter__(\"value\"), \n valueSet = npt.__lookupSetter__(\"value\"), npt.__defineGetter__(\"value\", getter), \n npt.__defineSetter__(\"value\", setter));\n npt.inputmask.__valueGet = valueGet, npt.inputmask.__valueSet = valueSet;\n }\n npt.inputmask._valueGet = function(overruleRTL) {\n return isRTL && overruleRTL !== !0 ? valueGet.call(this.el).split(\"\").reverse().join(\"\") : valueGet.call(this.el);\n }, npt.inputmask._valueSet = function(value, overruleRTL) {\n valueSet.call(this.el, null === value || void 0 === value ? \"\" : overruleRTL !== !0 && isRTL ? value.split(\"\").reverse().join(\"\") : value);\n }, void 0 === valueGet && (valueGet = function() {\n return this.value;\n }, valueSet = function(value) {\n this.value = value;\n }, patchValhook(npt.type), installNativeValueSetFallback(npt));\n }\n }\n var elementType = input.getAttribute(\"type\"), isSupported = \"INPUT\" === input.tagName && $.inArray(elementType, opts.supportsInputType) !== -1 || input.isContentEditable || \"TEXTAREA\" === input.tagName;\n if (!isSupported) if (\"INPUT\" === input.tagName) {\n var el = document.createElement(\"input\");\n el.setAttribute(\"type\", elementType), isSupported = \"text\" === el.type, el = null;\n } else isSupported = \"partial\";\n return isSupported !== !1 && patchValueProperty(input), isSupported;\n }\n var isSupported = isElementTypeSupported(elem, opts);\n if (isSupported !== !1 && (el = elem, $el = $(el), (\"rtl\" === el.dir || opts.rightAlign) && (el.style.textAlign = \"right\"), \n (\"rtl\" === el.dir || opts.numericInput) && (el.dir = \"ltr\", el.removeAttribute(\"dir\"), \n el.inputmask.isRTL = !0, isRTL = !0), opts.colorMask === !0 && initializeColorMask(el), \n android && (el.hasOwnProperty(\"inputmode\") && (el.inputmode = opts.inputmode, el.setAttribute(\"inputmode\", opts.inputmode)), \n \"rtfm\" === opts.androidHack && (opts.colorMask !== !0 && initializeColorMask(el), \n el.type = \"password\")), EventRuler.off(el), isSupported === !0 && (EventRuler.on(el, \"submit\", EventHandlers.submitEvent), \n EventRuler.on(el, \"reset\", EventHandlers.resetEvent), EventRuler.on(el, \"mouseenter\", EventHandlers.mouseenterEvent), \n EventRuler.on(el, \"blur\", EventHandlers.blurEvent), EventRuler.on(el, \"focus\", EventHandlers.focusEvent), \n EventRuler.on(el, \"mouseleave\", EventHandlers.mouseleaveEvent), opts.colorMask !== !0 && EventRuler.on(el, \"click\", EventHandlers.clickEvent), \n EventRuler.on(el, \"dblclick\", EventHandlers.dblclickEvent), EventRuler.on(el, \"paste\", EventHandlers.pasteEvent), \n EventRuler.on(el, \"dragdrop\", EventHandlers.pasteEvent), EventRuler.on(el, \"drop\", EventHandlers.pasteEvent), \n EventRuler.on(el, \"cut\", EventHandlers.cutEvent), EventRuler.on(el, \"complete\", opts.oncomplete), \n EventRuler.on(el, \"incomplete\", opts.onincomplete), EventRuler.on(el, \"cleared\", opts.oncleared), \n opts.inputEventOnly !== !0 && (EventRuler.on(el, \"keydown\", EventHandlers.keydownEvent), \n EventRuler.on(el, \"keypress\", EventHandlers.keypressEvent)), EventRuler.on(el, \"compositionstart\", $.noop), \n EventRuler.on(el, \"compositionupdate\", $.noop), EventRuler.on(el, \"compositionend\", $.noop), \n EventRuler.on(el, \"keyup\", $.noop), EventRuler.on(el, \"input\", EventHandlers.inputFallBackEvent)), \n EventRuler.on(el, \"setvalue\", EventHandlers.setValueEvent), getBufferTemplate(), \n \"\" !== el.inputmask._valueGet() || opts.clearMaskOnLostFocus === !1 || document.activeElement === el)) {\n var initialValue = $.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(el.inputmask._valueGet(), opts) || el.inputmask._valueGet() : el.inputmask._valueGet();\n checkVal(el, !0, !1, initialValue.split(\"\"));\n var buffer = getBuffer().slice();\n undoValue = buffer.join(\"\"), isComplete(buffer) === !1 && opts.clearIncomplete && resetMaskSet(), \n opts.clearMaskOnLostFocus && document.activeElement !== el && (getLastValidPosition() === -1 ? buffer = [] : clearOptionalTail(buffer)), \n writeBuffer(el, buffer), document.activeElement === el && caret(el, seekNext(getLastValidPosition()));\n }\n }\n maskset = maskset || this.maskset, opts = opts || this.opts;\n var undoValue, $el, maxLength, colorMask, valueBuffer, el = this.el, isRTL = this.isRTL, skipKeyPressEvent = !1, skipInputEvent = !1, ignorable = !1, mouseEnter = !1, EventRuler = {\n on: function(input, eventName, eventHandler) {\n var ev = function(e) {\n if (void 0 === this.inputmask && \"FORM\" !== this.nodeName) {\n var imOpts = $.data(this, \"_inputmask_opts\");\n imOpts ? new Inputmask(imOpts).mask(this) : EventRuler.off(this);\n } else {\n if (\"setvalue\" === e.type || !(this.disabled || this.readOnly && !(\"keydown\" === e.type && e.ctrlKey && 67 === e.keyCode || opts.tabThrough === !1 && e.keyCode === Inputmask.keyCode.TAB))) {\n switch (e.type) {\n case \"input\":\n if (skipInputEvent === !0) return skipInputEvent = !1, e.preventDefault();\n break;\n\n case \"keydown\":\n skipKeyPressEvent = !1, skipInputEvent = !1;\n break;\n\n case \"keypress\":\n if (skipKeyPressEvent === !0) return e.preventDefault();\n skipKeyPressEvent = !0;\n break;\n\n case \"click\":\n if (iemobile || iphone) {\n var that = this, args = arguments;\n return setTimeout(function() {\n eventHandler.apply(that, args);\n }, 0), !1;\n }\n }\n var returnVal = eventHandler.apply(this, arguments);\n return returnVal === !1 && (e.preventDefault(), e.stopPropagation()), returnVal;\n }\n e.preventDefault();\n }\n };\n input.inputmask.events[eventName] = input.inputmask.events[eventName] || [], input.inputmask.events[eventName].push(ev), \n $.inArray(eventName, [ \"submit\", \"reset\" ]) !== -1 ? null != input.form && $(input.form).on(eventName, ev) : $(input).on(eventName, ev);\n },\n off: function(input, event) {\n if (input.inputmask && input.inputmask.events) {\n var events;\n event ? (events = [], events[event] = input.inputmask.events[event]) : events = input.inputmask.events, \n $.each(events, function(eventName, evArr) {\n for (;evArr.length > 0; ) {\n var ev = evArr.pop();\n $.inArray(eventName, [ \"submit\", \"reset\" ]) !== -1 ? null != input.form && $(input.form).off(eventName, ev) : $(input).off(eventName, ev);\n }\n delete input.inputmask.events[eventName];\n });\n }\n }\n }, EventHandlers = {\n keydownEvent: function(e) {\n function isInputEventSupported(eventName) {\n var el = document.createElement(\"input\"), evName = \"on\" + eventName, isSupported = evName in el;\n return isSupported || (el.setAttribute(evName, \"return;\"), isSupported = \"function\" == typeof el[evName]), \n el = null, isSupported;\n }\n var input = this, $input = $(input), k = e.keyCode, pos = caret(input);\n if (k === Inputmask.keyCode.BACKSPACE || k === Inputmask.keyCode.DELETE || iphone && k === Inputmask.keyCode.BACKSPACE_SAFARI || e.ctrlKey && k === Inputmask.keyCode.X && !isInputEventSupported(\"cut\")) e.preventDefault(), \n handleRemove(input, k, pos), writeBuffer(input, getBuffer(!0), getMaskSet().p, e, input.inputmask._valueGet() !== getBuffer().join(\"\")), \n input.inputmask._valueGet() === getBufferTemplate().join(\"\") ? $input.trigger(\"cleared\") : isComplete(getBuffer()) === !0 && $input.trigger(\"complete\"); else if (k === Inputmask.keyCode.END || k === Inputmask.keyCode.PAGE_DOWN) {\n e.preventDefault();\n var caretPos = seekNext(getLastValidPosition());\n opts.insertMode || caretPos !== getMaskSet().maskLength || e.shiftKey || caretPos--, \n caret(input, e.shiftKey ? pos.begin : caretPos, caretPos, !0);\n } else k === Inputmask.keyCode.HOME && !e.shiftKey || k === Inputmask.keyCode.PAGE_UP ? (e.preventDefault(), \n caret(input, 0, e.shiftKey ? pos.begin : 0, !0)) : (opts.undoOnEscape && k === Inputmask.keyCode.ESCAPE || 90 === k && e.ctrlKey) && e.altKey !== !0 ? (checkVal(input, !0, !1, undoValue.split(\"\")), \n $input.trigger(\"click\")) : k !== Inputmask.keyCode.INSERT || e.shiftKey || e.ctrlKey ? opts.tabThrough === !0 && k === Inputmask.keyCode.TAB ? (e.shiftKey === !0 ? (null === getTest(pos.begin).match.fn && (pos.begin = seekNext(pos.begin)), \n pos.end = seekPrevious(pos.begin, !0), pos.begin = seekPrevious(pos.end, !0)) : (pos.begin = seekNext(pos.begin, !0), \n pos.end = seekNext(pos.begin, !0), pos.end < getMaskSet().maskLength && pos.end--), \n pos.begin < getMaskSet().maskLength && (e.preventDefault(), caret(input, pos.begin, pos.end))) : e.shiftKey || opts.insertMode === !1 && (k === Inputmask.keyCode.RIGHT ? setTimeout(function() {\n var caretPos = caret(input);\n caret(input, caretPos.begin);\n }, 0) : k === Inputmask.keyCode.LEFT && setTimeout(function() {\n var caretPos = caret(input);\n caret(input, isRTL ? caretPos.begin + 1 : caretPos.begin - 1);\n }, 0)) : (opts.insertMode = !opts.insertMode, caret(input, opts.insertMode || pos.begin !== getMaskSet().maskLength ? pos.begin : pos.begin - 1));\n opts.onKeyDown.call(this, e, getBuffer(), caret(input).begin, opts), ignorable = $.inArray(k, opts.ignorables) !== -1;\n },\n keypressEvent: function(e, checkval, writeOut, strict, ndx) {\n var input = this, $input = $(input), k = e.which || e.charCode || e.keyCode;\n if (!(checkval === !0 || e.ctrlKey && e.altKey) && (e.ctrlKey || e.metaKey || ignorable)) return k === Inputmask.keyCode.ENTER && undoValue !== getBuffer().join(\"\") && (undoValue = getBuffer().join(\"\"), \n setTimeout(function() {\n $input.trigger(\"change\");\n }, 0)), !0;\n if (k) {\n 46 === k && e.shiftKey === !1 && \",\" === opts.radixPoint && (k = 44);\n var forwardPosition, pos = checkval ? {\n begin: ndx,\n end: ndx\n } : caret(input), c = String.fromCharCode(k);\n getMaskSet().writeOutBuffer = !0;\n var valResult = isValid(pos, c, strict);\n if (valResult !== !1 && (resetMaskSet(!0), forwardPosition = void 0 !== valResult.caret ? valResult.caret : checkval ? valResult.pos + 1 : seekNext(valResult.pos), \n getMaskSet().p = forwardPosition), writeOut !== !1) {\n var self = this;\n if (setTimeout(function() {\n opts.onKeyValidation.call(self, k, valResult, opts);\n }, 0), getMaskSet().writeOutBuffer && valResult !== !1) {\n var buffer = getBuffer();\n writeBuffer(input, buffer, opts.numericInput && void 0 === valResult.caret ? seekPrevious(forwardPosition) : forwardPosition, e, checkval !== !0), \n checkval !== !0 && setTimeout(function() {\n isComplete(buffer) === !0 && $input.trigger(\"complete\");\n }, 0);\n }\n }\n if (e.preventDefault(), checkval) return valResult.forwardPosition = forwardPosition, \n valResult;\n }\n },\n pasteEvent: function(e) {\n var tempValue, input = this, ev = e.originalEvent || e, $input = $(input), inputValue = input.inputmask._valueGet(!0), caretPos = caret(input);\n isRTL && (tempValue = caretPos.end, caretPos.end = caretPos.begin, caretPos.begin = tempValue);\n var valueBeforeCaret = inputValue.substr(0, caretPos.begin), valueAfterCaret = inputValue.substr(caretPos.end, inputValue.length);\n if (valueBeforeCaret === (isRTL ? getBufferTemplate().reverse() : getBufferTemplate()).slice(0, caretPos.begin).join(\"\") && (valueBeforeCaret = \"\"), \n valueAfterCaret === (isRTL ? getBufferTemplate().reverse() : getBufferTemplate()).slice(caretPos.end).join(\"\") && (valueAfterCaret = \"\"), \n isRTL && (tempValue = valueBeforeCaret, valueBeforeCaret = valueAfterCaret, valueAfterCaret = tempValue), \n window.clipboardData && window.clipboardData.getData) inputValue = valueBeforeCaret + window.clipboardData.getData(\"Text\") + valueAfterCaret; else {\n if (!ev.clipboardData || !ev.clipboardData.getData) return !0;\n inputValue = valueBeforeCaret + ev.clipboardData.getData(\"text/plain\") + valueAfterCaret;\n }\n var pasteValue = inputValue;\n if ($.isFunction(opts.onBeforePaste)) {\n if (pasteValue = opts.onBeforePaste(inputValue, opts), pasteValue === !1) return e.preventDefault();\n pasteValue || (pasteValue = inputValue);\n }\n return checkVal(input, !1, !1, isRTL ? pasteValue.split(\"\").reverse() : pasteValue.toString().split(\"\")), \n writeBuffer(input, getBuffer(), seekNext(getLastValidPosition()), e, undoValue !== getBuffer().join(\"\")), \n isComplete(getBuffer()) === !0 && $input.trigger(\"complete\"), e.preventDefault();\n },\n inputFallBackEvent: function(e) {\n var input = this, inputValue = input.inputmask._valueGet();\n if (getBuffer().join(\"\") !== inputValue) {\n var caretPos = caret(input);\n if (inputValue = inputValue.replace(new RegExp(\"(\" + Inputmask.escapeRegex(getBufferTemplate().join(\"\")) + \")*\"), \"\"), \n iemobile) {\n var inputChar = inputValue.replace(getBuffer().join(\"\"), \"\");\n if (1 === inputChar.length) {\n var keypress = new $.Event(\"keypress\");\n return keypress.which = inputChar.charCodeAt(0), EventHandlers.keypressEvent.call(input, keypress, !0, !0, !1, getMaskSet().validPositions[caretPos.begin - 1] ? caretPos.begin : caretPos.begin - 1), \n !1;\n }\n }\n if (caretPos.begin > inputValue.length && (caret(input, inputValue.length), caretPos = caret(input)), \n getBuffer().length - inputValue.length !== 1 || inputValue.charAt(caretPos.begin) === getBuffer()[caretPos.begin] || inputValue.charAt(caretPos.begin + 1) === getBuffer()[caretPos.begin] || isMask(caretPos.begin)) {\n for (var lvp = getLastValidPosition() + 1, bufferTemplate = getBufferTemplate().join(\"\"); null === inputValue.match(Inputmask.escapeRegex(bufferTemplate) + \"$\"); ) bufferTemplate = bufferTemplate.slice(1);\n inputValue = inputValue.replace(bufferTemplate, \"\"), inputValue = inputValue.split(\"\"), \n checkVal(input, !0, !1, inputValue, e, caretPos.begin < lvp), isComplete(getBuffer()) === !0 && $(input).trigger(\"complete\");\n } else e.keyCode = Inputmask.keyCode.BACKSPACE, EventHandlers.keydownEvent.call(input, e);\n e.preventDefault();\n }\n },\n setValueEvent: function(e) {\n var input = this, value = input.inputmask._valueGet();\n checkVal(input, !0, !1, ($.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(value, opts) || value : value).split(\"\")), \n undoValue = getBuffer().join(\"\"), (opts.clearMaskOnLostFocus || opts.clearIncomplete) && input.inputmask._valueGet() === getBufferTemplate().join(\"\") && input.inputmask._valueSet(\"\");\n },\n focusEvent: function(e) {\n var input = this, nptValue = input.inputmask._valueGet();\n opts.showMaskOnFocus && (!opts.showMaskOnHover || opts.showMaskOnHover && \"\" === nptValue) && (input.inputmask._valueGet() !== getBuffer().join(\"\") ? writeBuffer(input, getBuffer(), seekNext(getLastValidPosition())) : mouseEnter === !1 && caret(input, seekNext(getLastValidPosition()))), \n opts.positionCaretOnTab === !0 && EventHandlers.clickEvent.apply(input, [ e, !0 ]), \n undoValue = getBuffer().join(\"\");\n },\n mouseleaveEvent: function(e) {\n var input = this;\n if (mouseEnter = !1, opts.clearMaskOnLostFocus && document.activeElement !== input) {\n var buffer = getBuffer().slice(), nptValue = input.inputmask._valueGet();\n nptValue !== input.getAttribute(\"placeholder\") && \"\" !== nptValue && (getLastValidPosition() === -1 && nptValue === getBufferTemplate().join(\"\") ? buffer = [] : clearOptionalTail(buffer), \n writeBuffer(input, buffer));\n }\n },\n clickEvent: function(e, tabbed) {\n function doRadixFocus(clickPos) {\n if (\"\" !== opts.radixPoint) {\n var vps = getMaskSet().validPositions;\n if (void 0 === vps[clickPos] || vps[clickPos].input === getPlaceholder(clickPos)) {\n if (clickPos < seekNext(-1)) return !0;\n var radixPos = $.inArray(opts.radixPoint, getBuffer());\n if (radixPos !== -1) {\n for (var vp in vps) if (radixPos < vp && vps[vp].input !== getPlaceholder(vp)) return !1;\n return !0;\n }\n }\n }\n return !1;\n }\n var input = this;\n setTimeout(function() {\n if (document.activeElement === input) {\n var selectedCaret = caret(input);\n if (tabbed && (selectedCaret.begin = selectedCaret.end), selectedCaret.begin === selectedCaret.end) switch (opts.positionCaretOnClick) {\n case \"none\":\n break;\n\n case \"radixFocus\":\n if (doRadixFocus(selectedCaret.begin)) {\n var radixPos = $.inArray(opts.radixPoint, getBuffer().join(\"\"));\n caret(input, opts.numericInput ? seekNext(radixPos) : radixPos);\n break;\n }\n\n default:\n var clickPosition = selectedCaret.begin, lvclickPosition = getLastValidPosition(clickPosition, !0), lastPosition = seekNext(lvclickPosition);\n if (clickPosition < lastPosition) caret(input, isMask(clickPosition) || isMask(clickPosition - 1) ? clickPosition : seekNext(clickPosition)); else {\n var placeholder = getPlaceholder(lastPosition);\n (\"\" !== placeholder && getBuffer()[lastPosition] !== placeholder && getTest(lastPosition).match.optionalQuantifier !== !0 || !isMask(lastPosition) && getTest(lastPosition).match.def === placeholder) && (lastPosition = seekNext(lastPosition)), \n caret(input, lastPosition);\n }\n }\n }\n }, 0);\n },\n dblclickEvent: function(e) {\n var input = this;\n setTimeout(function() {\n caret(input, 0, seekNext(getLastValidPosition()));\n }, 0);\n },\n cutEvent: function(e) {\n var input = this, $input = $(input), pos = caret(input), ev = e.originalEvent || e, clipboardData = window.clipboardData || ev.clipboardData, clipData = isRTL ? getBuffer().slice(pos.end, pos.begin) : getBuffer().slice(pos.begin, pos.end);\n clipboardData.setData(\"text\", isRTL ? clipData.reverse().join(\"\") : clipData.join(\"\")), \n document.execCommand && document.execCommand(\"copy\"), handleRemove(input, Inputmask.keyCode.DELETE, pos), \n writeBuffer(input, getBuffer(), getMaskSet().p, e, undoValue !== getBuffer().join(\"\")), \n input.inputmask._valueGet() === getBufferTemplate().join(\"\") && $input.trigger(\"cleared\");\n },\n blurEvent: function(e) {\n var $input = $(this), input = this;\n if (input.inputmask) {\n var nptValue = input.inputmask._valueGet(), buffer = getBuffer().slice();\n undoValue !== buffer.join(\"\") && setTimeout(function() {\n $input.trigger(\"change\"), undoValue = buffer.join(\"\");\n }, 0), \"\" !== nptValue && (opts.clearMaskOnLostFocus && (getLastValidPosition() === -1 && nptValue === getBufferTemplate().join(\"\") ? buffer = [] : clearOptionalTail(buffer)), \n isComplete(buffer) === !1 && (setTimeout(function() {\n $input.trigger(\"incomplete\");\n }, 0), opts.clearIncomplete && (resetMaskSet(), buffer = opts.clearMaskOnLostFocus ? [] : getBufferTemplate().slice())), \n writeBuffer(input, buffer, void 0, e));\n }\n },\n mouseenterEvent: function(e) {\n var input = this;\n mouseEnter = !0, document.activeElement !== input && opts.showMaskOnHover && input.inputmask._valueGet() !== getBuffer().join(\"\") && writeBuffer(input, getBuffer());\n },\n submitEvent: function(e) {\n undoValue !== getBuffer().join(\"\") && $el.trigger(\"change\"), opts.clearMaskOnLostFocus && getLastValidPosition() === -1 && el.inputmask._valueGet && el.inputmask._valueGet() === getBufferTemplate().join(\"\") && el.inputmask._valueSet(\"\"), \n opts.removeMaskOnSubmit && (el.inputmask._valueSet(el.inputmask.unmaskedvalue(), !0), \n setTimeout(function() {\n writeBuffer(el, getBuffer());\n }, 0));\n },\n resetEvent: function(e) {\n setTimeout(function() {\n $el.trigger(\"setvalue\");\n }, 0);\n }\n };\n if (void 0 !== actionObj) switch (actionObj.action) {\n case \"isComplete\":\n return el = actionObj.el, isComplete(getBuffer());\n\n case \"unmaskedvalue\":\n return void 0 !== el && void 0 === actionObj.value || (valueBuffer = actionObj.value, \n valueBuffer = ($.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(valueBuffer, opts) || valueBuffer : valueBuffer).split(\"\"), \n checkVal(void 0, !1, !1, isRTL ? valueBuffer.reverse() : valueBuffer), $.isFunction(opts.onBeforeWrite) && opts.onBeforeWrite(void 0, getBuffer(), 0, opts)), \n unmaskedvalue(el);\n\n case \"mask\":\n mask(el);\n break;\n\n case \"format\":\n return valueBuffer = ($.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(actionObj.value, opts) || actionObj.value : actionObj.value).split(\"\"), \n checkVal(void 0, !1, !1, isRTL ? valueBuffer.reverse() : valueBuffer), $.isFunction(opts.onBeforeWrite) && opts.onBeforeWrite(void 0, getBuffer(), 0, opts), \n actionObj.metadata ? {\n value: isRTL ? getBuffer().slice().reverse().join(\"\") : getBuffer().join(\"\"),\n metadata: maskScope.call(this, {\n action: \"getmetadata\"\n }, maskset, opts)\n } : isRTL ? getBuffer().slice().reverse().join(\"\") : getBuffer().join(\"\");\n\n case \"isValid\":\n actionObj.value ? (valueBuffer = actionObj.value.split(\"\"), checkVal(void 0, !1, !0, isRTL ? valueBuffer.reverse() : valueBuffer)) : actionObj.value = getBuffer().join(\"\");\n for (var buffer = getBuffer(), rl = determineLastRequiredPosition(), lmib = buffer.length - 1; lmib > rl && !isMask(lmib); lmib--) ;\n return buffer.splice(rl, lmib + 1 - rl), isComplete(buffer) && actionObj.value === getBuffer().join(\"\");\n\n case \"getemptymask\":\n return getBufferTemplate().join(\"\");\n\n case \"remove\":\n if (el) {\n $el = $(el), el.inputmask._valueSet(unmaskedvalue(el)), EventRuler.off(el);\n var valueProperty;\n Object.getOwnPropertyDescriptor && Object.getPrototypeOf ? (valueProperty = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(el), \"value\"), \n valueProperty && el.inputmask.__valueGet && Object.defineProperty(el, \"value\", {\n get: el.inputmask.__valueGet,\n set: el.inputmask.__valueSet,\n configurable: !0\n })) : document.__lookupGetter__ && el.__lookupGetter__(\"value\") && el.inputmask.__valueGet && (el.__defineGetter__(\"value\", el.inputmask.__valueGet), \n el.__defineSetter__(\"value\", el.inputmask.__valueSet)), el.inputmask = void 0;\n }\n return el;\n\n case \"getmetadata\":\n if ($.isArray(maskset.metadata)) {\n var maskTarget = getMaskTemplate(!0, 0, !1).join(\"\");\n return $.each(maskset.metadata, function(ndx, mtdt) {\n if (mtdt.mask === maskTarget) return maskTarget = mtdt, !1;\n }), maskTarget;\n }\n return maskset.metadata;\n }\n }\n var ua = navigator.userAgent, mobile = /mobile/i.test(ua), iemobile = /iemobile/i.test(ua), iphone = /iphone/i.test(ua) && !iemobile, android = /android/i.test(ua) && !iemobile;\n return Inputmask.prototype = {\n defaults: {\n placeholder: \"_\",\n optionalmarker: {\n start: \"[\",\n end: \"]\"\n },\n quantifiermarker: {\n start: \"{\",\n end: \"}\"\n },\n groupmarker: {\n start: \"(\",\n end: \")\"\n },\n alternatormarker: \"|\",\n escapeChar: \"\\\\\",\n mask: null,\n oncomplete: $.noop,\n onincomplete: $.noop,\n oncleared: $.noop,\n repeat: 0,\n greedy: !0,\n autoUnmask: !1,\n removeMaskOnSubmit: !1,\n clearMaskOnLostFocus: !0,\n insertMode: !0,\n clearIncomplete: !1,\n aliases: {},\n alias: null,\n onKeyDown: $.noop,\n onBeforeMask: null,\n onBeforePaste: function(pastedValue, opts) {\n return $.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(pastedValue, opts) : pastedValue;\n },\n onBeforeWrite: null,\n onUnMask: null,\n showMaskOnFocus: !0,\n showMaskOnHover: !0,\n onKeyValidation: $.noop,\n skipOptionalPartCharacter: \" \",\n numericInput: !1,\n rightAlign: !1,\n undoOnEscape: !0,\n radixPoint: \"\",\n radixPointDefinitionSymbol: void 0,\n groupSeparator: \"\",\n keepStatic: null,\n positionCaretOnTab: !0,\n tabThrough: !1,\n supportsInputType: [ \"text\", \"tel\", \"password\" ],\n definitions: {\n \"9\": {\n validator: \"[0-9]\",\n cardinality: 1,\n definitionSymbol: \"*\"\n },\n a: {\n validator: \"[A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5]\",\n cardinality: 1,\n definitionSymbol: \"*\"\n },\n \"*\": {\n validator: \"[0-9A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5]\",\n cardinality: 1\n }\n },\n ignorables: [ 8, 9, 13, 19, 27, 33, 34, 35, 36, 37, 38, 39, 40, 45, 46, 93, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123 ],\n isComplete: null,\n canClearPosition: $.noop,\n postValidation: null,\n staticDefinitionSymbol: void 0,\n jitMasking: !1,\n nullable: !0,\n inputEventOnly: !1,\n noValuePatching: !1,\n positionCaretOnClick: \"lvp\",\n casing: null,\n inputmode: \"verbatim\",\n colorMask: !1,\n androidHack: !1\n },\n masksCache: {},\n mask: function(elems) {\n function importAttributeOptions(npt, opts, userOptions, dataAttribute) {\n function importOption(option, optionData) {\n optionData = void 0 !== optionData ? optionData : npt.getAttribute(dataAttribute + \"-\" + option), \n null !== optionData && (\"string\" == typeof optionData && (0 === option.indexOf(\"on\") ? optionData = window[optionData] : \"false\" === optionData ? optionData = !1 : \"true\" === optionData && (optionData = !0)), \n userOptions[option] = optionData);\n }\n var option, dataoptions, optionData, p, attrOptions = npt.getAttribute(dataAttribute);\n if (attrOptions && \"\" !== attrOptions && (attrOptions = attrOptions.replace(new RegExp(\"'\", \"g\"), '\"'), \n dataoptions = JSON.parse(\"{\" + attrOptions + \"}\")), dataoptions) {\n optionData = void 0;\n for (p in dataoptions) if (\"alias\" === p.toLowerCase()) {\n optionData = dataoptions[p];\n break;\n }\n }\n importOption(\"alias\", optionData), userOptions.alias && resolveAlias(userOptions.alias, userOptions, opts);\n for (option in opts) {\n if (dataoptions) {\n optionData = void 0;\n for (p in dataoptions) if (p.toLowerCase() === option.toLowerCase()) {\n optionData = dataoptions[p];\n break;\n }\n }\n importOption(option, optionData);\n }\n return $.extend(!0, opts, userOptions), opts;\n }\n var that = this;\n return \"string\" == typeof elems && (elems = document.getElementById(elems) || document.querySelectorAll(elems)), \n elems = elems.nodeName ? [ elems ] : elems, $.each(elems, function(ndx, el) {\n var scopedOpts = $.extend(!0, {}, that.opts);\n importAttributeOptions(el, scopedOpts, $.extend(!0, {}, that.userOptions), that.dataAttribute);\n var maskset = generateMaskSet(scopedOpts, that.noMasksCache);\n void 0 !== maskset && (void 0 !== el.inputmask && el.inputmask.remove(), el.inputmask = new Inputmask(), \n el.inputmask.opts = scopedOpts, el.inputmask.noMasksCache = that.noMasksCache, el.inputmask.userOptions = $.extend(!0, {}, that.userOptions), \n el.inputmask.el = el, el.inputmask.maskset = maskset, $.data(el, \"_inputmask_opts\", scopedOpts), \n maskScope.call(el.inputmask, {\n action: \"mask\"\n }));\n }), elems && elems[0] ? elems[0].inputmask || this : this;\n },\n option: function(options, noremask) {\n return \"string\" == typeof options ? this.opts[options] : \"object\" == typeof options ? ($.extend(this.userOptions, options), \n this.el && noremask !== !0 && this.mask(this.el), this) : void 0;\n },\n unmaskedvalue: function(value) {\n return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache), \n maskScope.call(this, {\n action: \"unmaskedvalue\",\n value: value\n });\n },\n remove: function() {\n return maskScope.call(this, {\n action: \"remove\"\n });\n },\n getemptymask: function() {\n return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache), \n maskScope.call(this, {\n action: \"getemptymask\"\n });\n },\n hasMaskedValue: function() {\n return !this.opts.autoUnmask;\n },\n isComplete: function() {\n return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache), \n maskScope.call(this, {\n action: \"isComplete\"\n });\n },\n getmetadata: function() {\n return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache), \n maskScope.call(this, {\n action: \"getmetadata\"\n });\n },\n isValid: function(value) {\n return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache), \n maskScope.call(this, {\n action: \"isValid\",\n value: value\n });\n },\n format: function(value, metadata) {\n return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache), \n maskScope.call(this, {\n action: \"format\",\n value: value,\n metadata: metadata\n });\n },\n analyseMask: function(mask, opts) {\n function MaskToken(isGroup, isOptional, isQuantifier, isAlternator) {\n this.matches = [], this.openGroup = isGroup || !1, this.isGroup = isGroup || !1, \n this.isOptional = isOptional || !1, this.isQuantifier = isQuantifier || !1, this.isAlternator = isAlternator || !1, \n this.quantifier = {\n min: 1,\n max: 1\n };\n }\n function insertTestDefinition(mtoken, element, position) {\n var maskdef = opts.definitions[element];\n position = void 0 !== position ? position : mtoken.matches.length;\n var prevMatch = mtoken.matches[position - 1];\n if (maskdef && !escaped) {\n maskdef.placeholder = $.isFunction(maskdef.placeholder) ? maskdef.placeholder(opts) : maskdef.placeholder;\n for (var prevalidators = maskdef.prevalidator, prevalidatorsL = prevalidators ? prevalidators.length : 0, i = 1; i < maskdef.cardinality; i++) {\n var prevalidator = prevalidatorsL >= i ? prevalidators[i - 1] : [], validator = prevalidator.validator, cardinality = prevalidator.cardinality;\n mtoken.matches.splice(position++, 0, {\n fn: validator ? \"string\" == typeof validator ? new RegExp(validator) : new function() {\n this.test = validator;\n }() : new RegExp(\".\"),\n cardinality: cardinality ? cardinality : 1,\n optionality: mtoken.isOptional,\n newBlockMarker: void 0 === prevMatch || prevMatch.def !== (maskdef.definitionSymbol || element),\n casing: maskdef.casing,\n def: maskdef.definitionSymbol || element,\n placeholder: maskdef.placeholder,\n nativeDef: element\n }), prevMatch = mtoken.matches[position - 1];\n }\n mtoken.matches.splice(position++, 0, {\n fn: maskdef.validator ? \"string\" == typeof maskdef.validator ? new RegExp(maskdef.validator) : new function() {\n this.test = maskdef.validator;\n }() : new RegExp(\".\"),\n cardinality: maskdef.cardinality,\n optionality: mtoken.isOptional,\n newBlockMarker: void 0 === prevMatch || prevMatch.def !== (maskdef.definitionSymbol || element),\n casing: maskdef.casing,\n def: maskdef.definitionSymbol || element,\n placeholder: maskdef.placeholder,\n nativeDef: element\n });\n } else mtoken.matches.splice(position++, 0, {\n fn: null,\n cardinality: 0,\n optionality: mtoken.isOptional,\n newBlockMarker: void 0 === prevMatch || prevMatch.def !== element,\n casing: null,\n def: opts.staticDefinitionSymbol || element,\n placeholder: void 0 !== opts.staticDefinitionSymbol ? element : void 0,\n nativeDef: element\n }), escaped = !1;\n }\n function verifyGroupMarker(maskToken) {\n maskToken && maskToken.matches && $.each(maskToken.matches, function(ndx, token) {\n var nextToken = maskToken.matches[ndx + 1];\n (void 0 === nextToken || void 0 === nextToken.matches || nextToken.isQuantifier === !1) && token && token.isGroup && (token.isGroup = !1, \n insertTestDefinition(token, opts.groupmarker.start, 0), token.openGroup !== !0 && insertTestDefinition(token, opts.groupmarker.end)), \n verifyGroupMarker(token);\n });\n }\n function defaultCase() {\n if (openenings.length > 0) {\n if (currentOpeningToken = openenings[openenings.length - 1], insertTestDefinition(currentOpeningToken, m), \n currentOpeningToken.isAlternator) {\n alternator = openenings.pop();\n for (var mndx = 0; mndx < alternator.matches.length; mndx++) alternator.matches[mndx].isGroup = !1;\n openenings.length > 0 ? (currentOpeningToken = openenings[openenings.length - 1], \n currentOpeningToken.matches.push(alternator)) : currentToken.matches.push(alternator);\n }\n } else insertTestDefinition(currentToken, m);\n }\n function reverseTokens(maskToken) {\n function reverseStatic(st) {\n return st === opts.optionalmarker.start ? st = opts.optionalmarker.end : st === opts.optionalmarker.end ? st = opts.optionalmarker.start : st === opts.groupmarker.start ? st = opts.groupmarker.end : st === opts.groupmarker.end && (st = opts.groupmarker.start), \n st;\n }\n maskToken.matches = maskToken.matches.reverse();\n for (var match in maskToken.matches) {\n var intMatch = parseInt(match);\n if (maskToken.matches[match].isQuantifier && maskToken.matches[intMatch + 1] && maskToken.matches[intMatch + 1].isGroup) {\n var qt = maskToken.matches[match];\n maskToken.matches.splice(match, 1), maskToken.matches.splice(intMatch + 1, 0, qt);\n }\n void 0 !== maskToken.matches[match].matches ? maskToken.matches[match] = reverseTokens(maskToken.matches[match]) : maskToken.matches[match] = reverseStatic(maskToken.matches[match]);\n }\n return maskToken;\n }\n for (var match, m, openingToken, currentOpeningToken, alternator, lastMatch, groupToken, tokenizer = /(?:[?*+]|\\{[0-9\\+\\*]+(?:,[0-9\\+\\*]*)?\\})|[^.?*+^${[]()|\\\\]+|./g, escaped = !1, currentToken = new MaskToken(), openenings = [], maskTokens = []; match = tokenizer.exec(mask); ) if (m = match[0], \n escaped) defaultCase(); else switch (m.charAt(0)) {\n case opts.escapeChar:\n escaped = !0;\n break;\n\n case opts.optionalmarker.end:\n case opts.groupmarker.end:\n if (openingToken = openenings.pop(), openingToken.openGroup = !1, void 0 !== openingToken) if (openenings.length > 0) {\n if (currentOpeningToken = openenings[openenings.length - 1], currentOpeningToken.matches.push(openingToken), \n currentOpeningToken.isAlternator) {\n alternator = openenings.pop();\n for (var mndx = 0; mndx < alternator.matches.length; mndx++) alternator.matches[mndx].isGroup = !1;\n openenings.length > 0 ? (currentOpeningToken = openenings[openenings.length - 1], \n currentOpeningToken.matches.push(alternator)) : currentToken.matches.push(alternator);\n }\n } else currentToken.matches.push(openingToken); else defaultCase();\n break;\n\n case opts.optionalmarker.start:\n openenings.push(new MaskToken((!1), (!0)));\n break;\n\n case opts.groupmarker.start:\n openenings.push(new MaskToken((!0)));\n break;\n\n case opts.quantifiermarker.start:\n var quantifier = new MaskToken((!1), (!1), (!0));\n m = m.replace(/[{}]/g, \"\");\n var mq = m.split(\",\"), mq0 = isNaN(mq[0]) ? mq[0] : parseInt(mq[0]), mq1 = 1 === mq.length ? mq0 : isNaN(mq[1]) ? mq[1] : parseInt(mq[1]);\n if (\"*\" !== mq1 && \"+\" !== mq1 || (mq0 = \"*\" === mq1 ? 0 : 1), quantifier.quantifier = {\n min: mq0,\n max: mq1\n }, openenings.length > 0) {\n var matches = openenings[openenings.length - 1].matches;\n match = matches.pop(), match.isGroup || (groupToken = new MaskToken((!0)), groupToken.matches.push(match), \n match = groupToken), matches.push(match), matches.push(quantifier);\n } else match = currentToken.matches.pop(), match.isGroup || (groupToken = new MaskToken((!0)), \n groupToken.matches.push(match), match = groupToken), currentToken.matches.push(match), \n currentToken.matches.push(quantifier);\n break;\n\n case opts.alternatormarker:\n openenings.length > 0 ? (currentOpeningToken = openenings[openenings.length - 1], \n lastMatch = currentOpeningToken.matches.pop()) : lastMatch = currentToken.matches.pop(), \n lastMatch.isAlternator ? openenings.push(lastMatch) : (alternator = new MaskToken((!1), (!1), (!1), (!0)), \n alternator.matches.push(lastMatch), openenings.push(alternator));\n break;\n\n default:\n defaultCase();\n }\n for (;openenings.length > 0; ) openingToken = openenings.pop(), currentToken.matches.push(openingToken);\n return currentToken.matches.length > 0 && (verifyGroupMarker(currentToken), maskTokens.push(currentToken)), \n opts.numericInput && reverseTokens(maskTokens[0]), maskTokens;\n }\n }, Inputmask.extendDefaults = function(options) {\n $.extend(!0, Inputmask.prototype.defaults, options);\n }, Inputmask.extendDefinitions = function(definition) {\n $.extend(!0, Inputmask.prototype.defaults.definitions, definition);\n }, Inputmask.extendAliases = function(alias) {\n $.extend(!0, Inputmask.prototype.defaults.aliases, alias);\n }, Inputmask.format = function(value, options, metadata) {\n return Inputmask(options).format(value, metadata);\n }, Inputmask.unmask = function(value, options) {\n return Inputmask(options).unmaskedvalue(value);\n }, Inputmask.isValid = function(value, options) {\n return Inputmask(options).isValid(value);\n }, Inputmask.remove = function(elems) {\n $.each(elems, function(ndx, el) {\n el.inputmask && el.inputmask.remove();\n });\n }, Inputmask.escapeRegex = function(str) {\n var specials = [ \"/\", \".\", \"*\", \"+\", \"?\", \"|\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", \"\\\\\", \"$\", \"^\" ];\n return str.replace(new RegExp(\"(\\\\\" + specials.join(\"|\\\\\") + \")\", \"gim\"), \"\\\\$1\");\n }, Inputmask.keyCode = {\n ALT: 18,\n BACKSPACE: 8,\n BACKSPACE_SAFARI: 127,\n CAPS_LOCK: 20,\n COMMA: 188,\n COMMAND: 91,\n COMMAND_LEFT: 91,\n COMMAND_RIGHT: 93,\n CONTROL: 17,\n DELETE: 46,\n DOWN: 40,\n END: 35,\n ENTER: 13,\n ESCAPE: 27,\n HOME: 36,\n INSERT: 45,\n LEFT: 37,\n MENU: 93,\n NUMPAD_ADD: 107,\n NUMPAD_DECIMAL: 110,\n NUMPAD_DIVIDE: 111,\n NUMPAD_ENTER: 108,\n NUMPAD_MULTIPLY: 106,\n NUMPAD_SUBTRACT: 109,\n PAGE_DOWN: 34,\n PAGE_UP: 33,\n PERIOD: 190,\n RIGHT: 39,\n SHIFT: 16,\n SPACE: 32,\n TAB: 9,\n UP: 38,\n WINDOWS: 91,\n X: 88\n }, window.Inputmask = Inputmask, Inputmask;\n}(jQuery), function($, Inputmask) {\n return void 0 === $.fn.inputmask && ($.fn.inputmask = function(fn, options) {\n var nptmask, input = this[0];\n if (void 0 === options && (options = {}), \"string\" == typeof fn) switch (fn) {\n case \"unmaskedvalue\":\n return input && input.inputmask ? input.inputmask.unmaskedvalue() : $(input).val();\n\n case \"remove\":\n return this.each(function() {\n this.inputmask && this.inputmask.remove();\n });\n\n case \"getemptymask\":\n return input && input.inputmask ? input.inputmask.getemptymask() : \"\";\n\n case \"hasMaskedValue\":\n return !(!input || !input.inputmask) && input.inputmask.hasMaskedValue();\n\n case \"isComplete\":\n return !input || !input.inputmask || input.inputmask.isComplete();\n\n case \"getmetadata\":\n return input && input.inputmask ? input.inputmask.getmetadata() : void 0;\n\n case \"setvalue\":\n $(input).val(options), input && void 0 === input.inputmask && $(input).triggerHandler(\"setvalue\");\n break;\n\n case \"option\":\n if (\"string\" != typeof options) return this.each(function() {\n if (void 0 !== this.inputmask) return this.inputmask.option(options);\n });\n if (input && void 0 !== input.inputmask) return input.inputmask.option(options);\n break;\n\n default:\n return options.alias = fn, nptmask = new Inputmask(options), this.each(function() {\n nptmask.mask(this);\n });\n } else {\n if (\"object\" == typeof fn) return nptmask = new Inputmask(fn), void 0 === fn.mask && void 0 === fn.alias ? this.each(function() {\n return void 0 !== this.inputmask ? this.inputmask.option(fn) : void nptmask.mask(this);\n }) : this.each(function() {\n nptmask.mask(this);\n });\n if (void 0 === fn) return this.each(function() {\n nptmask = new Inputmask(options), nptmask.mask(this);\n });\n }\n }), $.fn.inputmask;\n}(jQuery, Inputmask), function($, Inputmask) {}(jQuery, Inputmask), function($, Inputmask) {\n function isLeapYear(year) {\n return isNaN(year) || 29 === new Date(year, 2, 0).getDate();\n }\n return Inputmask.extendAliases({\n \"dd/mm/yyyy\": {\n mask: \"1/2/y\",\n placeholder: \"dd/mm/yyyy\",\n regex: {\n val1pre: new RegExp(\"[0-3]\"),\n val1: new RegExp(\"0[1-9]|[12][0-9]|3[01]\"),\n val2pre: function(separator) {\n var escapedSeparator = Inputmask.escapeRegex.call(this, separator);\n return new RegExp(\"((0[1-9]|[12][0-9]|3[01])\" + escapedSeparator + \"[01])\");\n },\n val2: function(separator) {\n var escapedSeparator = Inputmask.escapeRegex.call(this, separator);\n return new RegExp(\"((0[1-9]|[12][0-9])\" + escapedSeparator + \"(0[1-9]|1[012]))|(30\" + escapedSeparator + \"(0[13-9]|1[012]))|(31\" + escapedSeparator + \"(0[13578]|1[02]))\");\n }\n },\n leapday: \"29/02/\",\n separator: \"/\",\n yearrange: {\n minyear: 1900,\n maxyear: 2099\n },\n isInYearRange: function(chrs, minyear, maxyear) {\n if (isNaN(chrs)) return !1;\n var enteredyear = parseInt(chrs.concat(minyear.toString().slice(chrs.length))), enteredyear2 = parseInt(chrs.concat(maxyear.toString().slice(chrs.length)));\n return !isNaN(enteredyear) && (minyear <= enteredyear && enteredyear <= maxyear) || !isNaN(enteredyear2) && (minyear <= enteredyear2 && enteredyear2 <= maxyear);\n },\n determinebaseyear: function(minyear, maxyear, hint) {\n var currentyear = new Date().getFullYear();\n if (minyear > currentyear) return minyear;\n if (maxyear < currentyear) {\n for (var maxYearPrefix = maxyear.toString().slice(0, 2), maxYearPostfix = maxyear.toString().slice(2, 4); maxyear < maxYearPrefix + hint; ) maxYearPrefix--;\n var maxxYear = maxYearPrefix + maxYearPostfix;\n return minyear > maxxYear ? minyear : maxxYear;\n }\n if (minyear <= currentyear && currentyear <= maxyear) {\n for (var currentYearPrefix = currentyear.toString().slice(0, 2); maxyear < currentYearPrefix + hint; ) currentYearPrefix--;\n var currentYearAndHint = currentYearPrefix + hint;\n return currentYearAndHint < minyear ? minyear : currentYearAndHint;\n }\n return currentyear;\n },\n onKeyDown: function(e, buffer, caretPos, opts) {\n var $input = $(this);\n if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {\n var today = new Date();\n $input.val(today.getDate().toString() + (today.getMonth() + 1).toString() + today.getFullYear().toString()), \n $input.trigger(\"setvalue\");\n }\n },\n getFrontValue: function(mask, buffer, opts) {\n for (var start = 0, length = 0, i = 0; i < mask.length && \"2\" !== mask.charAt(i); i++) {\n var definition = opts.definitions[mask.charAt(i)];\n definition ? (start += length, length = definition.cardinality) : length++;\n }\n return buffer.join(\"\").substr(start, length);\n },\n postValidation: function(buffer, currentResult, opts) {\n var dayMonthValue, year, bufferStr = buffer.join(\"\");\n return 0 === opts.mask.indexOf(\"y\") ? (year = bufferStr.substr(0, 4), dayMonthValue = bufferStr.substr(4, 11)) : (year = bufferStr.substr(6, 11), \n dayMonthValue = bufferStr.substr(0, 6)), currentResult && (dayMonthValue !== opts.leapday || isLeapYear(year));\n },\n definitions: {\n \"1\": {\n validator: function(chrs, maskset, pos, strict, opts) {\n var isValid = opts.regex.val1.test(chrs);\n return strict || isValid || chrs.charAt(1) !== opts.separator && \"-./\".indexOf(chrs.charAt(1)) === -1 || !(isValid = opts.regex.val1.test(\"0\" + chrs.charAt(0))) ? isValid : (maskset.buffer[pos - 1] = \"0\", \n {\n refreshFromBuffer: {\n start: pos - 1,\n end: pos\n },\n pos: pos,\n c: chrs.charAt(0)\n });\n },\n cardinality: 2,\n prevalidator: [ {\n validator: function(chrs, maskset, pos, strict, opts) {\n var pchrs = chrs;\n isNaN(maskset.buffer[pos + 1]) || (pchrs += maskset.buffer[pos + 1]);\n var isValid = 1 === pchrs.length ? opts.regex.val1pre.test(pchrs) : opts.regex.val1.test(pchrs);\n if (!strict && !isValid) {\n if (isValid = opts.regex.val1.test(chrs + \"0\")) return maskset.buffer[pos] = chrs, \n maskset.buffer[++pos] = \"0\", {\n pos: pos,\n c: \"0\"\n };\n if (isValid = opts.regex.val1.test(\"0\" + chrs)) return maskset.buffer[pos] = \"0\", \n pos++, {\n pos: pos\n };\n }\n return isValid;\n },\n cardinality: 1\n } ]\n },\n \"2\": {\n validator: function(chrs, maskset, pos, strict, opts) {\n var frontValue = opts.getFrontValue(maskset.mask, maskset.buffer, opts);\n frontValue.indexOf(opts.placeholder[0]) !== -1 && (frontValue = \"01\" + opts.separator);\n var isValid = opts.regex.val2(opts.separator).test(frontValue + chrs);\n return strict || isValid || chrs.charAt(1) !== opts.separator && \"-./\".indexOf(chrs.charAt(1)) === -1 || !(isValid = opts.regex.val2(opts.separator).test(frontValue + \"0\" + chrs.charAt(0))) ? isValid : (maskset.buffer[pos - 1] = \"0\", \n {\n refreshFromBuffer: {\n start: pos - 1,\n end: pos\n },\n pos: pos,\n c: chrs.charAt(0)\n });\n },\n cardinality: 2,\n prevalidator: [ {\n validator: function(chrs, maskset, pos, strict, opts) {\n isNaN(maskset.buffer[pos + 1]) || (chrs += maskset.buffer[pos + 1]);\n var frontValue = opts.getFrontValue(maskset.mask, maskset.buffer, opts);\n frontValue.indexOf(opts.placeholder[0]) !== -1 && (frontValue = \"01\" + opts.separator);\n var isValid = 1 === chrs.length ? opts.regex.val2pre(opts.separator).test(frontValue + chrs) : opts.regex.val2(opts.separator).test(frontValue + chrs);\n return strict || isValid || !(isValid = opts.regex.val2(opts.separator).test(frontValue + \"0\" + chrs)) ? isValid : (maskset.buffer[pos] = \"0\", \n pos++, {\n pos: pos\n });\n },\n cardinality: 1\n } ]\n },\n y: {\n validator: function(chrs, maskset, pos, strict, opts) {\n return opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);\n },\n cardinality: 4,\n prevalidator: [ {\n validator: function(chrs, maskset, pos, strict, opts) {\n var isValid = opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);\n if (!strict && !isValid) {\n var yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs + \"0\").toString().slice(0, 1);\n if (isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) return maskset.buffer[pos++] = yearPrefix.charAt(0), \n {\n pos: pos\n };\n if (yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs + \"0\").toString().slice(0, 2), \n isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) return maskset.buffer[pos++] = yearPrefix.charAt(0), \n maskset.buffer[pos++] = yearPrefix.charAt(1), {\n pos: pos\n };\n }\n return isValid;\n },\n cardinality: 1\n }, {\n validator: function(chrs, maskset, pos, strict, opts) {\n var isValid = opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);\n if (!strict && !isValid) {\n var yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs).toString().slice(0, 2);\n if (isValid = opts.isInYearRange(chrs[0] + yearPrefix[1] + chrs[1], opts.yearrange.minyear, opts.yearrange.maxyear)) return maskset.buffer[pos++] = yearPrefix.charAt(1), \n {\n pos: pos\n };\n if (yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs).toString().slice(0, 2), \n isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) return maskset.buffer[pos - 1] = yearPrefix.charAt(0), \n maskset.buffer[pos++] = yearPrefix.charAt(1), maskset.buffer[pos++] = chrs.charAt(0), \n {\n refreshFromBuffer: {\n start: pos - 3,\n end: pos\n },\n pos: pos\n };\n }\n return isValid;\n },\n cardinality: 2\n }, {\n validator: function(chrs, maskset, pos, strict, opts) {\n return opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);\n },\n cardinality: 3\n } ]\n }\n },\n insertMode: !1,\n autoUnmask: !1\n },\n \"mm/dd/yyyy\": {\n placeholder: \"mm/dd/yyyy\",\n alias: \"dd/mm/yyyy\",\n regex: {\n val2pre: function(separator) {\n var escapedSeparator = Inputmask.escapeRegex.call(this, separator);\n return new RegExp(\"((0[13-9]|1[012])\" + escapedSeparator + \"[0-3])|(02\" + escapedSeparator + \"[0-2])\");\n },\n val2: function(separator) {\n var escapedSeparator = Inputmask.escapeRegex.call(this, separator);\n return new RegExp(\"((0[1-9]|1[012])\" + escapedSeparator + \"(0[1-9]|[12][0-9]))|((0[13-9]|1[012])\" + escapedSeparator + \"30)|((0[13578]|1[02])\" + escapedSeparator + \"31)\");\n },\n val1pre: new RegExp(\"[01]\"),\n val1: new RegExp(\"0[1-9]|1[012]\")\n },\n leapday: \"02/29/\",\n onKeyDown: function(e, buffer, caretPos, opts) {\n var $input = $(this);\n if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {\n var today = new Date();\n $input.val((today.getMonth() + 1).toString() + today.getDate().toString() + today.getFullYear().toString()), \n $input.trigger(\"setvalue\");\n }\n }\n },\n \"yyyy/mm/dd\": {\n mask: \"y/1/2\",\n placeholder: \"yyyy/mm/dd\",\n alias: \"mm/dd/yyyy\",\n leapday: \"/02/29\",\n onKeyDown: function(e, buffer, caretPos, opts) {\n var $input = $(this);\n if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {\n var today = new Date();\n $input.val(today.getFullYear().toString() + (today.getMonth() + 1).toString() + today.getDate().toString()), \n $input.trigger(\"setvalue\");\n }\n }\n },\n \"dd.mm.yyyy\": {\n mask: \"1.2.y\",\n placeholder: \"dd.mm.yyyy\",\n leapday: \"29.02.\",\n separator: \".\",\n alias: \"dd/mm/yyyy\"\n },\n \"dd-mm-yyyy\": {\n mask: \"1-2-y\",\n placeholder: \"dd-mm-yyyy\",\n leapday: \"29-02-\",\n separator: \"-\",\n alias: \"dd/mm/yyyy\"\n },\n \"mm.dd.yyyy\": {\n mask: \"1.2.y\",\n placeholder: \"mm.dd.yyyy\",\n leapday: \"02.29.\",\n separator: \".\",\n alias: \"mm/dd/yyyy\"\n },\n \"mm-dd-yyyy\": {\n mask: \"1-2-y\",\n placeholder: \"mm-dd-yyyy\",\n leapday: \"02-29-\",\n separator: \"-\",\n alias: \"mm/dd/yyyy\"\n },\n \"yyyy.mm.dd\": {\n mask: \"y.1.2\",\n placeholder: \"yyyy.mm.dd\",\n leapday: \".02.29\",\n separator: \".\",\n alias: \"yyyy/mm/dd\"\n },\n \"yyyy-mm-dd\": {\n mask: \"y-1-2\",\n placeholder: \"yyyy-mm-dd\",\n leapday: \"-02-29\",\n separator: \"-\",\n alias: \"yyyy/mm/dd\"\n },\n datetime: {\n mask: \"1/2/y h:s\",\n placeholder: \"dd/mm/yyyy hh:mm\",\n alias: \"dd/mm/yyyy\",\n regex: {\n hrspre: new RegExp(\"[012]\"),\n hrs24: new RegExp(\"2[0-4]|1[3-9]\"),\n hrs: new RegExp(\"[01][0-9]|2[0-4]\"),\n ampm: new RegExp(\"^[a|p|A|P][m|M]\"),\n mspre: new RegExp(\"[0-5]\"),\n ms: new RegExp(\"[0-5][0-9]\")\n },\n timeseparator: \":\",\n hourFormat: \"24\",\n definitions: {\n h: {\n validator: function(chrs, maskset, pos, strict, opts) {\n if (\"24\" === opts.hourFormat && 24 === parseInt(chrs, 10)) return maskset.buffer[pos - 1] = \"0\", \n maskset.buffer[pos] = \"0\", {\n refreshFromBuffer: {\n start: pos - 1,\n end: pos\n },\n c: \"0\"\n };\n var isValid = opts.regex.hrs.test(chrs);\n if (!strict && !isValid && (chrs.charAt(1) === opts.timeseparator || \"-.:\".indexOf(chrs.charAt(1)) !== -1) && (isValid = opts.regex.hrs.test(\"0\" + chrs.charAt(0)))) return maskset.buffer[pos - 1] = \"0\", \n maskset.buffer[pos] = chrs.charAt(0), pos++, {\n refreshFromBuffer: {\n start: pos - 2,\n end: pos\n },\n pos: pos,\n c: opts.timeseparator\n };\n if (isValid && \"24\" !== opts.hourFormat && opts.regex.hrs24.test(chrs)) {\n var tmp = parseInt(chrs, 10);\n return 24 === tmp ? (maskset.buffer[pos + 5] = \"a\", maskset.buffer[pos + 6] = \"m\") : (maskset.buffer[pos + 5] = \"p\", \n maskset.buffer[pos + 6] = \"m\"), tmp -= 12, tmp < 10 ? (maskset.buffer[pos] = tmp.toString(), \n maskset.buffer[pos - 1] = \"0\") : (maskset.buffer[pos] = tmp.toString().charAt(1), \n maskset.buffer[pos - 1] = tmp.toString().charAt(0)), {\n refreshFromBuffer: {\n start: pos - 1,\n end: pos + 6\n },\n c: maskset.buffer[pos]\n };\n }\n return isValid;\n },\n cardinality: 2,\n prevalidator: [ {\n validator: function(chrs, maskset, pos, strict, opts) {\n var isValid = opts.regex.hrspre.test(chrs);\n return strict || isValid || !(isValid = opts.regex.hrs.test(\"0\" + chrs)) ? isValid : (maskset.buffer[pos] = \"0\", \n pos++, {\n pos: pos\n });\n },\n cardinality: 1\n } ]\n },\n s: {\n validator: \"[0-5][0-9]\",\n cardinality: 2,\n prevalidator: [ {\n validator: function(chrs, maskset, pos, strict, opts) {\n var isValid = opts.regex.mspre.test(chrs);\n return strict || isValid || !(isValid = opts.regex.ms.test(\"0\" + chrs)) ? isValid : (maskset.buffer[pos] = \"0\", \n pos++, {\n pos: pos\n });\n },\n cardinality: 1\n } ]\n },\n t: {\n validator: function(chrs, maskset, pos, strict, opts) {\n return opts.regex.ampm.test(chrs + \"m\");\n },\n casing: \"lower\",\n cardinality: 1\n }\n },\n insertMode: !1,\n autoUnmask: !1\n },\n datetime12: {\n mask: \"1/2/y h:s t\\\\m\",\n placeholder: \"dd/mm/yyyy hh:mm xm\",\n alias: \"datetime\",\n hourFormat: \"12\"\n },\n \"mm/dd/yyyy hh:mm xm\": {\n mask: \"1/2/y h:s t\\\\m\",\n placeholder: \"mm/dd/yyyy hh:mm xm\",\n alias: \"datetime12\",\n regex: {\n val2pre: function(separator) {\n var escapedSeparator = Inputmask.escapeRegex.call(this, separator);\n return new RegExp(\"((0[13-9]|1[012])\" + escapedSeparator + \"[0-3])|(02\" + escapedSeparator + \"[0-2])\");\n },\n val2: function(separator) {\n var escapedSeparator = Inputmask.escapeRegex.call(this, separator);\n return new RegExp(\"((0[1-9]|1[012])\" + escapedSeparator + \"(0[1-9]|[12][0-9]))|((0[13-9]|1[012])\" + escapedSeparator + \"30)|((0[13578]|1[02])\" + escapedSeparator + \"31)\");\n },\n val1pre: new RegExp(\"[01]\"),\n val1: new RegExp(\"0[1-9]|1[012]\")\n },\n leapday: \"02/29/\",\n onKeyDown: function(e, buffer, caretPos, opts) {\n var $input = $(this);\n if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {\n var today = new Date();\n $input.val((today.getMonth() + 1).toString() + today.getDate().toString() + today.getFullYear().toString()), \n $input.trigger(\"setvalue\");\n }\n }\n },\n \"hh:mm t\": {\n mask: \"h:s t\\\\m\",\n placeholder: \"hh:mm xm\",\n alias: \"datetime\",\n hourFormat: \"12\"\n },\n \"h:s t\": {\n mask: \"h:s t\\\\m\",\n placeholder: \"hh:mm xm\",\n alias: \"datetime\",\n hourFormat: \"12\"\n },\n \"hh:mm:ss\": {\n mask: \"h:s:s\",\n placeholder: \"hh:mm:ss\",\n alias: \"datetime\",\n autoUnmask: !1\n },\n \"hh:mm\": {\n mask: \"h:s\",\n placeholder: \"hh:mm\",\n alias: \"datetime\",\n autoUnmask: !1\n },\n date: {\n alias: \"dd/mm/yyyy\"\n },\n \"mm/yyyy\": {\n mask: \"1/y\",\n placeholder: \"mm/yyyy\",\n leapday: \"donotuse\",\n separator: \"/\",\n alias: \"mm/dd/yyyy\"\n },\n shamsi: {\n regex: {\n val2pre: function(separator) {\n var escapedSeparator = Inputmask.escapeRegex.call(this, separator);\n return new RegExp(\"((0[1-9]|1[012])\" + escapedSeparator + \"[0-3])\");\n },\n val2: function(separator) {\n var escapedSeparator = Inputmask.escapeRegex.call(this, separator);\n return new RegExp(\"((0[1-9]|1[012])\" + escapedSeparator + \"(0[1-9]|[12][0-9]))|((0[1-9]|1[012])\" + escapedSeparator + \"30)|((0[1-6])\" + escapedSeparator + \"31)\");\n },\n val1pre: new RegExp(\"[01]\"),\n val1: new RegExp(\"0[1-9]|1[012]\")\n },\n yearrange: {\n minyear: 1300,\n maxyear: 1499\n },\n mask: \"y/1/2\",\n leapday: \"/12/30\",\n placeholder: \"yyyy/mm/dd\",\n alias: \"mm/dd/yyyy\",\n clearIncomplete: !0\n }\n }), Inputmask;\n}(jQuery, Inputmask), function($, Inputmask) {\n return Inputmask.extendDefinitions({\n A: {\n validator: \"[A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5]\",\n cardinality: 1,\n casing: \"upper\"\n },\n \"&\": {\n validator: \"[0-9A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5]\",\n cardinality: 1,\n casing: \"upper\"\n },\n \"#\": {\n validator: \"[0-9A-Fa-f]\",\n cardinality: 1,\n casing: \"upper\"\n }\n }), Inputmask.extendAliases({\n url: {\n definitions: {\n i: {\n validator: \".\",\n cardinality: 1\n }\n },\n mask: \"(\\\\http://)|(\\\\http\\\\s://)|(ftp://)|(ftp\\\\s://)i{+}\",\n insertMode: !1,\n autoUnmask: !1,\n inputmode: \"url\"\n },\n ip: {\n mask: \"i[i[i]].i[i[i]].i[i[i]].i[i[i]]\",\n definitions: {\n i: {\n validator: function(chrs, maskset, pos, strict, opts) {\n return pos - 1 > -1 && \".\" !== maskset.buffer[pos - 1] ? (chrs = maskset.buffer[pos - 1] + chrs, \n chrs = pos - 2 > -1 && \".\" !== maskset.buffer[pos - 2] ? maskset.buffer[pos - 2] + chrs : \"0\" + chrs) : chrs = \"00\" + chrs, \n new RegExp(\"25[0-5]|2[0-4][0-9]|[01][0-9][0-9]\").test(chrs);\n },\n cardinality: 1\n }\n },\n onUnMask: function(maskedValue, unmaskedValue, opts) {\n return maskedValue;\n },\n inputmode: \"numeric\"\n },\n email: {\n mask: \"*{1,64}[.*{1,64}][.*{1,64}][.*{1,63}]@-{1,63}.-{1,63}[.-{1,63}][.-{1,63}]\",\n greedy: !1,\n onBeforePaste: function(pastedValue, opts) {\n return pastedValue = pastedValue.toLowerCase(), pastedValue.replace(\"mailto:\", \"\");\n },\n definitions: {\n \"*\": {\n validator: \"[0-9A-Za-z!#$%&'*+/=?^_`{|}~-]\",\n cardinality: 1,\n casing: \"lower\"\n },\n \"-\": {\n validator: \"[0-9A-Za-z-]\",\n cardinality: 1,\n casing: \"lower\"\n }\n },\n onUnMask: function(maskedValue, unmaskedValue, opts) {\n return maskedValue;\n },\n inputmode: \"email\"\n },\n mac: {\n mask: \"##:##:##:##:##:##\"\n },\n vin: {\n mask: \"V{13}9{4}\",\n definitions: {\n V: {\n validator: \"[A-HJ-NPR-Za-hj-npr-z\\\\d]\",\n cardinality: 1,\n casing: \"upper\"\n }\n },\n clearIncomplete: !0,\n autoUnmask: !0\n }\n }), Inputmask;\n}(jQuery, Inputmask), function($, Inputmask) {\n return Inputmask.extendAliases({\n numeric: {\n mask: function(opts) {\n function autoEscape(txt) {\n for (var escapedTxt = \"\", i = 0; i < txt.length; i++) escapedTxt += opts.definitions[txt.charAt(i)] || opts.optionalmarker.start === txt.charAt(i) || opts.optionalmarker.end === txt.charAt(i) || opts.quantifiermarker.start === txt.charAt(i) || opts.quantifiermarker.end === txt.charAt(i) || opts.groupmarker.start === txt.charAt(i) || opts.groupmarker.end === txt.charAt(i) || opts.alternatormarker === txt.charAt(i) ? \"\\\\\" + txt.charAt(i) : txt.charAt(i);\n return escapedTxt;\n }\n if (0 !== opts.repeat && isNaN(opts.integerDigits) && (opts.integerDigits = opts.repeat), \n opts.repeat = 0, opts.groupSeparator === opts.radixPoint && (\".\" === opts.radixPoint ? opts.groupSeparator = \",\" : \",\" === opts.radixPoint ? opts.groupSeparator = \".\" : opts.groupSeparator = \"\"), \n \" \" === opts.groupSeparator && (opts.skipOptionalPartCharacter = void 0), opts.autoGroup = opts.autoGroup && \"\" !== opts.groupSeparator, \n opts.autoGroup && (\"string\" == typeof opts.groupSize && isFinite(opts.groupSize) && (opts.groupSize = parseInt(opts.groupSize)), \n isFinite(opts.integerDigits))) {\n var seps = Math.floor(opts.integerDigits / opts.groupSize), mod = opts.integerDigits % opts.groupSize;\n opts.integerDigits = parseInt(opts.integerDigits) + (0 === mod ? seps - 1 : seps), \n opts.integerDigits < 1 && (opts.integerDigits = \"*\");\n }\n opts.placeholder.length > 1 && (opts.placeholder = opts.placeholder.charAt(0)), \n \"radixFocus\" === opts.positionCaretOnClick && \"\" === opts.placeholder && opts.integerOptional === !1 && (opts.positionCaretOnClick = \"lvp\"), \n opts.definitions[\";\"] = opts.definitions[\"~\"], opts.definitions[\";\"].definitionSymbol = \"~\", \n opts.numericInput === !0 && (opts.positionCaretOnClick = \"radixFocus\" === opts.positionCaretOnClick ? \"lvp\" : opts.positionCaretOnClick, \n opts.digitsOptional = !1, isNaN(opts.digits) && (opts.digits = 2), opts.decimalProtect = !1);\n var mask = \"[+]\";\n if (mask += autoEscape(opts.prefix), mask += opts.integerOptional === !0 ? \"~{1,\" + opts.integerDigits + \"}\" : \"~{\" + opts.integerDigits + \"}\", \n void 0 !== opts.digits) {\n opts.decimalProtect && (opts.radixPointDefinitionSymbol = \":\");\n var dq = opts.digits.toString().split(\",\");\n isFinite(dq[0] && dq[1] && isFinite(dq[1])) ? mask += (opts.decimalProtect ? \":\" : opts.radixPoint) + \";{\" + opts.digits + \"}\" : (isNaN(opts.digits) || parseInt(opts.digits) > 0) && (mask += opts.digitsOptional ? \"[\" + (opts.decimalProtect ? \":\" : opts.radixPoint) + \";{1,\" + opts.digits + \"}]\" : (opts.decimalProtect ? \":\" : opts.radixPoint) + \";{\" + opts.digits + \"}\");\n }\n return mask += autoEscape(opts.suffix), mask += \"[-]\", opts.greedy = !1, null !== opts.min && (opts.min = opts.min.toString().replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), \"g\"), \"\"), \n \",\" === opts.radixPoint && (opts.min = opts.min.replace(opts.radixPoint, \".\"))), \n null !== opts.max && (opts.max = opts.max.toString().replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), \"g\"), \"\"), \n \",\" === opts.radixPoint && (opts.max = opts.max.replace(opts.radixPoint, \".\"))), \n mask;\n },\n placeholder: \"\",\n greedy: !1,\n digits: \"*\",\n digitsOptional: !0,\n radixPoint: \".\",\n positionCaretOnClick: \"radixFocus\",\n groupSize: 3,\n groupSeparator: \"\",\n autoGroup: !1,\n allowPlus: !0,\n allowMinus: !0,\n negationSymbol: {\n front: \"-\",\n back: \"\"\n },\n integerDigits: \"+\",\n integerOptional: !0,\n prefix: \"\",\n suffix: \"\",\n rightAlign: !0,\n decimalProtect: !0,\n min: null,\n max: null,\n step: 1,\n insertMode: !0,\n autoUnmask: !1,\n unmaskAsNumber: !1,\n inputmode: \"numeric\",\n postFormat: function(buffer, pos, opts) {\n opts.numericInput === !0 && (buffer = buffer.reverse(), isFinite(pos) && (pos = buffer.join(\"\").length - pos - 1));\n var i, l;\n pos = pos >= buffer.length ? buffer.length - 1 : pos < 0 ? 0 : pos;\n var charAtPos = buffer[pos], cbuf = buffer.slice();\n charAtPos === opts.groupSeparator && (cbuf.splice(pos--, 1), charAtPos = cbuf[pos]);\n var isNegative = cbuf.join(\"\").match(new RegExp(\"^\" + Inputmask.escapeRegex(opts.negationSymbol.front)));\n isNegative = null !== isNegative && 1 === isNegative.length, pos > (isNegative ? opts.negationSymbol.front.length : 0) + opts.prefix.length && pos < cbuf.length - opts.suffix.length && (cbuf[pos] = \"!\");\n var bufVal = cbuf.join(\"\"), bufValOrigin = cbuf.join();\n if (isNegative && (bufVal = bufVal.replace(new RegExp(\"^\" + Inputmask.escapeRegex(opts.negationSymbol.front)), \"\"), \n bufVal = bufVal.replace(new RegExp(Inputmask.escapeRegex(opts.negationSymbol.back) + \"$\"), \"\")), \n bufVal = bufVal.replace(new RegExp(Inputmask.escapeRegex(opts.suffix) + \"$\"), \"\"), \n bufVal = bufVal.replace(new RegExp(\"^\" + Inputmask.escapeRegex(opts.prefix)), \"\"), \n bufVal.length > 0 && opts.autoGroup || bufVal.indexOf(opts.groupSeparator) !== -1) {\n var escapedGroupSeparator = Inputmask.escapeRegex(opts.groupSeparator);\n bufVal = bufVal.replace(new RegExp(escapedGroupSeparator, \"g\"), \"\");\n var radixSplit = bufVal.split(charAtPos === opts.radixPoint ? \"!\" : opts.radixPoint);\n if (bufVal = \"\" === opts.radixPoint ? bufVal : radixSplit[0], charAtPos !== opts.negationSymbol.front && (bufVal = bufVal.replace(\"!\", \"?\")), \n bufVal.length > opts.groupSize) for (var reg = new RegExp(\"([-+]?[\\\\d?]+)([\\\\d?]{\" + opts.groupSize + \"})\"); reg.test(bufVal) && \"\" !== opts.groupSeparator; ) bufVal = bufVal.replace(reg, \"$1\" + opts.groupSeparator + \"$2\"), \n bufVal = bufVal.replace(opts.groupSeparator + opts.groupSeparator, opts.groupSeparator);\n bufVal = bufVal.replace(\"?\", \"!\"), \"\" !== opts.radixPoint && radixSplit.length > 1 && (bufVal += (charAtPos === opts.radixPoint ? \"!\" : opts.radixPoint) + radixSplit[1]);\n }\n bufVal = opts.prefix + bufVal + opts.suffix, isNegative && (bufVal = opts.negationSymbol.front + bufVal + opts.negationSymbol.back);\n var needsRefresh = bufValOrigin !== bufVal.split(\"\").join(), newPos = $.inArray(\"!\", bufVal);\n if (newPos === -1 && (newPos = pos), needsRefresh) {\n for (buffer.length = bufVal.length, i = 0, l = bufVal.length; i < l; i++) buffer[i] = bufVal.charAt(i);\n buffer[newPos] = charAtPos;\n }\n return newPos = opts.numericInput && isFinite(pos) ? buffer.join(\"\").length - newPos - 1 : newPos, \n opts.numericInput && (buffer = buffer.reverse(), $.inArray(opts.radixPoint, buffer) < newPos && buffer.join(\"\").length - opts.suffix.length !== newPos && (newPos -= 1)), \n {\n pos: newPos,\n refreshFromBuffer: needsRefresh,\n buffer: buffer,\n isNegative: isNegative\n };\n },\n onBeforeWrite: function(e, buffer, caretPos, opts) {\n var rslt;\n if (e && (\"blur\" === e.type || \"checkval\" === e.type || \"keydown\" === e.type)) {\n var maskedValue = opts.numericInput ? buffer.slice().reverse().join(\"\") : buffer.join(\"\"), processValue = maskedValue.replace(opts.prefix, \"\");\n processValue = processValue.replace(opts.suffix, \"\"), processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), \"g\"), \"\"), \n \",\" === opts.radixPoint && (processValue = processValue.replace(opts.radixPoint, \".\"));\n var isNegative = processValue.match(new RegExp(\"[-\" + Inputmask.escapeRegex(opts.negationSymbol.front) + \"]\", \"g\"));\n if (isNegative = null !== isNegative && 1 === isNegative.length, processValue = processValue.replace(new RegExp(\"[-\" + Inputmask.escapeRegex(opts.negationSymbol.front) + \"]\", \"g\"), \"\"), \n processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.negationSymbol.back) + \"$\"), \"\"), \n isNaN(opts.placeholder) && (processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.placeholder), \"g\"), \"\")), \n processValue = processValue === opts.negationSymbol.front ? processValue + \"0\" : processValue, \n \"\" !== processValue && isFinite(processValue)) {\n var floatValue = parseFloat(processValue), signedFloatValue = isNegative ? floatValue * -1 : floatValue;\n if (null !== opts.min && isFinite(opts.min) && signedFloatValue < parseFloat(opts.min) ? (floatValue = Math.abs(opts.min), \n isNegative = opts.min < 0, maskedValue = void 0) : null !== opts.max && isFinite(opts.max) && signedFloatValue > parseFloat(opts.max) && (floatValue = Math.abs(opts.max), \n isNegative = opts.max < 0, maskedValue = void 0), processValue = floatValue.toString().replace(\".\", opts.radixPoint).split(\"\"), \n isFinite(opts.digits)) {\n var radixPosition = $.inArray(opts.radixPoint, processValue), rpb = $.inArray(opts.radixPoint, maskedValue);\n radixPosition === -1 && (processValue.push(opts.radixPoint), radixPosition = processValue.length - 1);\n for (var i = 1; i <= opts.digits; i++) opts.digitsOptional || void 0 !== processValue[radixPosition + i] && processValue[radixPosition + i] !== opts.placeholder.charAt(0) ? rpb !== -1 && void 0 !== maskedValue[rpb + i] && (processValue[radixPosition + i] = processValue[radixPosition + i] || maskedValue[rpb + i]) : processValue[radixPosition + i] = \"0\";\n processValue[processValue.length - 1] === opts.radixPoint && delete processValue[processValue.length - 1];\n }\n if (floatValue.toString() !== processValue && floatValue.toString() + \".\" !== processValue || isNegative) return processValue = (opts.prefix + processValue.join(\"\")).split(\"\"), \n !isNegative || 0 === floatValue && \"blur\" === e.type || (processValue.unshift(opts.negationSymbol.front), \n processValue.push(opts.negationSymbol.back)), opts.numericInput && (processValue = processValue.reverse()), \n rslt = opts.postFormat(processValue, opts.numericInput ? caretPos : caretPos - 1, opts), \n rslt.buffer && (rslt.refreshFromBuffer = rslt.buffer.join(\"\") !== buffer.join(\"\")), \n rslt;\n }\n }\n if (opts.autoGroup) return rslt = opts.postFormat(buffer, opts.numericInput ? caretPos : caretPos - 1, opts), \n rslt.caret = caretPos < (rslt.isNegative ? opts.negationSymbol.front.length : 0) + opts.prefix.length || caretPos > rslt.buffer.length - (rslt.isNegative ? opts.negationSymbol.back.length : 0) ? rslt.pos : rslt.pos + 1, \n rslt;\n },\n regex: {\n integerPart: function(opts) {\n return new RegExp(\"[\" + Inputmask.escapeRegex(opts.negationSymbol.front) + \"+]?\\\\d+\");\n },\n integerNPart: function(opts) {\n return new RegExp(\"[\\\\d\" + Inputmask.escapeRegex(opts.groupSeparator) + Inputmask.escapeRegex(opts.placeholder.charAt(0)) + \"]+\");\n }\n },\n signHandler: function(chrs, maskset, pos, strict, opts) {\n if (!strict && opts.allowMinus && \"-\" === chrs || opts.allowPlus && \"+\" === chrs) {\n var matchRslt = maskset.buffer.join(\"\").match(opts.regex.integerPart(opts));\n if (matchRslt && matchRslt[0].length > 0) return maskset.buffer[matchRslt.index] === (\"-\" === chrs ? \"+\" : opts.negationSymbol.front) ? \"-\" === chrs ? \"\" !== opts.negationSymbol.back ? {\n pos: 0,\n c: opts.negationSymbol.front,\n remove: 0,\n caret: pos,\n insert: {\n pos: maskset.buffer.length - 1,\n c: opts.negationSymbol.back\n }\n } : {\n pos: 0,\n c: opts.negationSymbol.front,\n remove: 0,\n caret: pos\n } : \"\" !== opts.negationSymbol.back ? {\n pos: 0,\n c: \"+\",\n remove: [ 0, maskset.buffer.length - 1 ],\n caret: pos\n } : {\n pos: 0,\n c: \"+\",\n remove: 0,\n caret: pos\n } : maskset.buffer[0] === (\"-\" === chrs ? opts.negationSymbol.front : \"+\") ? \"-\" === chrs && \"\" !== opts.negationSymbol.back ? {\n remove: [ 0, maskset.buffer.length - 1 ],\n caret: pos - 1\n } : {\n remove: 0,\n caret: pos - 1\n } : \"-\" === chrs ? \"\" !== opts.negationSymbol.back ? {\n pos: 0,\n c: opts.negationSymbol.front,\n caret: pos + 1,\n insert: {\n pos: maskset.buffer.length,\n c: opts.negationSymbol.back\n }\n } : {\n pos: 0,\n c: opts.negationSymbol.front,\n caret: pos + 1\n } : {\n pos: 0,\n c: chrs,\n caret: pos + 1\n };\n }\n return !1;\n },\n radixHandler: function(chrs, maskset, pos, strict, opts) {\n if (!strict && opts.numericInput !== !0 && chrs === opts.radixPoint && void 0 !== opts.digits && (isNaN(opts.digits) || parseInt(opts.digits) > 0)) {\n var radixPos = $.inArray(opts.radixPoint, maskset.buffer), integerValue = maskset.buffer.join(\"\").match(opts.regex.integerPart(opts));\n if (radixPos !== -1 && maskset.validPositions[radixPos]) return maskset.validPositions[radixPos - 1] ? {\n caret: radixPos + 1\n } : {\n pos: integerValue.index,\n c: integerValue[0],\n caret: radixPos + 1\n };\n if (!integerValue || \"0\" === integerValue[0] && integerValue.index + 1 !== pos) return maskset.buffer[integerValue ? integerValue.index : pos] = \"0\", \n {\n pos: (integerValue ? integerValue.index : pos) + 1,\n c: opts.radixPoint\n };\n }\n return !1;\n },\n leadingZeroHandler: function(chrs, maskset, pos, strict, opts, isSelection) {\n if (!strict) {\n var buffer = maskset.buffer.slice(\"\");\n if (buffer.splice(0, opts.prefix.length), buffer.splice(buffer.length - opts.suffix.length, opts.suffix.length), \n opts.numericInput === !0) {\n var buffer = buffer.reverse(), bufferChar = buffer[0];\n if (\"0\" === bufferChar && void 0 === maskset.validPositions[pos - 1]) return {\n pos: pos,\n remove: buffer.length - 1\n };\n } else {\n pos -= opts.prefix.length;\n var radixPosition = $.inArray(opts.radixPoint, buffer), matchRslt = buffer.slice(0, radixPosition !== -1 ? radixPosition : void 0).join(\"\").match(opts.regex.integerNPart(opts));\n if (matchRslt && (radixPosition === -1 || pos <= radixPosition)) {\n var decimalPart = radixPosition === -1 ? 0 : parseInt(buffer.slice(radixPosition + 1).join(\"\"));\n if (0 === matchRslt[0].indexOf(\"\" !== opts.placeholder ? opts.placeholder.charAt(0) : \"0\") && (matchRslt.index + 1 === pos || isSelection !== !0 && 0 === decimalPart)) return maskset.buffer.splice(matchRslt.index + opts.prefix.length, 1), \n {\n pos: matchRslt.index + opts.prefix.length,\n remove: matchRslt.index + opts.prefix.length\n };\n if (\"0\" === chrs && pos <= matchRslt.index && matchRslt[0] !== opts.groupSeparator) return !1;\n }\n }\n }\n return !0;\n },\n definitions: {\n \"~\": {\n validator: function(chrs, maskset, pos, strict, opts, isSelection) {\n var isValid = opts.signHandler(chrs, maskset, pos, strict, opts);\n if (!isValid && (isValid = opts.radixHandler(chrs, maskset, pos, strict, opts), \n !isValid && (isValid = strict ? new RegExp(\"[0-9\" + Inputmask.escapeRegex(opts.groupSeparator) + \"]\").test(chrs) : new RegExp(\"[0-9]\").test(chrs), \n isValid === !0 && (isValid = opts.leadingZeroHandler(chrs, maskset, pos, strict, opts, isSelection), \n isValid === !0)))) {\n var radixPosition = $.inArray(opts.radixPoint, maskset.buffer);\n isValid = radixPosition !== -1 && (opts.digitsOptional === !1 || maskset.validPositions[pos]) && opts.numericInput !== !0 && pos > radixPosition && !strict ? {\n pos: pos,\n remove: pos\n } : {\n pos: pos\n };\n }\n return isValid;\n },\n cardinality: 1\n },\n \"+\": {\n validator: function(chrs, maskset, pos, strict, opts) {\n var isValid = opts.signHandler(chrs, maskset, pos, strict, opts);\n return !isValid && (strict && opts.allowMinus && chrs === opts.negationSymbol.front || opts.allowMinus && \"-\" === chrs || opts.allowPlus && \"+\" === chrs) && (isValid = !(!strict && \"-\" === chrs) || (\"\" !== opts.negationSymbol.back ? {\n pos: pos,\n c: \"-\" === chrs ? opts.negationSymbol.front : \"+\",\n caret: pos + 1,\n insert: {\n pos: maskset.buffer.length,\n c: opts.negationSymbol.back\n }\n } : {\n pos: pos,\n c: \"-\" === chrs ? opts.negationSymbol.front : \"+\",\n caret: pos + 1\n })), isValid;\n },\n cardinality: 1,\n placeholder: \"\"\n },\n \"-\": {\n validator: function(chrs, maskset, pos, strict, opts) {\n var isValid = opts.signHandler(chrs, maskset, pos, strict, opts);\n return !isValid && strict && opts.allowMinus && chrs === opts.negationSymbol.back && (isValid = !0), \n isValid;\n },\n cardinality: 1,\n placeholder: \"\"\n },\n \":\": {\n validator: function(chrs, maskset, pos, strict, opts) {\n var isValid = opts.signHandler(chrs, maskset, pos, strict, opts);\n if (!isValid) {\n var radix = \"[\" + Inputmask.escapeRegex(opts.radixPoint) + \"]\";\n isValid = new RegExp(radix).test(chrs), isValid && maskset.validPositions[pos] && maskset.validPositions[pos].match.placeholder === opts.radixPoint && (isValid = {\n caret: pos + 1\n });\n }\n return isValid;\n },\n cardinality: 1,\n placeholder: function(opts) {\n return opts.radixPoint;\n }\n }\n },\n onUnMask: function(maskedValue, unmaskedValue, opts) {\n if (\"\" === unmaskedValue && opts.nullable === !0) return unmaskedValue;\n var processValue = maskedValue.replace(opts.prefix, \"\");\n return processValue = processValue.replace(opts.suffix, \"\"), processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), \"g\"), \"\"), \n opts.unmaskAsNumber ? (\"\" !== opts.radixPoint && processValue.indexOf(opts.radixPoint) !== -1 && (processValue = processValue.replace(Inputmask.escapeRegex.call(this, opts.radixPoint), \".\")), \n Number(processValue)) : processValue;\n },\n isComplete: function(buffer, opts) {\n var maskedValue = buffer.join(\"\"), bufClone = buffer.slice();\n if (opts.postFormat(bufClone, 0, opts), bufClone.join(\"\") !== maskedValue) return !1;\n var processValue = maskedValue.replace(opts.prefix, \"\");\n return processValue = processValue.replace(opts.suffix, \"\"), processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), \"g\"), \"\"), \n \",\" === opts.radixPoint && (processValue = processValue.replace(Inputmask.escapeRegex(opts.radixPoint), \".\")), \n isFinite(processValue);\n },\n onBeforeMask: function(initialValue, opts) {\n if (opts.numericInput === !0 && (initialValue = initialValue.split(\"\").reverse().join(\"\")), \n \"\" !== opts.radixPoint && isFinite(initialValue)) {\n var vs = initialValue.split(\".\"), groupSize = \"\" !== opts.groupSeparator ? parseInt(opts.groupSize) : 0;\n 2 === vs.length && (vs[0].length > groupSize || vs[1].length > groupSize) && (initialValue = initialValue.toString().replace(\".\", opts.radixPoint));\n }\n var kommaMatches = initialValue.match(/,/g), dotMatches = initialValue.match(/\\./g);\n if (dotMatches && kommaMatches ? dotMatches.length > kommaMatches.length ? (initialValue = initialValue.replace(/\\./g, \"\"), \n initialValue = initialValue.replace(\",\", opts.radixPoint)) : kommaMatches.length > dotMatches.length ? (initialValue = initialValue.replace(/,/g, \"\"), \n initialValue = initialValue.replace(\".\", opts.radixPoint)) : initialValue = initialValue.indexOf(\".\") < initialValue.indexOf(\",\") ? initialValue.replace(/\\./g, \"\") : initialValue = initialValue.replace(/,/g, \"\") : initialValue = initialValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), \"g\"), \"\"), \n 0 === opts.digits && (initialValue.indexOf(\".\") !== -1 ? initialValue = initialValue.substring(0, initialValue.indexOf(\".\")) : initialValue.indexOf(\",\") !== -1 && (initialValue = initialValue.substring(0, initialValue.indexOf(\",\")))), \n \"\" !== opts.radixPoint && isFinite(opts.digits) && initialValue.indexOf(opts.radixPoint) !== -1) {\n var valueParts = initialValue.split(opts.radixPoint), decPart = valueParts[1].match(new RegExp(\"\\\\d*\"))[0];\n if (parseInt(opts.digits) < decPart.toString().length) {\n var digitsFactor = Math.pow(10, parseInt(opts.digits));\n initialValue = initialValue.replace(Inputmask.escapeRegex(opts.radixPoint), \".\"), \n initialValue = Math.round(parseFloat(initialValue) * digitsFactor) / digitsFactor, \n initialValue = initialValue.toString().replace(\".\", opts.radixPoint);\n }\n }\n return opts.numericInput === !0 && (initialValue = initialValue.split(\"\").reverse().join(\"\")), \n initialValue.toString();\n },\n canClearPosition: function(maskset, position, lvp, strict, opts) {\n var positionInput = maskset.validPositions[position].input, canClear = positionInput !== opts.radixPoint || null !== maskset.validPositions[position].match.fn && opts.decimalProtect === !1 || isFinite(positionInput) || position === lvp || positionInput === opts.groupSeparator || positionInput === opts.negationSymbol.front || positionInput === opts.negationSymbol.back;\n return canClear;\n },\n onKeyDown: function(e, buffer, caretPos, opts) {\n var $input = $(this);\n if (e.ctrlKey) switch (e.keyCode) {\n case Inputmask.keyCode.UP:\n $input.val(parseFloat(this.inputmask.unmaskedvalue()) + parseInt(opts.step)), $input.trigger(\"setvalue\");\n break;\n\n case Inputmask.keyCode.DOWN:\n $input.val(parseFloat(this.inputmask.unmaskedvalue()) - parseInt(opts.step)), $input.trigger(\"setvalue\");\n }\n }\n },\n currency: {\n prefix: \"$ \",\n groupSeparator: \",\",\n alias: \"numeric\",\n placeholder: \"0\",\n autoGroup: !0,\n digits: 2,\n digitsOptional: !1,\n clearMaskOnLostFocus: !1\n },\n decimal: {\n alias: \"numeric\"\n },\n integer: {\n alias: \"numeric\",\n digits: 0,\n radixPoint: \"\"\n },\n percentage: {\n alias: \"numeric\",\n digits: 2,\n radixPoint: \".\",\n placeholder: \"0\",\n autoGroup: !1,\n min: 0,\n max: 100,\n suffix: \" %\",\n allowPlus: !1,\n allowMinus: !1\n }\n }), Inputmask;\n}(jQuery, Inputmask), function($, Inputmask) {\n function maskSort(a, b) {\n var maska = (a.mask || a).replace(/#/g, \"9\").replace(/\\)/, \"9\").replace(/[+()#-]/g, \"\"), maskb = (b.mask || b).replace(/#/g, \"9\").replace(/\\)/, \"9\").replace(/[+()#-]/g, \"\"), maskas = (a.mask || a).split(\"#\")[0], maskbs = (b.mask || b).split(\"#\")[0];\n return 0 === maskbs.indexOf(maskas) ? -1 : 0 === maskas.indexOf(maskbs) ? 1 : maska.localeCompare(maskb);\n }\n var analyseMaskBase = Inputmask.prototype.analyseMask;\n return Inputmask.prototype.analyseMask = function(mask, opts) {\n function reduceVariations(masks, previousVariation, previousmaskGroup) {\n previousVariation = previousVariation || \"\", previousmaskGroup = previousmaskGroup || maskGroups, \n \"\" !== previousVariation && (previousmaskGroup[previousVariation] = {});\n for (var variation = \"\", maskGroup = previousmaskGroup[previousVariation] || previousmaskGroup, i = masks.length - 1; i >= 0; i--) mask = masks[i].mask || masks[i], \n variation = mask.substr(0, 1), maskGroup[variation] = maskGroup[variation] || [], \n maskGroup[variation].unshift(mask.substr(1)), masks.splice(i, 1);\n for (var ndx in maskGroup) maskGroup[ndx].length > 500 && reduceVariations(maskGroup[ndx].slice(), ndx, maskGroup);\n }\n function rebuild(maskGroup) {\n var mask = \"\", submasks = [];\n for (var ndx in maskGroup) $.isArray(maskGroup[ndx]) ? 1 === maskGroup[ndx].length ? submasks.push(ndx + maskGroup[ndx]) : submasks.push(ndx + opts.groupmarker.start + maskGroup[ndx].join(opts.groupmarker.end + opts.alternatormarker + opts.groupmarker.start) + opts.groupmarker.end) : submasks.push(ndx + rebuild(maskGroup[ndx]));\n return mask += 1 === submasks.length ? submasks[0] : opts.groupmarker.start + submasks.join(opts.groupmarker.end + opts.alternatormarker + opts.groupmarker.start) + opts.groupmarker.end;\n }\n var maskGroups = {};\n opts.phoneCodes && opts.phoneCodes.length > 1e3 && (mask = mask.substr(1, mask.length - 2), \n reduceVariations(mask.split(opts.groupmarker.end + opts.alternatormarker + opts.groupmarker.start)), \n mask = rebuild(maskGroups));\n var mt = analyseMaskBase.call(this, mask, opts);\n return mt;\n }, Inputmask.extendAliases({\n abstractphone: {\n groupmarker: {\n start: \"<\",\n end: \">\"\n },\n countrycode: \"\",\n phoneCodes: [],\n mask: function(opts) {\n return opts.definitions = {\n \"#\": opts.definitions[9]\n }, opts.phoneCodes.sort(maskSort);\n },\n keepStatic: !0,\n onBeforeMask: function(value, opts) {\n var processedValue = value.replace(/^0{1,2}/, \"\").replace(/[\\s]/g, \"\");\n return (processedValue.indexOf(opts.countrycode) > 1 || processedValue.indexOf(opts.countrycode) === -1) && (processedValue = \"+\" + opts.countrycode + processedValue), \n processedValue;\n },\n onUnMask: function(maskedValue, unmaskedValue, opts) {\n return unmaskedValue;\n },\n inputmode: \"tel\"\n }\n }), Inputmask;\n}(jQuery, Inputmask), function($, Inputmask) {\n return Inputmask.extendAliases({\n Regex: {\n mask: \"r\",\n greedy: !1,\n repeat: \"*\",\n regex: null,\n regexTokens: null,\n tokenizer: /\\[\\^?]?(?:[^\\\\\\]]+|\\\\[\\S\\s]?)*]?|\\\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9][0-9]*|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|c[A-Za-z]|[\\S\\s]?)|\\((?:\\?[:=!]?)?|(?:[?*+]|\\{[0-9]+(?:,[0-9]*)?\\})\\??|[^.?*+^${[()|\\\\]+|./g,\n quantifierFilter: /[0-9]+[^,]/,\n isComplete: function(buffer, opts) {\n return new RegExp(opts.regex).test(buffer.join(\"\"));\n },\n definitions: {\n r: {\n validator: function(chrs, maskset, pos, strict, opts) {\n function RegexToken(isGroup, isQuantifier) {\n this.matches = [], this.isGroup = isGroup || !1, this.isQuantifier = isQuantifier || !1, \n this.quantifier = {\n min: 1,\n max: 1\n }, this.repeaterPart = void 0;\n }\n function analyseRegex() {\n var match, m, currentToken = new RegexToken(), opengroups = [];\n for (opts.regexTokens = []; match = opts.tokenizer.exec(opts.regex); ) switch (m = match[0], \n m.charAt(0)) {\n case \"(\":\n opengroups.push(new RegexToken((!0)));\n break;\n\n case \")\":\n groupToken = opengroups.pop(), opengroups.length > 0 ? opengroups[opengroups.length - 1].matches.push(groupToken) : currentToken.matches.push(groupToken);\n break;\n\n case \"{\":\n case \"+\":\n case \"*\":\n var quantifierToken = new RegexToken((!1), (!0));\n m = m.replace(/[{}]/g, \"\");\n var mq = m.split(\",\"), mq0 = isNaN(mq[0]) ? mq[0] : parseInt(mq[0]), mq1 = 1 === mq.length ? mq0 : isNaN(mq[1]) ? mq[1] : parseInt(mq[1]);\n if (quantifierToken.quantifier = {\n min: mq0,\n max: mq1\n }, opengroups.length > 0) {\n var matches = opengroups[opengroups.length - 1].matches;\n match = matches.pop(), match.isGroup || (groupToken = new RegexToken((!0)), groupToken.matches.push(match), \n match = groupToken), matches.push(match), matches.push(quantifierToken);\n } else match = currentToken.matches.pop(), match.isGroup || (groupToken = new RegexToken((!0)), \n groupToken.matches.push(match), match = groupToken), currentToken.matches.push(match), \n currentToken.matches.push(quantifierToken);\n break;\n\n default:\n opengroups.length > 0 ? opengroups[opengroups.length - 1].matches.push(m) : currentToken.matches.push(m);\n }\n currentToken.matches.length > 0 && opts.regexTokens.push(currentToken);\n }\n function validateRegexToken(token, fromGroup) {\n var isvalid = !1;\n fromGroup && (regexPart += \"(\", openGroupCount++);\n for (var mndx = 0; mndx < token.matches.length; mndx++) {\n var matchToken = token.matches[mndx];\n if (matchToken.isGroup === !0) isvalid = validateRegexToken(matchToken, !0); else if (matchToken.isQuantifier === !0) {\n var crrntndx = $.inArray(matchToken, token.matches), matchGroup = token.matches[crrntndx - 1], regexPartBak = regexPart;\n if (isNaN(matchToken.quantifier.max)) {\n for (;matchToken.repeaterPart && matchToken.repeaterPart !== regexPart && matchToken.repeaterPart.length > regexPart.length && !(isvalid = validateRegexToken(matchGroup, !0)); ) ;\n isvalid = isvalid || validateRegexToken(matchGroup, !0), isvalid && (matchToken.repeaterPart = regexPart), \n regexPart = regexPartBak + matchToken.quantifier.max;\n } else {\n for (var i = 0, qm = matchToken.quantifier.max - 1; i < qm && !(isvalid = validateRegexToken(matchGroup, !0)); i++) ;\n regexPart = regexPartBak + \"{\" + matchToken.quantifier.min + \",\" + matchToken.quantifier.max + \"}\";\n }\n } else if (void 0 !== matchToken.matches) for (var k = 0; k < matchToken.length && !(isvalid = validateRegexToken(matchToken[k], fromGroup)); k++) ; else {\n var testExp;\n if (\"[\" == matchToken.charAt(0)) {\n testExp = regexPart, testExp += matchToken;\n for (var j = 0; j < openGroupCount; j++) testExp += \")\";\n var exp = new RegExp(\"^(\" + testExp + \")$\");\n isvalid = exp.test(bufferStr);\n } else for (var l = 0, tl = matchToken.length; l < tl; l++) if (\"\\\\\" !== matchToken.charAt(l)) {\n testExp = regexPart, testExp += matchToken.substr(0, l + 1), testExp = testExp.replace(/\\|$/, \"\");\n for (var j = 0; j < openGroupCount; j++) testExp += \")\";\n var exp = new RegExp(\"^(\" + testExp + \")$\");\n if (isvalid = exp.test(bufferStr)) break;\n }\n regexPart += matchToken;\n }\n if (isvalid) break;\n }\n return fromGroup && (regexPart += \")\", openGroupCount--), isvalid;\n }\n var bufferStr, groupToken, cbuffer = maskset.buffer.slice(), regexPart = \"\", isValid = !1, openGroupCount = 0;\n null === opts.regexTokens && analyseRegex(), cbuffer.splice(pos, 0, chrs), bufferStr = cbuffer.join(\"\");\n for (var i = 0; i < opts.regexTokens.length; i++) {\n var regexToken = opts.regexTokens[i];\n if (isValid = validateRegexToken(regexToken, regexToken.isGroup)) break;\n }\n return isValid;\n },\n cardinality: 1\n }\n }\n }\n }), Inputmask;\n}(jQuery, Inputmask);","/**!\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version 1.16.0\n * @license\n * Copyright (c) 2016 Federico Zivolo and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && typeof navigator !== 'undefined';\n\nvar timeoutDuration = function () {\n var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\n for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n return 1;\n }\n }\n return 0;\n}();\n\nfunction microtaskDebounce(fn) {\n var called = false;\n return function () {\n if (called) {\n return;\n }\n called = true;\n window.Promise.resolve().then(function () {\n called = false;\n fn();\n });\n };\n}\n\nfunction taskDebounce(fn) {\n var scheduled = false;\n return function () {\n if (!scheduled) {\n scheduled = true;\n setTimeout(function () {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nvar supportsMicroTasks = isBrowser && window.Promise;\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nvar debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nfunction isFunction(functionToCheck) {\n var getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\n/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nfunction getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n var window = element.ownerDocument.defaultView;\n var css = window.getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n\n/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nfunction getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nfunction getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body;\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body;\n case '#document':\n return element.body;\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n\n var _getStyleComputedProp = getStyleComputedProperty(element),\n overflow = _getStyleComputedProp.overflow,\n overflowX = _getStyleComputedProp.overflowX,\n overflowY = _getStyleComputedProp.overflowY;\n\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n\n/**\n * Returns the reference node of the reference object, or the reference object itself.\n * @method\n * @memberof Popper.Utils\n * @param {Element|Object} reference - the reference element (the popper will be relative to this)\n * @returns {Element} parent\n */\nfunction getReferenceNode(reference) {\n return reference && reference.referenceNode ? reference.referenceNode : reference;\n}\n\nvar isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nvar isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nfunction isIE(version) {\n if (version === 11) {\n return isIE11;\n }\n if (version === 10) {\n return isIE10;\n }\n return isIE11 || isIE10;\n}\n\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nfunction getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n var noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n var offsetParent = element.offsetParent || null;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n var nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TH, TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n\nfunction isOffsetContainer(element) {\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY') {\n return false;\n }\n return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n}\n\n/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nfunction getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nfunction findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n var start = order ? element1 : element2;\n var end = order ? element2 : element1;\n\n // Get common ancestor container\n var range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n var commonAncestorContainer = range.commonAncestorContainer;\n\n // Both nodes are inside #document\n\n if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n var element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n\n/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nfunction getScroll(element) {\n var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n var html = element.ownerDocument.documentElement;\n var scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nfunction includeScroll(rect, element) {\n var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n var modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n\n/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nfunction getBordersSize(styles, axis) {\n var sideA = axis === 'x' ? 'Left' : 'Top';\n var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10);\n}\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0);\n}\n\nfunction getWindowSizes(document) {\n var body = document.body;\n var html = document.documentElement;\n var computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle)\n };\n}\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\nvar defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\n/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nfunction getClientRect(offsets) {\n return _extends({}, offsets, {\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height\n });\n}\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nfunction getBoundingClientRect(element) {\n var rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n } else {\n rect = element.getBoundingClientRect();\n }\n } catch (e) {}\n\n var result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n\n // subtract scrollbar size from sizes\n var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n var width = sizes.width || element.clientWidth || result.width;\n var height = sizes.height || element.clientHeight || result.height;\n\n var horizScrollbar = element.offsetWidth - width;\n var vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n var styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n\nfunction getOffsetRectRelativeToArbitraryNode(children, parent) {\n var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var isIE10 = isIE(10);\n var isHTML = parent.nodeName === 'HTML';\n var childrenRect = getBoundingClientRect(children);\n var parentRect = getBoundingClientRect(parent);\n var scrollParent = getScrollParent(children);\n\n var styles = getStyleComputedProperty(parent);\n var borderTopWidth = parseFloat(styles.borderTopWidth, 10);\n var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if (fixedPosition && isHTML) {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n var offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n var marginTop = parseFloat(styles.marginTop, 10);\n var marginLeft = parseFloat(styles.marginLeft, 10);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element) {\n var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var html = element.ownerDocument.documentElement;\n var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n var width = Math.max(html.clientWidth, window.innerWidth || 0);\n var height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n var scrollTop = !excludeScroll ? getScroll(html) : 0;\n var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n var offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width: width,\n height: height\n };\n\n return getClientRect(offset);\n}\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nfunction isFixed(element) {\n var nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n var parentNode = getParentNode(element);\n if (!parentNode) {\n return false;\n }\n return isFixed(parentNode);\n}\n\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nfunction getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n var el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n}\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n // NOTE: 1 DOM access here\n\n var boundaries = { top: 0, left: 0 };\n var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n\n // Handle viewport case\n if (boundariesElement === 'viewport') {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n } else {\n // Handle other cases based on DOM element used as boundaries\n var boundariesNode = void 0;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n var _getWindowSizes = getWindowSizes(popper.ownerDocument),\n height = _getWindowSizes.height,\n width = _getWindowSizes.width;\n\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n padding = padding || 0;\n var isPaddingNumber = typeof padding === 'number';\n boundaries.left += isPaddingNumber ? padding : padding.left || 0;\n boundaries.top += isPaddingNumber ? padding : padding.top || 0;\n boundaries.right -= isPaddingNumber ? padding : padding.right || 0;\n boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;\n\n return boundaries;\n}\n\nfunction getArea(_ref) {\n var width = _ref.width,\n height = _ref.height;\n\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n\n var rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height\n }\n };\n\n var sortedAreas = Object.keys(rects).map(function (key) {\n return _extends({\n key: key\n }, rects[key], {\n area: getArea(rects[key])\n });\n }).sort(function (a, b) {\n return b.area - a.area;\n });\n\n var filteredAreas = sortedAreas.filter(function (_ref2) {\n var width = _ref2.width,\n height = _ref2.height;\n return width >= popper.clientWidth && height >= popper.clientHeight;\n });\n\n var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n\n var variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? '-' + variation : '');\n}\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nfunction getReferenceOffsets(state, popper, reference) {\n var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n\n/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nfunction getOuterSizes(element) {\n var window = element.ownerDocument.defaultView;\n var styles = window.getComputedStyle(element);\n var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\n var result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x\n };\n return result;\n}\n\n/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nfunction getOppositePlacement(placement) {\n var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nfunction getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n var popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n var popperOffsets = {\n width: popperRect.width,\n height: popperRect.height\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n var mainSide = isHoriz ? 'top' : 'left';\n var secondarySide = isHoriz ? 'left' : 'top';\n var measurement = isHoriz ? 'height' : 'width';\n var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n\n/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(function (cur) {\n return cur[prop] === value;\n });\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n var match = find(arr, function (obj) {\n return obj[prop] === value;\n });\n return arr.indexOf(match);\n}\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nfunction runModifiers(modifiers, data, ends) {\n var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(function (modifier) {\n if (modifier['function']) {\n // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.<br />\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nfunction update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n var data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {}\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n\n data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n\n/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nfunction isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(function (_ref) {\n var name = _ref.name,\n enabled = _ref.enabled;\n return enabled && name === modifierName;\n });\n}\n\n/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nfunction getSupportedPropertyName(property) {\n var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (var i = 0; i < prefixes.length; i++) {\n var prefix = prefixes[i];\n var toCheck = prefix ? '' + prefix + upperProp : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n\n/**\n * Destroys the popper.\n * @method\n * @memberof Popper\n */\nfunction destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicitly asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n\n/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nfunction getWindow(element) {\n var ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n var isBody = scrollParent.nodeName === 'BODY';\n var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction setupEventListeners(reference, options, state, updateBound) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n var scrollElement = getScrollParent(reference);\n attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nfunction enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n }\n}\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(function (target) {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nfunction disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n\n/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nfunction isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setStyles(element, styles) {\n Object.keys(styles).forEach(function (prop) {\n var unit = '';\n // add unit if the value is numeric and is one of the following\n if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n\n/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function (prop) {\n var value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nfunction applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nfunction applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n // compute reference element offsets\n var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n\n/**\n * @function\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Boolean} shouldRound - If the offsets should be rounded at all\n * @returns {Object} The popper's position offsets rounded\n *\n * The tale of pixel-perfect positioning. It's still not 100% perfect, but as\n * good as it can be within reason.\n * Discussion here: https://github.com/FezVrasta/popper.js/pull/715\n *\n * Low DPI screens cause a popper to be blurry if not using full pixels (Safari\n * as well on High DPI screens).\n *\n * Firefox prefers no rounding for positioning and does not have blurriness on\n * high DPI screens.\n *\n * Only horizontal placement and left/right values need to be considered.\n */\nfunction getRoundedOffsets(data, shouldRound) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n var round = Math.round,\n floor = Math.floor;\n\n var noRound = function noRound(v) {\n return v;\n };\n\n var referenceWidth = round(reference.width);\n var popperWidth = round(popper.width);\n\n var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n var isVariation = data.placement.indexOf('-') !== -1;\n var sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n\n var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;\n var verticalToInteger = !shouldRound ? noRound : round;\n\n return {\n left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),\n top: verticalToInteger(popper.top),\n bottom: verticalToInteger(popper.bottom),\n right: horizontalToInteger(popper.right)\n };\n}\n\nvar isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeStyle(data, options) {\n var x = options.x,\n y = options.y;\n var popper = data.offsets.popper;\n\n // Remove this legacy support in Popper.js v2\n\n var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'applyStyle';\n }).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n }\n var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n\n var offsetParent = getOffsetParent(data.instance.popper);\n var offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n var styles = {\n position: popper.position\n };\n\n var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox);\n\n var sideA = x === 'bottom' ? 'top' : 'bottom';\n var sideB = y === 'right' ? 'left' : 'right';\n\n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n var prefixedProperty = getSupportedPropertyName('transform');\n\n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n var left = void 0,\n top = void 0;\n if (sideA === 'bottom') {\n // when offsetParent is <html> the positioning is relative to the bottom of the screen (excluding the scrollbar)\n // and not the bottom of the html element\n if (offsetParent.nodeName === 'HTML') {\n top = -offsetParent.clientHeight + offsets.bottom;\n } else {\n top = -offsetParentRect.height + offsets.bottom;\n }\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n if (offsetParent.nodeName === 'HTML') {\n left = -offsetParent.clientWidth + offsets.right;\n } else {\n left = -offsetParentRect.width + offsets.right;\n }\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n var invertTop = sideA === 'bottom' ? -1 : 1;\n var invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = sideA + ', ' + sideB;\n }\n\n // Attributes\n var attributes = {\n 'x-placement': data.placement\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = _extends({}, attributes, data.attributes);\n data.styles = _extends({}, styles, data.styles);\n data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n\n return data;\n}\n\n/**\n * Helper used to know if the given modifier depends from another one.<br />\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n var requesting = find(modifiers, function (_ref) {\n var name = _ref.name;\n return name === requestingName;\n });\n\n var isRequired = !!requesting && modifiers.some(function (modifier) {\n return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n });\n\n if (!isRequired) {\n var _requesting = '`' + requestingName + '`';\n var requested = '`' + requestedName + '`';\n console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n }\n return isRequired;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction arrow(data, options) {\n var _data$offsets$arrow;\n\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n var arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn('WARNING: `arrow.element` must be child of its popper element!');\n return data;\n }\n }\n\n var placement = data.placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n var len = isVertical ? 'height' : 'width';\n var sideCapitalized = isVertical ? 'Top' : 'Left';\n var side = sideCapitalized.toLowerCase();\n var altSide = isVertical ? 'left' : 'top';\n var opSide = isVertical ? 'bottom' : 'right';\n var arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjunction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n var css = getStyleComputedProperty(data.instance.popper);\n var popperMarginSide = parseFloat(css['margin' + sideCapitalized], 10);\n var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width'], 10);\n var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n\n return data;\n}\n\n/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nfunction getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n\n/**\n * List of accepted placements to use as values of the `placement` option.<br />\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.<br />\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-end` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nvar placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\n\n// Get rid of `auto` `auto-start` and `auto-end`\nvar validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nfunction clockwise(placement) {\n var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var index = validPlacements.indexOf(placement);\n var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n\nvar BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise'\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\n\n var placement = data.placement.split('-')[0];\n var placementOpposite = getOppositePlacement(placement);\n var variation = data.placement.split('-')[1] || '';\n\n var flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach(function (step, index) {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n var popperOffsets = data.offsets.popper;\n var refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n var floor = Math.floor;\n var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n\n var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n // flip the variation if required\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n\n // flips variation if reference element overflows boundaries\n var flippedVariationByRef = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n // flips variation if popper content overflows boundaries\n var flippedVariationByContent = !!options.flipVariationsByContent && (isVertical && variation === 'start' && overflowsRight || isVertical && variation === 'end' && overflowsLeft || !isVertical && variation === 'start' && overflowsBottom || !isVertical && variation === 'end' && overflowsTop);\n\n var flippedVariation = flippedVariationByRef || flippedVariationByContent;\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction keepTogether(data) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var placement = data.placement.split('-')[0];\n var floor = Math.floor;\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var side = isVertical ? 'right' : 'bottom';\n var opSide = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nfunction toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n var value = +split[1];\n var unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n var element = void 0;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n var rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n var size = void 0;\n if (unit === 'vh') {\n size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n } else {\n size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nfunction parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n var offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n return frag.trim();\n });\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n var divider = fragments.indexOf(find(fragments, function (frag) {\n return frag.search(/,|\\s/) !== -1;\n }));\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n var splitRegex = /\\s*,\\s*|\\s+/;\n var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map(function (op, index) {\n // Most of the units rely on the orientation of the popper\n var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n var mergeWithPrevious = false;\n return op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce(function (a, b) {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(function (str) {\n return toValue(str, measurement, popperOffsets, referenceOffsets);\n });\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach(function (op, index) {\n op.forEach(function (frag, index2) {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nfunction offset(data, _ref) {\n var offset = _ref.offset;\n var placement = data.placement,\n _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var basePlacement = placement.split('-')[0];\n\n var offsets = void 0;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction preventOverflow(data, options) {\n var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\n // NOTE: DOM access here\n // resets the popper's position so that the document size can be calculated excluding\n // the size of the popper element itself\n var transformProp = getSupportedPropertyName('transform');\n var popperStyles = data.instance.popper.style; // assignment to help minification\n var top = popperStyles.top,\n left = popperStyles.left,\n transform = popperStyles[transformProp];\n\n popperStyles.top = '';\n popperStyles.left = '';\n popperStyles[transformProp] = '';\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);\n\n // NOTE: DOM access here\n // restores the original style properties after the offsets have been computed\n popperStyles.top = top;\n popperStyles.left = left;\n popperStyles[transformProp] = transform;\n\n options.boundaries = boundaries;\n\n var order = options.priority;\n var popper = data.offsets.popper;\n\n var check = {\n primary: function primary(placement) {\n var value = popper[placement];\n if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return defineProperty({}, placement, value);\n },\n secondary: function secondary(placement) {\n var mainSide = placement === 'right' ? 'left' : 'top';\n var value = popper[mainSide];\n if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n }\n return defineProperty({}, mainSide, value);\n }\n };\n\n order.forEach(function (placement) {\n var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = _extends({}, popper, check[side](placement));\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction shift(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n var _data$offsets = data.offsets,\n reference = _data$offsets.reference,\n popper = _data$offsets.popper;\n\n var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n var side = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n var shiftOffsets = {\n start: defineProperty({}, side, reference[side]),\n end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n };\n\n data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n var refRect = data.offsets.reference;\n var bound = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'preventOverflow';\n }).boundaries;\n\n if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction inner(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.<br />\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.<br />\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nvar modifiers = {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.<br />\n * It will read the variation of the `placement` property.<br />\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unit-less, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.<br />\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the `height`.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.<br />\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.<br />\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * A scenario exists where the reference itself is not within the boundaries.<br />\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".<br />\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper. This makes sure the popper always has a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent'\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near each other\n * without leaving any gap between the two. Especially useful when the arrow is\n * enabled and you want to ensure that it points to its reference element.\n * It cares only about the first axis. You can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjunction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]'\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations)\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position.\n * The popper will never be placed outside of the defined boundaries\n * (except if `keepTogether` is enabled)\n */\n boundariesElement: 'viewport',\n /**\n * @prop {Boolean} flipVariations=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the reference element overlaps its boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariations: false,\n /**\n * @prop {Boolean} flipVariationsByContent=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the popper element overlaps its reference boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariationsByContent: false\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right'\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define your own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: undefined\n }\n};\n\n/**\n * The `dataObject` is an object containing all the information used by Popper.js.\n * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.<br />\n * These can be overridden using the `options` argument of Popper.js.<br />\n * To override an option, simply pass an object with the same\n * structure of the `options` object, as the 3rd argument. For example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nvar Defaults = {\n /**\n * Popper's placement.\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled.\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.<br />\n * By default, it is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: function onCreate() {},\n\n /**\n * Callback called when the popper is updated. This callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.<br />\n * By default, it is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: function onUpdate() {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js.\n * @prop {modifiers}\n */\n modifiers: modifiers\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n\n// Utils\n// Methods\nvar Popper = function () {\n /**\n * Creates a new Popper.js instance.\n * @class Popper\n * @param {Element|referenceObject} reference - The reference element used to position the popper\n * @param {Element} popper - The HTML / XML element used as the popper\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n function Popper(reference, popper) {\n var _this = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n classCallCheck(this, Popper);\n\n this.scheduleUpdate = function () {\n return requestAnimationFrame(_this.update);\n };\n\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = _extends({}, Popper.Defaults, options);\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: []\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n return _extends({\n name: name\n }, _this.options.modifiers[name]);\n })\n // sort the modifiers by order\n .sort(function (a, b) {\n return a.order - b.order;\n });\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(function (modifierOptions) {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n var eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n\n\n createClass(Popper, [{\n key: 'update',\n value: function update$$1() {\n return update.call(this);\n }\n }, {\n key: 'destroy',\n value: function destroy$$1() {\n return destroy.call(this);\n }\n }, {\n key: 'enableEventListeners',\n value: function enableEventListeners$$1() {\n return enableEventListeners.call(this);\n }\n }, {\n key: 'disableEventListeners',\n value: function disableEventListeners$$1() {\n return disableEventListeners.call(this);\n }\n\n /**\n * Schedules an update. It will run on the next UI update available.\n * @method scheduleUpdate\n * @memberof Popper\n */\n\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n\n }]);\n return Popper;\n}();\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.<br />\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10.\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n\n\nPopper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\nPopper.placements = placements;\nPopper.Defaults = Defaults;\n\nexport default Popper;\n//# sourceMappingURL=popper.js.map\n","/*!\n * Select2 4.0.12\n * https://select2.github.io\n *\n * Released under the MIT license\n * https://github.com/select2/select2/blob/master/LICENSE.md\n */\n;(function (factory) {\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(['jquery'], factory);\n } else if (typeof module === 'object' && module.exports) {\n // Node/CommonJS\n module.exports = function (root, jQuery) {\n if (jQuery === undefined) {\n // require('jQuery') returns a factory that requires window to\n // build a jQuery instance, we normalize how we use modules\n // that require this pattern but the window provided is a noop\n // if it's defined (how jquery works)\n if (typeof window !== 'undefined') {\n jQuery = require('jquery');\n }\n else {\n jQuery = require('jquery')(root);\n }\n }\n factory(jQuery);\n return jQuery;\n };\n } else {\n // Browser globals\n factory(jQuery);\n }\n} (function (jQuery) {\n // This is needed so we can catch the AMD loader configuration and use it\n // The inner file should be wrapped (by `banner.start.js`) in a function that\n // returns the AMD loader references.\n var S2 =(function () {\n // Restore the Select2 AMD loader so it can be used\n // Needed mostly in the language files, where the loader is not inserted\n if (jQuery && jQuery.fn && jQuery.fn.select2 && jQuery.fn.select2.amd) {\n var S2 = jQuery.fn.select2.amd;\n }\nvar S2;(function () { if (!S2 || !S2.requirejs) {\nif (!S2) { S2 = {}; } else { require = S2; }\n/**\n * @license almond 0.3.3 Copyright jQuery Foundation and other contributors.\n * Released under MIT license, http://github.com/requirejs/almond/LICENSE\n */\n//Going sloppy to avoid 'use strict' string cost, but strict practices should\n//be followed.\n/*global setTimeout: false */\n\nvar requirejs, require, define;\n(function (undef) {\n var main, req, makeMap, handlers,\n defined = {},\n waiting = {},\n config = {},\n defining = {},\n hasOwn = Object.prototype.hasOwnProperty,\n aps = [].slice,\n jsSuffixRegExp = /\\.js$/;\n\n function hasProp(obj, prop) {\n return hasOwn.call(obj, prop);\n }\n\n /**\n * Given a relative module name, like ./something, normalize it to\n * a real name that can be mapped to a path.\n * @param {String} name the relative name\n * @param {String} baseName a real name that the name arg is relative\n * to.\n * @returns {String} normalized name\n */\n function normalize(name, baseName) {\n var nameParts, nameSegment, mapValue, foundMap, lastIndex,\n foundI, foundStarMap, starI, i, j, part, normalizedBaseParts,\n baseParts = baseName && baseName.split(\"/\"),\n map = config.map,\n starMap = (map && map['*']) || {};\n\n //Adjust any relative paths.\n if (name) {\n name = name.split('/');\n lastIndex = name.length - 1;\n\n // If wanting node ID compatibility, strip .js from end\n // of IDs. Have to do this here, and not in nameToUrl\n // because node allows either .js or non .js to map\n // to same file.\n if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {\n name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');\n }\n\n // Starts with a '.' so need the baseName\n if (name[0].charAt(0) === '.' && baseParts) {\n //Convert baseName to array, and lop off the last part,\n //so that . matches that 'directory' and not name of the baseName's\n //module. For instance, baseName of 'one/two/three', maps to\n //'one/two/three.js', but we want the directory, 'one/two' for\n //this normalization.\n normalizedBaseParts = baseParts.slice(0, baseParts.length - 1);\n name = normalizedBaseParts.concat(name);\n }\n\n //start trimDots\n for (i = 0; i < name.length; i++) {\n part = name[i];\n if (part === '.') {\n name.splice(i, 1);\n i -= 1;\n } else if (part === '..') {\n // If at the start, or previous value is still ..,\n // keep them so that when converted to a path it may\n // still work when converted to a path, even though\n // as an ID it is less than ideal. In larger point\n // releases, may be better to just kick out an error.\n if (i === 0 || (i === 1 && name[2] === '..') || name[i - 1] === '..') {\n continue;\n } else if (i > 0) {\n name.splice(i - 1, 2);\n i -= 2;\n }\n }\n }\n //end trimDots\n\n name = name.join('/');\n }\n\n //Apply map config if available.\n if ((baseParts || starMap) && map) {\n nameParts = name.split('/');\n\n for (i = nameParts.length; i > 0; i -= 1) {\n nameSegment = nameParts.slice(0, i).join(\"/\");\n\n if (baseParts) {\n //Find the longest baseName segment match in the config.\n //So, do joins on the biggest to smallest lengths of baseParts.\n for (j = baseParts.length; j > 0; j -= 1) {\n mapValue = map[baseParts.slice(0, j).join('/')];\n\n //baseName segment has config, find if it has one for\n //this name.\n if (mapValue) {\n mapValue = mapValue[nameSegment];\n if (mapValue) {\n //Match, update name to the new value.\n foundMap = mapValue;\n foundI = i;\n break;\n }\n }\n }\n }\n\n if (foundMap) {\n break;\n }\n\n //Check for a star map match, but just hold on to it,\n //if there is a shorter segment match later in a matching\n //config, then favor over this star map.\n if (!foundStarMap && starMap && starMap[nameSegment]) {\n foundStarMap = starMap[nameSegment];\n starI = i;\n }\n }\n\n if (!foundMap && foundStarMap) {\n foundMap = foundStarMap;\n foundI = starI;\n }\n\n if (foundMap) {\n nameParts.splice(0, foundI, foundMap);\n name = nameParts.join('/');\n }\n }\n\n return name;\n }\n\n function makeRequire(relName, forceSync) {\n return function () {\n //A version of a require function that passes a moduleName\n //value for items that may need to\n //look up paths relative to the moduleName\n var args = aps.call(arguments, 0);\n\n //If first arg is not require('string'), and there is only\n //one arg, it is the array form without a callback. Insert\n //a null so that the following concat is correct.\n if (typeof args[0] !== 'string' && args.length === 1) {\n args.push(null);\n }\n return req.apply(undef, args.concat([relName, forceSync]));\n };\n }\n\n function makeNormalize(relName) {\n return function (name) {\n return normalize(name, relName);\n };\n }\n\n function makeLoad(depName) {\n return function (value) {\n defined[depName] = value;\n };\n }\n\n function callDep(name) {\n if (hasProp(waiting, name)) {\n var args = waiting[name];\n delete waiting[name];\n defining[name] = true;\n main.apply(undef, args);\n }\n\n if (!hasProp(defined, name) && !hasProp(defining, name)) {\n throw new Error('No ' + name);\n }\n return defined[name];\n }\n\n //Turns a plugin!resource to [plugin, resource]\n //with the plugin being undefined if the name\n //did not have a plugin prefix.\n function splitPrefix(name) {\n var prefix,\n index = name ? name.indexOf('!') : -1;\n if (index > -1) {\n prefix = name.substring(0, index);\n name = name.substring(index + 1, name.length);\n }\n return [prefix, name];\n }\n\n //Creates a parts array for a relName where first part is plugin ID,\n //second part is resource ID. Assumes relName has already been normalized.\n function makeRelParts(relName) {\n return relName ? splitPrefix(relName) : [];\n }\n\n /**\n * Makes a name map, normalizing the name, and using a plugin\n * for normalization if necessary. Grabs a ref to plugin\n * too, as an optimization.\n */\n makeMap = function (name, relParts) {\n var plugin,\n parts = splitPrefix(name),\n prefix = parts[0],\n relResourceName = relParts[1];\n\n name = parts[1];\n\n if (prefix) {\n prefix = normalize(prefix, relResourceName);\n plugin = callDep(prefix);\n }\n\n //Normalize according\n if (prefix) {\n if (plugin && plugin.normalize) {\n name = plugin.normalize(name, makeNormalize(relResourceName));\n } else {\n name = normalize(name, relResourceName);\n }\n } else {\n name = normalize(name, relResourceName);\n parts = splitPrefix(name);\n prefix = parts[0];\n name = parts[1];\n if (prefix) {\n plugin = callDep(prefix);\n }\n }\n\n //Using ridiculous property names for space reasons\n return {\n f: prefix ? prefix + '!' + name : name, //fullName\n n: name,\n pr: prefix,\n p: plugin\n };\n };\n\n function makeConfig(name) {\n return function () {\n return (config && config.config && config.config[name]) || {};\n };\n }\n\n handlers = {\n require: function (name) {\n return makeRequire(name);\n },\n exports: function (name) {\n var e = defined[name];\n if (typeof e !== 'undefined') {\n return e;\n } else {\n return (defined[name] = {});\n }\n },\n module: function (name) {\n return {\n id: name,\n uri: '',\n exports: defined[name],\n config: makeConfig(name)\n };\n }\n };\n\n main = function (name, deps, callback, relName) {\n var cjsModule, depName, ret, map, i, relParts,\n args = [],\n callbackType = typeof callback,\n usingExports;\n\n //Use name if no relName\n relName = relName || name;\n relParts = makeRelParts(relName);\n\n //Call the callback to define the module, if necessary.\n if (callbackType === 'undefined' || callbackType === 'function') {\n //Pull out the defined dependencies and pass the ordered\n //values to the callback.\n //Default to [require, exports, module] if no deps\n deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps;\n for (i = 0; i < deps.length; i += 1) {\n map = makeMap(deps[i], relParts);\n depName = map.f;\n\n //Fast path CommonJS standard dependencies.\n if (depName === \"require\") {\n args[i] = handlers.require(name);\n } else if (depName === \"exports\") {\n //CommonJS module spec 1.1\n args[i] = handlers.exports(name);\n usingExports = true;\n } else if (depName === \"module\") {\n //CommonJS module spec 1.1\n cjsModule = args[i] = handlers.module(name);\n } else if (hasProp(defined, depName) ||\n hasProp(waiting, depName) ||\n hasProp(defining, depName)) {\n args[i] = callDep(depName);\n } else if (map.p) {\n map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {});\n args[i] = defined[depName];\n } else {\n throw new Error(name + ' missing ' + depName);\n }\n }\n\n ret = callback ? callback.apply(defined[name], args) : undefined;\n\n if (name) {\n //If setting exports via \"module\" is in play,\n //favor that over return value and exports. After that,\n //favor a non-undefined return value over exports use.\n if (cjsModule && cjsModule.exports !== undef &&\n cjsModule.exports !== defined[name]) {\n defined[name] = cjsModule.exports;\n } else if (ret !== undef || !usingExports) {\n //Use the return value from the function.\n defined[name] = ret;\n }\n }\n } else if (name) {\n //May just be an object definition for the module. Only\n //worry about defining if have a module name.\n defined[name] = callback;\n }\n };\n\n requirejs = require = req = function (deps, callback, relName, forceSync, alt) {\n if (typeof deps === \"string\") {\n if (handlers[deps]) {\n //callback in this case is really relName\n return handlers[deps](callback);\n }\n //Just return the module wanted. In this scenario, the\n //deps arg is the module name, and second arg (if passed)\n //is just the relName.\n //Normalize module name, if it contains . or ..\n return callDep(makeMap(deps, makeRelParts(callback)).f);\n } else if (!deps.splice) {\n //deps is a config object, not an array.\n config = deps;\n if (config.deps) {\n req(config.deps, config.callback);\n }\n if (!callback) {\n return;\n }\n\n if (callback.splice) {\n //callback is an array, which means it is a dependency list.\n //Adjust args if there are dependencies\n deps = callback;\n callback = relName;\n relName = null;\n } else {\n deps = undef;\n }\n }\n\n //Support require(['a'])\n callback = callback || function () {};\n\n //If relName is a function, it is an errback handler,\n //so remove it.\n if (typeof relName === 'function') {\n relName = forceSync;\n forceSync = alt;\n }\n\n //Simulate async callback;\n if (forceSync) {\n main(undef, deps, callback, relName);\n } else {\n //Using a non-zero value because of concern for what old browsers\n //do, and latest browsers \"upgrade\" to 4 if lower value is used:\n //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout:\n //If want a value immediately, use require('id') instead -- something\n //that works in almond on the global level, but not guaranteed and\n //unlikely to work in other AMD implementations.\n setTimeout(function () {\n main(undef, deps, callback, relName);\n }, 4);\n }\n\n return req;\n };\n\n /**\n * Just drops the config on the floor, but returns req in case\n * the config return value is used.\n */\n req.config = function (cfg) {\n return req(cfg);\n };\n\n /**\n * Expose module registry for debugging and tooling\n */\n requirejs._defined = defined;\n\n define = function (name, deps, callback) {\n if (typeof name !== 'string') {\n throw new Error('See almond README: incorrect module build, no module name');\n }\n\n //This module may not have dependencies\n if (!deps.splice) {\n //deps is not an array, so probably means\n //an object literal or factory function for\n //the value. Adjust args.\n callback = deps;\n deps = [];\n }\n\n if (!hasProp(defined, name) && !hasProp(waiting, name)) {\n waiting[name] = [name, deps, callback];\n }\n };\n\n define.amd = {\n jQuery: true\n };\n}());\n\nS2.requirejs = requirejs;S2.require = require;S2.define = define;\n}\n}());\nS2.define(\"almond\", function(){});\n\n/* global jQuery:false, $:false */\nS2.define('jquery',[],function () {\n var _$ = jQuery || $;\n\n if (_$ == null && console && console.error) {\n console.error(\n 'Select2: An instance of jQuery or a jQuery-compatible library was not ' +\n 'found. Make sure that you are including jQuery before Select2 on your ' +\n 'web page.'\n );\n }\n\n return _$;\n});\n\nS2.define('select2/utils',[\n 'jquery'\n], function ($) {\n var Utils = {};\n\n Utils.Extend = function (ChildClass, SuperClass) {\n var __hasProp = {}.hasOwnProperty;\n\n function BaseConstructor () {\n this.constructor = ChildClass;\n }\n\n for (var key in SuperClass) {\n if (__hasProp.call(SuperClass, key)) {\n ChildClass[key] = SuperClass[key];\n }\n }\n\n BaseConstructor.prototype = SuperClass.prototype;\n ChildClass.prototype = new BaseConstructor();\n ChildClass.__super__ = SuperClass.prototype;\n\n return ChildClass;\n };\n\n function getMethods (theClass) {\n var proto = theClass.prototype;\n\n var methods = [];\n\n for (var methodName in proto) {\n var m = proto[methodName];\n\n if (typeof m !== 'function') {\n continue;\n }\n\n if (methodName === 'constructor') {\n continue;\n }\n\n methods.push(methodName);\n }\n\n return methods;\n }\n\n Utils.Decorate = function (SuperClass, DecoratorClass) {\n var decoratedMethods = getMethods(DecoratorClass);\n var superMethods = getMethods(SuperClass);\n\n function DecoratedClass () {\n var unshift = Array.prototype.unshift;\n\n var argCount = DecoratorClass.prototype.constructor.length;\n\n var calledConstructor = SuperClass.prototype.constructor;\n\n if (argCount > 0) {\n unshift.call(arguments, SuperClass.prototype.constructor);\n\n calledConstructor = DecoratorClass.prototype.constructor;\n }\n\n calledConstructor.apply(this, arguments);\n }\n\n DecoratorClass.displayName = SuperClass.displayName;\n\n function ctr () {\n this.constructor = DecoratedClass;\n }\n\n DecoratedClass.prototype = new ctr();\n\n for (var m = 0; m < superMethods.length; m++) {\n var superMethod = superMethods[m];\n\n DecoratedClass.prototype[superMethod] =\n SuperClass.prototype[superMethod];\n }\n\n var calledMethod = function (methodName) {\n // Stub out the original method if it's not decorating an actual method\n var originalMethod = function () {};\n\n if (methodName in DecoratedClass.prototype) {\n originalMethod = DecoratedClass.prototype[methodName];\n }\n\n var decoratedMethod = DecoratorClass.prototype[methodName];\n\n return function () {\n var unshift = Array.prototype.unshift;\n\n unshift.call(arguments, originalMethod);\n\n return decoratedMethod.apply(this, arguments);\n };\n };\n\n for (var d = 0; d < decoratedMethods.length; d++) {\n var decoratedMethod = decoratedMethods[d];\n\n DecoratedClass.prototype[decoratedMethod] = calledMethod(decoratedMethod);\n }\n\n return DecoratedClass;\n };\n\n var Observable = function () {\n this.listeners = {};\n };\n\n Observable.prototype.on = function (event, callback) {\n this.listeners = this.listeners || {};\n\n if (event in this.listeners) {\n this.listeners[event].push(callback);\n } else {\n this.listeners[event] = [callback];\n }\n };\n\n Observable.prototype.trigger = function (event) {\n var slice = Array.prototype.slice;\n var params = slice.call(arguments, 1);\n\n this.listeners = this.listeners || {};\n\n // Params should always come in as an array\n if (params == null) {\n params = [];\n }\n\n // If there are no arguments to the event, use a temporary object\n if (params.length === 0) {\n params.push({});\n }\n\n // Set the `_type` of the first object to the event\n params[0]._type = event;\n\n if (event in this.listeners) {\n this.invoke(this.listeners[event], slice.call(arguments, 1));\n }\n\n if ('*' in this.listeners) {\n this.invoke(this.listeners['*'], arguments);\n }\n };\n\n Observable.prototype.invoke = function (listeners, params) {\n for (var i = 0, len = listeners.length; i < len; i++) {\n listeners[i].apply(this, params);\n }\n };\n\n Utils.Observable = Observable;\n\n Utils.generateChars = function (length) {\n var chars = '';\n\n for (var i = 0; i < length; i++) {\n var randomChar = Math.floor(Math.random() * 36);\n chars += randomChar.toString(36);\n }\n\n return chars;\n };\n\n Utils.bind = function (func, context) {\n return function () {\n func.apply(context, arguments);\n };\n };\n\n Utils._convertData = function (data) {\n for (var originalKey in data) {\n var keys = originalKey.split('-');\n\n var dataLevel = data;\n\n if (keys.length === 1) {\n continue;\n }\n\n for (var k = 0; k < keys.length; k++) {\n var key = keys[k];\n\n // Lowercase the first letter\n // By default, dash-separated becomes camelCase\n key = key.substring(0, 1).toLowerCase() + key.substring(1);\n\n if (!(key in dataLevel)) {\n dataLevel[key] = {};\n }\n\n if (k == keys.length - 1) {\n dataLevel[key] = data[originalKey];\n }\n\n dataLevel = dataLevel[key];\n }\n\n delete data[originalKey];\n }\n\n return data;\n };\n\n Utils.hasScroll = function (index, el) {\n // Adapted from the function created by @ShadowScripter\n // and adapted by @BillBarry on the Stack Exchange Code Review website.\n // The original code can be found at\n // http://codereview.stackexchange.com/q/13338\n // and was designed to be used with the Sizzle selector engine.\n\n var $el = $(el);\n var overflowX = el.style.overflowX;\n var overflowY = el.style.overflowY;\n\n //Check both x and y declarations\n if (overflowX === overflowY &&\n (overflowY === 'hidden' || overflowY === 'visible')) {\n return false;\n }\n\n if (overflowX === 'scroll' || overflowY === 'scroll') {\n return true;\n }\n\n return ($el.innerHeight() < el.scrollHeight ||\n $el.innerWidth() < el.scrollWidth);\n };\n\n Utils.escapeMarkup = function (markup) {\n var replaceMap = {\n '\\\\': '\',\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n '\\'': ''',\n '/': '/'\n };\n\n // Do not try to escape the markup if it's not a string\n if (typeof markup !== 'string') {\n return markup;\n }\n\n return String(markup).replace(/[&<>\"'\\/\\\\]/g, function (match) {\n return replaceMap[match];\n });\n };\n\n // Append an array of jQuery nodes to a given element.\n Utils.appendMany = function ($element, $nodes) {\n // jQuery 1.7.x does not support $.fn.append() with an array\n // Fall back to a jQuery object collection using $.fn.add()\n if ($.fn.jquery.substr(0, 3) === '1.7') {\n var $jqNodes = $();\n\n $.map($nodes, function (node) {\n $jqNodes = $jqNodes.add(node);\n });\n\n $nodes = $jqNodes;\n }\n\n $element.append($nodes);\n };\n\n // Cache objects in Utils.__cache instead of $.data (see #4346)\n Utils.__cache = {};\n\n var id = 0;\n Utils.GetUniqueElementId = function (element) {\n // Get a unique element Id. If element has no id,\n // creates a new unique number, stores it in the id\n // attribute and returns the new id.\n // If an id already exists, it simply returns it.\n\n var select2Id = element.getAttribute('data-select2-id');\n if (select2Id == null) {\n // If element has id, use it.\n if (element.id) {\n select2Id = element.id;\n element.setAttribute('data-select2-id', select2Id);\n } else {\n element.setAttribute('data-select2-id', ++id);\n select2Id = id.toString();\n }\n }\n return select2Id;\n };\n\n Utils.StoreData = function (element, name, value) {\n // Stores an item in the cache for a specified element.\n // name is the cache key.\n var id = Utils.GetUniqueElementId(element);\n if (!Utils.__cache[id]) {\n Utils.__cache[id] = {};\n }\n\n Utils.__cache[id][name] = value;\n };\n\n Utils.GetData = function (element, name) {\n // Retrieves a value from the cache by its key (name)\n // name is optional. If no name specified, return\n // all cache items for the specified element.\n // and for a specified element.\n var id = Utils.GetUniqueElementId(element);\n if (name) {\n if (Utils.__cache[id]) {\n if (Utils.__cache[id][name] != null) {\n return Utils.__cache[id][name];\n }\n return $(element).data(name); // Fallback to HTML5 data attribs.\n }\n return $(element).data(name); // Fallback to HTML5 data attribs.\n } else {\n return Utils.__cache[id];\n }\n };\n\n Utils.RemoveData = function (element) {\n // Removes all cached items for a specified element.\n var id = Utils.GetUniqueElementId(element);\n if (Utils.__cache[id] != null) {\n delete Utils.__cache[id];\n }\n\n element.removeAttribute('data-select2-id');\n };\n\n return Utils;\n});\n\nS2.define('select2/results',[\n 'jquery',\n './utils'\n], function ($, Utils) {\n function Results ($element, options, dataAdapter) {\n this.$element = $element;\n this.data = dataAdapter;\n this.options = options;\n\n Results.__super__.constructor.call(this);\n }\n\n Utils.Extend(Results, Utils.Observable);\n\n Results.prototype.render = function () {\n var $results = $(\n '<ul class=\"select2-results__options\" role=\"listbox\"></ul>'\n );\n\n if (this.options.get('multiple')) {\n $results.attr('aria-multiselectable', 'true');\n }\n\n this.$results = $results;\n\n return $results;\n };\n\n Results.prototype.clear = function () {\n this.$results.empty();\n };\n\n Results.prototype.displayMessage = function (params) {\n var escapeMarkup = this.options.get('escapeMarkup');\n\n this.clear();\n this.hideLoading();\n\n var $message = $(\n '<li role=\"alert\" aria-live=\"assertive\"' +\n ' class=\"select2-results__option\"></li>'\n );\n\n var message = this.options.get('translations').get(params.message);\n\n $message.append(\n escapeMarkup(\n message(params.args)\n )\n );\n\n $message[0].className += ' select2-results__message';\n\n this.$results.append($message);\n };\n\n Results.prototype.hideMessages = function () {\n this.$results.find('.select2-results__message').remove();\n };\n\n Results.prototype.append = function (data) {\n this.hideLoading();\n\n var $options = [];\n\n if (data.results == null || data.results.length === 0) {\n if (this.$results.children().length === 0) {\n this.trigger('results:message', {\n message: 'noResults'\n });\n }\n\n return;\n }\n\n data.results = this.sort(data.results);\n\n for (var d = 0; d < data.results.length; d++) {\n var item = data.results[d];\n\n var $option = this.option(item);\n\n $options.push($option);\n }\n\n this.$results.append($options);\n };\n\n Results.prototype.position = function ($results, $dropdown) {\n var $resultsContainer = $dropdown.find('.select2-results');\n $resultsContainer.append($results);\n };\n\n Results.prototype.sort = function (data) {\n var sorter = this.options.get('sorter');\n\n return sorter(data);\n };\n\n Results.prototype.highlightFirstItem = function () {\n var $options = this.$results\n .find('.select2-results__option[aria-selected]');\n\n var $selected = $options.filter('[aria-selected=true]');\n\n // Check if there are any selected options\n if ($selected.length > 0) {\n // If there are selected options, highlight the first\n $selected.first().trigger('mouseenter');\n } else {\n // If there are no selected options, highlight the first option\n // in the dropdown\n $options.first().trigger('mouseenter');\n }\n\n this.ensureHighlightVisible();\n };\n\n Results.prototype.setClasses = function () {\n var self = this;\n\n this.data.current(function (selected) {\n var selectedIds = $.map(selected, function (s) {\n return s.id.toString();\n });\n\n var $options = self.$results\n .find('.select2-results__option[aria-selected]');\n\n $options.each(function () {\n var $option = $(this);\n\n var item = Utils.GetData(this, 'data');\n\n // id needs to be converted to a string when comparing\n var id = '' + item.id;\n\n if ((item.element != null && item.element.selected) ||\n (item.element == null && $.inArray(id, selectedIds) > -1)) {\n $option.attr('aria-selected', 'true');\n } else {\n $option.attr('aria-selected', 'false');\n }\n });\n\n });\n };\n\n Results.prototype.showLoading = function (params) {\n this.hideLoading();\n\n var loadingMore = this.options.get('translations').get('searching');\n\n var loading = {\n disabled: true,\n loading: true,\n text: loadingMore(params)\n };\n var $loading = this.option(loading);\n $loading.className += ' loading-results';\n\n this.$results.prepend($loading);\n };\n\n Results.prototype.hideLoading = function () {\n this.$results.find('.loading-results').remove();\n };\n\n Results.prototype.option = function (data) {\n var option = document.createElement('li');\n option.className = 'select2-results__option';\n\n var attrs = {\n 'role': 'option',\n 'aria-selected': 'false'\n };\n\n var matches = window.Element.prototype.matches ||\n window.Element.prototype.msMatchesSelector ||\n window.Element.prototype.webkitMatchesSelector;\n\n if ((data.element != null && matches.call(data.element, ':disabled')) ||\n (data.element == null && data.disabled)) {\n delete attrs['aria-selected'];\n attrs['aria-disabled'] = 'true';\n }\n\n if (data.id == null) {\n delete attrs['aria-selected'];\n }\n\n if (data._resultId != null) {\n option.id = data._resultId;\n }\n\n if (data.title) {\n option.title = data.title;\n }\n\n if (data.children) {\n attrs.role = 'group';\n attrs['aria-label'] = data.text;\n delete attrs['aria-selected'];\n }\n\n for (var attr in attrs) {\n var val = attrs[attr];\n\n option.setAttribute(attr, val);\n }\n\n if (data.children) {\n var $option = $(option);\n\n var label = document.createElement('strong');\n label.className = 'select2-results__group';\n\n var $label = $(label);\n this.template(data, label);\n\n var $children = [];\n\n for (var c = 0; c < data.children.length; c++) {\n var child = data.children[c];\n\n var $child = this.option(child);\n\n $children.push($child);\n }\n\n var $childrenContainer = $('<ul></ul>', {\n 'class': 'select2-results__options select2-results__options--nested'\n });\n\n $childrenContainer.append($children);\n\n $option.append(label);\n $option.append($childrenContainer);\n } else {\n this.template(data, option);\n }\n\n Utils.StoreData(option, 'data', data);\n\n return option;\n };\n\n Results.prototype.bind = function (container, $container) {\n var self = this;\n\n var id = container.id + '-results';\n\n this.$results.attr('id', id);\n\n container.on('results:all', function (params) {\n self.clear();\n self.append(params.data);\n\n if (container.isOpen()) {\n self.setClasses();\n self.highlightFirstItem();\n }\n });\n\n container.on('results:append', function (params) {\n self.append(params.data);\n\n if (container.isOpen()) {\n self.setClasses();\n }\n });\n\n container.on('query', function (params) {\n self.hideMessages();\n self.showLoading(params);\n });\n\n container.on('select', function () {\n if (!container.isOpen()) {\n return;\n }\n\n self.setClasses();\n\n if (self.options.get('scrollAfterSelect')) {\n self.highlightFirstItem();\n }\n });\n\n container.on('unselect', function () {\n if (!container.isOpen()) {\n return;\n }\n\n self.setClasses();\n\n if (self.options.get('scrollAfterSelect')) {\n self.highlightFirstItem();\n }\n });\n\n container.on('open', function () {\n // When the dropdown is open, aria-expended=\"true\"\n self.$results.attr('aria-expanded', 'true');\n self.$results.attr('aria-hidden', 'false');\n\n self.setClasses();\n self.ensureHighlightVisible();\n });\n\n container.on('close', function () {\n // When the dropdown is closed, aria-expended=\"false\"\n self.$results.attr('aria-expanded', 'false');\n self.$results.attr('aria-hidden', 'true');\n self.$results.removeAttr('aria-activedescendant');\n });\n\n container.on('results:toggle', function () {\n var $highlighted = self.getHighlightedResults();\n\n if ($highlighted.length === 0) {\n return;\n }\n\n $highlighted.trigger('mouseup');\n });\n\n container.on('results:select', function () {\n var $highlighted = self.getHighlightedResults();\n\n if ($highlighted.length === 0) {\n return;\n }\n\n var data = Utils.GetData($highlighted[0], 'data');\n\n if ($highlighted.attr('aria-selected') == 'true') {\n self.trigger('close', {});\n } else {\n self.trigger('select', {\n data: data\n });\n }\n });\n\n container.on('results:previous', function () {\n var $highlighted = self.getHighlightedResults();\n\n var $options = self.$results.find('[aria-selected]');\n\n var currentIndex = $options.index($highlighted);\n\n // If we are already at the top, don't move further\n // If no options, currentIndex will be -1\n if (currentIndex <= 0) {\n return;\n }\n\n var nextIndex = currentIndex - 1;\n\n // If none are highlighted, highlight the first\n if ($highlighted.length === 0) {\n nextIndex = 0;\n }\n\n var $next = $options.eq(nextIndex);\n\n $next.trigger('mouseenter');\n\n var currentOffset = self.$results.offset().top;\n var nextTop = $next.offset().top;\n var nextOffset = self.$results.scrollTop() + (nextTop - currentOffset);\n\n if (nextIndex === 0) {\n self.$results.scrollTop(0);\n } else if (nextTop - currentOffset < 0) {\n self.$results.scrollTop(nextOffset);\n }\n });\n\n container.on('results:next', function () {\n var $highlighted = self.getHighlightedResults();\n\n var $options = self.$results.find('[aria-selected]');\n\n var currentIndex = $options.index($highlighted);\n\n var nextIndex = currentIndex + 1;\n\n // If we are at the last option, stay there\n if (nextIndex >= $options.length) {\n return;\n }\n\n var $next = $options.eq(nextIndex);\n\n $next.trigger('mouseenter');\n\n var currentOffset = self.$results.offset().top +\n self.$results.outerHeight(false);\n var nextBottom = $next.offset().top + $next.outerHeight(false);\n var nextOffset = self.$results.scrollTop() + nextBottom - currentOffset;\n\n if (nextIndex === 0) {\n self.$results.scrollTop(0);\n } else if (nextBottom > currentOffset) {\n self.$results.scrollTop(nextOffset);\n }\n });\n\n container.on('results:focus', function (params) {\n params.element.addClass('select2-results__option--highlighted');\n });\n\n container.on('results:message', function (params) {\n self.displayMessage(params);\n });\n\n if ($.fn.mousewheel) {\n this.$results.on('mousewheel', function (e) {\n var top = self.$results.scrollTop();\n\n var bottom = self.$results.get(0).scrollHeight - top + e.deltaY;\n\n var isAtTop = e.deltaY > 0 && top - e.deltaY <= 0;\n var isAtBottom = e.deltaY < 0 && bottom <= self.$results.height();\n\n if (isAtTop) {\n self.$results.scrollTop(0);\n\n e.preventDefault();\n e.stopPropagation();\n } else if (isAtBottom) {\n self.$results.scrollTop(\n self.$results.get(0).scrollHeight - self.$results.height()\n );\n\n e.preventDefault();\n e.stopPropagation();\n }\n });\n }\n\n this.$results.on('mouseup', '.select2-results__option[aria-selected]',\n function (evt) {\n var $this = $(this);\n\n var data = Utils.GetData(this, 'data');\n\n if ($this.attr('aria-selected') === 'true') {\n if (self.options.get('multiple')) {\n self.trigger('unselect', {\n originalEvent: evt,\n data: data\n });\n } else {\n self.trigger('close', {});\n }\n\n return;\n }\n\n self.trigger('select', {\n originalEvent: evt,\n data: data\n });\n });\n\n this.$results.on('mouseenter', '.select2-results__option[aria-selected]',\n function (evt) {\n var data = Utils.GetData(this, 'data');\n\n self.getHighlightedResults()\n .removeClass('select2-results__option--highlighted');\n\n self.trigger('results:focus', {\n data: data,\n element: $(this)\n });\n });\n };\n\n Results.prototype.getHighlightedResults = function () {\n var $highlighted = this.$results\n .find('.select2-results__option--highlighted');\n\n return $highlighted;\n };\n\n Results.prototype.destroy = function () {\n this.$results.remove();\n };\n\n Results.prototype.ensureHighlightVisible = function () {\n var $highlighted = this.getHighlightedResults();\n\n if ($highlighted.length === 0) {\n return;\n }\n\n var $options = this.$results.find('[aria-selected]');\n\n var currentIndex = $options.index($highlighted);\n\n var currentOffset = this.$results.offset().top;\n var nextTop = $highlighted.offset().top;\n var nextOffset = this.$results.scrollTop() + (nextTop - currentOffset);\n\n var offsetDelta = nextTop - currentOffset;\n nextOffset -= $highlighted.outerHeight(false) * 2;\n\n if (currentIndex <= 2) {\n this.$results.scrollTop(0);\n } else if (offsetDelta > this.$results.outerHeight() || offsetDelta < 0) {\n this.$results.scrollTop(nextOffset);\n }\n };\n\n Results.prototype.template = function (result, container) {\n var template = this.options.get('templateResult');\n var escapeMarkup = this.options.get('escapeMarkup');\n\n var content = template(result, container);\n\n if (content == null) {\n container.style.display = 'none';\n } else if (typeof content === 'string') {\n container.innerHTML = escapeMarkup(content);\n } else {\n $(container).append(content);\n }\n };\n\n return Results;\n});\n\nS2.define('select2/keys',[\n\n], function () {\n var KEYS = {\n BACKSPACE: 8,\n TAB: 9,\n ENTER: 13,\n SHIFT: 16,\n CTRL: 17,\n ALT: 18,\n ESC: 27,\n SPACE: 32,\n PAGE_UP: 33,\n PAGE_DOWN: 34,\n END: 35,\n HOME: 36,\n LEFT: 37,\n UP: 38,\n RIGHT: 39,\n DOWN: 40,\n DELETE: 46\n };\n\n return KEYS;\n});\n\nS2.define('select2/selection/base',[\n 'jquery',\n '../utils',\n '../keys'\n], function ($, Utils, KEYS) {\n function BaseSelection ($element, options) {\n this.$element = $element;\n this.options = options;\n\n BaseSelection.__super__.constructor.call(this);\n }\n\n Utils.Extend(BaseSelection, Utils.Observable);\n\n BaseSelection.prototype.render = function () {\n var $selection = $(\n '<span class=\"select2-selection\" role=\"combobox\" ' +\n ' aria-haspopup=\"true\" aria-expanded=\"false\">' +\n '</span>'\n );\n\n this._tabindex = 0;\n\n if (Utils.GetData(this.$element[0], 'old-tabindex') != null) {\n this._tabindex = Utils.GetData(this.$element[0], 'old-tabindex');\n } else if (this.$element.attr('tabindex') != null) {\n this._tabindex = this.$element.attr('tabindex');\n }\n\n $selection.attr('title', this.$element.attr('title'));\n $selection.attr('tabindex', this._tabindex);\n $selection.attr('aria-disabled', 'false');\n\n this.$selection = $selection;\n\n return $selection;\n };\n\n BaseSelection.prototype.bind = function (container, $container) {\n var self = this;\n\n var resultsId = container.id + '-results';\n\n this.container = container;\n\n this.$selection.on('focus', function (evt) {\n self.trigger('focus', evt);\n });\n\n this.$selection.on('blur', function (evt) {\n self._handleBlur(evt);\n });\n\n this.$selection.on('keydown', function (evt) {\n self.trigger('keypress', evt);\n\n if (evt.which === KEYS.SPACE) {\n evt.preventDefault();\n }\n });\n\n container.on('results:focus', function (params) {\n self.$selection.attr('aria-activedescendant', params.data._resultId);\n });\n\n container.on('selection:update', function (params) {\n self.update(params.data);\n });\n\n container.on('open', function () {\n // When the dropdown is open, aria-expanded=\"true\"\n self.$selection.attr('aria-expanded', 'true');\n self.$selection.attr('aria-owns', resultsId);\n\n self._attachCloseHandler(container);\n });\n\n container.on('close', function () {\n // When the dropdown is closed, aria-expanded=\"false\"\n self.$selection.attr('aria-expanded', 'false');\n self.$selection.removeAttr('aria-activedescendant');\n self.$selection.removeAttr('aria-owns');\n\n self.$selection.trigger('focus');\n\n self._detachCloseHandler(container);\n });\n\n container.on('enable', function () {\n self.$selection.attr('tabindex', self._tabindex);\n self.$selection.attr('aria-disabled', 'false');\n });\n\n container.on('disable', function () {\n self.$selection.attr('tabindex', '-1');\n self.$selection.attr('aria-disabled', 'true');\n });\n };\n\n BaseSelection.prototype._handleBlur = function (evt) {\n var self = this;\n\n // This needs to be delayed as the active element is the body when the tab\n // key is pressed, possibly along with others.\n window.setTimeout(function () {\n // Don't trigger `blur` if the focus is still in the selection\n if (\n (document.activeElement == self.$selection[0]) ||\n ($.contains(self.$selection[0], document.activeElement))\n ) {\n return;\n }\n\n self.trigger('blur', evt);\n }, 1);\n };\n\n BaseSelection.prototype._attachCloseHandler = function (container) {\n\n $(document.body).on('mousedown.select2.' + container.id, function (e) {\n var $target = $(e.target);\n\n var $select = $target.closest('.select2');\n\n var $all = $('.select2.select2-container--open');\n\n $all.each(function () {\n if (this == $select[0]) {\n return;\n }\n\n var $element = Utils.GetData(this, 'element');\n\n $element.select2('close');\n });\n });\n };\n\n BaseSelection.prototype._detachCloseHandler = function (container) {\n $(document.body).off('mousedown.select2.' + container.id);\n };\n\n BaseSelection.prototype.position = function ($selection, $container) {\n var $selectionContainer = $container.find('.selection');\n $selectionContainer.append($selection);\n };\n\n BaseSelection.prototype.destroy = function () {\n this._detachCloseHandler(this.container);\n };\n\n BaseSelection.prototype.update = function (data) {\n throw new Error('The `update` method must be defined in child classes.');\n };\n\n return BaseSelection;\n});\n\nS2.define('select2/selection/single',[\n 'jquery',\n './base',\n '../utils',\n '../keys'\n], function ($, BaseSelection, Utils, KEYS) {\n function SingleSelection () {\n SingleSelection.__super__.constructor.apply(this, arguments);\n }\n\n Utils.Extend(SingleSelection, BaseSelection);\n\n SingleSelection.prototype.render = function () {\n var $selection = SingleSelection.__super__.render.call(this);\n\n $selection.addClass('select2-selection--single');\n\n $selection.html(\n '<span class=\"select2-selection__rendered\"></span>' +\n '<span class=\"select2-selection__arrow\" role=\"presentation\">' +\n '<b role=\"presentation\"></b>' +\n '</span>'\n );\n\n return $selection;\n };\n\n SingleSelection.prototype.bind = function (container, $container) {\n var self = this;\n\n SingleSelection.__super__.bind.apply(this, arguments);\n\n var id = container.id + '-container';\n\n this.$selection.find('.select2-selection__rendered')\n .attr('id', id)\n .attr('role', 'textbox')\n .attr('aria-readonly', 'true');\n this.$selection.attr('aria-labelledby', id);\n\n this.$selection.on('mousedown', function (evt) {\n // Only respond to left clicks\n if (evt.which !== 1) {\n return;\n }\n\n self.trigger('toggle', {\n originalEvent: evt\n });\n });\n\n this.$selection.on('focus', function (evt) {\n // User focuses on the container\n });\n\n this.$selection.on('blur', function (evt) {\n // User exits the container\n });\n\n container.on('focus', function (evt) {\n if (!container.isOpen()) {\n self.$selection.trigger('focus');\n }\n });\n };\n\n SingleSelection.prototype.clear = function () {\n var $rendered = this.$selection.find('.select2-selection__rendered');\n $rendered.empty();\n $rendered.removeAttr('title'); // clear tooltip on empty\n };\n\n SingleSelection.prototype.display = function (data, container) {\n var template = this.options.get('templateSelection');\n var escapeMarkup = this.options.get('escapeMarkup');\n\n return escapeMarkup(template(data, container));\n };\n\n SingleSelection.prototype.selectionContainer = function () {\n return $('<span></span>');\n };\n\n SingleSelection.prototype.update = function (data) {\n if (data.length === 0) {\n this.clear();\n return;\n }\n\n var selection = data[0];\n\n var $rendered = this.$selection.find('.select2-selection__rendered');\n var formatted = this.display(selection, $rendered);\n\n $rendered.empty().append(formatted);\n\n var title = selection.title || selection.text;\n\n if (title) {\n $rendered.attr('title', title);\n } else {\n $rendered.removeAttr('title');\n }\n };\n\n return SingleSelection;\n});\n\nS2.define('select2/selection/multiple',[\n 'jquery',\n './base',\n '../utils'\n], function ($, BaseSelection, Utils) {\n function MultipleSelection ($element, options) {\n MultipleSelection.__super__.constructor.apply(this, arguments);\n }\n\n Utils.Extend(MultipleSelection, BaseSelection);\n\n MultipleSelection.prototype.render = function () {\n var $selection = MultipleSelection.__super__.render.call(this);\n\n $selection.addClass('select2-selection--multiple');\n\n $selection.html(\n '<ul class=\"select2-selection__rendered\"></ul>'\n );\n\n return $selection;\n };\n\n MultipleSelection.prototype.bind = function (container, $container) {\n var self = this;\n\n MultipleSelection.__super__.bind.apply(this, arguments);\n\n this.$selection.on('click', function (evt) {\n self.trigger('toggle', {\n originalEvent: evt\n });\n });\n\n this.$selection.on(\n 'click',\n '.select2-selection__choice__remove',\n function (evt) {\n // Ignore the event if it is disabled\n if (self.options.get('disabled')) {\n return;\n }\n\n var $remove = $(this);\n var $selection = $remove.parent();\n\n var data = Utils.GetData($selection[0], 'data');\n\n self.trigger('unselect', {\n originalEvent: evt,\n data: data\n });\n }\n );\n };\n\n MultipleSelection.prototype.clear = function () {\n var $rendered = this.$selection.find('.select2-selection__rendered');\n $rendered.empty();\n $rendered.removeAttr('title');\n };\n\n MultipleSelection.prototype.display = function (data, container) {\n var template = this.options.get('templateSelection');\n var escapeMarkup = this.options.get('escapeMarkup');\n\n return escapeMarkup(template(data, container));\n };\n\n MultipleSelection.prototype.selectionContainer = function () {\n var $container = $(\n '<li class=\"select2-selection__choice\">' +\n '<span class=\"select2-selection__choice__remove\" role=\"presentation\">' +\n '×' +\n '</span>' +\n '</li>'\n );\n\n return $container;\n };\n\n MultipleSelection.prototype.update = function (data) {\n this.clear();\n\n if (data.length === 0) {\n return;\n }\n\n var $selections = [];\n\n for (var d = 0; d < data.length; d++) {\n var selection = data[d];\n\n var $selection = this.selectionContainer();\n var formatted = this.display(selection, $selection);\n\n $selection.append(formatted);\n\n var title = selection.title || selection.text;\n\n if (title) {\n $selection.attr('title', title);\n }\n\n Utils.StoreData($selection[0], 'data', selection);\n\n $selections.push($selection);\n }\n\n var $rendered = this.$selection.find('.select2-selection__rendered');\n\n Utils.appendMany($rendered, $selections);\n };\n\n return MultipleSelection;\n});\n\nS2.define('select2/selection/placeholder',[\n '../utils'\n], function (Utils) {\n function Placeholder (decorated, $element, options) {\n this.placeholder = this.normalizePlaceholder(options.get('placeholder'));\n\n decorated.call(this, $element, options);\n }\n\n Placeholder.prototype.normalizePlaceholder = function (_, placeholder) {\n if (typeof placeholder === 'string') {\n placeholder = {\n id: '',\n text: placeholder\n };\n }\n\n return placeholder;\n };\n\n Placeholder.prototype.createPlaceholder = function (decorated, placeholder) {\n var $placeholder = this.selectionContainer();\n\n $placeholder.html(this.display(placeholder));\n $placeholder.addClass('select2-selection__placeholder')\n .removeClass('select2-selection__choice');\n\n return $placeholder;\n };\n\n Placeholder.prototype.update = function (decorated, data) {\n var singlePlaceholder = (\n data.length == 1 && data[0].id != this.placeholder.id\n );\n var multipleSelections = data.length > 1;\n\n if (multipleSelections || singlePlaceholder) {\n return decorated.call(this, data);\n }\n\n this.clear();\n\n var $placeholder = this.createPlaceholder(this.placeholder);\n\n this.$selection.find('.select2-selection__rendered').append($placeholder);\n };\n\n return Placeholder;\n});\n\nS2.define('select2/selection/allowClear',[\n 'jquery',\n '../keys',\n '../utils'\n], function ($, KEYS, Utils) {\n function AllowClear () { }\n\n AllowClear.prototype.bind = function (decorated, container, $container) {\n var self = this;\n\n decorated.call(this, container, $container);\n\n if (this.placeholder == null) {\n if (this.options.get('debug') && window.console && console.error) {\n console.error(\n 'Select2: The `allowClear` option should be used in combination ' +\n 'with the `placeholder` option.'\n );\n }\n }\n\n this.$selection.on('mousedown', '.select2-selection__clear',\n function (evt) {\n self._handleClear(evt);\n });\n\n container.on('keypress', function (evt) {\n self._handleKeyboardClear(evt, container);\n });\n };\n\n AllowClear.prototype._handleClear = function (_, evt) {\n // Ignore the event if it is disabled\n if (this.options.get('disabled')) {\n return;\n }\n\n var $clear = this.$selection.find('.select2-selection__clear');\n\n // Ignore the event if nothing has been selected\n if ($clear.length === 0) {\n return;\n }\n\n evt.stopPropagation();\n\n var data = Utils.GetData($clear[0], 'data');\n\n var previousVal = this.$element.val();\n this.$element.val(this.placeholder.id);\n\n var unselectData = {\n data: data\n };\n this.trigger('clear', unselectData);\n if (unselectData.prevented) {\n this.$element.val(previousVal);\n return;\n }\n\n for (var d = 0; d < data.length; d++) {\n unselectData = {\n data: data[d]\n };\n\n // Trigger the `unselect` event, so people can prevent it from being\n // cleared.\n this.trigger('unselect', unselectData);\n\n // If the event was prevented, don't clear it out.\n if (unselectData.prevented) {\n this.$element.val(previousVal);\n return;\n }\n }\n\n this.$element.trigger('change');\n\n this.trigger('toggle', {});\n };\n\n AllowClear.prototype._handleKeyboardClear = function (_, evt, container) {\n if (container.isOpen()) {\n return;\n }\n\n if (evt.which == KEYS.DELETE || evt.which == KEYS.BACKSPACE) {\n this._handleClear(evt);\n }\n };\n\n AllowClear.prototype.update = function (decorated, data) {\n decorated.call(this, data);\n\n if (this.$selection.find('.select2-selection__placeholder').length > 0 ||\n data.length === 0) {\n return;\n }\n\n var removeAll = this.options.get('translations').get('removeAllItems'); \n\n var $remove = $(\n '<span class=\"select2-selection__clear\" title=\"' + removeAll() +'\">' +\n '×' +\n '</span>'\n );\n Utils.StoreData($remove[0], 'data', data);\n\n this.$selection.find('.select2-selection__rendered').prepend($remove);\n };\n\n return AllowClear;\n});\n\nS2.define('select2/selection/search',[\n 'jquery',\n '../utils',\n '../keys'\n], function ($, Utils, KEYS) {\n function Search (decorated, $element, options) {\n decorated.call(this, $element, options);\n }\n\n Search.prototype.render = function (decorated) {\n var $search = $(\n '<li class=\"select2-search select2-search--inline\">' +\n '<input class=\"select2-search__field\" type=\"search\" tabindex=\"-1\"' +\n ' autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"none\"' +\n ' spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" />' +\n '</li>'\n );\n\n this.$searchContainer = $search;\n this.$search = $search.find('input');\n\n var $rendered = decorated.call(this);\n\n this._transferTabIndex();\n\n return $rendered;\n };\n\n Search.prototype.bind = function (decorated, container, $container) {\n var self = this;\n\n var resultsId = container.id + '-results';\n\n decorated.call(this, container, $container);\n\n container.on('open', function () {\n self.$search.attr('aria-controls', resultsId);\n self.$search.trigger('focus');\n });\n\n container.on('close', function () {\n self.$search.val('');\n self.$search.removeAttr('aria-controls');\n self.$search.removeAttr('aria-activedescendant');\n self.$search.trigger('focus');\n });\n\n container.on('enable', function () {\n self.$search.prop('disabled', false);\n\n self._transferTabIndex();\n });\n\n container.on('disable', function () {\n self.$search.prop('disabled', true);\n });\n\n container.on('focus', function (evt) {\n self.$search.trigger('focus');\n });\n\n container.on('results:focus', function (params) {\n if (params.data._resultId) {\n self.$search.attr('aria-activedescendant', params.data._resultId);\n } else {\n self.$search.removeAttr('aria-activedescendant');\n }\n });\n\n this.$selection.on('focusin', '.select2-search--inline', function (evt) {\n self.trigger('focus', evt);\n });\n\n this.$selection.on('focusout', '.select2-search--inline', function (evt) {\n self._handleBlur(evt);\n });\n\n this.$selection.on('keydown', '.select2-search--inline', function (evt) {\n evt.stopPropagation();\n\n self.trigger('keypress', evt);\n\n self._keyUpPrevented = evt.isDefaultPrevented();\n\n var key = evt.which;\n\n if (key === KEYS.BACKSPACE && self.$search.val() === '') {\n var $previousChoice = self.$searchContainer\n .prev('.select2-selection__choice');\n\n if ($previousChoice.length > 0) {\n var item = Utils.GetData($previousChoice[0], 'data');\n\n self.searchRemoveChoice(item);\n\n evt.preventDefault();\n }\n }\n });\n\n this.$selection.on('click', '.select2-search--inline', function (evt) {\n if (self.$search.val()) {\n evt.stopPropagation();\n }\n });\n\n // Try to detect the IE version should the `documentMode` property that\n // is stored on the document. This is only implemented in IE and is\n // slightly cleaner than doing a user agent check.\n // This property is not available in Edge, but Edge also doesn't have\n // this bug.\n var msie = document.documentMode;\n var disableInputEvents = msie && msie <= 11;\n\n // Workaround for browsers which do not support the `input` event\n // This will prevent double-triggering of events for browsers which support\n // both the `keyup` and `input` events.\n this.$selection.on(\n 'input.searchcheck',\n '.select2-search--inline',\n function (evt) {\n // IE will trigger the `input` event when a placeholder is used on a\n // search box. To get around this issue, we are forced to ignore all\n // `input` events in IE and keep using `keyup`.\n if (disableInputEvents) {\n self.$selection.off('input.search input.searchcheck');\n return;\n }\n\n // Unbind the duplicated `keyup` event\n self.$selection.off('keyup.search');\n }\n );\n\n this.$selection.on(\n 'keyup.search input.search',\n '.select2-search--inline',\n function (evt) {\n // IE will trigger the `input` event when a placeholder is used on a\n // search box. To get around this issue, we are forced to ignore all\n // `input` events in IE and keep using `keyup`.\n if (disableInputEvents && evt.type === 'input') {\n self.$selection.off('input.search input.searchcheck');\n return;\n }\n\n var key = evt.which;\n\n // We can freely ignore events from modifier keys\n if (key == KEYS.SHIFT || key == KEYS.CTRL || key == KEYS.ALT) {\n return;\n }\n\n // Tabbing will be handled during the `keydown` phase\n if (key == KEYS.TAB) {\n return;\n }\n\n self.handleSearch(evt);\n }\n );\n };\n\n /**\n * This method will transfer the tabindex attribute from the rendered\n * selection to the search box. This allows for the search box to be used as\n * the primary focus instead of the selection container.\n *\n * @private\n */\n Search.prototype._transferTabIndex = function (decorated) {\n this.$search.attr('tabindex', this.$selection.attr('tabindex'));\n this.$selection.attr('tabindex', '-1');\n };\n\n Search.prototype.createPlaceholder = function (decorated, placeholder) {\n this.$search.attr('placeholder', placeholder.text);\n };\n\n Search.prototype.update = function (decorated, data) {\n var searchHadFocus = this.$search[0] == document.activeElement;\n\n this.$search.attr('placeholder', '');\n\n decorated.call(this, data);\n\n this.$selection.find('.select2-selection__rendered')\n .append(this.$searchContainer);\n\n this.resizeSearch();\n if (searchHadFocus) {\n this.$search.trigger('focus');\n }\n };\n\n Search.prototype.handleSearch = function () {\n this.resizeSearch();\n\n if (!this._keyUpPrevented) {\n var input = this.$search.val();\n\n this.trigger('query', {\n term: input\n });\n }\n\n this._keyUpPrevented = false;\n };\n\n Search.prototype.searchRemoveChoice = function (decorated, item) {\n this.trigger('unselect', {\n data: item\n });\n\n this.$search.val(item.text);\n this.handleSearch();\n };\n\n Search.prototype.resizeSearch = function () {\n this.$search.css('width', '25px');\n\n var width = '';\n\n if (this.$search.attr('placeholder') !== '') {\n width = this.$selection.find('.select2-selection__rendered').width();\n } else {\n var minimumWidth = this.$search.val().length + 1;\n\n width = (minimumWidth * 0.75) + 'em';\n }\n\n this.$search.css('width', width);\n };\n\n return Search;\n});\n\nS2.define('select2/selection/eventRelay',[\n 'jquery'\n], function ($) {\n function EventRelay () { }\n\n EventRelay.prototype.bind = function (decorated, container, $container) {\n var self = this;\n var relayEvents = [\n 'open', 'opening',\n 'close', 'closing',\n 'select', 'selecting',\n 'unselect', 'unselecting',\n 'clear', 'clearing'\n ];\n\n var preventableEvents = [\n 'opening', 'closing', 'selecting', 'unselecting', 'clearing'\n ];\n\n decorated.call(this, container, $container);\n\n container.on('*', function (name, params) {\n // Ignore events that should not be relayed\n if ($.inArray(name, relayEvents) === -1) {\n return;\n }\n\n // The parameters should always be an object\n params = params || {};\n\n // Generate the jQuery event for the Select2 event\n var evt = $.Event('select2:' + name, {\n params: params\n });\n\n self.$element.trigger(evt);\n\n // Only handle preventable events if it was one\n if ($.inArray(name, preventableEvents) === -1) {\n return;\n }\n\n params.prevented = evt.isDefaultPrevented();\n });\n };\n\n return EventRelay;\n});\n\nS2.define('select2/translation',[\n 'jquery',\n 'require'\n], function ($, require) {\n function Translation (dict) {\n this.dict = dict || {};\n }\n\n Translation.prototype.all = function () {\n return this.dict;\n };\n\n Translation.prototype.get = function (key) {\n return this.dict[key];\n };\n\n Translation.prototype.extend = function (translation) {\n this.dict = $.extend({}, translation.all(), this.dict);\n };\n\n // Static functions\n\n Translation._cache = {};\n\n Translation.loadPath = function (path) {\n if (!(path in Translation._cache)) {\n var translations = require(path);\n\n Translation._cache[path] = translations;\n }\n\n return new Translation(Translation._cache[path]);\n };\n\n return Translation;\n});\n\nS2.define('select2/diacritics',[\n\n], function () {\n var diacritics = {\n '\\u24B6': 'A',\n '\\uFF21': 'A',\n '\\u00C0': 'A',\n '\\u00C1': 'A',\n '\\u00C2': 'A',\n '\\u1EA6': 'A',\n '\\u1EA4': 'A',\n '\\u1EAA': 'A',\n '\\u1EA8': 'A',\n '\\u00C3': 'A',\n '\\u0100': 'A',\n '\\u0102': 'A',\n '\\u1EB0': 'A',\n '\\u1EAE': 'A',\n '\\u1EB4': 'A',\n '\\u1EB2': 'A',\n '\\u0226': 'A',\n '\\u01E0': 'A',\n '\\u00C4': 'A',\n '\\u01DE': 'A',\n '\\u1EA2': 'A',\n '\\u00C5': 'A',\n '\\u01FA': 'A',\n '\\u01CD': 'A',\n '\\u0200': 'A',\n '\\u0202': 'A',\n '\\u1EA0': 'A',\n '\\u1EAC': 'A',\n '\\u1EB6': 'A',\n '\\u1E00': 'A',\n '\\u0104': 'A',\n '\\u023A': 'A',\n '\\u2C6F': 'A',\n '\\uA732': 'AA',\n '\\u00C6': 'AE',\n '\\u01FC': 'AE',\n '\\u01E2': 'AE',\n '\\uA734': 'AO',\n '\\uA736': 'AU',\n '\\uA738': 'AV',\n '\\uA73A': 'AV',\n '\\uA73C': 'AY',\n '\\u24B7': 'B',\n '\\uFF22': 'B',\n '\\u1E02': 'B',\n '\\u1E04': 'B',\n '\\u1E06': 'B',\n '\\u0243': 'B',\n '\\u0182': 'B',\n '\\u0181': 'B',\n '\\u24B8': 'C',\n '\\uFF23': 'C',\n '\\u0106': 'C',\n '\\u0108': 'C',\n '\\u010A': 'C',\n '\\u010C': 'C',\n '\\u00C7': 'C',\n '\\u1E08': 'C',\n '\\u0187': 'C',\n '\\u023B': 'C',\n '\\uA73E': 'C',\n '\\u24B9': 'D',\n '\\uFF24': 'D',\n '\\u1E0A': 'D',\n '\\u010E': 'D',\n '\\u1E0C': 'D',\n '\\u1E10': 'D',\n '\\u1E12': 'D',\n '\\u1E0E': 'D',\n '\\u0110': 'D',\n '\\u018B': 'D',\n '\\u018A': 'D',\n '\\u0189': 'D',\n '\\uA779': 'D',\n '\\u01F1': 'DZ',\n '\\u01C4': 'DZ',\n '\\u01F2': 'Dz',\n '\\u01C5': 'Dz',\n '\\u24BA': 'E',\n '\\uFF25': 'E',\n '\\u00C8': 'E',\n '\\u00C9': 'E',\n '\\u00CA': 'E',\n '\\u1EC0': 'E',\n '\\u1EBE': 'E',\n '\\u1EC4': 'E',\n '\\u1EC2': 'E',\n '\\u1EBC': 'E',\n '\\u0112': 'E',\n '\\u1E14': 'E',\n '\\u1E16': 'E',\n '\\u0114': 'E',\n '\\u0116': 'E',\n '\\u00CB': 'E',\n '\\u1EBA': 'E',\n '\\u011A': 'E',\n '\\u0204': 'E',\n '\\u0206': 'E',\n '\\u1EB8': 'E',\n '\\u1EC6': 'E',\n '\\u0228': 'E',\n '\\u1E1C': 'E',\n '\\u0118': 'E',\n '\\u1E18': 'E',\n '\\u1E1A': 'E',\n '\\u0190': 'E',\n '\\u018E': 'E',\n '\\u24BB': 'F',\n '\\uFF26': 'F',\n '\\u1E1E': 'F',\n '\\u0191': 'F',\n '\\uA77B': 'F',\n '\\u24BC': 'G',\n '\\uFF27': 'G',\n '\\u01F4': 'G',\n '\\u011C': 'G',\n '\\u1E20': 'G',\n '\\u011E': 'G',\n '\\u0120': 'G',\n '\\u01E6': 'G',\n '\\u0122': 'G',\n '\\u01E4': 'G',\n '\\u0193': 'G',\n '\\uA7A0': 'G',\n '\\uA77D': 'G',\n '\\uA77E': 'G',\n '\\u24BD': 'H',\n '\\uFF28': 'H',\n '\\u0124': 'H',\n '\\u1E22': 'H',\n '\\u1E26': 'H',\n '\\u021E': 'H',\n '\\u1E24': 'H',\n '\\u1E28': 'H',\n '\\u1E2A': 'H',\n '\\u0126': 'H',\n '\\u2C67': 'H',\n '\\u2C75': 'H',\n '\\uA78D': 'H',\n '\\u24BE': 'I',\n '\\uFF29': 'I',\n '\\u00CC': 'I',\n '\\u00CD': 'I',\n '\\u00CE': 'I',\n '\\u0128': 'I',\n '\\u012A': 'I',\n '\\u012C': 'I',\n '\\u0130': 'I',\n '\\u00CF': 'I',\n '\\u1E2E': 'I',\n '\\u1EC8': 'I',\n '\\u01CF': 'I',\n '\\u0208': 'I',\n '\\u020A': 'I',\n '\\u1ECA': 'I',\n '\\u012E': 'I',\n '\\u1E2C': 'I',\n '\\u0197': 'I',\n '\\u24BF': 'J',\n '\\uFF2A': 'J',\n '\\u0134': 'J',\n '\\u0248': 'J',\n '\\u24C0': 'K',\n '\\uFF2B': 'K',\n '\\u1E30': 'K',\n '\\u01E8': 'K',\n '\\u1E32': 'K',\n '\\u0136': 'K',\n '\\u1E34': 'K',\n '\\u0198': 'K',\n '\\u2C69': 'K',\n '\\uA740': 'K',\n '\\uA742': 'K',\n '\\uA744': 'K',\n '\\uA7A2': 'K',\n '\\u24C1': 'L',\n '\\uFF2C': 'L',\n '\\u013F': 'L',\n '\\u0139': 'L',\n '\\u013D': 'L',\n '\\u1E36': 'L',\n '\\u1E38': 'L',\n '\\u013B': 'L',\n '\\u1E3C': 'L',\n '\\u1E3A': 'L',\n '\\u0141': 'L',\n '\\u023D': 'L',\n '\\u2C62': 'L',\n '\\u2C60': 'L',\n '\\uA748': 'L',\n '\\uA746': 'L',\n '\\uA780': 'L',\n '\\u01C7': 'LJ',\n '\\u01C8': 'Lj',\n '\\u24C2': 'M',\n '\\uFF2D': 'M',\n '\\u1E3E': 'M',\n '\\u1E40': 'M',\n '\\u1E42': 'M',\n '\\u2C6E': 'M',\n '\\u019C': 'M',\n '\\u24C3': 'N',\n '\\uFF2E': 'N',\n '\\u01F8': 'N',\n '\\u0143': 'N',\n '\\u00D1': 'N',\n '\\u1E44': 'N',\n '\\u0147': 'N',\n '\\u1E46': 'N',\n '\\u0145': 'N',\n '\\u1E4A': 'N',\n '\\u1E48': 'N',\n '\\u0220': 'N',\n '\\u019D': 'N',\n '\\uA790': 'N',\n '\\uA7A4': 'N',\n '\\u01CA': 'NJ',\n '\\u01CB': 'Nj',\n '\\u24C4': 'O',\n '\\uFF2F': 'O',\n '\\u00D2': 'O',\n '\\u00D3': 'O',\n '\\u00D4': 'O',\n '\\u1ED2': 'O',\n '\\u1ED0': 'O',\n '\\u1ED6': 'O',\n '\\u1ED4': 'O',\n '\\u00D5': 'O',\n '\\u1E4C': 'O',\n '\\u022C': 'O',\n '\\u1E4E': 'O',\n '\\u014C': 'O',\n '\\u1E50': 'O',\n '\\u1E52': 'O',\n '\\u014E': 'O',\n '\\u022E': 'O',\n '\\u0230': 'O',\n '\\u00D6': 'O',\n '\\u022A': 'O',\n '\\u1ECE': 'O',\n '\\u0150': 'O',\n '\\u01D1': 'O',\n '\\u020C': 'O',\n '\\u020E': 'O',\n '\\u01A0': 'O',\n '\\u1EDC': 'O',\n '\\u1EDA': 'O',\n '\\u1EE0': 'O',\n '\\u1EDE': 'O',\n '\\u1EE2': 'O',\n '\\u1ECC': 'O',\n '\\u1ED8': 'O',\n '\\u01EA': 'O',\n '\\u01EC': 'O',\n '\\u00D8': 'O',\n '\\u01FE': 'O',\n '\\u0186': 'O',\n '\\u019F': 'O',\n '\\uA74A': 'O',\n '\\uA74C': 'O',\n '\\u0152': 'OE',\n '\\u01A2': 'OI',\n '\\uA74E': 'OO',\n '\\u0222': 'OU',\n '\\u24C5': 'P',\n '\\uFF30': 'P',\n '\\u1E54': 'P',\n '\\u1E56': 'P',\n '\\u01A4': 'P',\n '\\u2C63': 'P',\n '\\uA750': 'P',\n '\\uA752': 'P',\n '\\uA754': 'P',\n '\\u24C6': 'Q',\n '\\uFF31': 'Q',\n '\\uA756': 'Q',\n '\\uA758': 'Q',\n '\\u024A': 'Q',\n '\\u24C7': 'R',\n '\\uFF32': 'R',\n '\\u0154': 'R',\n '\\u1E58': 'R',\n '\\u0158': 'R',\n '\\u0210': 'R',\n '\\u0212': 'R',\n '\\u1E5A': 'R',\n '\\u1E5C': 'R',\n '\\u0156': 'R',\n '\\u1E5E': 'R',\n '\\u024C': 'R',\n '\\u2C64': 'R',\n '\\uA75A': 'R',\n '\\uA7A6': 'R',\n '\\uA782': 'R',\n '\\u24C8': 'S',\n '\\uFF33': 'S',\n '\\u1E9E': 'S',\n '\\u015A': 'S',\n '\\u1E64': 'S',\n '\\u015C': 'S',\n '\\u1E60': 'S',\n '\\u0160': 'S',\n '\\u1E66': 'S',\n '\\u1E62': 'S',\n '\\u1E68': 'S',\n '\\u0218': 'S',\n '\\u015E': 'S',\n '\\u2C7E': 'S',\n '\\uA7A8': 'S',\n '\\uA784': 'S',\n '\\u24C9': 'T',\n '\\uFF34': 'T',\n '\\u1E6A': 'T',\n '\\u0164': 'T',\n '\\u1E6C': 'T',\n '\\u021A': 'T',\n '\\u0162': 'T',\n '\\u1E70': 'T',\n '\\u1E6E': 'T',\n '\\u0166': 'T',\n '\\u01AC': 'T',\n '\\u01AE': 'T',\n '\\u023E': 'T',\n '\\uA786': 'T',\n '\\uA728': 'TZ',\n '\\u24CA': 'U',\n '\\uFF35': 'U',\n '\\u00D9': 'U',\n '\\u00DA': 'U',\n '\\u00DB': 'U',\n '\\u0168': 'U',\n '\\u1E78': 'U',\n '\\u016A': 'U',\n '\\u1E7A': 'U',\n '\\u016C': 'U',\n '\\u00DC': 'U',\n '\\u01DB': 'U',\n '\\u01D7': 'U',\n '\\u01D5': 'U',\n '\\u01D9': 'U',\n '\\u1EE6': 'U',\n '\\u016E': 'U',\n '\\u0170': 'U',\n '\\u01D3': 'U',\n '\\u0214': 'U',\n '\\u0216': 'U',\n '\\u01AF': 'U',\n '\\u1EEA': 'U',\n '\\u1EE8': 'U',\n '\\u1EEE': 'U',\n '\\u1EEC': 'U',\n '\\u1EF0': 'U',\n '\\u1EE4': 'U',\n '\\u1E72': 'U',\n '\\u0172': 'U',\n '\\u1E76': 'U',\n '\\u1E74': 'U',\n '\\u0244': 'U',\n '\\u24CB': 'V',\n '\\uFF36': 'V',\n '\\u1E7C': 'V',\n '\\u1E7E': 'V',\n '\\u01B2': 'V',\n '\\uA75E': 'V',\n '\\u0245': 'V',\n '\\uA760': 'VY',\n '\\u24CC': 'W',\n '\\uFF37': 'W',\n '\\u1E80': 'W',\n '\\u1E82': 'W',\n '\\u0174': 'W',\n '\\u1E86': 'W',\n '\\u1E84': 'W',\n '\\u1E88': 'W',\n '\\u2C72': 'W',\n '\\u24CD': 'X',\n '\\uFF38': 'X',\n '\\u1E8A': 'X',\n '\\u1E8C': 'X',\n '\\u24CE': 'Y',\n '\\uFF39': 'Y',\n '\\u1EF2': 'Y',\n '\\u00DD': 'Y',\n '\\u0176': 'Y',\n '\\u1EF8': 'Y',\n '\\u0232': 'Y',\n '\\u1E8E': 'Y',\n '\\u0178': 'Y',\n '\\u1EF6': 'Y',\n '\\u1EF4': 'Y',\n '\\u01B3': 'Y',\n '\\u024E': 'Y',\n '\\u1EFE': 'Y',\n '\\u24CF': 'Z',\n '\\uFF3A': 'Z',\n '\\u0179': 'Z',\n '\\u1E90': 'Z',\n '\\u017B': 'Z',\n '\\u017D': 'Z',\n '\\u1E92': 'Z',\n '\\u1E94': 'Z',\n '\\u01B5': 'Z',\n '\\u0224': 'Z',\n '\\u2C7F': 'Z',\n '\\u2C6B': 'Z',\n '\\uA762': 'Z',\n '\\u24D0': 'a',\n '\\uFF41': 'a',\n '\\u1E9A': 'a',\n '\\u00E0': 'a',\n '\\u00E1': 'a',\n '\\u00E2': 'a',\n '\\u1EA7': 'a',\n '\\u1EA5': 'a',\n '\\u1EAB': 'a',\n '\\u1EA9': 'a',\n '\\u00E3': 'a',\n '\\u0101': 'a',\n '\\u0103': 'a',\n '\\u1EB1': 'a',\n '\\u1EAF': 'a',\n '\\u1EB5': 'a',\n '\\u1EB3': 'a',\n '\\u0227': 'a',\n '\\u01E1': 'a',\n '\\u00E4': 'a',\n '\\u01DF': 'a',\n '\\u1EA3': 'a',\n '\\u00E5': 'a',\n '\\u01FB': 'a',\n '\\u01CE': 'a',\n '\\u0201': 'a',\n '\\u0203': 'a',\n '\\u1EA1': 'a',\n '\\u1EAD': 'a',\n '\\u1EB7': 'a',\n '\\u1E01': 'a',\n '\\u0105': 'a',\n '\\u2C65': 'a',\n '\\u0250': 'a',\n '\\uA733': 'aa',\n '\\u00E6': 'ae',\n '\\u01FD': 'ae',\n '\\u01E3': 'ae',\n '\\uA735': 'ao',\n '\\uA737': 'au',\n '\\uA739': 'av',\n '\\uA73B': 'av',\n '\\uA73D': 'ay',\n '\\u24D1': 'b',\n '\\uFF42': 'b',\n '\\u1E03': 'b',\n '\\u1E05': 'b',\n '\\u1E07': 'b',\n '\\u0180': 'b',\n '\\u0183': 'b',\n '\\u0253': 'b',\n '\\u24D2': 'c',\n '\\uFF43': 'c',\n '\\u0107': 'c',\n '\\u0109': 'c',\n '\\u010B': 'c',\n '\\u010D': 'c',\n '\\u00E7': 'c',\n '\\u1E09': 'c',\n '\\u0188': 'c',\n '\\u023C': 'c',\n '\\uA73F': 'c',\n '\\u2184': 'c',\n '\\u24D3': 'd',\n '\\uFF44': 'd',\n '\\u1E0B': 'd',\n '\\u010F': 'd',\n '\\u1E0D': 'd',\n '\\u1E11': 'd',\n '\\u1E13': 'd',\n '\\u1E0F': 'd',\n '\\u0111': 'd',\n '\\u018C': 'd',\n '\\u0256': 'd',\n '\\u0257': 'd',\n '\\uA77A': 'd',\n '\\u01F3': 'dz',\n '\\u01C6': 'dz',\n '\\u24D4': 'e',\n '\\uFF45': 'e',\n '\\u00E8': 'e',\n '\\u00E9': 'e',\n '\\u00EA': 'e',\n '\\u1EC1': 'e',\n '\\u1EBF': 'e',\n '\\u1EC5': 'e',\n '\\u1EC3': 'e',\n '\\u1EBD': 'e',\n '\\u0113': 'e',\n '\\u1E15': 'e',\n '\\u1E17': 'e',\n '\\u0115': 'e',\n '\\u0117': 'e',\n '\\u00EB': 'e',\n '\\u1EBB': 'e',\n '\\u011B': 'e',\n '\\u0205': 'e',\n '\\u0207': 'e',\n '\\u1EB9': 'e',\n '\\u1EC7': 'e',\n '\\u0229': 'e',\n '\\u1E1D': 'e',\n '\\u0119': 'e',\n '\\u1E19': 'e',\n '\\u1E1B': 'e',\n '\\u0247': 'e',\n '\\u025B': 'e',\n '\\u01DD': 'e',\n '\\u24D5': 'f',\n '\\uFF46': 'f',\n '\\u1E1F': 'f',\n '\\u0192': 'f',\n '\\uA77C': 'f',\n '\\u24D6': 'g',\n '\\uFF47': 'g',\n '\\u01F5': 'g',\n '\\u011D': 'g',\n '\\u1E21': 'g',\n '\\u011F': 'g',\n '\\u0121': 'g',\n '\\u01E7': 'g',\n '\\u0123': 'g',\n '\\u01E5': 'g',\n '\\u0260': 'g',\n '\\uA7A1': 'g',\n '\\u1D79': 'g',\n '\\uA77F': 'g',\n '\\u24D7': 'h',\n '\\uFF48': 'h',\n '\\u0125': 'h',\n '\\u1E23': 'h',\n '\\u1E27': 'h',\n '\\u021F': 'h',\n '\\u1E25': 'h',\n '\\u1E29': 'h',\n '\\u1E2B': 'h',\n '\\u1E96': 'h',\n '\\u0127': 'h',\n '\\u2C68': 'h',\n '\\u2C76': 'h',\n '\\u0265': 'h',\n '\\u0195': 'hv',\n '\\u24D8': 'i',\n '\\uFF49': 'i',\n '\\u00EC': 'i',\n '\\u00ED': 'i',\n '\\u00EE': 'i',\n '\\u0129': 'i',\n '\\u012B': 'i',\n '\\u012D': 'i',\n '\\u00EF': 'i',\n '\\u1E2F': 'i',\n '\\u1EC9': 'i',\n '\\u01D0': 'i',\n '\\u0209': 'i',\n '\\u020B': 'i',\n '\\u1ECB': 'i',\n '\\u012F': 'i',\n '\\u1E2D': 'i',\n '\\u0268': 'i',\n '\\u0131': 'i',\n '\\u24D9': 'j',\n '\\uFF4A': 'j',\n '\\u0135': 'j',\n '\\u01F0': 'j',\n '\\u0249': 'j',\n '\\u24DA': 'k',\n '\\uFF4B': 'k',\n '\\u1E31': 'k',\n '\\u01E9': 'k',\n '\\u1E33': 'k',\n '\\u0137': 'k',\n '\\u1E35': 'k',\n '\\u0199': 'k',\n '\\u2C6A': 'k',\n '\\uA741': 'k',\n '\\uA743': 'k',\n '\\uA745': 'k',\n '\\uA7A3': 'k',\n '\\u24DB': 'l',\n '\\uFF4C': 'l',\n '\\u0140': 'l',\n '\\u013A': 'l',\n '\\u013E': 'l',\n '\\u1E37': 'l',\n '\\u1E39': 'l',\n '\\u013C': 'l',\n '\\u1E3D': 'l',\n '\\u1E3B': 'l',\n '\\u017F': 'l',\n '\\u0142': 'l',\n '\\u019A': 'l',\n '\\u026B': 'l',\n '\\u2C61': 'l',\n '\\uA749': 'l',\n '\\uA781': 'l',\n '\\uA747': 'l',\n '\\u01C9': 'lj',\n '\\u24DC': 'm',\n '\\uFF4D': 'm',\n '\\u1E3F': 'm',\n '\\u1E41': 'm',\n '\\u1E43': 'm',\n '\\u0271': 'm',\n '\\u026F': 'm',\n '\\u24DD': 'n',\n '\\uFF4E': 'n',\n '\\u01F9': 'n',\n '\\u0144': 'n',\n '\\u00F1': 'n',\n '\\u1E45': 'n',\n '\\u0148': 'n',\n '\\u1E47': 'n',\n '\\u0146': 'n',\n '\\u1E4B': 'n',\n '\\u1E49': 'n',\n '\\u019E': 'n',\n '\\u0272': 'n',\n '\\u0149': 'n',\n '\\uA791': 'n',\n '\\uA7A5': 'n',\n '\\u01CC': 'nj',\n '\\u24DE': 'o',\n '\\uFF4F': 'o',\n '\\u00F2': 'o',\n '\\u00F3': 'o',\n '\\u00F4': 'o',\n '\\u1ED3': 'o',\n '\\u1ED1': 'o',\n '\\u1ED7': 'o',\n '\\u1ED5': 'o',\n '\\u00F5': 'o',\n '\\u1E4D': 'o',\n '\\u022D': 'o',\n '\\u1E4F': 'o',\n '\\u014D': 'o',\n '\\u1E51': 'o',\n '\\u1E53': 'o',\n '\\u014F': 'o',\n '\\u022F': 'o',\n '\\u0231': 'o',\n '\\u00F6': 'o',\n '\\u022B': 'o',\n '\\u1ECF': 'o',\n '\\u0151': 'o',\n '\\u01D2': 'o',\n '\\u020D': 'o',\n '\\u020F': 'o',\n '\\u01A1': 'o',\n '\\u1EDD': 'o',\n '\\u1EDB': 'o',\n '\\u1EE1': 'o',\n '\\u1EDF': 'o',\n '\\u1EE3': 'o',\n '\\u1ECD': 'o',\n '\\u1ED9': 'o',\n '\\u01EB': 'o',\n '\\u01ED': 'o',\n '\\u00F8': 'o',\n '\\u01FF': 'o',\n '\\u0254': 'o',\n '\\uA74B': 'o',\n '\\uA74D': 'o',\n '\\u0275': 'o',\n '\\u0153': 'oe',\n '\\u01A3': 'oi',\n '\\u0223': 'ou',\n '\\uA74F': 'oo',\n '\\u24DF': 'p',\n '\\uFF50': 'p',\n '\\u1E55': 'p',\n '\\u1E57': 'p',\n '\\u01A5': 'p',\n '\\u1D7D': 'p',\n '\\uA751': 'p',\n '\\uA753': 'p',\n '\\uA755': 'p',\n '\\u24E0': 'q',\n '\\uFF51': 'q',\n '\\u024B': 'q',\n '\\uA757': 'q',\n '\\uA759': 'q',\n '\\u24E1': 'r',\n '\\uFF52': 'r',\n '\\u0155': 'r',\n '\\u1E59': 'r',\n '\\u0159': 'r',\n '\\u0211': 'r',\n '\\u0213': 'r',\n '\\u1E5B': 'r',\n '\\u1E5D': 'r',\n '\\u0157': 'r',\n '\\u1E5F': 'r',\n '\\u024D': 'r',\n '\\u027D': 'r',\n '\\uA75B': 'r',\n '\\uA7A7': 'r',\n '\\uA783': 'r',\n '\\u24E2': 's',\n '\\uFF53': 's',\n '\\u00DF': 's',\n '\\u015B': 's',\n '\\u1E65': 's',\n '\\u015D': 's',\n '\\u1E61': 's',\n '\\u0161': 's',\n '\\u1E67': 's',\n '\\u1E63': 's',\n '\\u1E69': 's',\n '\\u0219': 's',\n '\\u015F': 's',\n '\\u023F': 's',\n '\\uA7A9': 's',\n '\\uA785': 's',\n '\\u1E9B': 's',\n '\\u24E3': 't',\n '\\uFF54': 't',\n '\\u1E6B': 't',\n '\\u1E97': 't',\n '\\u0165': 't',\n '\\u1E6D': 't',\n '\\u021B': 't',\n '\\u0163': 't',\n '\\u1E71': 't',\n '\\u1E6F': 't',\n '\\u0167': 't',\n '\\u01AD': 't',\n '\\u0288': 't',\n '\\u2C66': 't',\n '\\uA787': 't',\n '\\uA729': 'tz',\n '\\u24E4': 'u',\n '\\uFF55': 'u',\n '\\u00F9': 'u',\n '\\u00FA': 'u',\n '\\u00FB': 'u',\n '\\u0169': 'u',\n '\\u1E79': 'u',\n '\\u016B': 'u',\n '\\u1E7B': 'u',\n '\\u016D': 'u',\n '\\u00FC': 'u',\n '\\u01DC': 'u',\n '\\u01D8': 'u',\n '\\u01D6': 'u',\n '\\u01DA': 'u',\n '\\u1EE7': 'u',\n '\\u016F': 'u',\n '\\u0171': 'u',\n '\\u01D4': 'u',\n '\\u0215': 'u',\n '\\u0217': 'u',\n '\\u01B0': 'u',\n '\\u1EEB': 'u',\n '\\u1EE9': 'u',\n '\\u1EEF': 'u',\n '\\u1EED': 'u',\n '\\u1EF1': 'u',\n '\\u1EE5': 'u',\n '\\u1E73': 'u',\n '\\u0173': 'u',\n '\\u1E77': 'u',\n '\\u1E75': 'u',\n '\\u0289': 'u',\n '\\u24E5': 'v',\n '\\uFF56': 'v',\n '\\u1E7D': 'v',\n '\\u1E7F': 'v',\n '\\u028B': 'v',\n '\\uA75F': 'v',\n '\\u028C': 'v',\n '\\uA761': 'vy',\n '\\u24E6': 'w',\n '\\uFF57': 'w',\n '\\u1E81': 'w',\n '\\u1E83': 'w',\n '\\u0175': 'w',\n '\\u1E87': 'w',\n '\\u1E85': 'w',\n '\\u1E98': 'w',\n '\\u1E89': 'w',\n '\\u2C73': 'w',\n '\\u24E7': 'x',\n '\\uFF58': 'x',\n '\\u1E8B': 'x',\n '\\u1E8D': 'x',\n '\\u24E8': 'y',\n '\\uFF59': 'y',\n '\\u1EF3': 'y',\n '\\u00FD': 'y',\n '\\u0177': 'y',\n '\\u1EF9': 'y',\n '\\u0233': 'y',\n '\\u1E8F': 'y',\n '\\u00FF': 'y',\n '\\u1EF7': 'y',\n '\\u1E99': 'y',\n '\\u1EF5': 'y',\n '\\u01B4': 'y',\n '\\u024F': 'y',\n '\\u1EFF': 'y',\n '\\u24E9': 'z',\n '\\uFF5A': 'z',\n '\\u017A': 'z',\n '\\u1E91': 'z',\n '\\u017C': 'z',\n '\\u017E': 'z',\n '\\u1E93': 'z',\n '\\u1E95': 'z',\n '\\u01B6': 'z',\n '\\u0225': 'z',\n '\\u0240': 'z',\n '\\u2C6C': 'z',\n '\\uA763': 'z',\n '\\u0386': '\\u0391',\n '\\u0388': '\\u0395',\n '\\u0389': '\\u0397',\n '\\u038A': '\\u0399',\n '\\u03AA': '\\u0399',\n '\\u038C': '\\u039F',\n '\\u038E': '\\u03A5',\n '\\u03AB': '\\u03A5',\n '\\u038F': '\\u03A9',\n '\\u03AC': '\\u03B1',\n '\\u03AD': '\\u03B5',\n '\\u03AE': '\\u03B7',\n '\\u03AF': '\\u03B9',\n '\\u03CA': '\\u03B9',\n '\\u0390': '\\u03B9',\n '\\u03CC': '\\u03BF',\n '\\u03CD': '\\u03C5',\n '\\u03CB': '\\u03C5',\n '\\u03B0': '\\u03C5',\n '\\u03CE': '\\u03C9',\n '\\u03C2': '\\u03C3',\n '\\u2019': '\\''\n };\n\n return diacritics;\n});\n\nS2.define('select2/data/base',[\n '../utils'\n], function (Utils) {\n function BaseAdapter ($element, options) {\n BaseAdapter.__super__.constructor.call(this);\n }\n\n Utils.Extend(BaseAdapter, Utils.Observable);\n\n BaseAdapter.prototype.current = function (callback) {\n throw new Error('The `current` method must be defined in child classes.');\n };\n\n BaseAdapter.prototype.query = function (params, callback) {\n throw new Error('The `query` method must be defined in child classes.');\n };\n\n BaseAdapter.prototype.bind = function (container, $container) {\n // Can be implemented in subclasses\n };\n\n BaseAdapter.prototype.destroy = function () {\n // Can be implemented in subclasses\n };\n\n BaseAdapter.prototype.generateResultId = function (container, data) {\n var id = container.id + '-result-';\n\n id += Utils.generateChars(4);\n\n if (data.id != null) {\n id += '-' + data.id.toString();\n } else {\n id += '-' + Utils.generateChars(4);\n }\n return id;\n };\n\n return BaseAdapter;\n});\n\nS2.define('select2/data/select',[\n './base',\n '../utils',\n 'jquery'\n], function (BaseAdapter, Utils, $) {\n function SelectAdapter ($element, options) {\n this.$element = $element;\n this.options = options;\n\n SelectAdapter.__super__.constructor.call(this);\n }\n\n Utils.Extend(SelectAdapter, BaseAdapter);\n\n SelectAdapter.prototype.current = function (callback) {\n var data = [];\n var self = this;\n\n this.$element.find(':selected').each(function () {\n var $option = $(this);\n\n var option = self.item($option);\n\n data.push(option);\n });\n\n callback(data);\n };\n\n SelectAdapter.prototype.select = function (data) {\n var self = this;\n\n data.selected = true;\n\n // If data.element is a DOM node, use it instead\n if ($(data.element).is('option')) {\n data.element.selected = true;\n\n this.$element.trigger('change');\n\n return;\n }\n\n if (this.$element.prop('multiple')) {\n this.current(function (currentData) {\n var val = [];\n\n data = [data];\n data.push.apply(data, currentData);\n\n for (var d = 0; d < data.length; d++) {\n var id = data[d].id;\n\n if ($.inArray(id, val) === -1) {\n val.push(id);\n }\n }\n\n self.$element.val(val);\n self.$element.trigger('change');\n });\n } else {\n var val = data.id;\n\n this.$element.val(val);\n this.$element.trigger('change');\n }\n };\n\n SelectAdapter.prototype.unselect = function (data) {\n var self = this;\n\n if (!this.$element.prop('multiple')) {\n return;\n }\n\n data.selected = false;\n\n if ($(data.element).is('option')) {\n data.element.selected = false;\n\n this.$element.trigger('change');\n\n return;\n }\n\n this.current(function (currentData) {\n var val = [];\n\n for (var d = 0; d < currentData.length; d++) {\n var id = currentData[d].id;\n\n if (id !== data.id && $.inArray(id, val) === -1) {\n val.push(id);\n }\n }\n\n self.$element.val(val);\n\n self.$element.trigger('change');\n });\n };\n\n SelectAdapter.prototype.bind = function (container, $container) {\n var self = this;\n\n this.container = container;\n\n container.on('select', function (params) {\n self.select(params.data);\n });\n\n container.on('unselect', function (params) {\n self.unselect(params.data);\n });\n };\n\n SelectAdapter.prototype.destroy = function () {\n // Remove anything added to child elements\n this.$element.find('*').each(function () {\n // Remove any custom data set by Select2\n Utils.RemoveData(this);\n });\n };\n\n SelectAdapter.prototype.query = function (params, callback) {\n var data = [];\n var self = this;\n\n var $options = this.$element.children();\n\n $options.each(function () {\n var $option = $(this);\n\n if (!$option.is('option') && !$option.is('optgroup')) {\n return;\n }\n\n var option = self.item($option);\n\n var matches = self.matches(params, option);\n\n if (matches !== null) {\n data.push(matches);\n }\n });\n\n callback({\n results: data\n });\n };\n\n SelectAdapter.prototype.addOptions = function ($options) {\n Utils.appendMany(this.$element, $options);\n };\n\n SelectAdapter.prototype.option = function (data) {\n var option;\n\n if (data.children) {\n option = document.createElement('optgroup');\n option.label = data.text;\n } else {\n option = document.createElement('option');\n\n if (option.textContent !== undefined) {\n option.textContent = data.text;\n } else {\n option.innerText = data.text;\n }\n }\n\n if (data.id !== undefined) {\n option.value = data.id;\n }\n\n if (data.disabled) {\n option.disabled = true;\n }\n\n if (data.selected) {\n option.selected = true;\n }\n\n if (data.title) {\n option.title = data.title;\n }\n\n var $option = $(option);\n\n var normalizedData = this._normalizeItem(data);\n normalizedData.element = option;\n\n // Override the option's data with the combined data\n Utils.StoreData(option, 'data', normalizedData);\n\n return $option;\n };\n\n SelectAdapter.prototype.item = function ($option) {\n var data = {};\n\n data = Utils.GetData($option[0], 'data');\n\n if (data != null) {\n return data;\n }\n\n if ($option.is('option')) {\n data = {\n id: $option.val(),\n text: $option.text(),\n disabled: $option.prop('disabled'),\n selected: $option.prop('selected'),\n title: $option.prop('title')\n };\n } else if ($option.is('optgroup')) {\n data = {\n text: $option.prop('label'),\n children: [],\n title: $option.prop('title')\n };\n\n var $children = $option.children('option');\n var children = [];\n\n for (var c = 0; c < $children.length; c++) {\n var $child = $($children[c]);\n\n var child = this.item($child);\n\n children.push(child);\n }\n\n data.children = children;\n }\n\n data = this._normalizeItem(data);\n data.element = $option[0];\n\n Utils.StoreData($option[0], 'data', data);\n\n return data;\n };\n\n SelectAdapter.prototype._normalizeItem = function (item) {\n if (item !== Object(item)) {\n item = {\n id: item,\n text: item\n };\n }\n\n item = $.extend({}, {\n text: ''\n }, item);\n\n var defaults = {\n selected: false,\n disabled: false\n };\n\n if (item.id != null) {\n item.id = item.id.toString();\n }\n\n if (item.text != null) {\n item.text = item.text.toString();\n }\n\n if (item._resultId == null && item.id && this.container != null) {\n item._resultId = this.generateResultId(this.container, item);\n }\n\n return $.extend({}, defaults, item);\n };\n\n SelectAdapter.prototype.matches = function (params, data) {\n var matcher = this.options.get('matcher');\n\n return matcher(params, data);\n };\n\n return SelectAdapter;\n});\n\nS2.define('select2/data/array',[\n './select',\n '../utils',\n 'jquery'\n], function (SelectAdapter, Utils, $) {\n function ArrayAdapter ($element, options) {\n this._dataToConvert = options.get('data') || [];\n\n ArrayAdapter.__super__.constructor.call(this, $element, options);\n }\n\n Utils.Extend(ArrayAdapter, SelectAdapter);\n\n ArrayAdapter.prototype.bind = function (container, $container) {\n ArrayAdapter.__super__.bind.call(this, container, $container);\n\n this.addOptions(this.convertToOptions(this._dataToConvert));\n };\n\n ArrayAdapter.prototype.select = function (data) {\n var $option = this.$element.find('option').filter(function (i, elm) {\n return elm.value == data.id.toString();\n });\n\n if ($option.length === 0) {\n $option = this.option(data);\n\n this.addOptions($option);\n }\n\n ArrayAdapter.__super__.select.call(this, data);\n };\n\n ArrayAdapter.prototype.convertToOptions = function (data) {\n var self = this;\n\n var $existing = this.$element.find('option');\n var existingIds = $existing.map(function () {\n return self.item($(this)).id;\n }).get();\n\n var $options = [];\n\n // Filter out all items except for the one passed in the argument\n function onlyItem (item) {\n return function () {\n return $(this).val() == item.id;\n };\n }\n\n for (var d = 0; d < data.length; d++) {\n var item = this._normalizeItem(data[d]);\n\n // Skip items which were pre-loaded, only merge the data\n if ($.inArray(item.id, existingIds) >= 0) {\n var $existingOption = $existing.filter(onlyItem(item));\n\n var existingData = this.item($existingOption);\n var newData = $.extend(true, {}, item, existingData);\n\n var $newOption = this.option(newData);\n\n $existingOption.replaceWith($newOption);\n\n continue;\n }\n\n var $option = this.option(item);\n\n if (item.children) {\n var $children = this.convertToOptions(item.children);\n\n Utils.appendMany($option, $children);\n }\n\n $options.push($option);\n }\n\n return $options;\n };\n\n return ArrayAdapter;\n});\n\nS2.define('select2/data/ajax',[\n './array',\n '../utils',\n 'jquery'\n], function (ArrayAdapter, Utils, $) {\n function AjaxAdapter ($element, options) {\n this.ajaxOptions = this._applyDefaults(options.get('ajax'));\n\n if (this.ajaxOptions.processResults != null) {\n this.processResults = this.ajaxOptions.processResults;\n }\n\n AjaxAdapter.__super__.constructor.call(this, $element, options);\n }\n\n Utils.Extend(AjaxAdapter, ArrayAdapter);\n\n AjaxAdapter.prototype._applyDefaults = function (options) {\n var defaults = {\n data: function (params) {\n return $.extend({}, params, {\n q: params.term\n });\n },\n transport: function (params, success, failure) {\n var $request = $.ajax(params);\n\n $request.then(success);\n $request.fail(failure);\n\n return $request;\n }\n };\n\n return $.extend({}, defaults, options, true);\n };\n\n AjaxAdapter.prototype.processResults = function (results) {\n return results;\n };\n\n AjaxAdapter.prototype.query = function (params, callback) {\n var matches = [];\n var self = this;\n\n if (this._request != null) {\n // JSONP requests cannot always be aborted\n if ($.isFunction(this._request.abort)) {\n this._request.abort();\n }\n\n this._request = null;\n }\n\n var options = $.extend({\n type: 'GET'\n }, this.ajaxOptions);\n\n if (typeof options.url === 'function') {\n options.url = options.url.call(this.$element, params);\n }\n\n if (typeof options.data === 'function') {\n options.data = options.data.call(this.$element, params);\n }\n\n function request () {\n var $request = options.transport(options, function (data) {\n var results = self.processResults(data, params);\n\n if (self.options.get('debug') && window.console && console.error) {\n // Check to make sure that the response included a `results` key.\n if (!results || !results.results || !$.isArray(results.results)) {\n console.error(\n 'Select2: The AJAX results did not return an array in the ' +\n '`results` key of the response.'\n );\n }\n }\n\n callback(results);\n }, function () {\n // Attempt to detect if a request was aborted\n // Only works if the transport exposes a status property\n if ('status' in $request &&\n ($request.status === 0 || $request.status === '0')) {\n return;\n }\n\n self.trigger('results:message', {\n message: 'errorLoading'\n });\n });\n\n self._request = $request;\n }\n\n if (this.ajaxOptions.delay && params.term != null) {\n if (this._queryTimeout) {\n window.clearTimeout(this._queryTimeout);\n }\n\n this._queryTimeout = window.setTimeout(request, this.ajaxOptions.delay);\n } else {\n request();\n }\n };\n\n return AjaxAdapter;\n});\n\nS2.define('select2/data/tags',[\n 'jquery'\n], function ($) {\n function Tags (decorated, $element, options) {\n var tags = options.get('tags');\n\n var createTag = options.get('createTag');\n\n if (createTag !== undefined) {\n this.createTag = createTag;\n }\n\n var insertTag = options.get('insertTag');\n\n if (insertTag !== undefined) {\n this.insertTag = insertTag;\n }\n\n decorated.call(this, $element, options);\n\n if ($.isArray(tags)) {\n for (var t = 0; t < tags.length; t++) {\n var tag = tags[t];\n var item = this._normalizeItem(tag);\n\n var $option = this.option(item);\n\n this.$element.append($option);\n }\n }\n }\n\n Tags.prototype.query = function (decorated, params, callback) {\n var self = this;\n\n this._removeOldTags();\n\n if (params.term == null || params.page != null) {\n decorated.call(this, params, callback);\n return;\n }\n\n function wrapper (obj, child) {\n var data = obj.results;\n\n for (var i = 0; i < data.length; i++) {\n var option = data[i];\n\n var checkChildren = (\n option.children != null &&\n !wrapper({\n results: option.children\n }, true)\n );\n\n var optionText = (option.text || '').toUpperCase();\n var paramsTerm = (params.term || '').toUpperCase();\n\n var checkText = optionText === paramsTerm;\n\n if (checkText || checkChildren) {\n if (child) {\n return false;\n }\n\n obj.data = data;\n callback(obj);\n\n return;\n }\n }\n\n if (child) {\n return true;\n }\n\n var tag = self.createTag(params);\n\n if (tag != null) {\n var $option = self.option(tag);\n $option.attr('data-select2-tag', true);\n\n self.addOptions([$option]);\n\n self.insertTag(data, tag);\n }\n\n obj.results = data;\n\n callback(obj);\n }\n\n decorated.call(this, params, wrapper);\n };\n\n Tags.prototype.createTag = function (decorated, params) {\n var term = $.trim(params.term);\n\n if (term === '') {\n return null;\n }\n\n return {\n id: term,\n text: term\n };\n };\n\n Tags.prototype.insertTag = function (_, data, tag) {\n data.unshift(tag);\n };\n\n Tags.prototype._removeOldTags = function (_) {\n var $options = this.$element.find('option[data-select2-tag]');\n\n $options.each(function () {\n if (this.selected) {\n return;\n }\n\n $(this).remove();\n });\n };\n\n return Tags;\n});\n\nS2.define('select2/data/tokenizer',[\n 'jquery'\n], function ($) {\n function Tokenizer (decorated, $element, options) {\n var tokenizer = options.get('tokenizer');\n\n if (tokenizer !== undefined) {\n this.tokenizer = tokenizer;\n }\n\n decorated.call(this, $element, options);\n }\n\n Tokenizer.prototype.bind = function (decorated, container, $container) {\n decorated.call(this, container, $container);\n\n this.$search = container.dropdown.$search || container.selection.$search ||\n $container.find('.select2-search__field');\n };\n\n Tokenizer.prototype.query = function (decorated, params, callback) {\n var self = this;\n\n function createAndSelect (data) {\n // Normalize the data object so we can use it for checks\n var item = self._normalizeItem(data);\n\n // Check if the data object already exists as a tag\n // Select it if it doesn't\n var $existingOptions = self.$element.find('option').filter(function () {\n return $(this).val() === item.id;\n });\n\n // If an existing option wasn't found for it, create the option\n if (!$existingOptions.length) {\n var $option = self.option(item);\n $option.attr('data-select2-tag', true);\n\n self._removeOldTags();\n self.addOptions([$option]);\n }\n\n // Select the item, now that we know there is an option for it\n select(item);\n }\n\n function select (data) {\n self.trigger('select', {\n data: data\n });\n }\n\n params.term = params.term || '';\n\n var tokenData = this.tokenizer(params, this.options, createAndSelect);\n\n if (tokenData.term !== params.term) {\n // Replace the search term if we have the search box\n if (this.$search.length) {\n this.$search.val(tokenData.term);\n this.$search.trigger('focus');\n }\n\n params.term = tokenData.term;\n }\n\n decorated.call(this, params, callback);\n };\n\n Tokenizer.prototype.tokenizer = function (_, params, options, callback) {\n var separators = options.get('tokenSeparators') || [];\n var term = params.term;\n var i = 0;\n\n var createTag = this.createTag || function (params) {\n return {\n id: params.term,\n text: params.term\n };\n };\n\n while (i < term.length) {\n var termChar = term[i];\n\n if ($.inArray(termChar, separators) === -1) {\n i++;\n\n continue;\n }\n\n var part = term.substr(0, i);\n var partParams = $.extend({}, params, {\n term: part\n });\n\n var data = createTag(partParams);\n\n if (data == null) {\n i++;\n continue;\n }\n\n callback(data);\n\n // Reset the term to not include the tokenized portion\n term = term.substr(i + 1) || '';\n i = 0;\n }\n\n return {\n term: term\n };\n };\n\n return Tokenizer;\n});\n\nS2.define('select2/data/minimumInputLength',[\n\n], function () {\n function MinimumInputLength (decorated, $e, options) {\n this.minimumInputLength = options.get('minimumInputLength');\n\n decorated.call(this, $e, options);\n }\n\n MinimumInputLength.prototype.query = function (decorated, params, callback) {\n params.term = params.term || '';\n\n if (params.term.length < this.minimumInputLength) {\n this.trigger('results:message', {\n message: 'inputTooShort',\n args: {\n minimum: this.minimumInputLength,\n input: params.term,\n params: params\n }\n });\n\n return;\n }\n\n decorated.call(this, params, callback);\n };\n\n return MinimumInputLength;\n});\n\nS2.define('select2/data/maximumInputLength',[\n\n], function () {\n function MaximumInputLength (decorated, $e, options) {\n this.maximumInputLength = options.get('maximumInputLength');\n\n decorated.call(this, $e, options);\n }\n\n MaximumInputLength.prototype.query = function (decorated, params, callback) {\n params.term = params.term || '';\n\n if (this.maximumInputLength > 0 &&\n params.term.length > this.maximumInputLength) {\n this.trigger('results:message', {\n message: 'inputTooLong',\n args: {\n maximum: this.maximumInputLength,\n input: params.term,\n params: params\n }\n });\n\n return;\n }\n\n decorated.call(this, params, callback);\n };\n\n return MaximumInputLength;\n});\n\nS2.define('select2/data/maximumSelectionLength',[\n\n], function (){\n function MaximumSelectionLength (decorated, $e, options) {\n this.maximumSelectionLength = options.get('maximumSelectionLength');\n\n decorated.call(this, $e, options);\n }\n\n MaximumSelectionLength.prototype.bind =\n function (decorated, container, $container) {\n var self = this;\n\n decorated.call(this, container, $container);\n\n container.on('select', function () {\n self._checkIfMaximumSelected();\n });\n };\n\n MaximumSelectionLength.prototype.query =\n function (decorated, params, callback) {\n var self = this;\n\n this._checkIfMaximumSelected(function () {\n decorated.call(self, params, callback);\n });\n };\n\n MaximumSelectionLength.prototype._checkIfMaximumSelected =\n function (_, successCallback) {\n var self = this;\n\n this.current(function (currentData) {\n var count = currentData != null ? currentData.length : 0;\n if (self.maximumSelectionLength > 0 &&\n count >= self.maximumSelectionLength) {\n self.trigger('results:message', {\n message: 'maximumSelected',\n args: {\n maximum: self.maximumSelectionLength\n }\n });\n return;\n }\n\n if (successCallback) {\n successCallback();\n }\n });\n };\n\n return MaximumSelectionLength;\n});\n\nS2.define('select2/dropdown',[\n 'jquery',\n './utils'\n], function ($, Utils) {\n function Dropdown ($element, options) {\n this.$element = $element;\n this.options = options;\n\n Dropdown.__super__.constructor.call(this);\n }\n\n Utils.Extend(Dropdown, Utils.Observable);\n\n Dropdown.prototype.render = function () {\n var $dropdown = $(\n '<span class=\"select2-dropdown\">' +\n '<span class=\"select2-results\"></span>' +\n '</span>'\n );\n\n $dropdown.attr('dir', this.options.get('dir'));\n\n this.$dropdown = $dropdown;\n\n return $dropdown;\n };\n\n Dropdown.prototype.bind = function () {\n // Should be implemented in subclasses\n };\n\n Dropdown.prototype.position = function ($dropdown, $container) {\n // Should be implemented in subclasses\n };\n\n Dropdown.prototype.destroy = function () {\n // Remove the dropdown from the DOM\n this.$dropdown.remove();\n };\n\n return Dropdown;\n});\n\nS2.define('select2/dropdown/search',[\n 'jquery',\n '../utils'\n], function ($, Utils) {\n function Search () { }\n\n Search.prototype.render = function (decorated) {\n var $rendered = decorated.call(this);\n\n var $search = $(\n '<span class=\"select2-search select2-search--dropdown\">' +\n '<input class=\"select2-search__field\" type=\"search\" tabindex=\"-1\"' +\n ' autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"none\"' +\n ' spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" />' +\n '</span>'\n );\n\n this.$searchContainer = $search;\n this.$search = $search.find('input');\n\n $rendered.prepend($search);\n\n return $rendered;\n };\n\n Search.prototype.bind = function (decorated, container, $container) {\n var self = this;\n\n var resultsId = container.id + '-results';\n\n decorated.call(this, container, $container);\n\n this.$search.on('keydown', function (evt) {\n self.trigger('keypress', evt);\n\n self._keyUpPrevented = evt.isDefaultPrevented();\n });\n\n // Workaround for browsers which do not support the `input` event\n // This will prevent double-triggering of events for browsers which support\n // both the `keyup` and `input` events.\n this.$search.on('input', function (evt) {\n // Unbind the duplicated `keyup` event\n $(this).off('keyup');\n });\n\n this.$search.on('keyup input', function (evt) {\n self.handleSearch(evt);\n });\n\n container.on('open', function () {\n self.$search.attr('tabindex', 0);\n self.$search.attr('aria-controls', resultsId);\n\n self.$search.trigger('focus');\n\n window.setTimeout(function () {\n self.$search.trigger('focus');\n }, 0);\n });\n\n container.on('close', function () {\n self.$search.attr('tabindex', -1);\n self.$search.removeAttr('aria-controls');\n self.$search.removeAttr('aria-activedescendant');\n\n self.$search.val('');\n self.$search.trigger('blur');\n });\n\n container.on('focus', function () {\n if (!container.isOpen()) {\n self.$search.trigger('focus');\n }\n });\n\n container.on('results:all', function (params) {\n if (params.query.term == null || params.query.term === '') {\n var showSearch = self.showSearch(params);\n\n if (showSearch) {\n self.$searchContainer.removeClass('select2-search--hide');\n } else {\n self.$searchContainer.addClass('select2-search--hide');\n }\n }\n });\n\n container.on('results:focus', function (params) {\n if (params.data._resultId) {\n self.$search.attr('aria-activedescendant', params.data._resultId);\n } else {\n self.$search.removeAttr('aria-activedescendant');\n }\n });\n };\n\n Search.prototype.handleSearch = function (evt) {\n if (!this._keyUpPrevented) {\n var input = this.$search.val();\n\n this.trigger('query', {\n term: input\n });\n }\n\n this._keyUpPrevented = false;\n };\n\n Search.prototype.showSearch = function (_, params) {\n return true;\n };\n\n return Search;\n});\n\nS2.define('select2/dropdown/hidePlaceholder',[\n\n], function () {\n function HidePlaceholder (decorated, $element, options, dataAdapter) {\n this.placeholder = this.normalizePlaceholder(options.get('placeholder'));\n\n decorated.call(this, $element, options, dataAdapter);\n }\n\n HidePlaceholder.prototype.append = function (decorated, data) {\n data.results = this.removePlaceholder(data.results);\n\n decorated.call(this, data);\n };\n\n HidePlaceholder.prototype.normalizePlaceholder = function (_, placeholder) {\n if (typeof placeholder === 'string') {\n placeholder = {\n id: '',\n text: placeholder\n };\n }\n\n return placeholder;\n };\n\n HidePlaceholder.prototype.removePlaceholder = function (_, data) {\n var modifiedData = data.slice(0);\n\n for (var d = data.length - 1; d >= 0; d--) {\n var item = data[d];\n\n if (this.placeholder.id === item.id) {\n modifiedData.splice(d, 1);\n }\n }\n\n return modifiedData;\n };\n\n return HidePlaceholder;\n});\n\nS2.define('select2/dropdown/infiniteScroll',[\n 'jquery'\n], function ($) {\n function InfiniteScroll (decorated, $element, options, dataAdapter) {\n this.lastParams = {};\n\n decorated.call(this, $element, options, dataAdapter);\n\n this.$loadingMore = this.createLoadingMore();\n this.loading = false;\n }\n\n InfiniteScroll.prototype.append = function (decorated, data) {\n this.$loadingMore.remove();\n this.loading = false;\n\n decorated.call(this, data);\n\n if (this.showLoadingMore(data)) {\n this.$results.append(this.$loadingMore);\n this.loadMoreIfNeeded();\n }\n };\n\n InfiniteScroll.prototype.bind = function (decorated, container, $container) {\n var self = this;\n\n decorated.call(this, container, $container);\n\n container.on('query', function (params) {\n self.lastParams = params;\n self.loading = true;\n });\n\n container.on('query:append', function (params) {\n self.lastParams = params;\n self.loading = true;\n });\n\n this.$results.on('scroll', this.loadMoreIfNeeded.bind(this));\n };\n\n InfiniteScroll.prototype.loadMoreIfNeeded = function () {\n var isLoadMoreVisible = $.contains(\n document.documentElement,\n this.$loadingMore[0]\n );\n\n if (this.loading || !isLoadMoreVisible) {\n return;\n }\n\n var currentOffset = this.$results.offset().top +\n this.$results.outerHeight(false);\n var loadingMoreOffset = this.$loadingMore.offset().top +\n this.$loadingMore.outerHeight(false);\n\n if (currentOffset + 50 >= loadingMoreOffset) {\n this.loadMore();\n }\n };\n\n InfiniteScroll.prototype.loadMore = function () {\n this.loading = true;\n\n var params = $.extend({}, {page: 1}, this.lastParams);\n\n params.page++;\n\n this.trigger('query:append', params);\n };\n\n InfiniteScroll.prototype.showLoadingMore = function (_, data) {\n return data.pagination && data.pagination.more;\n };\n\n InfiniteScroll.prototype.createLoadingMore = function () {\n var $option = $(\n '<li ' +\n 'class=\"select2-results__option select2-results__option--load-more\"' +\n 'role=\"option\" aria-disabled=\"true\"></li>'\n );\n\n var message = this.options.get('translations').get('loadingMore');\n\n $option.html(message(this.lastParams));\n\n return $option;\n };\n\n return InfiniteScroll;\n});\n\nS2.define('select2/dropdown/attachBody',[\n 'jquery',\n '../utils'\n], function ($, Utils) {\n function AttachBody (decorated, $element, options) {\n this.$dropdownParent = $(options.get('dropdownParent') || document.body);\n\n decorated.call(this, $element, options);\n }\n\n AttachBody.prototype.bind = function (decorated, container, $container) {\n var self = this;\n\n decorated.call(this, container, $container);\n\n container.on('open', function () {\n self._showDropdown();\n self._attachPositioningHandler(container);\n\n // Must bind after the results handlers to ensure correct sizing\n self._bindContainerResultHandlers(container);\n });\n\n container.on('close', function () {\n self._hideDropdown();\n self._detachPositioningHandler(container);\n });\n\n this.$dropdownContainer.on('mousedown', function (evt) {\n evt.stopPropagation();\n });\n };\n\n AttachBody.prototype.destroy = function (decorated) {\n decorated.call(this);\n\n this.$dropdownContainer.remove();\n };\n\n AttachBody.prototype.position = function (decorated, $dropdown, $container) {\n // Clone all of the container classes\n $dropdown.attr('class', $container.attr('class'));\n\n $dropdown.removeClass('select2');\n $dropdown.addClass('select2-container--open');\n\n $dropdown.css({\n position: 'absolute',\n top: -999999\n });\n\n this.$container = $container;\n };\n\n AttachBody.prototype.render = function (decorated) {\n var $container = $('<span></span>');\n\n var $dropdown = decorated.call(this);\n $container.append($dropdown);\n\n this.$dropdownContainer = $container;\n\n return $container;\n };\n\n AttachBody.prototype._hideDropdown = function (decorated) {\n this.$dropdownContainer.detach();\n };\n\n AttachBody.prototype._bindContainerResultHandlers =\n function (decorated, container) {\n\n // These should only be bound once\n if (this._containerResultsHandlersBound) {\n return;\n }\n\n var self = this;\n\n container.on('results:all', function () {\n self._positionDropdown();\n self._resizeDropdown();\n });\n\n container.on('results:append', function () {\n self._positionDropdown();\n self._resizeDropdown();\n });\n\n container.on('results:message', function () {\n self._positionDropdown();\n self._resizeDropdown();\n });\n\n container.on('select', function () {\n self._positionDropdown();\n self._resizeDropdown();\n });\n\n container.on('unselect', function () {\n self._positionDropdown();\n self._resizeDropdown();\n });\n\n this._containerResultsHandlersBound = true;\n };\n\n AttachBody.prototype._attachPositioningHandler =\n function (decorated, container) {\n var self = this;\n\n var scrollEvent = 'scroll.select2.' + container.id;\n var resizeEvent = 'resize.select2.' + container.id;\n var orientationEvent = 'orientationchange.select2.' + container.id;\n\n var $watchers = this.$container.parents().filter(Utils.hasScroll);\n $watchers.each(function () {\n Utils.StoreData(this, 'select2-scroll-position', {\n x: $(this).scrollLeft(),\n y: $(this).scrollTop()\n });\n });\n\n $watchers.on(scrollEvent, function (ev) {\n var position = Utils.GetData(this, 'select2-scroll-position');\n $(this).scrollTop(position.y);\n });\n\n $(window).on(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent,\n function (e) {\n self._positionDropdown();\n self._resizeDropdown();\n });\n };\n\n AttachBody.prototype._detachPositioningHandler =\n function (decorated, container) {\n var scrollEvent = 'scroll.select2.' + container.id;\n var resizeEvent = 'resize.select2.' + container.id;\n var orientationEvent = 'orientationchange.select2.' + container.id;\n\n var $watchers = this.$container.parents().filter(Utils.hasScroll);\n $watchers.off(scrollEvent);\n\n $(window).off(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent);\n };\n\n AttachBody.prototype._positionDropdown = function () {\n var $window = $(window);\n\n var isCurrentlyAbove = this.$dropdown.hasClass('select2-dropdown--above');\n var isCurrentlyBelow = this.$dropdown.hasClass('select2-dropdown--below');\n\n var newDirection = null;\n\n var offset = this.$container.offset();\n\n offset.bottom = offset.top + this.$container.outerHeight(false);\n\n var container = {\n height: this.$container.outerHeight(false)\n };\n\n container.top = offset.top;\n container.bottom = offset.top + container.height;\n\n var dropdown = {\n height: this.$dropdown.outerHeight(false)\n };\n\n var viewport = {\n top: $window.scrollTop(),\n bottom: $window.scrollTop() + $window.height()\n };\n\n var enoughRoomAbove = viewport.top < (offset.top - dropdown.height);\n var enoughRoomBelow = viewport.bottom > (offset.bottom + dropdown.height);\n\n var css = {\n left: offset.left,\n top: container.bottom\n };\n\n // Determine what the parent element is to use for calculating the offset\n var $offsetParent = this.$dropdownParent;\n\n // For statically positioned elements, we need to get the element\n // that is determining the offset\n if ($offsetParent.css('position') === 'static') {\n $offsetParent = $offsetParent.offsetParent();\n }\n\n var parentOffset = {\n top: 0,\n left: 0\n };\n\n if (\n $.contains(document.body, $offsetParent[0]) ||\n $offsetParent[0].isConnected\n ) {\n parentOffset = $offsetParent.offset();\n }\n\n css.top -= parentOffset.top;\n css.left -= parentOffset.left;\n\n if (!isCurrentlyAbove && !isCurrentlyBelow) {\n newDirection = 'below';\n }\n\n if (!enoughRoomBelow && enoughRoomAbove && !isCurrentlyAbove) {\n newDirection = 'above';\n } else if (!enoughRoomAbove && enoughRoomBelow && isCurrentlyAbove) {\n newDirection = 'below';\n }\n\n if (newDirection == 'above' ||\n (isCurrentlyAbove && newDirection !== 'below')) {\n css.top = container.top - parentOffset.top - dropdown.height;\n }\n\n if (newDirection != null) {\n this.$dropdown\n .removeClass('select2-dropdown--below select2-dropdown--above')\n .addClass('select2-dropdown--' + newDirection);\n this.$container\n .removeClass('select2-container--below select2-container--above')\n .addClass('select2-container--' + newDirection);\n }\n\n this.$dropdownContainer.css(css);\n };\n\n AttachBody.prototype._resizeDropdown = function () {\n var css = {\n width: this.$container.outerWidth(false) + 'px'\n };\n\n if (this.options.get('dropdownAutoWidth')) {\n css.minWidth = css.width;\n css.position = 'relative';\n css.width = 'auto';\n }\n\n this.$dropdown.css(css);\n };\n\n AttachBody.prototype._showDropdown = function (decorated) {\n this.$dropdownContainer.appendTo(this.$dropdownParent);\n\n this._positionDropdown();\n this._resizeDropdown();\n };\n\n return AttachBody;\n});\n\nS2.define('select2/dropdown/minimumResultsForSearch',[\n\n], function () {\n function countResults (data) {\n var count = 0;\n\n for (var d = 0; d < data.length; d++) {\n var item = data[d];\n\n if (item.children) {\n count += countResults(item.children);\n } else {\n count++;\n }\n }\n\n return count;\n }\n\n function MinimumResultsForSearch (decorated, $element, options, dataAdapter) {\n this.minimumResultsForSearch = options.get('minimumResultsForSearch');\n\n if (this.minimumResultsForSearch < 0) {\n this.minimumResultsForSearch = Infinity;\n }\n\n decorated.call(this, $element, options, dataAdapter);\n }\n\n MinimumResultsForSearch.prototype.showSearch = function (decorated, params) {\n if (countResults(params.data.results) < this.minimumResultsForSearch) {\n return false;\n }\n\n return decorated.call(this, params);\n };\n\n return MinimumResultsForSearch;\n});\n\nS2.define('select2/dropdown/selectOnClose',[\n '../utils'\n], function (Utils) {\n function SelectOnClose () { }\n\n SelectOnClose.prototype.bind = function (decorated, container, $container) {\n var self = this;\n\n decorated.call(this, container, $container);\n\n container.on('close', function (params) {\n self._handleSelectOnClose(params);\n });\n };\n\n SelectOnClose.prototype._handleSelectOnClose = function (_, params) {\n if (params && params.originalSelect2Event != null) {\n var event = params.originalSelect2Event;\n\n // Don't select an item if the close event was triggered from a select or\n // unselect event\n if (event._type === 'select' || event._type === 'unselect') {\n return;\n }\n }\n\n var $highlightedResults = this.getHighlightedResults();\n\n // Only select highlighted results\n if ($highlightedResults.length < 1) {\n return;\n }\n\n var data = Utils.GetData($highlightedResults[0], 'data');\n\n // Don't re-select already selected resulte\n if (\n (data.element != null && data.element.selected) ||\n (data.element == null && data.selected)\n ) {\n return;\n }\n\n this.trigger('select', {\n data: data\n });\n };\n\n return SelectOnClose;\n});\n\nS2.define('select2/dropdown/closeOnSelect',[\n\n], function () {\n function CloseOnSelect () { }\n\n CloseOnSelect.prototype.bind = function (decorated, container, $container) {\n var self = this;\n\n decorated.call(this, container, $container);\n\n container.on('select', function (evt) {\n self._selectTriggered(evt);\n });\n\n container.on('unselect', function (evt) {\n self._selectTriggered(evt);\n });\n };\n\n CloseOnSelect.prototype._selectTriggered = function (_, evt) {\n var originalEvent = evt.originalEvent;\n\n // Don't close if the control key is being held\n if (originalEvent && (originalEvent.ctrlKey || originalEvent.metaKey)) {\n return;\n }\n\n this.trigger('close', {\n originalEvent: originalEvent,\n originalSelect2Event: evt\n });\n };\n\n return CloseOnSelect;\n});\n\nS2.define('select2/i18n/en',[],function () {\n // English\n return {\n errorLoading: function () {\n return 'The results could not be loaded.';\n },\n inputTooLong: function (args) {\n var overChars = args.input.length - args.maximum;\n\n var message = 'Please delete ' + overChars + ' character';\n\n if (overChars != 1) {\n message += 's';\n }\n\n return message;\n },\n inputTooShort: function (args) {\n var remainingChars = args.minimum - args.input.length;\n\n var message = 'Please enter ' + remainingChars + ' or more characters';\n\n return message;\n },\n loadingMore: function () {\n return 'Loading more results…';\n },\n maximumSelected: function (args) {\n var message = 'You can only select ' + args.maximum + ' item';\n\n if (args.maximum != 1) {\n message += 's';\n }\n\n return message;\n },\n noResults: function () {\n return 'No results found';\n },\n searching: function () {\n return 'Searching…';\n },\n removeAllItems: function () {\n return 'Remove all items';\n }\n };\n});\n\nS2.define('select2/defaults',[\n 'jquery',\n 'require',\n\n './results',\n\n './selection/single',\n './selection/multiple',\n './selection/placeholder',\n './selection/allowClear',\n './selection/search',\n './selection/eventRelay',\n\n './utils',\n './translation',\n './diacritics',\n\n './data/select',\n './data/array',\n './data/ajax',\n './data/tags',\n './data/tokenizer',\n './data/minimumInputLength',\n './data/maximumInputLength',\n './data/maximumSelectionLength',\n\n './dropdown',\n './dropdown/search',\n './dropdown/hidePlaceholder',\n './dropdown/infiniteScroll',\n './dropdown/attachBody',\n './dropdown/minimumResultsForSearch',\n './dropdown/selectOnClose',\n './dropdown/closeOnSelect',\n\n './i18n/en'\n], function ($, require,\n\n ResultsList,\n\n SingleSelection, MultipleSelection, Placeholder, AllowClear,\n SelectionSearch, EventRelay,\n\n Utils, Translation, DIACRITICS,\n\n SelectData, ArrayData, AjaxData, Tags, Tokenizer,\n MinimumInputLength, MaximumInputLength, MaximumSelectionLength,\n\n Dropdown, DropdownSearch, HidePlaceholder, InfiniteScroll,\n AttachBody, MinimumResultsForSearch, SelectOnClose, CloseOnSelect,\n\n EnglishTranslation) {\n function Defaults () {\n this.reset();\n }\n\n Defaults.prototype.apply = function (options) {\n options = $.extend(true, {}, this.defaults, options);\n\n if (options.dataAdapter == null) {\n if (options.ajax != null) {\n options.dataAdapter = AjaxData;\n } else if (options.data != null) {\n options.dataAdapter = ArrayData;\n } else {\n options.dataAdapter = SelectData;\n }\n\n if (options.minimumInputLength > 0) {\n options.dataAdapter = Utils.Decorate(\n options.dataAdapter,\n MinimumInputLength\n );\n }\n\n if (options.maximumInputLength > 0) {\n options.dataAdapter = Utils.Decorate(\n options.dataAdapter,\n MaximumInputLength\n );\n }\n\n if (options.maximumSelectionLength > 0) {\n options.dataAdapter = Utils.Decorate(\n options.dataAdapter,\n MaximumSelectionLength\n );\n }\n\n if (options.tags) {\n options.dataAdapter = Utils.Decorate(options.dataAdapter, Tags);\n }\n\n if (options.tokenSeparators != null || options.tokenizer != null) {\n options.dataAdapter = Utils.Decorate(\n options.dataAdapter,\n Tokenizer\n );\n }\n\n if (options.query != null) {\n var Query = require(options.amdBase + 'compat/query');\n\n options.dataAdapter = Utils.Decorate(\n options.dataAdapter,\n Query\n );\n }\n\n if (options.initSelection != null) {\n var InitSelection = require(options.amdBase + 'compat/initSelection');\n\n options.dataAdapter = Utils.Decorate(\n options.dataAdapter,\n InitSelection\n );\n }\n }\n\n if (options.resultsAdapter == null) {\n options.resultsAdapter = ResultsList;\n\n if (options.ajax != null) {\n options.resultsAdapter = Utils.Decorate(\n options.resultsAdapter,\n InfiniteScroll\n );\n }\n\n if (options.placeholder != null) {\n options.resultsAdapter = Utils.Decorate(\n options.resultsAdapter,\n HidePlaceholder\n );\n }\n\n if (options.selectOnClose) {\n options.resultsAdapter = Utils.Decorate(\n options.resultsAdapter,\n SelectOnClose\n );\n }\n }\n\n if (options.dropdownAdapter == null) {\n if (options.multiple) {\n options.dropdownAdapter = Dropdown;\n } else {\n var SearchableDropdown = Utils.Decorate(Dropdown, DropdownSearch);\n\n options.dropdownAdapter = SearchableDropdown;\n }\n\n if (options.minimumResultsForSearch !== 0) {\n options.dropdownAdapter = Utils.Decorate(\n options.dropdownAdapter,\n MinimumResultsForSearch\n );\n }\n\n if (options.closeOnSelect) {\n options.dropdownAdapter = Utils.Decorate(\n options.dropdownAdapter,\n CloseOnSelect\n );\n }\n\n if (\n options.dropdownCssClass != null ||\n options.dropdownCss != null ||\n options.adaptDropdownCssClass != null\n ) {\n var DropdownCSS = require(options.amdBase + 'compat/dropdownCss');\n\n options.dropdownAdapter = Utils.Decorate(\n options.dropdownAdapter,\n DropdownCSS\n );\n }\n\n options.dropdownAdapter = Utils.Decorate(\n options.dropdownAdapter,\n AttachBody\n );\n }\n\n if (options.selectionAdapter == null) {\n if (options.multiple) {\n options.selectionAdapter = MultipleSelection;\n } else {\n options.selectionAdapter = SingleSelection;\n }\n\n // Add the placeholder mixin if a placeholder was specified\n if (options.placeholder != null) {\n options.selectionAdapter = Utils.Decorate(\n options.selectionAdapter,\n Placeholder\n );\n }\n\n if (options.allowClear) {\n options.selectionAdapter = Utils.Decorate(\n options.selectionAdapter,\n AllowClear\n );\n }\n\n if (options.multiple) {\n options.selectionAdapter = Utils.Decorate(\n options.selectionAdapter,\n SelectionSearch\n );\n }\n\n if (\n options.containerCssClass != null ||\n options.containerCss != null ||\n options.adaptContainerCssClass != null\n ) {\n var ContainerCSS = require(options.amdBase + 'compat/containerCss');\n\n options.selectionAdapter = Utils.Decorate(\n options.selectionAdapter,\n ContainerCSS\n );\n }\n\n options.selectionAdapter = Utils.Decorate(\n options.selectionAdapter,\n EventRelay\n );\n }\n\n // If the defaults were not previously applied from an element, it is\n // possible for the language option to have not been resolved\n options.language = this._resolveLanguage(options.language);\n\n // Always fall back to English since it will always be complete\n options.language.push('en');\n\n var uniqueLanguages = [];\n\n for (var l = 0; l < options.language.length; l++) {\n var language = options.language[l];\n\n if (uniqueLanguages.indexOf(language) === -1) {\n uniqueLanguages.push(language);\n }\n }\n\n options.language = uniqueLanguages;\n\n options.translations = this._processTranslations(\n options.language,\n options.debug\n );\n\n return options;\n };\n\n Defaults.prototype.reset = function () {\n function stripDiacritics (text) {\n // Used 'uni range + named function' from http://jsperf.com/diacritics/18\n function match(a) {\n return DIACRITICS[a] || a;\n }\n\n return text.replace(/[^\\u0000-\\u007E]/g, match);\n }\n\n function matcher (params, data) {\n // Always return the object if there is nothing to compare\n if ($.trim(params.term) === '') {\n return data;\n }\n\n // Do a recursive check for options with children\n if (data.children && data.children.length > 0) {\n // Clone the data object if there are children\n // This is required as we modify the object to remove any non-matches\n var match = $.extend(true, {}, data);\n\n // Check each child of the option\n for (var c = data.children.length - 1; c >= 0; c--) {\n var child = data.children[c];\n\n var matches = matcher(params, child);\n\n // If there wasn't a match, remove the object in the array\n if (matches == null) {\n match.children.splice(c, 1);\n }\n }\n\n // If any children matched, return the new object\n if (match.children.length > 0) {\n return match;\n }\n\n // If there were no matching children, check just the plain object\n return matcher(params, match);\n }\n\n var original = stripDiacritics(data.text).toUpperCase();\n var term = stripDiacritics(params.term).toUpperCase();\n\n // Check if the text contains the term\n if (original.indexOf(term) > -1) {\n return data;\n }\n\n // If it doesn't contain the term, don't return anything\n return null;\n }\n\n this.defaults = {\n amdBase: './',\n amdLanguageBase: './i18n/',\n closeOnSelect: true,\n debug: false,\n dropdownAutoWidth: false,\n escapeMarkup: Utils.escapeMarkup,\n language: {},\n matcher: matcher,\n minimumInputLength: 0,\n maximumInputLength: 0,\n maximumSelectionLength: 0,\n minimumResultsForSearch: 0,\n selectOnClose: false,\n scrollAfterSelect: false,\n sorter: function (data) {\n return data;\n },\n templateResult: function (result) {\n return result.text;\n },\n templateSelection: function (selection) {\n return selection.text;\n },\n theme: 'default',\n width: 'resolve'\n };\n };\n\n Defaults.prototype.applyFromElement = function (options, $element) {\n var optionLanguage = options.language;\n var defaultLanguage = this.defaults.language;\n var elementLanguage = $element.prop('lang');\n var parentLanguage = $element.closest('[lang]').prop('lang');\n\n var languages = Array.prototype.concat.call(\n this._resolveLanguage(elementLanguage),\n this._resolveLanguage(optionLanguage),\n this._resolveLanguage(defaultLanguage),\n this._resolveLanguage(parentLanguage)\n );\n\n options.language = languages;\n\n return options;\n };\n\n Defaults.prototype._resolveLanguage = function (language) {\n if (!language) {\n return [];\n }\n\n if ($.isEmptyObject(language)) {\n return [];\n }\n\n if ($.isPlainObject(language)) {\n return [language];\n }\n\n var languages;\n\n if (!$.isArray(language)) {\n languages = [language];\n } else {\n languages = language;\n }\n\n var resolvedLanguages = [];\n\n for (var l = 0; l < languages.length; l++) {\n resolvedLanguages.push(languages[l]);\n\n if (typeof languages[l] === 'string' && languages[l].indexOf('-') > 0) {\n // Extract the region information if it is included\n var languageParts = languages[l].split('-');\n var baseLanguage = languageParts[0];\n\n resolvedLanguages.push(baseLanguage);\n }\n }\n\n return resolvedLanguages;\n };\n\n Defaults.prototype._processTranslations = function (languages, debug) {\n var translations = new Translation();\n\n for (var l = 0; l < languages.length; l++) {\n var languageData = new Translation();\n\n var language = languages[l];\n\n if (typeof language === 'string') {\n try {\n // Try to load it with the original name\n languageData = Translation.loadPath(language);\n } catch (e) {\n try {\n // If we couldn't load it, check if it wasn't the full path\n language = this.defaults.amdLanguageBase + language;\n languageData = Translation.loadPath(language);\n } catch (ex) {\n // The translation could not be loaded at all. Sometimes this is\n // because of a configuration problem, other times this can be\n // because of how Select2 helps load all possible translation files\n if (debug && window.console && console.warn) {\n console.warn(\n 'Select2: The language file for \"' + language + '\" could ' +\n 'not be automatically loaded. A fallback will be used instead.'\n );\n }\n }\n }\n } else if ($.isPlainObject(language)) {\n languageData = new Translation(language);\n } else {\n languageData = language;\n }\n\n translations.extend(languageData);\n }\n\n return translations;\n };\n\n Defaults.prototype.set = function (key, value) {\n var camelKey = $.camelCase(key);\n\n var data = {};\n data[camelKey] = value;\n\n var convertedData = Utils._convertData(data);\n\n $.extend(true, this.defaults, convertedData);\n };\n\n var defaults = new Defaults();\n\n return defaults;\n});\n\nS2.define('select2/options',[\n 'require',\n 'jquery',\n './defaults',\n './utils'\n], function (require, $, Defaults, Utils) {\n function Options (options, $element) {\n this.options = options;\n\n if ($element != null) {\n this.fromElement($element);\n }\n\n if ($element != null) {\n this.options = Defaults.applyFromElement(this.options, $element);\n }\n\n this.options = Defaults.apply(this.options);\n\n if ($element && $element.is('input')) {\n var InputCompat = require(this.get('amdBase') + 'compat/inputData');\n\n this.options.dataAdapter = Utils.Decorate(\n this.options.dataAdapter,\n InputCompat\n );\n }\n }\n\n Options.prototype.fromElement = function ($e) {\n var excludedData = ['select2'];\n\n if (this.options.multiple == null) {\n this.options.multiple = $e.prop('multiple');\n }\n\n if (this.options.disabled == null) {\n this.options.disabled = $e.prop('disabled');\n }\n\n if (this.options.dir == null) {\n if ($e.prop('dir')) {\n this.options.dir = $e.prop('dir');\n } else if ($e.closest('[dir]').prop('dir')) {\n this.options.dir = $e.closest('[dir]').prop('dir');\n } else {\n this.options.dir = 'ltr';\n }\n }\n\n $e.prop('disabled', this.options.disabled);\n $e.prop('multiple', this.options.multiple);\n\n if (Utils.GetData($e[0], 'select2Tags')) {\n if (this.options.debug && window.console && console.warn) {\n console.warn(\n 'Select2: The `data-select2-tags` attribute has been changed to ' +\n 'use the `data-data` and `data-tags=\"true\"` attributes and will be ' +\n 'removed in future versions of Select2.'\n );\n }\n\n Utils.StoreData($e[0], 'data', Utils.GetData($e[0], 'select2Tags'));\n Utils.StoreData($e[0], 'tags', true);\n }\n\n if (Utils.GetData($e[0], 'ajaxUrl')) {\n if (this.options.debug && window.console && console.warn) {\n console.warn(\n 'Select2: The `data-ajax-url` attribute has been changed to ' +\n '`data-ajax--url` and support for the old attribute will be removed' +\n ' in future versions of Select2.'\n );\n }\n\n $e.attr('ajax--url', Utils.GetData($e[0], 'ajaxUrl'));\n Utils.StoreData($e[0], 'ajax-Url', Utils.GetData($e[0], 'ajaxUrl'));\n }\n\n var dataset = {};\n\n function upperCaseLetter(_, letter) {\n return letter.toUpperCase();\n }\n\n // Pre-load all of the attributes which are prefixed with `data-`\n for (var attr = 0; attr < $e[0].attributes.length; attr++) {\n var attributeName = $e[0].attributes[attr].name;\n var prefix = 'data-';\n\n if (attributeName.substr(0, prefix.length) == prefix) {\n // Get the contents of the attribute after `data-`\n var dataName = attributeName.substring(prefix.length);\n\n // Get the data contents from the consistent source\n // This is more than likely the jQuery data helper\n var dataValue = Utils.GetData($e[0], dataName);\n\n // camelCase the attribute name to match the spec\n var camelDataName = dataName.replace(/-([a-z])/g, upperCaseLetter);\n\n // Store the data attribute contents into the dataset since\n dataset[camelDataName] = dataValue;\n }\n }\n\n // Prefer the element's `dataset` attribute if it exists\n // jQuery 1.x does not correctly handle data attributes with multiple dashes\n if ($.fn.jquery && $.fn.jquery.substr(0, 2) == '1.' && $e[0].dataset) {\n dataset = $.extend(true, {}, $e[0].dataset, dataset);\n }\n\n // Prefer our internal data cache if it exists\n var data = $.extend(true, {}, Utils.GetData($e[0]), dataset);\n\n data = Utils._convertData(data);\n\n for (var key in data) {\n if ($.inArray(key, excludedData) > -1) {\n continue;\n }\n\n if ($.isPlainObject(this.options[key])) {\n $.extend(this.options[key], data[key]);\n } else {\n this.options[key] = data[key];\n }\n }\n\n return this;\n };\n\n Options.prototype.get = function (key) {\n return this.options[key];\n };\n\n Options.prototype.set = function (key, val) {\n this.options[key] = val;\n };\n\n return Options;\n});\n\nS2.define('select2/core',[\n 'jquery',\n './options',\n './utils',\n './keys'\n], function ($, Options, Utils, KEYS) {\n var Select2 = function ($element, options) {\n if (Utils.GetData($element[0], 'select2') != null) {\n Utils.GetData($element[0], 'select2').destroy();\n }\n\n this.$element = $element;\n\n this.id = this._generateId($element);\n\n options = options || {};\n\n this.options = new Options(options, $element);\n\n Select2.__super__.constructor.call(this);\n\n // Set up the tabindex\n\n var tabindex = $element.attr('tabindex') || 0;\n Utils.StoreData($element[0], 'old-tabindex', tabindex);\n $element.attr('tabindex', '-1');\n\n // Set up containers and adapters\n\n var DataAdapter = this.options.get('dataAdapter');\n this.dataAdapter = new DataAdapter($element, this.options);\n\n var $container = this.render();\n\n this._placeContainer($container);\n\n var SelectionAdapter = this.options.get('selectionAdapter');\n this.selection = new SelectionAdapter($element, this.options);\n this.$selection = this.selection.render();\n\n this.selection.position(this.$selection, $container);\n\n var DropdownAdapter = this.options.get('dropdownAdapter');\n this.dropdown = new DropdownAdapter($element, this.options);\n this.$dropdown = this.dropdown.render();\n\n this.dropdown.position(this.$dropdown, $container);\n\n var ResultsAdapter = this.options.get('resultsAdapter');\n this.results = new ResultsAdapter($element, this.options, this.dataAdapter);\n this.$results = this.results.render();\n\n this.results.position(this.$results, this.$dropdown);\n\n // Bind events\n\n var self = this;\n\n // Bind the container to all of the adapters\n this._bindAdapters();\n\n // Register any DOM event handlers\n this._registerDomEvents();\n\n // Register any internal event handlers\n this._registerDataEvents();\n this._registerSelectionEvents();\n this._registerDropdownEvents();\n this._registerResultsEvents();\n this._registerEvents();\n\n // Set the initial state\n this.dataAdapter.current(function (initialData) {\n self.trigger('selection:update', {\n data: initialData\n });\n });\n\n // Hide the original select\n $element.addClass('select2-hidden-accessible');\n $element.attr('aria-hidden', 'true');\n\n // Synchronize any monitored attributes\n this._syncAttributes();\n\n Utils.StoreData($element[0], 'select2', this);\n\n // Ensure backwards compatibility with $element.data('select2').\n $element.data('select2', this);\n };\n\n Utils.Extend(Select2, Utils.Observable);\n\n Select2.prototype._generateId = function ($element) {\n var id = '';\n\n if ($element.attr('id') != null) {\n id = $element.attr('id');\n } else if ($element.attr('name') != null) {\n id = $element.attr('name') + '-' + Utils.generateChars(2);\n } else {\n id = Utils.generateChars(4);\n }\n\n id = id.replace(/(:|\\.|\\[|\\]|,)/g, '');\n id = 'select2-' + id;\n\n return id;\n };\n\n Select2.prototype._placeContainer = function ($container) {\n $container.insertAfter(this.$element);\n\n var width = this._resolveWidth(this.$element, this.options.get('width'));\n\n if (width != null) {\n $container.css('width', width);\n }\n };\n\n Select2.prototype._resolveWidth = function ($element, method) {\n var WIDTH = /^width:(([-+]?([0-9]*\\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;\n\n if (method == 'resolve') {\n var styleWidth = this._resolveWidth($element, 'style');\n\n if (styleWidth != null) {\n return styleWidth;\n }\n\n return this._resolveWidth($element, 'element');\n }\n\n if (method == 'element') {\n var elementWidth = $element.outerWidth(false);\n\n if (elementWidth <= 0) {\n return 'auto';\n }\n\n return elementWidth + 'px';\n }\n\n if (method == 'style') {\n var style = $element.attr('style');\n\n if (typeof(style) !== 'string') {\n return null;\n }\n\n var attrs = style.split(';');\n\n for (var i = 0, l = attrs.length; i < l; i = i + 1) {\n var attr = attrs[i].replace(/\\s/g, '');\n var matches = attr.match(WIDTH);\n\n if (matches !== null && matches.length >= 1) {\n return matches[1];\n }\n }\n\n return null;\n }\n\n if (method == 'computedstyle') {\n var computedStyle = window.getComputedStyle($element[0]);\n\n return computedStyle.width;\n }\n\n return method;\n };\n\n Select2.prototype._bindAdapters = function () {\n this.dataAdapter.bind(this, this.$container);\n this.selection.bind(this, this.$container);\n\n this.dropdown.bind(this, this.$container);\n this.results.bind(this, this.$container);\n };\n\n Select2.prototype._registerDomEvents = function () {\n var self = this;\n\n this.$element.on('change.select2', function () {\n self.dataAdapter.current(function (data) {\n self.trigger('selection:update', {\n data: data\n });\n });\n });\n\n this.$element.on('focus.select2', function (evt) {\n self.trigger('focus', evt);\n });\n\n this._syncA = Utils.bind(this._syncAttributes, this);\n this._syncS = Utils.bind(this._syncSubtree, this);\n\n if (this.$element[0].attachEvent) {\n this.$element[0].attachEvent('onpropertychange', this._syncA);\n }\n\n var observer = window.MutationObserver ||\n window.WebKitMutationObserver ||\n window.MozMutationObserver\n ;\n\n if (observer != null) {\n this._observer = new observer(function (mutations) {\n $.each(mutations, self._syncA);\n $.each(mutations, self._syncS);\n });\n this._observer.observe(this.$element[0], {\n attributes: true,\n childList: true,\n subtree: false\n });\n } else if (this.$element[0].addEventListener) {\n this.$element[0].addEventListener(\n 'DOMAttrModified',\n self._syncA,\n false\n );\n this.$element[0].addEventListener(\n 'DOMNodeInserted',\n self._syncS,\n false\n );\n this.$element[0].addEventListener(\n 'DOMNodeRemoved',\n self._syncS,\n false\n );\n }\n };\n\n Select2.prototype._registerDataEvents = function () {\n var self = this;\n\n this.dataAdapter.on('*', function (name, params) {\n self.trigger(name, params);\n });\n };\n\n Select2.prototype._registerSelectionEvents = function () {\n var self = this;\n var nonRelayEvents = ['toggle', 'focus'];\n\n this.selection.on('toggle', function () {\n self.toggleDropdown();\n });\n\n this.selection.on('focus', function (params) {\n self.focus(params);\n });\n\n this.selection.on('*', function (name, params) {\n if ($.inArray(name, nonRelayEvents) !== -1) {\n return;\n }\n\n self.trigger(name, params);\n });\n };\n\n Select2.prototype._registerDropdownEvents = function () {\n var self = this;\n\n this.dropdown.on('*', function (name, params) {\n self.trigger(name, params);\n });\n };\n\n Select2.prototype._registerResultsEvents = function () {\n var self = this;\n\n this.results.on('*', function (name, params) {\n self.trigger(name, params);\n });\n };\n\n Select2.prototype._registerEvents = function () {\n var self = this;\n\n this.on('open', function () {\n self.$container.addClass('select2-container--open');\n });\n\n this.on('close', function () {\n self.$container.removeClass('select2-container--open');\n });\n\n this.on('enable', function () {\n self.$container.removeClass('select2-container--disabled');\n });\n\n this.on('disable', function () {\n self.$container.addClass('select2-container--disabled');\n });\n\n this.on('blur', function () {\n self.$container.removeClass('select2-container--focus');\n });\n\n this.on('query', function (params) {\n if (!self.isOpen()) {\n self.trigger('open', {});\n }\n\n this.dataAdapter.query(params, function (data) {\n self.trigger('results:all', {\n data: data,\n query: params\n });\n });\n });\n\n this.on('query:append', function (params) {\n this.dataAdapter.query(params, function (data) {\n self.trigger('results:append', {\n data: data,\n query: params\n });\n });\n });\n\n this.on('keypress', function (evt) {\n var key = evt.which;\n\n if (self.isOpen()) {\n if (key === KEYS.ESC || key === KEYS.TAB ||\n (key === KEYS.UP && evt.altKey)) {\n self.close();\n\n evt.preventDefault();\n } else if (key === KEYS.ENTER) {\n self.trigger('results:select', {});\n\n evt.preventDefault();\n } else if ((key === KEYS.SPACE && evt.ctrlKey)) {\n self.trigger('results:toggle', {});\n\n evt.preventDefault();\n } else if (key === KEYS.UP) {\n self.trigger('results:previous', {});\n\n evt.preventDefault();\n } else if (key === KEYS.DOWN) {\n self.trigger('results:next', {});\n\n evt.preventDefault();\n }\n } else {\n if (key === KEYS.ENTER || key === KEYS.SPACE ||\n (key === KEYS.DOWN && evt.altKey)) {\n self.open();\n\n evt.preventDefault();\n }\n }\n });\n };\n\n Select2.prototype._syncAttributes = function () {\n this.options.set('disabled', this.$element.prop('disabled'));\n\n if (this.options.get('disabled')) {\n if (this.isOpen()) {\n this.close();\n }\n\n this.trigger('disable', {});\n } else {\n this.trigger('enable', {});\n }\n };\n\n Select2.prototype._syncSubtree = function (evt, mutations) {\n var changed = false;\n var self = this;\n\n // Ignore any mutation events raised for elements that aren't options or\n // optgroups. This handles the case when the select element is destroyed\n if (\n evt && evt.target && (\n evt.target.nodeName !== 'OPTION' && evt.target.nodeName !== 'OPTGROUP'\n )\n ) {\n return;\n }\n\n if (!mutations) {\n // If mutation events aren't supported, then we can only assume that the\n // change affected the selections\n changed = true;\n } else if (mutations.addedNodes && mutations.addedNodes.length > 0) {\n for (var n = 0; n < mutations.addedNodes.length; n++) {\n var node = mutations.addedNodes[n];\n\n if (node.selected) {\n changed = true;\n }\n }\n } else if (mutations.removedNodes && mutations.removedNodes.length > 0) {\n changed = true;\n }\n\n // Only re-pull the data if we think there is a change\n if (changed) {\n this.dataAdapter.current(function (currentData) {\n self.trigger('selection:update', {\n data: currentData\n });\n });\n }\n };\n\n /**\n * Override the trigger method to automatically trigger pre-events when\n * there are events that can be prevented.\n */\n Select2.prototype.trigger = function (name, args) {\n var actualTrigger = Select2.__super__.trigger;\n var preTriggerMap = {\n 'open': 'opening',\n 'close': 'closing',\n 'select': 'selecting',\n 'unselect': 'unselecting',\n 'clear': 'clearing'\n };\n\n if (args === undefined) {\n args = {};\n }\n\n if (name in preTriggerMap) {\n var preTriggerName = preTriggerMap[name];\n var preTriggerArgs = {\n prevented: false,\n name: name,\n args: args\n };\n\n actualTrigger.call(this, preTriggerName, preTriggerArgs);\n\n if (preTriggerArgs.prevented) {\n args.prevented = true;\n\n return;\n }\n }\n\n actualTrigger.call(this, name, args);\n };\n\n Select2.prototype.toggleDropdown = function () {\n if (this.options.get('disabled')) {\n return;\n }\n\n if (this.isOpen()) {\n this.close();\n } else {\n this.open();\n }\n };\n\n Select2.prototype.open = function () {\n if (this.isOpen()) {\n return;\n }\n\n this.trigger('query', {});\n };\n\n Select2.prototype.close = function () {\n if (!this.isOpen()) {\n return;\n }\n\n this.trigger('close', {});\n };\n\n Select2.prototype.isOpen = function () {\n return this.$container.hasClass('select2-container--open');\n };\n\n Select2.prototype.hasFocus = function () {\n return this.$container.hasClass('select2-container--focus');\n };\n\n Select2.prototype.focus = function (data) {\n // No need to re-trigger focus events if we are already focused\n if (this.hasFocus()) {\n return;\n }\n\n this.$container.addClass('select2-container--focus');\n this.trigger('focus', {});\n };\n\n Select2.prototype.enable = function (args) {\n if (this.options.get('debug') && window.console && console.warn) {\n console.warn(\n 'Select2: The `select2(\"enable\")` method has been deprecated and will' +\n ' be removed in later Select2 versions. Use $element.prop(\"disabled\")' +\n ' instead.'\n );\n }\n\n if (args == null || args.length === 0) {\n args = [true];\n }\n\n var disabled = !args[0];\n\n this.$element.prop('disabled', disabled);\n };\n\n Select2.prototype.data = function () {\n if (this.options.get('debug') &&\n arguments.length > 0 && window.console && console.warn) {\n console.warn(\n 'Select2: Data can no longer be set using `select2(\"data\")`. You ' +\n 'should consider setting the value instead using `$element.val()`.'\n );\n }\n\n var data = [];\n\n this.dataAdapter.current(function (currentData) {\n data = currentData;\n });\n\n return data;\n };\n\n Select2.prototype.val = function (args) {\n if (this.options.get('debug') && window.console && console.warn) {\n console.warn(\n 'Select2: The `select2(\"val\")` method has been deprecated and will be' +\n ' removed in later Select2 versions. Use $element.val() instead.'\n );\n }\n\n if (args == null || args.length === 0) {\n return this.$element.val();\n }\n\n var newVal = args[0];\n\n if ($.isArray(newVal)) {\n newVal = $.map(newVal, function (obj) {\n return obj.toString();\n });\n }\n\n this.$element.val(newVal).trigger('change');\n };\n\n Select2.prototype.destroy = function () {\n this.$container.remove();\n\n if (this.$element[0].detachEvent) {\n this.$element[0].detachEvent('onpropertychange', this._syncA);\n }\n\n if (this._observer != null) {\n this._observer.disconnect();\n this._observer = null;\n } else if (this.$element[0].removeEventListener) {\n this.$element[0]\n .removeEventListener('DOMAttrModified', this._syncA, false);\n this.$element[0]\n .removeEventListener('DOMNodeInserted', this._syncS, false);\n this.$element[0]\n .removeEventListener('DOMNodeRemoved', this._syncS, false);\n }\n\n this._syncA = null;\n this._syncS = null;\n\n this.$element.off('.select2');\n this.$element.attr('tabindex',\n Utils.GetData(this.$element[0], 'old-tabindex'));\n\n this.$element.removeClass('select2-hidden-accessible');\n this.$element.attr('aria-hidden', 'false');\n Utils.RemoveData(this.$element[0]);\n this.$element.removeData('select2');\n\n this.dataAdapter.destroy();\n this.selection.destroy();\n this.dropdown.destroy();\n this.results.destroy();\n\n this.dataAdapter = null;\n this.selection = null;\n this.dropdown = null;\n this.results = null;\n };\n\n Select2.prototype.render = function () {\n var $container = $(\n '<span class=\"select2 select2-container\">' +\n '<span class=\"selection\"></span>' +\n '<span class=\"dropdown-wrapper\" aria-hidden=\"true\"></span>' +\n '</span>'\n );\n\n $container.attr('dir', this.options.get('dir'));\n\n this.$container = $container;\n\n this.$container.addClass('select2-container--' + this.options.get('theme'));\n\n Utils.StoreData($container[0], 'element', this.$element);\n\n return $container;\n };\n\n return Select2;\n});\n\nS2.define('jquery-mousewheel',[\n 'jquery'\n], function ($) {\n // Used to shim jQuery.mousewheel for non-full builds.\n return $;\n});\n\nS2.define('jquery.select2',[\n 'jquery',\n 'jquery-mousewheel',\n\n './select2/core',\n './select2/defaults',\n './select2/utils'\n], function ($, _, Select2, Defaults, Utils) {\n if ($.fn.select2 == null) {\n // All methods that should return the element\n var thisMethods = ['open', 'close', 'destroy'];\n\n $.fn.select2 = function (options) {\n options = options || {};\n\n if (typeof options === 'object') {\n this.each(function () {\n var instanceOptions = $.extend(true, {}, options);\n\n var instance = new Select2($(this), instanceOptions);\n });\n\n return this;\n } else if (typeof options === 'string') {\n var ret;\n var args = Array.prototype.slice.call(arguments, 1);\n\n this.each(function () {\n var instance = Utils.GetData(this, 'select2');\n\n if (instance == null && window.console && console.error) {\n console.error(\n 'The select2(\\'' + options + '\\') method was called on an ' +\n 'element that is not using Select2.'\n );\n }\n\n ret = instance[options].apply(instance, args);\n });\n\n // Check if we should be returning `this`\n if ($.inArray(options, thisMethods) > -1) {\n return this;\n }\n\n return ret;\n } else {\n throw new Error('Invalid arguments for Select2: ' + options);\n }\n };\n }\n\n if ($.fn.select2.defaults == null) {\n $.fn.select2.defaults = Defaults;\n }\n\n return Select2;\n});\n\n // Return the AMD loader configuration so it can be used outside of this file\n return {\n define: S2.define,\n require: S2.require\n };\n}());\n\n // Autoload the jQuery bindings\n // We know that all of the modules exist above this, so we're safe\n var select2 = S2.require('jquery.select2');\n\n // Hold the AMD module references on the jQuery function that was just loaded\n // This allows Select2 to use the internal loader outside of this file, such\n // as in the language files.\n jQuery.fn.select2.amd = S2;\n\n // Return the Select2 instance for anyone who is importing it.\n return select2;\n}));\n","/*! smooth-scroll v14.2.1 | (c) 2018 Chris Ferdinandi | MIT License | http://github.com/cferdinandi/smooth-scroll */\nwindow.Element&&!Element.prototype.closest&&(Element.prototype.closest=function(e){var t,n=(this.document||this.ownerDocument).querySelectorAll(e),o=this;do{for(t=n.length;--t>=0&&n.item(t)!==o;);}while(t<0&&(o=o.parentElement));return o}),(function(){function e(e,t){t=t||{bubbles:!1,cancelable:!1,detail:void 0};var n=document.createEvent(\"CustomEvent\");return n.initCustomEvent(e,t.bubbles,t.cancelable,t.detail),n}if(\"function\"==typeof window.CustomEvent)return!1;e.prototype=window.Event.prototype,window.CustomEvent=e})(),(function(){for(var e=0,t=[\"ms\",\"moz\",\"webkit\",\"o\"],n=0;n<t.length&&!window.requestAnimationFrame;++n)window.requestAnimationFrame=window[t[n]+\"RequestAnimationFrame\"],window.cancelAnimationFrame=window[t[n]+\"CancelAnimationFrame\"]||window[t[n]+\"CancelRequestAnimationFrame\"];window.requestAnimationFrame||(window.requestAnimationFrame=function(t,n){var o=(new Date).getTime(),i=Math.max(0,16-(o-e)),r=window.setTimeout((function(){t(o+i)}),i);return e=o+i,r}),window.cancelAnimationFrame||(window.cancelAnimationFrame=function(e){clearTimeout(e)})})(),(function(e,t){\"function\"==typeof define&&define.amd?define([],(function(){return t(e)})):\"object\"==typeof exports?module.exports=t(e):e.SmoothScroll=t(e)})(\"undefined\"!=typeof global?global:\"undefined\"!=typeof window?window:this,(function(e){\"use strict\";var t={ignore:\"[data-scroll-ignore]\",header:null,topOnEmptyHash:!0,speed:500,clip:!0,offset:0,easing:\"easeInOutCubic\",customEasing:null,updateURL:!0,popstate:!0,emitEvents:!0},n=function(){return\"querySelector\"in document&&\"addEventListener\"in e&&\"requestAnimationFrame\"in e&&\"closest\"in e.Element.prototype},o=function(){for(var e={},t=0;t<arguments.length;t++)!(function(t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(arguments[t]);return e},i=function(t){return!!(\"matchMedia\"in e&&e.matchMedia(\"(prefers-reduced-motion)\").matches)},r=function(t){return parseInt(e.getComputedStyle(t).height,10)},a=function(e){var t;try{t=decodeURIComponent(e)}catch(n){t=e}return t},u=function(e){\"#\"===e.charAt(0)&&(e=e.substr(1));for(var t,n=String(e),o=n.length,i=-1,r=\"\",a=n.charCodeAt(0);++i<o;){if(0===(t=n.charCodeAt(i)))throw new InvalidCharacterError(\"Invalid character: the input contains U+0000.\");t>=1&&t<=31||127==t||0===i&&t>=48&&t<=57||1===i&&t>=48&&t<=57&&45===a?r+=\"\\\\\"+t.toString(16)+\" \":r+=t>=128||45===t||95===t||t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122?n.charAt(i):\"\\\\\"+n.charAt(i)}var u;try{u=decodeURIComponent(\"#\"+r)}catch(e){u=\"#\"+r}return u},c=function(e,t){var n;return\"easeInQuad\"===e.easing&&(n=t*t),\"easeOutQuad\"===e.easing&&(n=t*(2-t)),\"easeInOutQuad\"===e.easing&&(n=t<.5?2*t*t:(4-2*t)*t-1),\"easeInCubic\"===e.easing&&(n=t*t*t),\"easeOutCubic\"===e.easing&&(n=--t*t*t+1),\"easeInOutCubic\"===e.easing&&(n=t<.5?4*t*t*t:(t-1)*(2*t-2)*(2*t-2)+1),\"easeInQuart\"===e.easing&&(n=t*t*t*t),\"easeOutQuart\"===e.easing&&(n=1- --t*t*t*t),\"easeInOutQuart\"===e.easing&&(n=t<.5?8*t*t*t*t:1-8*--t*t*t*t),\"easeInQuint\"===e.easing&&(n=t*t*t*t*t),\"easeOutQuint\"===e.easing&&(n=1+--t*t*t*t*t),\"easeInOutQuint\"===e.easing&&(n=t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t),e.customEasing&&(n=e.customEasing(t)),n||t},s=function(){return Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,document.body.offsetHeight,document.documentElement.offsetHeight,document.body.clientHeight,document.documentElement.clientHeight)},l=function(t,n,o,i){var r=0;if(t.offsetParent)do{r+=t.offsetTop,t=t.offsetParent}while(t);return r=Math.max(r-n-o,0),i&&(r=Math.min(r,s()-e.innerHeight)),r},m=function(e){return e?r(e)+e.offsetTop:0},d=function(e,t,n){t||history.pushState&&n.updateURL&&history.pushState({smoothScroll:JSON.stringify(n),anchor:e.id},document.title,e===document.documentElement?\"#top\":\"#\"+e.id)},f=function(t,n,o){0===t&&document.body.focus(),o||(t.focus(),document.activeElement!==t&&(t.setAttribute(\"tabindex\",\"-1\"),t.focus(),t.style.outline=\"none\"),e.scrollTo(0,n))},h=function(t,n,o,i){if(n.emitEvents&&\"function\"==typeof e.CustomEvent){var r=new CustomEvent(t,{bubbles:!0,detail:{anchor:o,toggle:i}});document.dispatchEvent(r)}};return function(r,p){var g,v,w,y,E,b,S,A={};A.cancelScroll=function(e){cancelAnimationFrame(S),S=null,e||h(\"scrollCancel\",g)},A.animateScroll=function(n,i,r){var a=o(g||t,r||{}),u=\"[object Number]\"===Object.prototype.toString.call(n),p=u||!n.tagName?null:n;if(u||p){var v=e.pageYOffset;a.header&&!y&&(y=document.querySelector(a.header)),E||(E=m(y));var w,b,C,O=u?n:l(p,E,parseInt(\"function\"==typeof a.offset?a.offset(n,i):a.offset,10),a.clip),I=O-v,q=s(),F=0,L=function(t,o){var r=e.pageYOffset;if(t==o||r==o||(v<o&&e.innerHeight+r)>=q)return A.cancelScroll(!0),f(n,o,u),h(\"scrollStop\",a,n,i),w=null,S=null,!0},H=function(t){w||(w=t),F+=t-w,b=F/parseInt(a.speed,10),b=b>1?1:b,C=v+I*c(a,b),e.scrollTo(0,Math.floor(C)),L(C,O)||(S=e.requestAnimationFrame(H),w=t)};0===e.pageYOffset&&e.scrollTo(0,0),d(n,u,a),h(\"scrollStart\",a,n,i),A.cancelScroll(!0),e.requestAnimationFrame(H)}};var C=function(t){if(!i()&&0===t.button&&!t.metaKey&&!t.ctrlKey&&\"closest\"in t.target&&(w=t.target.closest(r))&&\"a\"===w.tagName.toLowerCase()&&!t.target.closest(g.ignore)&&w.hostname===e.location.hostname&&w.pathname===e.location.pathname&&/#/.test(w.href)){var n=u(a(w.hash)),o=g.topOnEmptyHash&&\"#\"===n?document.documentElement:document.querySelector(n);o=o||\"#top\"!==n?o:document.documentElement,o&&(t.preventDefault(),A.animateScroll(o,w))}},O=function(e){if(null!==history.state&&history.state.smoothScroll&&history.state.smoothScroll===JSON.stringify(g)&&history.state.anchor){var t=document.querySelector(u(a(history.state.anchor)));t&&A.animateScroll(t,null,{updateURL:!1})}},I=function(e){b||(b=setTimeout((function(){b=null,E=m(y)}),66))};return A.destroy=function(){g&&(document.removeEventListener(\"click\",C,!1),e.removeEventListener(\"resize\",I,!1),e.removeEventListener(\"popstate\",O,!1),A.cancelScroll(),g=null,v=null,w=null,y=null,E=null,b=null,S=null)},A.init=function(i){if(!n())throw\"Smooth Scroll: This browser does not support the required JavaScript methods and browser APIs.\";A.destroy(),g=o(t,i||{}),y=g.header?document.querySelector(g.header):null,E=m(y),document.addEventListener(\"click\",C,!1),y&&e.addEventListener(\"resize\",I,!1),g.updateURL&&g.popstate&&e.addEventListener(\"popstate\",O,!1)},A.init(p),A}}));","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","var map = {\n\t\"./bg.png\": \"./src/img/bg.png\",\n\t\"./photo1.png\": \"./src/img/photo1.png\",\n\t\"./photo2.jpg\": \"./src/img/photo2.jpg\",\n\t\"./photo3.svg\": \"./src/img/photo3.svg\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./src/img sync \\\\.(png|jpe?g|svg)$\";","module.exports = \"../img/bg.png\";","module.exports = \"../img/photo1.png\";","module.exports = \"../img/photo2.jpg\";","module.exports = \"../fonts/photo3.svg\";","function _gaLt(event) {\n if (typeof ga !== 'function') {\n return;\n }\n\n var el = event.srcElement || event.target;\n\n /* Loop up the DOM tree through parent elements if clicked element is not a link (eg: an image inside a link) */\n while (\n el &&\n (typeof el.tagName == 'undefined' ||\n el.tagName.toLowerCase() != 'a' ||\n !el.href)\n ) {\n el = el.parentNode;\n }\n\n if (el && el.href) {\n /* link */\n var link = el.href;\n if (link.indexOf(location.host) == -1 && !link.match(/^javascript:/i)) {\n /* external link */\n /* HitCallback function to either open link in either same or new window */\n var hitBack = function(link, target) {\n target ? window.open(link, target) : (window.location.href = link);\n };\n /* Is target set and not _(self|parent|top)? */\n var target =\n el.target && !el.target.match(/^_(self|parent|top)$/i)\n ? el.target\n : false;\n /* send event with callback */\n ga(\n 'send',\n 'event',\n 'Outgoing Links',\n link,\n document.location.pathname + document.location.search,\n { hitCallback: hitBack(link, target) },\n );\n\n /* Prevent standard click */\n event.preventDefault ? event.preventDefault() : (event.returnValue = !1);\n }\n }\n}\n\n/* Attach the event to all clicks in the document after page has loaded */\nvar w = window;\nw.addEventListener\n ? w.addEventListener(\n 'load',\n () => {\n document.body.addEventListener('click', _gaLt, !1);\n },\n !1,\n )\n : w.attachEvent &&\n w.attachEvent('onload', () => {\n document.body.attachEvent('onclick', _gaLt);\n });\n","const Obj = {\n init: () => {\n class GoogleMapsHtmlOverlay extends google.maps.OverlayView {\n constructor(options) {\n super();\n const ui = this;\n\n ui.setMap(options.map);\n ui.position = options.position;\n ui.html = options.html\n ? options.html\n : '<div class=\"mapboxgl-marker\"><i class=\"marker-icon fas fa-map-marker-alt\"></i></div>';\n ui.divClass = options.divClass;\n ui.align = options.align;\n ui.isDebugMode = options.debug;\n ui.onClick = options.onClick;\n ui.onMouseOver = options.onMouseOver;\n\n ui.isBoolean = (arg) => {\n if (typeof arg === 'boolean') {\n return true;\n } else {\n return false;\n }\n };\n\n ui.isNotUndefined = (arg) => {\n if (typeof arg !== 'undefined') {\n return true;\n } else {\n return false;\n }\n };\n\n ui.hasContent = (arg) => {\n if (arg.length > 0) {\n return true;\n } else {\n return false;\n }\n };\n\n ui.isString = (arg) => {\n if (typeof arg === 'string') {\n return true;\n } else {\n return false;\n }\n };\n\n ui.isFunction = (arg) => {\n if (typeof arg === 'function') {\n return true;\n } else {\n return false;\n }\n };\n }\n onAdd() {\n const ui = this;\n\n // Create div element.\n ui.div = document.createElement('div');\n ui.div.style.position = 'absolute';\n\n // Validate and set custom div class\n if (ui.isNotUndefined(ui.divClass) && ui.hasContent(ui.divClass))\n ui.div.className = ui.divClass;\n\n // Validate and set custom HTML\n if (\n ui.isNotUndefined(ui.html) &&\n ui.hasContent(ui.html) &&\n ui.isString(ui.html)\n )\n ui.div.innerHTML = ui.html;\n\n // If debug mode is enabled custom content will be replaced with debug content\n if (ui.isBoolean(ui.isDebugMode) && ui.isDebugMode) {\n ui.div.className = 'debug-mode';\n ui.div.innerHTML =\n '<div style=\"height: 10px; width: 10px; background: red; border-radius: 100%;\"></div>' +\n '<div style=\"position: absolute; top: 5px; padding: 5px; width: 130px; text-align: center; font-size: 18px; text-transform: uppercase; font-weight: bolder; background: red; color: white; font-family: Arial;\">Debug mode</div>';\n ui.div.setAttribute(\n 'style',\n 'position: absolute;' +\n 'border: 5px dashed red;' +\n 'height: 150px;' +\n 'width: 150px;' +\n 'display: flex;' +\n 'justify-content: center;' +\n 'align-items: center;',\n );\n }\n\n // Add element to clickable layer\n ui.getPanes().overlayMouseTarget.appendChild(ui.div);\n\n // Add listeners to the element.\n google.maps.event.addDomListener(ui.div, 'click', (event) => {\n google.maps.event.trigger(ui, 'click');\n if (ui.isFunction(ui.onClick)) ui.onClick();\n event.stopPropagation();\n });\n\n google.maps.event.addDomListener(ui.div, 'mouseover', (event) => {\n google.maps.event.trigger(ui, 'mouseover');\n if (ui.isFunction(ui.onMouseOver)) ui.onMouseOver();\n event.stopPropagation();\n });\n }\n\n draw() {\n const ui = this;\n let $div = $(ui.div).find(\n '.mapboxgl-marker,.marker-pin,.mapboxgl-popup,.popup',\n );\n if (!$div.length) {\n $div = $(ui.div);\n }\n\n // Calculate position of div\n const positionInPixels = ui\n .getProjection()\n .fromLatLngToDivPixel(new google.maps.LatLng(ui.position));\n\n // Align HTML overlay relative to original position\n const offset = {\n y: undefined,\n x: undefined,\n };\n const divWidth = $div.outerWidth();\n const divHeight = $div.outerHeight();\n\n switch (Array.isArray(ui.align) ? ui.align.join(' ') : '') {\n case 'left top':\n offset.y = divHeight;\n offset.x = divWidth;\n break;\n case 'left center':\n offset.y = divHeight / 2;\n offset.x = divWidth;\n break;\n case 'left bottom':\n offset.y = 0;\n offset.x = divWidth;\n break;\n case 'center top':\n offset.y = divHeight;\n offset.x = divWidth / 2;\n break;\n case 'center center':\n offset.y = divHeight / 2;\n offset.x = divWidth / 2;\n break;\n case 'center bottom':\n offset.y = 0;\n offset.x = divWidth / 2;\n break;\n case 'right top':\n offset.y = divHeight;\n offset.x = 0;\n break;\n case 'right center':\n offset.y = divHeight / 2;\n offset.x = 0;\n break;\n case 'right bottom':\n offset.y = 0;\n offset.x = 0;\n break;\n default:\n offset.y = divHeight / 2;\n offset.x = divWidth / 2;\n break;\n }\n\n // Set position\n ui.div.style.top = `${positionInPixels.y - offset.y}px`;\n ui.div.style.left = `${positionInPixels.x - offset.x}px`;\n }\n\n getPosition() {\n const ui = this;\n return ui.position;\n }\n\n getDiv() {\n const ui = this;\n return ui.div;\n }\n\n setPosition(position, align) {\n const ui = this;\n ui.position = position;\n ui.align = align;\n ui.draw();\n }\n }\n return GoogleMapsHtmlOverlay;\n },\n};\n\nexport default Obj;\n","'use strict';\n\nimport $ from 'jquery';\nimport Events from '../../_events';\nimport MarkerUI from './_map.google.marker';\n\nconst GoogleMapsDriver = (($) => {\n class GoogleMapsDriver {\n getName() {\n return 'GoogleMapsDriver';\n }\n\n init($el, config = []) {\n const ui = this;\n const W = window;\n\n ui.$el = $el;\n ui.config = config;\n ui.markers = [];\n\n W[`init${ui.getName()}`] = () => {\n ui.googleApiLoaded();\n };\n\n $('body').append(\n `<script async defer src=\"https://maps.googleapis.com/maps/api/js?key=${\n config['key']\n }&callback=init${ui.getName()}\"></script>`,\n );\n }\n\n googleApiLoaded() {\n const ui = this;\n\n const $el = ui.$el;\n const config = ui.config;\n const $mapDiv = $el.find('.mapAPI-map');\n\n const zoom = config['mapZoom'] ? config['mapZoom'] : 10;\n const center = config['center']\n ? {\n lat: config['center'][1],\n lng: config['center'][0],\n }\n : {\n lat: 0,\n lng: 0,\n };\n const style = config['style'] ? config['style'] : null;\n\n console.log(`${ui.getName()}: API is loaded`);\n // init fontawesome icons\n ui.MarkerUI = MarkerUI.init($);\n\n ui.map = new google.maps.Map($mapDiv[0], {\n zoom,\n center,\n fullscreenControl: true,\n styles: style,\n });\n\n ui.default_zoom = zoom;\n\n $mapDiv.addClass('mapboxgl-map');\n\n ui.popup = new ui.MarkerUI({\n map: ui.map,\n align: ['center', 'top'],\n divClass: 'mapboxgl-popup popup mapboxgl-popup-anchor-bottom d-none',\n html:\n '<div class=\"mapboxgl-popup-tip\"></div><div class=\"mapboxgl-popup-content\">' +\n '<div class=\"mapboxgl-popup-close-button\" type=\"button\" aria-label=\"Close popup\">×</div>' +\n '<div class=\"html\"></div>' +\n '</div>',\n });\n\n ui.geocoder = new google.maps.Geocoder();\n\n $el.trigger(Events.MAPAPILOADED);\n }\n\n addMarker(crds, config) {\n const ui = this;\n\n const pos = {\n lat: crds[1],\n lng: crds[0],\n };\n\n const marker = new ui.MarkerUI({\n position: pos,\n map: ui.map,\n align: ['center', 'top'],\n html: `<div class=\"mapboxgl-marker\"><div id=\"Marker${config['id']}\" data-id=\"${config['id']}\" class=\"marker\">${config['icon']}</div></div>`,\n onClick: () => {\n const $el = $(`#Marker${config['id']}`);\n ui.showPopup(pos, config['content']);\n\n $el.trigger(Events.MAPMARKERCLICK);\n },\n });\n\n ui.markers.push(marker);\n\n return marker;\n }\n\n showPopup(pos, content) {\n const ui = this;\n const $popup = $(ui.popup.getDiv());\n\n if (ui.config['flyToMarker']) {\n ui.map.setCenter(pos); // panTo\n ui.map.setZoom(18);\n }\n\n // keep it hidden to render content\n $popup.css({\n opacity: '0',\n });\n $popup.removeClass('d-none');\n\n $popup.find('.mapboxgl-popup-content .html').html(content);\n\n $popup.find('.mapboxgl-popup-close-button').on('click', (e) => {\n e.preventDefault();\n ui.hidePopup();\n });\n\n // set position when content was rendered\n ui.popup.setPosition(pos, ['center', 'top']);\n\n // display popup\n $popup.css({\n 'margin-top': '-1rem',\n opacity: '1',\n });\n }\n\n hidePopup() {\n const ui = this;\n const $popup = $(ui.popup.getDiv());\n\n $popup.addClass('d-none');\n ui.restoreBounds();\n\n ui.$el.trigger(Events.MAPPOPUPCLOSE);\n }\n\n geocode(addr, callback) {\n const ui = this;\n\n ui.geocoder.geocode(\n {\n address: addr,\n },\n (results, status) => {\n if (status === 'OK') {\n //results[0].geometry.location;\n\n if (typeof callback === 'function') {\n callback(results);\n }\n\n return results;\n } else {\n console.error(\n `${ui.getName()}: Geocode was not successful for the following reason: ${status}`,\n );\n }\n },\n );\n }\n\n reverseGeocode(latLng, callback) {\n const ui = this;\n\n ui.geocoder.geocode(\n {\n location: latlng,\n },\n (results, status) => {\n if (status === 'OK') {\n //results[0].formatted_address;\n\n if (typeof callback === 'function') {\n callback(results);\n }\n\n return results;\n } else {\n console.error(\n `${ui.getName()}: Reverse Geocoding was not successful for the following reason: ${status}`,\n );\n }\n },\n );\n }\n\n addGeoJson(config) {\n const ui = this;\n\n const firstMarker = config['geojson'].features[0].geometry.coordinates;\n //Map.setCenter(firstMarker);\n const bounds = new google.maps.LatLngBounds();\n\n // add markers to map\n config['geojson'].features.forEach((marker) => {\n const id = marker.id;\n const crds = marker.geometry.coordinates;\n const content = marker.properties.content;\n\n ui.addMarker(crds, {\n id,\n content,\n icon: marker.icon,\n flyToMarker: config['flyToMarker'],\n });\n\n bounds.extend({\n lat: crds[1],\n lng: crds[0],\n });\n });\n\n ui.map.fitBounds(bounds, {\n padding: 30,\n }); //panToBounds\n\n ui.default_bounds = bounds;\n ui.default_zoom = ui.map.getZoom();\n }\n\n getMap() {\n const ui = this;\n return ui.map;\n }\n\n getPopup() {\n const ui = this;\n return ui.popup;\n }\n\n restoreBounds() {\n const ui = this;\n\n if (ui.default_bounds) {\n ui.map.fitBounds(ui.default_bounds, {\n padding: 30,\n }); //panToBounds\n } else {\n if (ui.markers[0]) {\n ui.map.setCenter(ui.markers[0].getPosition());\n }\n\n ui.restoreZoom();\n }\n }\n\n restoreZoom() {\n const ui = this;\n\n ui.map.setZoom(ui.default_zoom);\n }\n }\n\n return GoogleMapsDriver;\n})($);\n\nexport default GoogleMapsDriver;\n","/**\n * Add your global events here\n */\n\nimport MAP_DRIVER from './_components/drivers/_map.google';\n//import MAP_DRIVER from './_components/drivers/_map.mapbox';\n\nconst CONSTS = {\n ENVS: [\n 'xs',\n 'sm',\n 'md',\n 'lg',\n 'xl',\n 'xxl',\n 'xxxl',\n ],\n MAP_DRIVER,\n};\n\nexport default CONSTS;\n","/**\n * Add your global events here\n */\n\nmodule.exports = {\n AJAX: 'ajax-load',\n LOADED: 'load',\n MAPLOADED: 'map-loaded',\n MAPAPILOADED: 'map-api-loaded',\n MAPMARKERCLICK: 'map-marker-click',\n MAPPOPUPCLOSE: 'map-popup-close',\n SCROLL: 'scroll',\n RESIZE: 'resize',\n SET_TARGET_UPDATE: 'set-target-update',\n RESTORE_FIELD: 'restore-field',\n FORM_INIT_BASICS: 'form-basics',\n FORM_INIT_STEPPED: 'form-init-stepped',\n FORM_INIT_VALIDATE: 'form-init-validate',\n FORM_INIT_VALIDATE_FIELD: 'form-init-validate-field',\n FORM_INIT_STORAGE: 'form-init-storage',\n FORM_VALIDATION_FAILED: 'form-validation-failed',\n FORM_STEPPED_NEW_STEP: 'form-new-step',\n FORM_STEPPED_FIRST_STEP: 'form-first-step',\n FORM_STEPPED_LAST_STEP: 'form-last-step',\n FORM_FIELDS: 'input,textarea,select',\n};\n","/*\n * Conflicts with 'bootstrap/js/dist/dropdown'\n */\n'use strict';\n\nimport $ from 'jquery';\nimport Events from '../_events';\nimport 'jquery-hoverintent/jquery.hoverIntent.js';\n\nconst HoverUI = (($) => {\n // Constants\n const W = window;\n const D = document;\n const $Html = $('html');\n const $Body = $('body');\n\n const NAME = 'jsHoverUI';\n const DATA_KEY = NAME;\n\n class HoverUI {\n // Constructor\n constructor(el) {\n const ui = this;\n const $el = $(el);\n ui.$el = $el;\n\n // find parent\n let $parent = $el.parents('.nav-item, .dropdown');\n $parent = $parent && $parent.length ? $parent.first() : null;\n //$parent = $parent ? $parent : $el.parent();\n ui.$parent = $parent;\n\n // find target\n let $target = $el.data('target');\n $target = $target && $target.length ? $target : null;\n $target = $target\n ? $target\n : $parent\n ? $parent.find('.dropdown-menu')\n : null;\n\n if (!$target || !$target.length) {\n console.warn(`${NAME}: Missing target for:`);\n console.warn($el);\n return;\n }\n\n ui.$target = $target;\n\n const $triger = $parent ? $parent : $el;\n ui.$triger = $triger;\n\n // integrate with dropdown-toggle\n $('[data-toggle=\"dropdown\"]').on('click touch', (e) => {\n ui.hide();\n });\n\n if (!W.isTouch) {\n $triger.hoverIntent({\n sensitivity: 10,\n interval: 50,\n over: () => {\n ui.show();\n },\n out: () => {\n ui.hide();\n },\n });\n }\n\n $el.on('click touch', (e) => {\n if (!$el.data('allow-click')) {\n e.preventDefault();\n }\n\n if (ui.isShown()) {\n ui.hide();\n } else {\n ui.show();\n }\n });\n\n $el.data(NAME, ui);\n $triger.addClass(`${NAME}-active`);\n }\n\n isShown() {\n return this.$target.hasClass('show');\n }\n\n show() {\n const ui = this;\n ui.$el\n .parents('.dropdown')\n .not('.active')\n .each((i, el) => {\n const $el = $(el);\n $el.find('.dropdown').removeClass('show');\n $el.addClass('show');\n });\n\n ui.$target.addClass('show');\n }\n\n hide() {\n const ui = this;\n const $el = ui.$target;\n $el.removeClass('show');\n $el.find('.dropdown-menu').removeClass('show');\n $el.parent('.dropdown').removeClass('show');\n }\n\n dispose() {\n const ui = this;\n const $el = ui.$el;\n\n ui.$triger.removeClass(`${NAME}-active`);\n $.removeData($el, DATA_KEY);\n\n ui.$el = null;\n ui.$parent = null;\n ui.$target = null;\n ui.$triger = null;\n }\n\n static _jQueryInterface() {\n return this.each(function() {\n // attach functionality to el\n const $el = $(this);\n let data = $el.data(DATA_KEY);\n\n if (!data) {\n data = new HoverUI(this);\n $el.data(DATA_KEY, data);\n }\n });\n }\n }\n\n // jQuery interface\n $.fn[NAME] = HoverUI._jQueryInterface;\n $.fn[NAME].Constructor = HoverUI;\n $.fn[NAME].noConflict = function() {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return HoverUI._jQueryInterface;\n };\n\n // auto-apply\n $('[data-toggle=\"hover\"]').ready(() => {\n $('[data-toggle=\"hover\"]').jsHoverUI();\n });\n\n // rewrite 'bootstrap/js/dist/dropdown'\n $('[data-toggle=\"dropdown\"]').on('click touch', (e) => {\n e.preventDefault();\n\n const $el = $(e.currentTarget);\n const $parent = $el.parent('.dropdown');\n\n // hide siblings\n $parent\n .parent()\n .find('.dropdown, .dropdown-menu')\n .removeClass('show');\n\n if ($parent.hasClass('show')) {\n $parent.removeClass('show');\n $parent.find('.dropdown-menu').removeClass('show');\n } else {\n $parent.addClass('show');\n $parent.find('.dropdown-menu').addClass('show');\n }\n });\n\n return HoverUI;\n})($);\n\nexport default HoverUI;\n","import $ from 'jquery';\n\nimport 'hammerjs/hammer';\nimport 'jquery-hammerjs/jquery.hammer';\n\nimport Events from '../_events';\n\nconst CarouselUI = (($) => {\n // Constants\n const NAME = 'CarouselUI';\n\n class CarouselUI {\n // Static methods\n\n static each(callback) {\n $('.js-carousel').each((i, e) => {\n callback(i, $(e));\n });\n }\n\n static init() {\n this.dispose();\n\n this.each((i, e) => {\n const $e = $(e),\n id = `Carousel${i}`;\n\n $e.attr('id', id);\n $e.data('id', i);\n\n const $items = $(e).find('.carousel-item'),\n count = $items.length;\n if (!count) {\n return;\n }\n\n // create carousel-controls\n if ($e.data('indicators')) {\n const $indicators = $('<ol class=\"carousel-indicators\"></ol>');\n $indicators.append(`<li data-target=\"#${ id }\" data-slide-to=\"0\" class=\"active\"></li>`);\n for (let i = 1; i < count; i++) {\n $indicators.append(`<li data-target=\"#${ id }\" data-slide-to=\"${ i }\"></li>`);\n }\n $e.prepend($indicators);\n }\n\n // create arrows\n if ($e.data('arrows')) {\n $e.prepend(`<i class=\"carousel-control-prev\" data-target=\"#${ id }\" role=\"button\" data-slide=\"prev\"><i class=\"fas fa-chevron-left\" aria-hidden=\"true\"></i><i class=\"sr-only\">Previous</i></i>`);\n $e.prepend(`<i class=\"carousel-control-next\" data-target=\"#${ id }\" role=\"button\" data-slide=\"next\"><i class=\"fas fa-chevron-right\" aria-hidden=\"true\"></i><i class=\"sr-only\">Next</i></i>`);\n }\n\n // init carousel\n $e.carousel();\n\n const $youtubeSlides = $e.find('iframe[src^=\"https://www.youtube.com/embed/\"]');\n\n $e.on('slide.bs.carousel', () => {\n if ($youtubeSlides.length) {\n $youtubeSlides.each((i, e) => {\n const $e = $(e);\n try {\n $e.data('player', new YT.Player(e, {\n events: {\n 'onReady': () => {\n $e.data('player').pauseVideo();\n },\n },\n }));\n\n $e.data('player').pauseVideo();\n } catch (e) {}\n });\n }\n });\n\n $e.find('.carousel-control-prev').on('click', (e) => {\n e.preventDefault();\n $e.carousel('prev');\n });\n\n $e.find('.carousel-control-next').on('click', (e) => {\n e.preventDefault();\n $e.carousel('next');\n });\n\n // init touch swipes\n $e.hammer().bind('swipeleft panleft', (e) => {\n $(event.target).carousel('next');\n });\n\n $e.hammer().bind('swiperight panright', (e) => {\n $(event.target).carousel('prev');\n });\n\n /*$e.find('.carousel-item').hammer().bind('tap', (event) => {\n $(event.target).carousel('next');\n });*/\n });\n }\n\n static dispose() {\n this.each((i, e) => {\n $(e).carousel('dispose');\n });\n }\n }\n\n $(window).on(`${Events.AJAX} ${Events.LOADED}`, () => {\n CarouselUI.init();\n });\n\n return CarouselUI;\n})($);\n\nexport default CarouselUI;\n","import $ from 'jquery';\n\nconst SlidingMenu = (($) => {\n // Constants\n const NAME = 'jsSlidingMenu';\n const DATA_KEY = NAME;\n\n class SlidingMenu {\n // Constructor\n constructor(element) {\n this._element = element;\n const $element = $(this._element);\n $element.addClass(`${NAME}-active`);\n\n // esc button\n $(window).on('keyup',((e) => {\n if (e.which === 27) {\n $element.find('.is-open[data-toggle=\"offcanvas\"]').click();\n }\n }));\n }\n\n // Public methods\n dispose() {\n console.log(`Disposing: ${NAME} elements`);\n\n $(this._element).removeClass(`${NAME}-active`);\n $.removeData(this._element, DATA_KEY);\n this._element = null;\n }\n\n static _jQueryInterface() {\n return this.each(function () {\n // attach functionality to element\n const $element = $(this);\n let data = $element.data(DATA_KEY);\n\n if (!data) {\n data = new SlidingMenu(this);\n $element.data(DATA_KEY, data);\n }\n });\n }\n }\n\n // jQuery interface\n $.fn[NAME] = SlidingMenu._jQueryInterface;\n $.fn[NAME].Constructor = SlidingMenu;\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return SlidingMenu._jQueryInterface;\n };\n\n // auto-apply\n $(`.ui.${NAME}`).ready(() => {\n $(`.ui.${NAME}`).jsSlidingMenu();\n });\n\n return SlidingMenu;\n})($);\n\nexport default SlidingMenu;\n","\"use strict\";\n\nconst CookieUI = (($) => {\n const D = document;\n const W = window;\n\n class CookieUI {\n static get(name) {\n return D.cookie.split(\"; \").reduce((r, v) => {\n const parts = v.split(\"=\");\n return parts[0] === name ? decodeURIComponent(parts[1]) : r;\n }, \"\");\n }\n\n static set(name, value, days = 7, path = \"/\") {\n const expires = new Date(Date.now() + days * 864e5).toUTCString();\n D.cookie =\n `${name \n }=${ \n encodeURIComponent(value) \n }; expires=${ \n expires \n }; path=${ \n path}`;\n }\n }\n\n //W.CookieUI = new CookieUI();\n\n return CookieUI;\n})($);\n\nexport default CookieUI;\n","\"use strict\";\n\nimport $ from 'jquery';\n\nimport Events from '../_events';\nimport CookieUI from './_ui.cookie';\n\nconst FlyoutUI = (($) => {\n const W = window;\n const D = document;\n const $Body = $('body');\n\n const NAME = 'FlyoutUI';\n const COOKIE = `${NAME}-hide`;\n const TIMEOUT = 2000;\n\n class FlyoutUI {\n static init() {\n const ui = this;\n\n ui.$modal = $(`.flyout-${NAME}`);\n\n if (!ui.$modal.length) {\n return false;\n }\n\n const $close = ui.$modal.find(`.flyout-${NAME}__close`);\n ui.$modal.data(NAME, ui);\n\n if ($close.length) {\n $close.on('click', () => {\n ui.hide();\n });\n }\n\n const hide = CookieUI.get(COOKIE);\n\n if (!$close.length || !hide || hide !== 'true') {\n setTimeout(() => {\n ui.show();\n }, TIMEOUT);\n }\n\n }\n\n static show(callback) {\n const ui = this;\n\n ui.$modal.addClass(`flyout-${NAME}__active`);\n }\n\n static hide(callback) {\n const ui = this;\n\n CookieUI.set(COOKIE, 'true', 1);\n ui.$modal.removeClass(`flyout-${NAME}__active`);\n }\n }\n\n $(W).on(`${Events.AJAX} ${Events.LOADED}`, () => {\n FlyoutUI.init();\n });\n\n W.FlyoutUI = FlyoutUI;\n\n return FlyoutUI;\n})($);\n\nexport default FlyoutUI;\n","/**\r\n * Sticky Sidebar JavaScript Plugin.\r\n * @version 3.3.1\r\n * @author Ahmed Bouhuolia <a.bouhuolia@gmail.com>\r\n * @license The MIT License (MIT)\r\n */\r\nconst StickySidebar = (() => {\r\n \r\n // ---------------------------------\r\n // # Define Constants\r\n // ---------------------------------\r\n //\r\n const EVENT_KEY = '.stickySidebar';\r\n const VERSION = '3.3.1';\r\n \r\n const DEFAULTS = {\r\n \r\n /**\r\n * Additional top spacing of the element when it becomes sticky.\r\n * @type {Numeric|Function}\r\n */\r\n topSpacing: 0,\r\n \r\n /**\r\n * Additional bottom spacing of the element when it becomes sticky.\r\n * @type {Numeric|Function}\r\n */\r\n bottomSpacing: 0,\r\n \r\n /**\r\n * Container sidebar selector to know what the beginning and end of sticky element.\r\n * @type {String|False}\r\n */\r\n containerSelector: false,\r\n \r\n /**\r\n * Inner wrapper selector.\r\n * @type {String}\r\n */\r\n innerWrapperSelector: '.inner-wrapper-sticky',\r\n \r\n /**\r\n * The name of CSS class to apply to elements when they have become stuck.\r\n * @type {String|False}\r\n */\r\n stickyClass: 'is-affixed',\r\n \r\n /**\r\n * Detect when sidebar and its container change height so re-calculate their dimensions.\r\n * @type {Boolean}\r\n */\r\n resizeSensor: true,\r\n \r\n /**\r\n * The sidebar returns to its normal position if its width below this value.\r\n * @type {Numeric}\r\n */\r\n minWidth: false\r\n };\r\n \r\n // ---------------------------------\r\n // # Class Definition\r\n // ---------------------------------\r\n //\r\n /**\r\n * Sticky Sidebar Class.\r\n * @public\r\n */\r\n class StickySidebar{\r\n \r\n /**\r\n * Sticky Sidebar Constructor.\r\n * @constructor\r\n * @param {HTMLElement|String} sidebar - The sidebar element or sidebar selector.\r\n * @param {Object} options - The options of sticky sidebar.\r\n */\r\n constructor(sidebar, options = {}){\r\n this.options = StickySidebar.extend(DEFAULTS, options);\r\n \r\n // Sidebar element query if there's no one, throw error.\r\n this.sidebar = ('string' === typeof sidebar ) ? document.querySelector(sidebar) : sidebar;\r\n if( 'undefined' === typeof this.sidebar )\r\n throw new Error(\"There is no specific sidebar element.\");\r\n \r\n this.sidebarInner = false;\r\n this.container = this.sidebar.parentElement;\r\n \r\n // Current Affix Type of sidebar element.\r\n this.affixedType = 'STATIC';\r\n this.direction = 'down';\r\n this.support = {\r\n transform: false,\r\n transform3d: false\r\n };\r\n \r\n this._initialized = false;\r\n this._reStyle = false;\r\n this._breakpoint = false;\r\n this._resizeListeners = [];\r\n \r\n // Dimensions of sidebar, container and screen viewport.\r\n this.dimensions = {\r\n translateY: 0,\r\n topSpacing: 0,\r\n lastTopSpacing: 0,\r\n bottomSpacing: 0,\r\n lastBottomSpacing: 0,\r\n sidebarHeight: 0,\r\n sidebarWidth: 0,\r\n containerTop: 0,\r\n containerHeight: 0,\r\n viewportHeight: 0,\r\n viewportTop: 0, \r\n lastViewportTop: 0,\r\n };\r\n \r\n // Bind event handlers for referencability.\r\n ['handleEvent'].forEach( (method) => {\r\n this[method] = this[method].bind(this);\r\n });\r\n \r\n // Initialize sticky sidebar for first time.\r\n this.initialize();\r\n }\r\n \r\n /**\r\n * Initializes the sticky sidebar by adding inner wrapper, define its container, \r\n * min-width breakpoint, calculating dimensions, adding helper classes and inline style.\r\n * @private\r\n */\r\n initialize(){\r\n this._setSupportFeatures();\r\n \r\n // Get sticky sidebar inner wrapper, if not found, will create one.\r\n if( this.options.innerWrapperSelector ){\r\n this.sidebarInner = this.sidebar.querySelector(this.options.innerWrapperSelector);\r\n \r\n if( null === this.sidebarInner )\r\n this.sidebarInner = false;\r\n }\r\n \r\n if( ! this.sidebarInner ){\r\n let wrapper = document.createElement('div');\r\n wrapper.setAttribute('class', 'inner-wrapper-sticky');\r\n this.sidebar.appendChild(wrapper);\r\n \r\n while( this.sidebar.firstChild != wrapper )\r\n wrapper.appendChild(this.sidebar.firstChild);\r\n \r\n this.sidebarInner = this.sidebar.querySelector('.inner-wrapper-sticky');\r\n }\r\n \r\n // Container wrapper of the sidebar.\r\n if( this.options.containerSelector ){\r\n let containers = document.querySelectorAll(this.options.containerSelector);\r\n containers = Array.prototype.slice.call(containers);\r\n \r\n containers.forEach((container, item) => {\r\n if( ! container.contains(this.sidebar) ) return;\r\n this.container = container;\r\n });\r\n \r\n if( ! containers.length )\r\n throw new Error(\"The container does not contains on the sidebar.\");\r\n }\r\n \r\n // If top/bottom spacing is not function parse value to integer.\r\n if( 'function' !== typeof this.options.topSpacing )\r\n this.options.topSpacing = parseInt(this.options.topSpacing) || 0;\r\n \r\n if( 'function' !== typeof this.options.bottomSpacing )\r\n this.options.bottomSpacing = parseInt(this.options.bottomSpacing) || 0;\r\n \r\n // Breakdown sticky sidebar if screen width below `options.minWidth`.\r\n this._widthBreakpoint();\r\n \r\n // Calculate dimensions of sidebar, container and viewport.\r\n this.calcDimensions();\r\n \r\n // Affix sidebar in proper position.\r\n this.stickyPosition();\r\n \r\n // Bind all events.\r\n this.bindEvents();\r\n \r\n // Inform other properties the sticky sidebar is initialized.\r\n this._initialized = true;\r\n }\r\n \r\n /**\r\n * Bind all events of sticky sidebar plugin.\r\n * @protected\r\n */\r\n bindEvents(){\r\n window.addEventListener('resize', this, {passive: true, capture: false});\r\n window.addEventListener('scroll', this, {passive: true, capture: false});\r\n \r\n this.sidebar.addEventListener('update' + EVENT_KEY, this);\r\n \r\n if( this.options.resizeSensor && 'undefined' !== typeof ResizeSensor ){\r\n new ResizeSensor(this.sidebarInner, this.handleEvent);\r\n new ResizeSensor(this.container, this.handleEvent);\r\n }\r\n }\r\n \r\n /**\r\n * Handles all events of the plugin.\r\n * @param {Object} event - Event object passed from listener.\r\n */\r\n handleEvent(event){\r\n this.updateSticky(event);\r\n }\r\n \r\n /**\r\n * Calculates dimensions of sidebar, container and screen viewpoint\r\n * @public\r\n */\r\n calcDimensions(){\r\n if( this._breakpoint ) return;\r\n var dims = this.dimensions;\r\n \r\n // Container of sticky sidebar dimensions.\r\n dims.containerTop = StickySidebar.offsetRelative(this.container).top;\r\n dims.containerHeight = this.container.clientHeight;\r\n dims.containerBottom = dims.containerTop + dims.containerHeight;\r\n \r\n // Sidebar dimensions.\r\n dims.sidebarHeight = this.sidebarInner.offsetHeight;\r\n dims.sidebarWidth = this.sidebar.offsetWidth;\r\n \r\n // Screen viewport dimensions.\r\n dims.viewportHeight = window.innerHeight;\r\n \r\n this._calcDimensionsWithScroll();\r\n }\r\n \r\n /**\r\n * Some dimensions values need to be up-to-date when scrolling the page.\r\n * @private\r\n */\r\n _calcDimensionsWithScroll(){\r\n var dims = this.dimensions;\r\n \r\n dims.sidebarLeft = StickySidebar.offsetRelative(this.sidebar).left;\r\n \r\n dims.viewportTop = document.documentElement.scrollTop || document.body.scrollTop;\r\n dims.viewportBottom = dims.viewportTop + dims.viewportHeight;\r\n dims.viewportLeft = document.documentElement.scrollLeft || document.body.scrollLeft;\r\n \r\n dims.topSpacing = this.options.topSpacing;\r\n dims.bottomSpacing = this.options.bottomSpacing;\r\n \r\n if( 'function' === typeof dims.topSpacing )\r\n dims.topSpacing = parseInt(dims.topSpacing(this.sidebar)) || 0;\r\n \r\n if( 'function' === typeof dims.bottomSpacing )\r\n dims.bottomSpacing = parseInt(dims.bottomSpacing(this.sidebar)) || 0;\r\n \r\n if( 'VIEWPORT-TOP' === this.affixedType ){\r\n // Adjust translate Y in the case decrease top spacing value.\r\n if( dims.topSpacing < dims.lastTopSpacing ){\r\n dims.translateY += dims.lastTopSpacing - dims.topSpacing;\r\n this._reStyle = true; \r\n }\r\n \r\n } else if( 'VIEWPORT-BOTTOM' === this.affixedType ){\r\n // Adjust translate Y in the case decrease bottom spacing value.\r\n if( dims.bottomSpacing < dims.lastBottomSpacing ){\r\n dims.translateY += dims.lastBottomSpacing - dims.bottomSpacing;\r\n this._reStyle = true;\r\n }\r\n }\r\n \r\n dims.lastTopSpacing = dims.topSpacing;\r\n dims.lastBottomSpacing = dims.bottomSpacing;\r\n }\r\n \r\n /**\r\n * Determine whether the sidebar is bigger than viewport.\r\n * @public\r\n * @return {Boolean}\r\n */\r\n isSidebarFitsViewport(){\r\n return this.dimensions.sidebarHeight < this.dimensions.viewportHeight;\r\n }\r\n \r\n /**\r\n * Observe browser scrolling direction top and down.\r\n */\r\n observeScrollDir(){\r\n var dims = this.dimensions;\r\n if( dims.lastViewportTop === dims.viewportTop ) return;\r\n \r\n var furthest = 'down' === this.direction ? Math.min : Math.max;\r\n \r\n // If the browser is scrolling not in the same direction.\r\n if( dims.viewportTop === furthest(dims.viewportTop, dims.lastViewportTop) )\r\n this.direction = 'down' === this.direction ? 'up' : 'down';\r\n }\r\n \r\n /**\r\n * Gets affix type of sidebar according to current scrollTop and scrollLeft.\r\n * Holds all logical affix of the sidebar when scrolling up and down and when sidebar \r\n * is bigger than viewport and vice versa.\r\n * @public\r\n * @return {String|False} - Proper affix type.\r\n */\r\n getAffixType(){\r\n var dims = this.dimensions, affixType = false;\r\n \r\n this._calcDimensionsWithScroll();\r\n \r\n var sidebarBottom = dims.sidebarHeight + dims.containerTop;\r\n var colliderTop = dims.viewportTop + dims.topSpacing;\r\n var colliderBottom = dims.viewportBottom - dims.bottomSpacing;\r\n \r\n // When browser is scrolling top.\r\n if( 'up' === this.direction ){\r\n if( colliderTop <= dims.containerTop ){\r\n dims.translateY = 0;\r\n affixType = 'STATIC';\r\n \r\n } else if( colliderTop <= dims.translateY + dims.containerTop ){\r\n dims.translateY = colliderTop - dims.containerTop;\r\n affixType = 'VIEWPORT-TOP';\r\n \r\n } else if( ! this.isSidebarFitsViewport() && dims.containerTop <= colliderTop ){\r\n affixType = 'VIEWPORT-UNBOTTOM';\r\n }\r\n // When browser is scrolling up.\r\n } else {\r\n // When sidebar element is not bigger than screen viewport.\r\n if( this.isSidebarFitsViewport() ){\r\n \r\n if( dims.sidebarHeight + colliderTop >= dims.containerBottom ){\r\n dims.translateY = dims.containerBottom - sidebarBottom;\r\n affixType = 'CONTAINER-BOTTOM'; \r\n \r\n } else if( colliderTop >= dims.containerTop ){\r\n dims.translateY = colliderTop - dims.containerTop;\r\n affixType = 'VIEWPORT-TOP';\r\n }\r\n // When sidebar element is bigger than screen viewport.\r\n } else {\r\n \r\n if( dims.containerBottom <= colliderBottom ){\r\n dims.translateY = dims.containerBottom - sidebarBottom; \r\n affixType = 'CONTAINER-BOTTOM'; \r\n \r\n } else if( sidebarBottom + dims.translateY <= colliderBottom ){\r\n dims.translateY = colliderBottom - sidebarBottom;\r\n affixType = 'VIEWPORT-BOTTOM';\r\n \r\n } else if( dims.containerTop + dims.translateY <= colliderTop ){\r\n affixType = 'VIEWPORT-UNBOTTOM';\r\n }\r\n }\r\n }\r\n \r\n // Make sure the translate Y is not bigger than container height.\r\n dims.translateY = Math.max(0, dims.translateY);\r\n dims.translateY = Math.min(dims.containerHeight, dims.translateY);\r\n \r\n dims.lastViewportTop = dims.viewportTop;\r\n return affixType;\r\n }\r\n \r\n /**\r\n * Gets inline style of sticky sidebar wrapper and inner wrapper according \r\n * to its affix type.\r\n * @private\r\n * @param {String} affixType - Affix type of sticky sidebar.\r\n * @return {Object}\r\n */\r\n _getStyle(affixType){\r\n if( 'undefined' === typeof affixType ) return;\r\n \r\n var style = {inner: {}, outer: {}};\r\n var dims = this.dimensions;\r\n \r\n switch( affixType ){\r\n case 'VIEWPORT-TOP':\r\n style.inner = {position: 'fixed', top: dims.topSpacing,\r\n left: dims.sidebarLeft - dims.viewportLeft, width: dims.sidebarWidth};\r\n break;\r\n case 'VIEWPORT-BOTTOM':\r\n style.inner = {position: 'fixed', top: 'auto', left: dims.sidebarLeft,\r\n bottom: dims.bottomSpacing, width: dims.sidebarWidth};\r\n break;\r\n case 'CONTAINER-BOTTOM':\r\n case 'VIEWPORT-UNBOTTOM':\r\n let translate = this._getTranslate(0, dims.translateY + 'px');\r\n \r\n if( translate )\r\n style.inner = {transform: translate};\r\n else \r\n style.inner = {position: 'absolute', top: dims.translateY, width: dims.sidebarWidth};\r\n break;\r\n }\r\n \r\n switch( affixType ){\r\n case 'VIEWPORT-TOP':\r\n case 'VIEWPORT-BOTTOM':\r\n case 'VIEWPORT-UNBOTTOM':\r\n case 'CONTAINER-BOTTOM':\r\n style.outer = {height: dims.sidebarHeight, position: 'relative'};\r\n break;\r\n }\r\n \r\n style.outer = StickySidebar.extend({height: '', position: ''}, style.outer);\r\n style.inner = StickySidebar.extend({position: 'relative', top: '', left: '',\r\n bottom: '', width: '', transform: this._getTranslate()}, style.inner);\r\n \r\n return style;\r\n }\r\n \r\n /**\r\n * Cause the sidebar to be sticky according to affix type by adding inline\r\n * style, adding helper class and trigger events.\r\n * @function\r\n * @protected\r\n * @param {string} force - Update sticky sidebar position by force.\r\n */\r\n stickyPosition(force){\r\n if( this._breakpoint ) return;\r\n \r\n force = this._reStyle || force || false;\r\n \r\n var offsetTop = this.options.topSpacing;\r\n var offsetBottom = this.options.bottomSpacing;\r\n \r\n var affixType = this.getAffixType();\r\n var style = this._getStyle(affixType);\r\n \r\n if( (this.affixedType != affixType || force) && affixType ){\r\n let affixEvent = 'affix.' + affixType.toLowerCase().replace('viewport-', '') + EVENT_KEY;\r\n StickySidebar.eventTrigger(this.sidebar, affixEvent);\r\n \r\n if( 'STATIC' === affixType )\r\n StickySidebar.removeClass(this.sidebar, this.options.stickyClass);\r\n else\r\n StickySidebar.addClass(this.sidebar, this.options.stickyClass);\r\n \r\n for( let key in style.outer ){\r\n let _unit = ('number' === typeof style.outer[key]) ? 'px' : '';\r\n this.sidebar.style[key] = style.outer[key];\r\n }\r\n \r\n for( let key in style.inner ){\r\n let _unit = ('number' === typeof style.inner[key]) ? 'px' : '';\r\n this.sidebarInner.style[key] = style.inner[key] + _unit;\r\n }\r\n \r\n let affixedEvent = 'affixed.'+ affixType.toLowerCase().replace('viewport-', '') + EVENT_KEY;\r\n StickySidebar.eventTrigger(this.sidebar, affixedEvent);\r\n } else {\r\n if( this._initialized ) this.sidebarInner.style.left = style.inner.left;\r\n }\r\n \r\n this.affixedType = affixType;\r\n }\r\n \r\n /**\r\n * Breakdown sticky sidebar when window width is below `options.minWidth` value.\r\n * @protected\r\n */\r\n _widthBreakpoint(){\r\n \r\n if( window.innerWidth <= this.options.minWidth ){\r\n this._breakpoint = true;\r\n this.affixedType = 'STATIC';\r\n \r\n this.sidebar.removeAttribute('style');\r\n StickySidebar.removeClass(this.sidebar, this.options.stickyClass);\r\n this.sidebarInner.removeAttribute('style');\r\n } else {\r\n this._breakpoint = false;\r\n }\r\n }\r\n \r\n /**\r\n * Switches between functions stack for each event type, if there's no \r\n * event, it will re-initialize sticky sidebar.\r\n * @public\r\n */\r\n updateSticky(event = {}){\r\n if( this._running ) return;\r\n this._running = true;\r\n \r\n ((eventType) => {\r\n\r\n requestAnimationFrame(() => {\r\n switch( eventType ){\r\n // When browser is scrolling and re-calculate just dimensions\r\n // within scroll. \r\n case 'scroll':\r\n this._calcDimensionsWithScroll();\r\n this.observeScrollDir();\r\n this.stickyPosition();\r\n break;\r\n \r\n // When browser is resizing or there's no event, observe width\r\n // breakpoint and re-calculate dimensions.\r\n case 'resize':\r\n default: \r\n this._widthBreakpoint();\r\n this.calcDimensions();\r\n this.stickyPosition(true);\r\n break;\r\n }\r\n this._running = false;\r\n });\r\n })(event.type);\r\n }\r\n \r\n /**\r\n * Set browser support features to the public property.\r\n * @private\r\n */\r\n _setSupportFeatures(){\r\n var support = this.support;\r\n \r\n support.transform = StickySidebar.supportTransform();\r\n support.transform3d = StickySidebar.supportTransform(true);\r\n }\r\n \r\n /**\r\n * Get translate value, if the browser supports transfrom3d, it will adopt it.\r\n * and the same with translate. if browser doesn't support both return false.\r\n * @param {Number} y - Value of Y-axis.\r\n * @param {Number} x - Value of X-axis.\r\n * @param {Number} z - Value of Z-axis.\r\n * @return {String|False}\r\n */\r\n _getTranslate(y = 0, x = 0, z = 0){\r\n if( this.support.transform3d ) return 'translate3d(' + y +', '+ x +', '+ z +')';\r\n else if( this.support.translate ) return 'translate('+ y +', '+ x +')';\r\n else return false;\r\n }\r\n \r\n /**\r\n * Destroy sticky sidebar plugin.\r\n * @public\r\n */\r\n destroy(){\r\n window.removeEventListener('resize', this, {caption: false});\r\n window.removeEventListener('scroll', this, {caption: false});\r\n \r\n this.sidebar.classList.remove(this.options.stickyClass);\r\n this.sidebar.style.minHeight = '';\r\n \r\n this.sidebar.removeEventListener('update' + EVENT_KEY, this);\r\n \r\n var styleReset = {inner: {}, outer: {}};\r\n \r\n styleReset.inner = {position: '', top: '', left: '', bottom: '', width: '', transform: ''};\r\n styleReset.outer = {height: '', position: ''};\r\n \r\n for( let key in styleReset.outer )\r\n this.sidebar.style[key] = styleReset.outer[key];\r\n \r\n for( let key in styleReset.inner )\r\n this.sidebarInner.style[key] = styleReset.inner[key];\r\n \r\n if( this.options.resizeSensor && 'undefined' !== typeof ResizeSensor ){\r\n ResizeSensor.detach(this.sidebarInner, this.handleEvent);\r\n ResizeSensor.detach(this.container, this.handleEvent);\r\n }\r\n }\r\n \r\n /**\r\n * Determine if the browser supports CSS transform feature.\r\n * @function\r\n * @static\r\n * @param {Boolean} transform3d - Detect transform with translate3d.\r\n * @return {String}\r\n */\r\n static supportTransform(transform3d){\r\n var result = false,\r\n property = (transform3d) ? 'perspective' : 'transform',\r\n upper = property.charAt(0).toUpperCase() + property.slice(1),\r\n prefixes = ['Webkit', 'Moz', 'O', 'ms'],\r\n support = document.createElement('support'),\r\n style = support.style;\r\n \r\n (property + ' ' + prefixes.join(upper + ' ') + upper).split(' ').forEach(function(property, i) {\r\n if (style[property] !== undefined) {\r\n result = property;\r\n return false;\r\n }\r\n });\r\n return result;\r\n }\r\n \r\n /**\r\n * Trigger custom event.\r\n * @static\r\n * @param {DOMObject} element - Target element on the DOM.\r\n * @param {String} eventName - Event name.\r\n * @param {Object} data - \r\n */\r\n static eventTrigger(element, eventName, data){\r\n try{\r\n var event = new CustomEvent(eventName, {detail: data});\r\n } catch(e){\r\n var event = document.createEvent('CustomEvent');\r\n event.initCustomEvent(eventName, true, true, data);\r\n }\r\n element.dispatchEvent(event);\r\n }\r\n \r\n /**\r\n * Extend options object with defaults.\r\n * @function\r\n * @static\r\n */\r\n static extend(defaults, options){\r\n var results = {};\r\n for( let key in defaults ){\r\n if( 'undefined' !== typeof options[key] ) results[key] = options[key];\r\n else results[key] = defaults[key];\r\n }\r\n return results;\r\n }\r\n \r\n /**\r\n * Get current coordinates left and top of specific element.\r\n * @static\r\n */\r\n static offsetRelative(element){\r\n var result = {left: 0, top: 0};\r\n\r\n do{\r\n let offsetTop = element.offsetTop;\r\n let offsetLeft = element.offsetLeft;\r\n \r\n if( ! isNaN(offsetTop) )\r\n result.top += offsetTop;\r\n \r\n if( ! isNaN(offsetLeft) )\r\n result.left += offsetLeft;\r\n\r\n element = ( 'BODY' === element.tagName ) ?\r\n element.parentElement : element.offsetParent;\r\n } while(element)\r\n return result;\r\n }\r\n \r\n /**\r\n * Add specific class name to specific element.\r\n * @static \r\n * @param {ObjectDOM} element \r\n * @param {String} className \r\n */\r\n static addClass(element, className){\r\n if( ! StickySidebar.hasClass(element, className) ){\r\n if (element.classList)\r\n element.classList.add(className);\r\n else\r\n element.className += ' ' + className;\r\n }\r\n }\r\n \r\n /**\r\n * Remove specific class name to specific element\r\n * @static\r\n * @param {ObjectDOM} element \r\n * @param {String} className \r\n */\r\n static removeClass(element, className){\r\n if( StickySidebar.hasClass(element, className) ){\r\n if (element.classList)\r\n element.classList.remove(className);\r\n else\r\n element.className = element.className.replace(new RegExp('(^|\\\\b)' + className.split(' ').join('|') + '(\\\\b|$)', 'gi'), ' ');\r\n }\r\n }\r\n\r\n /**\r\n * Determine weather the element has specific class name.\r\n * @static\r\n * @param {ObjectDOM} element \r\n * @param {String} className \r\n */\r\n static hasClass(element, className){\r\n if (element.classList)\r\n return element.classList.contains(className);\r\n else\r\n return new RegExp('(^| )' + className + '( |$)', 'gi').test(element.className);\r\n }\r\n }\r\n \r\n return StickySidebar;\r\n })();\r\n \r\n export default StickySidebar;\r\n \r\n // Global\r\n // -------------------------\r\n window.StickySidebar = StickySidebar;","'use strict';\n\nimport StickySidebar from 'sticky-sidebar/src/sticky-sidebar';\nimport Events from '../_events';\n\nconst SidebarUI = (($) => {\n const D = document;\n const W = window;\n const $Body = $('html,body');\n const NAME = 'SidebarUI';\n const CLASSNAME = `js${NAME}`;\n\n class SidebarUI {\n static init() {\n const ui = this;\n ui.dispose();\n\n if (!$(`.${CLASSNAME}`).length) {\n return;\n }\n\n console.log(`Initializing: ${NAME}`);\n\n const sticky = new StickySidebar(`.${CLASSNAME}`, {\n innerWrapperSelector: `.${CLASSNAME}__inner`,\n });\n\n $Body.on(`${Events.SCROLL} ${Events.RESIZE}`, (e) => {\n sticky.updateSticky(e);\n });\n }\n\n static dispose() {\n console.log(`Destroying: ${NAME}`);\n }\n }\n\n $(W).on(`${Events.AJAX} ${Events.LOADED}`, () => {\n SidebarUI.init();\n });\n\n W.SidebarUI = new SidebarUI();\n\n return SidebarUI;\n})($);\n\nexport default SidebarUI;\n","import $ from 'jquery';\n\nconst SpinnerUI = (($) => {\n class SpinnerUI {\n static show(callback) {\n $('#PageLoading').show(0, callback);\n }\n\n static hide(callback) {\n $('#PageLoading').hide('slow', callback);\n }\n }\n\n return SpinnerUI;\n})($);\n\nexport default SpinnerUI;\n","\"use strict\";\n\nimport $ from 'jquery';\nimport Events from '../_events';\nimport Spinner from './_ui.spinner';\n\nconst AjaxUI = (($) => {\n // Constants\n const G = window;\n const D = document;\n const $Html = $('html');\n const $Body = $('body');\n\n const NAME = 'jsAjaxUI';\n const DATA_KEY = NAME;\n\n class AjaxUI {\n // Constructor\n constructor(element) {\n this._element = element;\n const $element = $(this._element);\n $element.addClass(`${NAME}-active`);\n\n $element.bind('click', function(e) {\n e.preventDefault();\n\n const $this = $(this);\n\n $('.ajax').each(function() {\n const $this = $(this);\n $this.removeClass('active');\n $this.parents('.nav-item').removeClass('active');\n });\n\n $this.addClass('loading');\n\n AjaxUI.load($this.attr('href'), () => {\n $this.removeClass('loading');\n $this.parents('.nav-item').addClass('active');\n $this.addClass('active');\n });\n });\n }\n\n // Public methods\n static load(url, callback) {\n // show spinner\n Spinner.show(() => {\n $Body.removeClass('loaded');\n });\n\n // update document location\n G.MainUI.updateLocation(url);\n\n const absoluteLocation = G.URLDetails['base'] + G.URLDetails['relative'].substring(1);\n if (absoluteLocation !== G.location.href) {\n G.history.pushState({\n ajax: true,\n page: absoluteLocation,\n }, document.title, absoluteLocation);\n }\n\n $.ajax({\n sync: false,\n async: true,\n url,\n dataType: 'json',\n method: 'GET',\n cache: false,\n error(jqXHR) {\n console.warn(`AJAX request failure: ${jqXHR.statusText}`);\n G.location.href = url;\n\n // google analytics\n if (typeof G.ga === 'function') {\n G.ga('send', 'event', 'error', 'AJAX ERROR', jqXHR.statusText);\n }\n },\n success(data, status, jqXHR) {\n AjaxUI.process(data, jqXHR, callback);\n\n // google analytics\n if (typeof G.ga === 'function') {\n G.ga('set', {\n page: G.URLDetails['relative'] + G.URLDetails['hash'],\n title: jqXHR.getResponseHeader('X-Title'),\n });\n G.ga('send', 'pageview');\n }\n },\n });\n }\n\n static process(data, jqXHR, callback) {\n const css = jqXHR.getResponseHeader('X-Include-CSS').split(',') || [];\n const js = jqXHR.getResponseHeader('X-Include-JS').split(',') || [];\n\n // Replace HTML regions\n if (typeof(data.regions) === 'object') {\n for (const key in data.regions) {\n if (typeof(data.regions[key]) === 'string') {\n AjaxUI.replaceRegion(data.regions[key], key);\n }\n }\n }\n\n // remove already loaded scripts\n $('link[type=\"text/css\"]').each(function() {\n const i = css.indexOf($(this).attr('href'));\n if (i > -1) {\n css.splice(i, 1);\n } else if (!$Body.data('unload-blocked')) {\n console.log(`Unloading: ${ $(this).attr('href')}`);\n $(this).remove();\n }\n });\n\n $('script[type=\"text/javascript\"]').each(function() {\n const i = js.indexOf($(this).attr('src'));\n if (i > -1) {\n js.splice(i, 1);\n } else if (!$Body.data('unload-blocked')) {\n console.log(`Unloading: ${ $(this).attr('src')}`);\n $(this).remove();\n }\n });\n\n // preload CSS\n this.preload(css).then(() => {\n const $head = $('head');\n css.forEach((el) => {\n $head.append(`<link rel=\"stylesheet\" type=\"text/css\" href=\"${el}\" />`);\n });\n\n // preload JS\n this.preload(js, 'script').then(() => {\n\n js.forEach((el) => {\n $Body.append(`<script type=\"text/javascript\" charset=\"UTF-8\" src=\"${el}\"></script>`);\n });\n\n console.log('New page is loaded!');\n\n // trigger events\n if (typeof(data.events) === 'object') {\n for (const eventName in data.events) {\n $(D).trigger(eventName, [data.events[eventName]]);\n }\n }\n\n if (typeof callback !== 'undefined') {\n callback();\n }\n\n $(G).trigger(Events.AJAX);\n });\n });\n }\n\n static preload(items, type = 'text', cache = true, itemCallback = false) {\n if (!items.length) {\n return $.Deferred().resolve().promise();\n }\n\n const dfds = [];\n items.forEach((url, i) => {\n const dfd = $.Deferred();\n\n $.ajax({\n dataType: type,\n cache,\n url,\n }).always(() => {\n dfd.resolve();\n if (itemCallback) {\n itemCallback(i, url);\n }\n });\n\n dfds.push(dfd);\n });\n\n // return a master promise object which will resolve when all the deferred objects have resolved\n return $.when(...dfds);\n }\n\n static replaceRegion(html, key) {\n const $region = $(`[data-ajax-region=\"${key}\"]`);\n\n if ($region.length) {\n $region.empty().append(html);\n } else {\n console.warn('Region returned without class or id!');\n }\n }\n\n dispose() {\n const $element = $(this._element);\n\n $element.removeClass(`${NAME}-active`);\n $.removeData(this._element, DATA_KEY);\n this._element = null;\n }\n\n static _jQueryInterface() {\n return this.each(function() {\n // attach functionality to element\n const $element = $(this);\n let data = $element.data(DATA_KEY);\n\n if (!data) {\n data = new AjaxUI(this);\n $element.data(DATA_KEY, data);\n }\n });\n }\n }\n\n // jQuery interface\n $.fn[NAME] = AjaxUI._jQueryInterface;\n $.fn[NAME].Constructor = AjaxUI;\n $.fn[NAME].noConflict = function() {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return AjaxUI._jQueryInterface;\n };\n\n // auto-apply\n $('.ajax').ready(() => {\n $('.ajax').jsAjaxUI();\n });\n\n // AJAX update browser title\n $(D).on('layoutRefresh', (e, data) => {\n D.title = data.Title;\n\n $Html.attr('class', '');\n if (data.ClassName) {\n $Html.addClass(data.ClassName);\n }\n //data.Link = (data.Link === '/home/') ? '/' : data.Link;\n });\n\n // Back/Forward functionality\n G.onpopstate = function(event) {\n const $existingLink = $(`a[href^=\"${ D.location }\"]`);\n\n if (event.state !== null && event.state.ajax) {\n console.log('GOBACK (AJAX state)');\n AjaxUI.load(event.state.page);\n } else if ($existingLink.length && $existingLink.hasClass('ajax')) {\n console.log('GOBACK (AJAX link)');\n $existingLink.trigger('click');\n } else {\n console.log('GOBACK (HTTP)');\n G.location.href = D.location;\n }\n };\n\n return AjaxUI;\n})($);\n\nexport default AjaxUI;\n","import $ from 'jquery';\nimport Events from '../_events';\n\nconst FormFieldUI = (($) => {\n // Constants\n const NAME = 'jsFormFieldUI';\n const DATA_KEY = NAME;\n const $Html = $('html, body');\n\n class FormFieldUI {\n\n constructor(el) {\n const ui = this;\n\n ui.$el = $(el);\n ui.shown = true;\n\n ui.$el.data(DATA_KEY, ui);\n //ui.$actions = ui.$el.parents('form').children('.btn-toolbar,.form-actions');\n\n ui.vals = {\n 'val': ui.$el.val(),\n 'checked': ui.$el.is(':checked'),\n };\n\n // bootstrap collapse integration\n ui.$el.parents('.optionset').not('.field').removeClass('collapse');\n ui.$collapse = ui.$el.parents('.field.collapse').not('.composite').first();\n if (ui.$collapse.length) {\n ui.$el.removeClass('collapse');\n\n ui.$collapse.on('show.bs.collapse', (e) => {\n ui.show();\n });\n\n ui.$collapse.on('hidden.bs.collapse', (e) => {\n ui.hide();\n });\n }\n\n ui.$el.addClass(`${NAME}-active`);\n\n return ui;\n }\n\n // Public methods\n dispose() {\n const ui = this;\n const $el = ui.$el;\n\n $el.removeClass(`${NAME}-active`);\n $.removeData($el[0], DATA_KEY);\n }\n\n show() {\n const ui = this;\n const $el = ui.$el;\n\n ui.restore();\n ui.shown = true;\n\n /*if (ui.$collapse.length) {\n ui.$collapse.collapse('show');\n }\n\n if ($el.hasClass('collapse')) {\n $el.collapse('show');\n }*/\n\n $el.trigger(`shown.${ NAME}`);\n }\n\n hide() {\n const ui = this;\n const $el = ui.$el;\n\n ui.wipe();\n ui.shown = false;\n\n /*if (ui.$collapse.length) {\n ui.$collapse.collapse('hide');\n }\n\n if ($el.hasClass('collapse')) {\n $el.collapse('hide');\n }\n\n $el.trigger('change');*/\n $el.trigger(`hidden.${ NAME}`);\n }\n\n wipe() {\n const ui = this;\n const $el = ui.$el;\n\n ui.vals = {\n 'name': $el.attr('name'),\n 'val': $el.val(),\n 'checked': $el.is(':checked'),\n };\n\n $el.val('');\n $el.prop('checked', false);\n }\n\n restore() {\n const ui = this;\n const $el = ui.$el;\n const checked = ui.vals['checked'];\n\n $el.val(ui.vals['val']);\n $el.prop('checked', checked);\n }\n\n addMessage(msg, type = null, scrollTo = true) {\n const ui = this;\n const $field = ui.$el.closest('.field');\n\n\n $field.addClass('has-message');\n if (msg) {\n $field.append(`<div class=\"message alert ${ type }\">${ msg }</div>`);\n }\n\n if (scrollTo) {\n const pos = $field.offset().top;\n $field.focus();\n $Html.scrollTop(pos - 100);\n }\n }\n\n removeMessages() {\n const ui = this;\n const $field = ui.$el.closest('.field');\n\n $field.removeClass('has-message');\n $field.find('.message').remove();\n }\n\n static _jQueryInterface() {\n return this.each(function() {\n // attach functionality to el\n const $el = $(this);\n let data = $el.data(DATA_KEY);\n\n if (!data) {\n data = new FormFieldUI(this);\n $el.data(DATA_KEY, data);\n }\n });\n }\n }\n\n // jQuery interface\n $.fn[NAME] = FormFieldUI._jQueryInterface;\n $.fn[NAME].Constructor = FormFieldUI;\n $.fn[NAME].noConflict = function() {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return FormFieldUI._jQueryInterface;\n };\n\n return FormFieldUI;\n})($);\n\nexport default FormFieldUI;\n","import $ from 'jquery';\n\n//import 'bootstrap-select/dist/js/bootstrap-select';\n//$.fn.selectpicker.Constructor.BootstrapVersion = '4';\nimport 'select2/dist/js/select2.js';\n\nimport select2 from 'jquery.inputmask/dist/jquery.inputmask.bundle';\n\nimport Events from \"../_events\";\nimport SpinnerUI from './_ui.spinner';\nimport FormFieldUI from './_ui.form.fields';\n\nconst FormBasics = (($) => {\n // Constants\n const NAME = 'jsFormBasics';\n const DATA_KEY = NAME;\n const $Html = $('html, body');\n const W = window;\n const D = document;\n\n class FormBasics {\n\n constructor(el) {\n const ui = this;\n const $el = $(el);\n\n ui._el = el;\n $el.data(DATA_KEY, this);\n\n $('[data-inputmask]').inputmask();\n\n const $fields = $el.find(Events.FORM_FIELDS);\n // init fields ui\n $fields.each((i, el) => {\n // skip some fields here\n new FormFieldUI(el);\n });\n\n const $selectFields = $el.find('select:not([readonly])');\n const $radioOptions = $el.find('input[type=\"radio\"]');\n\n $selectFields.each((i, el) => {\n $(el).select2();\n });\n\n $fields.each((e, el) => {\n const $el = $(el);\n\n if ($el.hasClass('required') || $el.attr('aria-required')) {\n $el.closest('.field').addClass('required');\n }\n });\n\n $radioOptions.each((e, el) => {\n const $el = $(el);\n\n if ($el.is(':checked')) {\n $el.parents('.radio').addClass('checked');\n }\n });\n\n $radioOptions.on('change', (e) => {\n const $el = $(e.currentTarget);\n const $parent = $el.parents('.radio');\n\n $parent.siblings('.radio').each((i, el) => {\n const $el = $(el);\n\n if (!$el.find('input').is(':checked')) {\n $el.removeClass('checked');\n }\n });\n\n if ($el.is(':checked')) {\n $parent.addClass('checked');\n }\n });\n\n $el.on('submit', (e) => {\n SpinnerUI.show();\n });\n\n $el.addClass(`${NAME}-active`);\n $el.trigger(Events.FORM_INIT_BASICS);\n }\n\n // Public methods\n dispose() {\n const $el = $(this._el);\n\n const $selectFields = $el.find('select:not([readonly])');\n $selectFields.each((i, el) => {\n $(el).select2('destroy');\n });\n\n $el.removeClass(`${NAME}-active`);\n $.removeData(this._el, DATA_KEY);\n this._el = null;\n }\n\n static _jQueryInterface() {\n return this.each(() => {\n // attach functionality to el\n const $el = $(this);\n let data = $el.data(DATA_KEY);\n\n if (!data) {\n data = new FormBasics(this);\n $el.data(DATA_KEY, data);\n }\n });\n }\n }\n\n // jQuery interface\n $.fn[NAME] = FormBasics._jQueryInterface;\n $.fn[NAME].Constructor = FormBasics;\n $.fn[NAME].noConflict = function() {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return FormBasics._jQueryInterface;\n };\n\n const init = () => {\n $('form').jsFormBasics();\n };\n\n // auto-apply\n $(W).on(`${Events.AJAX} ${Events.LOADED}`, () => {\n init();\n });\n\n return FormBasics;\n})($);\n\nexport default FormBasics;\n","'use strict';\n\nimport $ from 'jquery';\n\nimport Events from './_events';\nimport Consts from './_consts';\n\nimport Spinner from './_components/_ui.spinner';\n\n// AJAX functionality\nimport AjaxUI from './_components/_ui.ajax';\n\nimport FormBasics from './_components/_ui.form.basics';\n\nimport SmoothScroll from 'smooth-scroll';\nconst smoothScroll = SmoothScroll();\n\nconst MainUI = (($) => {\n // Constants\n const W = window;\n const D = document;\n const $Body = $('body');\n\n const NAME = 'MainUI';\n\n // get browser locale\n //const Locale = $('html').attr('lang').substring(0, 2);\n\n const $AlertNotify = $('#AlertNotify');\n const $SiteWideMessage = $('#SiteWideMessage');\n\n // get browser window visibility preferences\n // Opera 12.10, Firefox >=18, Chrome >=31, IE11\n const HiddenName = 'hidden';\n const VisibilityChangeEvent = 'visibilitychange';\n\n // update visibility state\n D.addEventListener(VisibilityChangeEvent, () => {\n if (D.visibilityState === HiddenName) {\n console.log('Tab: hidden');\n $Body.addClass('is-hidden');\n $Body.trigger('tabHidden');\n } else {\n console.log('Tab: focused');\n $Body.removeClass('is-hidden');\n $Body.trigger('tabFocused');\n }\n });\n\n // update online/offline state\n const updateOnlineStatus = () => {\n if (!navigator.onLine) {\n console.log('Tab: offline');\n $Body.addClass('is-offline');\n $Body.trigger('offline');\n } else {\n console.log('Tab: online');\n $Body.removeClass('is-offline');\n $Body.trigger('online');\n }\n };\n\n if (typeof navigator.onLine !== 'undefined') {\n W.addEventListener(\n 'offline',\n () => {\n updateOnlineStatus();\n },\n false,\n );\n\n W.addEventListener(\n 'online',\n () => {\n updateOnlineStatus();\n },\n false,\n );\n\n W.addEventListener('load', () => {\n updateOnlineStatus();\n });\n }\n\n // scrollTo\n const ScrollTo = (trigger, selector) => {\n smoothScroll.animateScroll(D.querySelector(selector), trigger, {\n speed: 500,\n offset: -20,\n //easing: 'easeInOutCubic',\n // Callback API\n //before: (anchor, toggle) => {}, // Callback to run before scroll\n //`after: (anchor, toggle) => {} // Callback to run after scroll\n });\n };\n\n // session ping\n const pingInterval = setInterval(() => {\n if ($Body.hasClass('is-offline')) {\n return;\n }\n\n $.ajax({\n sync: false,\n async: true,\n cache: false,\n url: '/Security/ping',\n global: false,\n type: 'POST',\n complete(data, datastatus) {\n if (datastatus !== 'success') {\n clearInterval(pingInterval);\n\n $Body.addClass('is-offline');\n //W.location.reload(false);\n } else {\n $Body.removeClass('is-offline');\n }\n },\n });\n }, 300000); // 5 min in ms\n\n W.URLDetails = {\n base: $('base').attr('href'),\n relative: '/',\n hash: '',\n };\n\n class MainUI {\n // Static methods\n\n static init() {\n this.dispose();\n\n console.log(`Initializing: ${NAME}`);\n\n // update location details\n this.updateLocation();\n\n // mark available offline areas\n if ('caches' in W) {\n $('a.offline').addClass('offline-available');\n }\n\n this.loadImages();\n\n // detect bootstrap screen size\n this.detectBootstrapScreenSize();\n\n // mark external links\n $('a.external,a[rel=\"external\"]').attr('target', '_blank');\n\n // show encoded emails\n /*$(D).find('.obm').each(() => {\n if ($(this).attr('data-val') !== undefined) {\n const email = $(this).attr('data-val').split('')\n .reverse()\n .join('')\n .slice(0, -8)\n .replace(/[a-zA-Z]/g, (c) => String.fromCharCode((c <= 'Z' ? 90 : 122) >= (c = c.charCodeAt(0) + 13) ? c : c - 26))\n .replace('#AT#', '@');\n const attr = $(this).attr('data-val-append');\n if (attr !== undefined && attr !== false) {\n $(this).append(email);\n }\n if ($(this).find('.sr-only').length > 0) {\n $(this).find('.sr-only').append(email);\n }\n if ($(this).attr('href') !== undefined) {\n $(this).attr('href', `mailto:${email}`);\n }\n }\n });*/\n //\n\n // scroll links\n $('.js-scrollTo').on('click', (e) => {\n e.preventDefault();\n const el = e.currentTarget;\n const $el = $(e.currentTarget);\n\n ScrollTo(el, $el.attr('data-target'));\n });\n\n // load external fonts\n if ($('[data-extfont]').length) {\n $.getScript(\n '//ajax.googleapis.com/ajax/libs/webfont/1/webfont.js',\n () => {\n const fonts = [];\n\n $('[data-extfont]').each((i, el) => {\n fonts[i] = $(el).attr('data-extfont');\n });\n\n W.WebFont.load({\n google: {\n families: fonts,\n },\n });\n },\n );\n }\n\n // data-set links\n $('[data-set-target]').on('click', (e) => {\n const $el = $(e.currentTarget);\n const $target = $($el.data('set-target'));\n\n if (!$target.length) {\n return;\n }\n\n $target.each((i, targetEl) => {\n const $targetEl = $(targetEl);\n const tag = $targetEl.prop('tagName').toLowerCase();\n\n if (tag === 'input' || tag === 'select') {\n $targetEl.val($el.data('set-val'));\n } else if (!$targetEl.hasClass('field')) {\n $targetEl.text($el.data('set-val'));\n }\n });\n\n $el.trigger(Events.SET_TARGET_UPDATE);\n $target.closest('form').trigger(Events.SET_TARGET_UPDATE);\n });\n\n // hide spinner\n Spinner.hide(() => {\n $Body.addClass('loaded');\n });\n\n // fire page printing\n if (W.URLDetails['hash'].indexOf('printpage') > -1) {\n W.print();\n }\n\n $Body.data(NAME, this);\n }\n\n static detectBootstrapScreenSize() {\n const $el = $('<div class=\"env-test\"></div>');\n const envs = [...Consts.ENVS];\n\n $Body.append($el);\n let curEnv = envs.shift();\n\n for (const env of envs.reverse()) {\n $el.addClass(`d-${env}-none`);\n if ($el.is(':hidden')) {\n curEnv = env;\n break;\n }\n }\n\n $el.remove();\n $Body.removeClass(envs);\n $Body.addClass(curEnv);\n\n return curEnv;\n }\n\n static updateLocation(url) {\n let location = url || W.location.href;\n location = location.replace(W.URLDetails['base'], '/');\n const hash = location.indexOf('#');\n\n W.URLDetails.relative = location.split('#')[0];\n W.URLDetails.hash =\n hash >= 0 ? location.substr(location.indexOf('#')) : '';\n }\n\n // show site-wide alert\n static alert(msg, cls) {\n $SiteWideMessage.fadeOut('fast');\n\n $SiteWideMessage.html(\n `<div class=\"page-alert\"><div class=\"alert alert-${cls}\"><i class=\"close\" data-dismiss=\"alert\">×</i>${msg}</div></div>`,\n );\n $SiteWideMessage.find('.page-alert').alert();\n\n $SiteWideMessage.find('.close[data-dismiss=\"alert\"]').click(() => {\n $SiteWideMessage.fadeOut('slow', () => {\n $SiteWideMessage.find('.page-alert').alert('close');\n });\n });\n\n $SiteWideMessage.fadeIn('slow');\n\n if ($AlertNotify.length) {\n $AlertNotify[0].play();\n }\n\n $(W).trigger('alert-appeared');\n }\n\n // hide site-wide alert\n static alertHide() {\n if ($SiteWideMessage.length !== 0) {\n $SiteWideMessage.fadeOut('slow', () => {\n $SiteWideMessage.find('.alert').alert('close');\n });\n }\n\n if ($AlertNotify.length && typeof $AlertNotify[0].stop !== 'undefined') {\n $AlertNotify[0].stop();\n }\n\n $(W).trigger('alert-removed');\n }\n\n // load all images\n static loadImages() {\n const $imgs = $Body.find('img');\n const $imgUrls = [];\n const $imgLazyUrls = [];\n\n // collect image details\n $imgs.each((i, el) => {\n const $el = $(el);\n const src = $el.attr('src');\n const lazySrc = $el.data('lazy-src');\n\n if (src && src.length) {\n $imgUrls.push(src);\n }\n if (lazySrc && lazySrc.length) {\n $imgLazyUrls.push(lazySrc);\n $el.addClass('loading');\n\n AjaxUI.preload([lazySrc]).then(() => {\n $el.attr('src', lazySrc);\n\n $el.addClass('loaded');\n $el.removeClass('loading');\n\n $el.trigger('image-lazy-loaded');\n });\n }\n });\n\n // load lazy backgrounds\n $Body.find('[data-lazy-bg]').each((i, el) => {\n const $el = $(el);\n const lazySrc = $el.data('lazy-bg');\n\n if (lazySrc && lazySrc.length) {\n $imgLazyUrls.push(lazySrc);\n $el.addClass('loading');\n\n AjaxUI.preload([lazySrc]).then(() => {\n $el.css({ 'background-image': `url(${ lazySrc })` });\n\n $el.addClass('loaded');\n $el.removeClass('loading');\n\n $el.trigger('image-lazy-bg-loaded');\n });\n }\n });\n\n // load defined images\n AjaxUI.preload($imgUrls).then(() => {\n $(W).trigger('images-loaded');\n\n // load lazy images\n AjaxUI.preload($imgLazyUrls).then(() => {\n console.log('All images are loaded!');\n\n $(W).trigger('images-lazy-loaded');\n });\n });\n }\n\n static dispose() {\n console.log(`Destroying: ${NAME}`);\n }\n }\n\n $(W).on(`${Events.AJAX} ${Events.LOADED}`, () => {\n MainUI.init();\n });\n\n $(W).on('resize', () => {\n MainUI.detectBootstrapScreenSize();\n });\n\n $(W).on('beforeunload unload', () => {\n Spinner.show(() => {\n $Body.removeClass('loaded');\n });\n });\n\n W.MainUI = MainUI;\n\n return MainUI;\n})($);\n\nexport default MainUI;\n","\"use strict\";\n\nimport $ from 'jquery';\n\nimport MainUI from \"../_main\";\nimport Events from '../_events';\nimport SpinnerUI from './_ui.spinner';\n\nconst VideoPreviewUI = (($) => {\n\n const NAME = 'jsVideoPreviewUI';\n const DATA_KEY = NAME;\n\n const G = window;\n const D = document;\n\n class VideoPreviewUI {\n\n constructor(el) {\n console.log(`Initializing: ${NAME}`);\n\n const ui = this;\n ui.$_el = $(el);\n ui.innerHTML = ui.$_el[0].innerHTML;\n\n ui.$_el.data(DATA_KEY, this);\n const href = ui.$_el.attr('href') || ui.$_el.data('href');\n const YouTubeGetID = (url) => {\n parsedURL = url.split(/(vi\\/|v%3D|v=|\\/v\\/|youtu\\.be\\/|\\/embed\\/)/);\n return undefined !== parsedURL[2] ? parsedURL[2].split(/[^0-9a-z_-]/i)[0] : parsedURL[0];\n };\n\n\n let video;\n\n if (video = href.match(/(youtube|youtube-nocookie|youtu|vimeo)\\.(com|be)\\/(watch\\?v=([\\w-]+)|([\\w-]+))/)) {\n let video_id;\n\n if (video[1] === 'youtube' || video[1] === 'youtube-nocookie' || video[1] === 'youtu') {\n video_id = YouTubeGetID(href);\n }\n\n if (video[1] == 'vimeo') {\n video_id = video[3];\n ui.$_el.addClass('loading');\n $.ajax({\n type: 'GET',\n url: `https://vimeo.com/api/v2/video/${ video_id }.json`,\n jsonp: 'callback',\n dataType: 'jsonp',\n success: function(data) {\n const thumbnail_src = data[0].thumbnail_large;\n ui.show(thumbnail_src);\n ui.$_el.removeClass('loading');\n },\n });\n\n return;\n }\n\n if (video_id) {\n ui.show(`//i3.ytimg.com/vi/${video_id}/0.jpg`);\n }\n }\n }\n\n show(src) {\n const ui = this;\n ui.$_el[0].innerHTML = '';\n ui.$_el.append(`<img src=\"${src}\" alt=\"Video\" />`);\n }\n\n static dispose() {\n console.log(`Destroying: ${NAME}`);\n ui.$_el[0].innerHTML = ui.innerHTML;\n }\n\n static _jQueryInterface() {\n return this.each((i, el) => {\n // attach functionality to element\n const $el = $(el);\n let data = $el.data(DATA_KEY);\n\n if (!data) {\n data = new VideoPreviewUI(el);\n $el.data(DATA_KEY, data);\n }\n });\n }\n }\n\n // jQuery interface\n $.fn[NAME] = VideoPreviewUI._jQueryInterface;\n $.fn[NAME].Constructor = VideoPreviewUI;\n $.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return VideoPreviewUI._jQueryInterface;\n };\n\n // auto-apply\n $(window).on(`${Events.AJAX} ${Events.LOADED}`, () => {\n $('[data-video-preview=\"true\"]').jsVideoPreviewUI();\n });\n\n return VideoPreviewUI;\n})($);\n\nexport default VideoPreviewUI;\n","\"use strict\";\n\nimport $ from 'jquery';\n\nimport Events from './_events';\n\nconst LayoutUI = (($) => {\n // Constants\n const W = window;\n const D = document;\n const $Body = $('body');\n\n const NAME = 'LayoutUI';\n\n const datepickerOptions = {\n autoclose: true,\n startDate: 0,\n //todayBtn: true,\n todayHighlight: true,\n clearBtn: true,\n };\n\n class LayoutUI {\n static init() {\n const ui = this;\n ui.dispose();\n\n console.log(`Initializing: ${NAME}`);\n // your custom UI\n\n }\n\n static dispose() {\n console.log(`Destroying: ${NAME}`);\n }\n }\n\n $(W).on(`${Events.AJAX} ${Events.LOADED}`, () => {\n LayoutUI.init();\n });\n\n W.LayoutUI = LayoutUI;\n\n return LayoutUI;\n})($);\n\nexport default LayoutUI;\n","'use strict';\n\nimport '../scss/app.scss';\n\n// import Bootstrap\nimport 'popper.js';\nimport 'bootstrap/js/dist/util';\nimport 'bootstrap/js/dist/alert';\nimport 'bootstrap/js/dist/button';\nimport 'bootstrap/js/dist/carousel';\nimport 'bootstrap/js/dist/collapse';\n\nimport 'hammerjs/hammer';\nimport 'jquery-hammerjs/jquery.hammer';\n\n// Routie\n//import 'pouchdb/dist/pouchdb';\n//import './_components/routes/index';\n\n// conflicts with _components/_ui.hover.js (shows dropdown on hover)\n//import 'bootstrap/js/dist/dropdown';\nimport './_components/_ui.hover';\n\nimport './_components/_ui.carousel';\nimport './_components/_ui.menu';\n\nimport 'bootstrap/js/dist/modal';\nimport 'bootstrap/js/dist/tooltip';\nimport 'bootstrap/js/dist/popover';\nimport 'bootstrap/js/dist/scrollspy';\nimport 'bootstrap/js/dist/tab';\n//\n\n// Offcanvas menu\n//import 'offcanvas-bootstrap/dist/js/bootstrap.offcanvas';\n\n// Uncomment it to enable meta-lightbox zooming on hover\n//import 'jquery-zoom/jquery.zoom';\n\n// FlyoutUI\nimport FlyoutUI from './_components/_ui.flyout';\n\n// Sticky sidebar\nimport SidebarUI from './_components/_ui.sidebar';\n\n// Toggle bootstrap form fields\n//import FormToggleUI from './_components/_ui.form.fields.toggle';\n\n// Bootstrap Date & Time fields\n//import FormDatetime from './_components/_ui.form.datetime';\n\n// Stepped forms functionality\n//import FormStepped from './_components/_ui.form.stepped';\n\n// Forms validation functionality\n//import FormValidate from './_components/_ui.form.validate';\n\n// Store forms data into localStorage\n//import FormStorage from './_components/_ui.form.storage';\n\n// client-side images cropping\n//import FormCroppie from './_components/_ui.form.croppie';\n\n// Google NoCaptcha fields\n//import NoCaptcha from './_components/_ui.nocaptcha';\n\n// youtube video preview image\nimport './_components/_ui.video.preview';\n\n// Meta Lightbox\nimport '@a2nt/meta-lightbox/src/js/index';\n\n//import Confirmation from 'bootstrap-confirmation2/dist/bootstrap-confirmation';\n//import Table from 'bootstrap-table/dist/bootstrap-table';\n\n// Map UI\n//import MapApi from './_components/_ui.map.api';\n\nimport './_main';\nimport './_layout';\n\n// Google Analytics\nimport './_components/drivers/_google.track.external.links';\n\nfunction importAll(r) {\n return r.keys().map(r);\n}\n\nconst images = importAll(\n require.context('../img/', false, /\\.(png|jpe?g|svg)$/),\n);\nconst fontAwesome = importAll(\n require.context('font-awesome', false, /\\.(otf|eot|svg|ttf|woff|woff2)$/),\n);\n","module.exports = jQuery;"],"sourceRoot":""} |