{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/jquery/dist/jquery.js","webpack:///./app/frontend/src/components/modal_form.js","webpack:///./app/frontend/src/trips/scripts/trip_form_modal_view.js","webpack:///(webpack)/buildin/global.js","webpack:///./app/frontend/src/trip_entries/scripts/trip_entry_modal_view.js","webpack:///(webpack)/buildin/module.js","webpack:///./node_modules/popper.js/dist/esm/popper.js","webpack:///./node_modules/rails-ujs/lib/assets/compiled/rails-ujs.js","webpack:///./app/frontend/src/site/scripts/site.js","webpack:///./app/frontend/src/trips/scripts/trip_form_view.js","webpack:///./app/frontend/src/trips/scripts/trip_view.js","webpack:///./app/frontend/src/trips/scripts/trip_modal_view.js","webpack:///./app/frontend/src/trip_attachments/scripts/trip_attachment_form_view.js","webpack:///./app/frontend/src/trip_entries/scripts/trip_entry_form_view.js","webpack:///./app/frontend/src/trips/scripts/trip_quick_open_view.js","webpack:///./app/frontend/src/users/scripts/user_form_view.js","webpack:///./app/frontend/packs/application.js","webpack:///./node_modules/code-prettify/src/prettify.js","webpack:///./node_modules/bootstrap/dist/js/bootstrap.js","webpack:///./node_modules/bootstrap-datepicker/dist/js/bootstrap-datepicker.js","webpack:///./node_modules/blueimp-file-upload/js/jquery.fileupload.js","webpack:///./node_modules/blueimp-file-upload/js/vendor/jquery.ui.widget.js","webpack:///./node_modules/bootstrap-select/dist/js/bootstrap-select.js","webpack:///./node_modules/corejs-typeahead/dist/typeahead.jquery.js","webpack:///./node_modules/timers-browserify/main.js","webpack:///./node_modules/setimmediate/setImmediate.js","webpack:///./node_modules/process/browser.js","webpack:///./app/frontend/src/jquery/remote_typeahead.js","webpack:///./app/frontend/src/site/index.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","_typeof","iterator","obj","constructor","global","factory","document","w","Error","window","this","noGlobal","arr","getProto","getPrototypeOf","_slice","slice","flat","array","concat","apply","push","indexOf","class2type","toString","hasOwn","fnToString","ObjectFunctionString","support","isFunction","nodeType","isWindow","preservedScriptAttributes","type","src","nonce","noModule","DOMEval","code","node","doc","val","script","createElement","text","getAttribute","setAttribute","head","appendChild","parentNode","removeChild","toType","jQuery","selector","context","fn","init","isArrayLike","length","jquery","toArray","num","pushStack","elems","ret","merge","prevObject","each","callback","map","elem","arguments","first","eq","last","even","grep","_elem","odd","len","j","end","sort","splice","extend","options","copy","copyIsArray","clone","target","deep","isPlainObject","Array","isArray","undefined","expando","Math","random","replace","isReady","error","msg","noop","proto","Ctor","isEmptyObject","globalEval","makeArray","results","inArray","second","invert","matches","callbackExpect","arg","guid","split","_i","toLowerCase","Sizzle","Expr","getText","isXML","tokenize","compile","select","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","contains","Date","preferredDoc","dirruns","done","classCache","createCache","tokenCache","compilerCache","nonnativeSelectorCache","sortOrder","a","b","pop","pushNative","list","booleans","whitespace","identifier","attributes","pseudos","rwhitespace","RegExp","rtrim","rcomma","rcombinators","rdescend","rpseudo","ridentifier","matchExpr","rhtml","rinputs","rheader","rnative","rquickExpr","rsibling","runescape","funescape","escape","nonHex","high","String","fromCharCode","rcssescape","fcssescape","ch","asCodePoint","charCodeAt","unloadHandler","inDisabledFieldset","addCombinator","disabled","nodeName","dir","next","childNodes","e","els","seed","nid","match","groups","newSelector","newContext","ownerDocument","exec","getElementById","id","getElementsByTagName","getElementsByClassName","qsa","test","testContext","scope","toSelector","join","querySelectorAll","qsaError","removeAttribute","keys","cache","cacheLength","shift","markFunction","assert","el","addHandle","attrs","handler","attrHandle","siblingCheck","cur","diff","sourceIndex","nextSibling","createInputPseudo","createButtonPseudo","createDisabledPseudo","isDisabled","createPositionalPseudo","argument","matchIndexes","namespace","namespaceURI","documentElement","hasCompare","subWindow","defaultView","top","addEventListener","attachEvent","className","createComment","getById","getElementsByName","filter","attrId","find","getAttributeNode","tag","tmp","input","innerHTML","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","unshift","expr","elements","attr","specified","sel","uniqueSort","duplicates","detectDuplicates","sortStable","textContent","firstChild","nodeValue","selectors","createPseudo","relative","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","check","result","what","_argument","simple","forward","ofType","_context","xml","uniqueCache","outerCache","nodeIndex","start","parent","useCache","lastChild","uniqueID","pseudo","args","setFilters","idx","matched","matcher","unmatched","lang","elemLang","hash","location","activeElement","hasFocus","href","tabIndex","checked","selected","selectedIndex","_matchIndexes","radio","checkbox","file","password","image","submit","reset","tokens","combinator","base","skip","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","contexts","multipleContexts","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","filters","parseOnly","soFar","preFilters","cached","setMatchers","elementMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","matcherFromGroupMatchers","token","compiled","_name","defaultValue","unique","isXMLDoc","escapeSelector","_dir","until","truncate","is","_siblings","rneedsContext","needsContext","rsingleTag","winnow","qualifier","not","self","rootjQuery","root","parseHTML","ready","rparentsprev","guaranteedUnique","children","contents","prev","sibling","has","targets","closest","index","prevAll","add","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","siblings","contentDocument","content","reverse","rnothtmlwhite","Identity","v","Thrower","ex","adoptValue","resolve","reject","noValue","method","promise","fail","then","Callbacks","_","flag","createOptions","firing","memory","_fired","_locked","queue","firingIndex","fire","once","stopOnFalse","remove","empty","disable","lock","locked","fireWith","fired","Deferred","func","tuples","_state","_promise","state","always","deferred","pipe","fns","newDefer","tuple","returned","progress","notify","onFulfilled","onRejected","onProgress","maxDepth","depth","special","that","mightThrow","TypeError","notifyWith","resolveWith","process","exceptionHook","stackTrace","rejectWith","getStackHook","setTimeout","stateString","when","singleValue","remaining","resolveContexts","resolveValues","master","updateFunc","rerrorNames","stack","console","warn","message","readyException","readyList","completed","removeEventListener","readyWait","wait","readyState","doScroll","access","chainable","emptyGet","raw","bulk","_key","rmsPrefix","rdashAlpha","fcamelCase","_all","letter","toUpperCase","camelCase","string","acceptData","owner","Data","uid","configurable","set","data","prop","hasData","dataPriv","dataUser","rbrace","rmultiDash","dataAttr","JSON","parse","getData","_data","removeData","_removeData","dequeue","startLength","hooks","_queueHooks","stop","setter","clearQueue","count","defer","pnum","source","rcssNum","cssExpand","isAttached","composed","getRootNode","isHiddenWithinTree","style","display","css","adjustCSS","valueParts","tween","adjusted","scale","maxIterations","currentValue","initial","unit","cssNumber","initialInUnit","defaultDisplayMap","getDefaultDisplay","body","showHide","show","values","hide","toggle","div","rcheckableType","rtagName","rscriptType","createDocumentFragment","checkClone","cloneNode","noCloneChecked","option","wrapMap","thead","col","tr","td","_default","getAll","setGlobalEval","refElements","tbody","tfoot","colgroup","caption","th","optgroup","buildFragment","scripts","selection","ignored","wrap","attached","fragment","nodes","htmlPrefilter","createTextNode","rkeyEvent","rmouseEvent","rtypenamespace","returnTrue","returnFalse","expectSync","err","safeActiveElement","_on","types","one","origFn","event","off","leverageNative","notAsync","saved","isTrigger","delegateType","stopPropagation","stopImmediatePropagation","preventDefault","trigger","Event","handleObjIn","eventHandle","events","handleObj","handlers","namespaces","origType","elemData","handle","triggered","dispatch","bindType","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","nativeEvent","handlerQueue","fix","delegateTarget","preDispatch","isPropagationStopped","currentTarget","isImmediatePropagationStopped","rnamespace","postDispatch","_handlers","matchedHandlers","matchedSelectors","button","addProp","hook","originalEvent","writable","load","noBubble","click","beforeunload","returnValue","props","isDefaultPrevented","defaultPrevented","relatedTarget","timeStamp","now","isSimulated","altKey","bubbles","cancelable","changedTouches","ctrlKey","detail","eventPhase","metaKey","pageX","pageY","shiftKey","view","charCode","keyCode","buttons","clientX","clientY","offsetX","offsetY","pointerId","pointerType","screenX","screenY","targetTouches","toElement","touches","which","focus","blur","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","on","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","dest","udataOld","udataCur","fixInput","domManip","collection","hasScripts","iNoClone","valueIsFunction","html","_evalUrl","_remove","keepData","cleanData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","detach","append","prepend","insertBefore","before","after","replaceWith","replaceChild","appendTo","prependTo","insertAfter","replaceAll","original","insert","rnumnonpx","getStyles","opener","getComputedStyle","swap","old","rboxStyle","curCSS","computed","width","minWidth","maxWidth","getPropertyValue","pixelBoxStyles","addGetHookIf","conditionFn","hookFn","computeStyleTests","container","cssText","divStyle","pixelPositionVal","reliableMarginLeftVal","roundPixelMeasures","marginLeft","right","pixelBoxStylesVal","boxSizingReliableVal","position","scrollboxSizeVal","offsetWidth","measure","round","parseFloat","reliableTrDimensionsVal","backgroundClip","clearCloneStyle","boxSizingReliable","pixelPosition","reliableMarginLeft","scrollboxSize","reliableTrDimensions","table","trChild","trStyle","height","parseInt","cssPrefixes","emptyStyle","vendorProps","finalPropName","_final","cssProps","capName","vendorPropName","rdisplayswap","rcustomProp","cssShow","visibility","cssNormalTransform","letterSpacing","fontWeight","setPositiveNumber","subtract","max","boxModelAdjustment","dimension","box","isBorderBox","styles","computedVal","extra","delta","ceil","getWidthOrHeight","valueIsBorderBox","offsetProp","getClientRects","Tween","easing","cssHooks","opacity","origName","isCustomProp","setProperty","isFinite","getBoundingClientRect","scrollboxSizeBuggy","left","margin","padding","border","prefix","suffix","expand","expanded","parts","propHooks","run","percent","eased","duration","pos","step","fx","scrollTop","scrollLeft","linear","swing","cos","PI","fxNow","inProgress","rfxtypes","rrun","schedule","hidden","requestAnimationFrame","interval","tick","createFxNow","genFx","includeWidth","createTween","animation","Animation","tweeners","properties","stopped","prefilters","currentTime","startTime","tweens","opts","specialEasing","originalProperties","originalOptions","gotoEnd","propFilter","complete","timer","anim","tweener","oldfire","propTween","restoreDisplay","isBox","dataShow","unqueued","overflow","overflowX","overflowY","prefilter","speed","opt","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","slow","fast","delay","time","timeout","clearTimeout","checkOn","optSelected","radioValue","boolHook","removeAttr","nType","attrHooks","bool","attrNames","lowercaseName","rfocusable","rclickable","stripAndCollapse","getClass","classesToArray","removeProp","propFix","tabindex","addClass","classes","curValue","clazz","finalValue","removeClass","toggleClass","stateVal","isValidValue","classNames","hasClass","rreturn","valHooks","optionSet","focusin","rfocusMorph","stopPropagationCallback","onlyHandlers","bubbleType","ontype","lastElement","eventPath","parentWindow","simulate","triggerHandler","attaches","rquery","parseXML","DOMParser","parseFromString","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","traditional","param","valueOrFunction","encodeURIComponent","serialize","serializeArray","r20","rhash","rantiCache","rheaders","rnoContent","rprotocol","transports","allTypes","originAnchor","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","active","lastModified","etag","url","isLocal","protocol","processData","async","contentType","accepts","json","responseFields","converters","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","urlAnchor","fireGlobals","uncached","callbackContext","globalEventContext","completeDeferred","_statusCode","statusCode","requestHeaders","requestHeadersNames","strAbort","getResponseHeader","getAllResponseHeaders","setRequestHeader","overrideMimeType","mimeType","status","abort","statusText","finalText","crossDomain","host","hasContent","ifModified","headers","beforeSend","success","send","nativeStatusText","responses","isSuccess","response","modified","ct","finalDataType","firstDataType","ajaxHandleResponses","conv2","current","conv","dataFilter","ajaxConvert","getJSON","getScript","wrapAll","firstElementChild","wrapInner","htmlIsFunction","unwrap","visible","offsetHeight","xhr","XMLHttpRequest","xhrSuccessStatus","0","1223","xhrSupported","cors","_callback","errorCallback","open","username","xhrFields","onload","onerror","onabort","ontimeout","onreadystatechange","responseType","responseText","binary","_callback2","scriptAttrs","charset","scriptCharset","evt","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","createHTMLDocument","implementation","keepScripts","parsed","params","animated","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","curElem","using","rect","win","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","defaultExtra","funcName","unbind","delegate","undelegate","hover","fnOver","fnOut","proxy","holdReady","hold","parseJSON","isNumeric","isNaN","trim","_jQuery","_$","$","noConflict","ModalForm","title","submitButtonText","modalDidLoad","formSubmitDidClick","formDidReceiveKeydown","formDidSubmit","formDidSubmitSuccessfully","formDidNotSubmitSuccessfully","additionalHandlers","$modal","bindEvents","modal","dispatchEvent","enableSubmit","log","setTitle","setSubmitButtonText","loadRemoteContent","unbindEvents","modalShouldShow","modalDidHide","forEach","TripFormModalView","parentView","disableSubmit","setContent","form_html","g","Function","TripEntryModalView","expenseTypeChanged","focusOnElement","getExpenseType","category","getExpenseCategory","cost","getCost","alert","$shouldReimburse","$categorySelect","cashAdvanceId","Number","webpackPolyfill","deprecate","paths","isBrowser","navigator","timeoutDuration","longerTimeoutBrowsers","userAgent","debounce","Promise","called","scheduled","functionToCheck","getStyleComputedProperty","element","getParentNode","getScrollParent","_getStyleComputedProp","getReferenceNode","reference","referenceNode","isIE11","MSInputMethodContext","documentMode","isIE10","isIE","version","getOffsetParent","noOffsetParent","nextElementSibling","getRoot","findCommonOffsetParent","element1","element2","order","Node","DOCUMENT_POSITION_FOLLOWING","range","createRange","setStart","setEnd","commonAncestorContainer","element1root","getScroll","side","upperSide","scrollingElement","includeScroll","modifier","bottom","getBordersSize","axis","sideA","sideB","getSize","computedStyle","getWindowSizes","classCallCheck","instance","Constructor","createClass","defineProperties","descriptor","protoProps","staticProps","_extends","assign","getClientRect","offsets","sizes","clientWidth","clientHeight","horizScrollbar","vertScrollbar","getOffsetRectRelativeToArbitraryNode","fixedPosition","isHTML","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","marginTop","getViewportOffsetRectRelativeToArtbitraryNode","excludeScroll","relativeOffset","innerWidth","innerHeight","isFixed","getFixedPositionOffsetParent","parentElement","getBoundaries","popper","boundariesElement","boundaries","boundariesNode","_getWindowSizes","isPaddingNumber","getArea","_ref","computeAutoPlacement","placement","refRect","rects","sortedAreas","area","filteredAreas","_ref2","computedPlacement","variation","getReferenceOffsets","commonOffsetParent","getOuterSizes","x","marginBottom","y","marginRight","getOppositePlacement","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","runModifiers","modifiers","ends","findIndex","enabled","update","isDestroyed","arrowStyles","flipped","positionFixed","flip","originalPlacement","isCreated","onUpdate","onCreate","isModifierEnabled","modifierName","some","getSupportedPropertyName","prefixes","upperProp","charAt","toCheck","destroy","willChange","disableEventListeners","removeOnDestroy","getWindow","setupEventListeners","updateBound","passive","scrollElement","attachToScrollParents","scrollParents","isBody","eventsEnabled","enableEventListeners","scheduleUpdate","cancelAnimationFrame","setStyles","isFirefox","isModifierRequired","requestingName","requestedName","requesting","isRequired","_requesting","requested","placements","validPlacements","clockwise","counter","BEHAVIORS","parseOffset","basePlacement","useHeight","fragments","frag","divider","search","splitRegex","ops","op","mergeWithPrevious","reduce","str","toValue","index2","Defaults","shiftvariation","_data$offsets","isVertical","shiftOffsets","preventOverflow","transformProp","popperStyles","transform","priority","primary","escapeWithReference","secondary","min","keepTogether","floor","opSide","arrow","_data$offsets$arrow","arrowElement","querySelector","sideCapitalized","altSide","arrowElementSize","center","popperMarginSide","popperBorderSide","sideValue","placementOpposite","flipOrder","behavior","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","devicePixelRatio","prefixedProperty","invertTop","invertLeft","applyStyle","onLoad","modifierOptions","Popper","_this","Utils","PopperUtils","Rails","linkClickSelector","buttonClickSelector","exclude","inputChangeSelector","formSubmitSelector","formInputClickSelector","formDisableSelector","formEnableSelector","fileInputSelector","linkDisableSelector","buttonDisableSelector","loadCSPNonce","ref","cspNonce","Element","setData","csrfParam","csrfToken","meta","CSRFProtection","refreshCSRFTokens","CustomEvent","createEvent","initCustomEvent","stopEverything","eventType","AcceptHeaders","createXHR","prepareOptions","processResponse","OPENED","accept","withCredentials","DONE","parser","isCrossDomain","serializeElement","additionalParam","inputs","formElements","form","allowAction","handleConfirm","answer","confirm","disableFormElement","disableFormElements","disableLinkElement","enableFormElement","enableFormElements","enableLinkElement","handleDisabledElement","enableElement","disableElement","replacement","originalText","handleMethod","formContent","action","isRemote","handleRemote","enctype","FormData","formSubmitButtonClick","formNoValidate","preventInsignificantClick","insignificantMetaClick","rails","_rails_loaded","Site","initPopovers","initTabHistorification","initDatePicker","initMultiSelect","initRemoteTypeahead","popover","substr","tab","datepicker","format","viewMode","autoclose","todayBtn","todayHighlight","selectpicker","remoteTypeahead","TripFormView","displayErrorsForLookupFields","observeLookupFields","observeCompanyCreateClick","observeDriverCreateClick","field","$idField","$lookupField","$lookupGroup","predicate","idSelector","displayKey","full_name","additionalParameters","company_id_eq","modalView","TripView","observeChangeStatusClicked","observeButtonPress","submitUrl","TripModalView","dataSubmitUrl","TripAttachmentFormView","initFileUpload","$uploader","fileUploadSelector","fileupload","paramName","dropZone","onFileAdd","onFileProgress","onFail","onStop","$row","actions","files","onSignedUrlSuccess","onSignedUrlFailure","trip_attachment","file_name","formData","onSuccess","row","pct","loaded","total","responseXML","onCreateSuccess","onCreateError","file_uid","observeDelete","$this","_method","TripEntryFormView","observeCreateClick","observeHoverEdit","$tr","editable","updateCompositeFields","composite_html","appendToTable","row_html","replaceTableRow","row_id","TripQuickOpenView","setRemoteTypeahead","onRemoteTypeaheadSuccess","entity","pathname","UserFormView","observeDriverLookup","driver","to_select_option","FLOW_CONTROL_KEYWORDS","COMMON_KEYWORDS","CPP_KEYWORDS","JAVA_KEYWORDS","CSHARP_KEYWORDS","JSCRIPT_KEYWORDS","PERL_KEYWORDS","PYTHON_KEYWORDS","RUBY_KEYWORDS","SH_KEYWORDS","C_TYPES","appendDecorations","sourceNode","basePos","sourceCode","langHandler","out","job","pre","langExtension","numberLines","spans","decorations","notWs","childContentWrapper","wrapper","createSimpleLexer","shortcutStylePatterns","fallthroughStylePatterns","tokenizer","shortcuts","allPatterns","allRegexs","regexKeys","patternParts","shortcutChars","regex","k","regexs","capturedGroupIndex","needToFoldCase","ignoreCase","escapeCharToCodeUnit","decodeEscape","charsetPart","cc0","c1","substring","encodeEscape","caseFoldCharset","charSet","charsetParts","ranges","inverse","consolidatedRanges","lastRange","allowAnywhereFoldCaseAndRenumberGroups","capturedGroups","groupIndex","decimalValue","ch0","cc","rewritten","multiline","combinePrefixPatterns","nPatterns","decorate","styleCache","ti","nTokens","isEmbedded","tokenStart","embeddedSource","embeddedSourceStart","embeddedSourceEnd","langHandlerForExtension","sourceDecorator","hc","regexLiterals","regexExcls","regexAny","REGEX_LITERAL","keywords","punctuation","decorateSource","startLineNum","isPreformatted","nocode","lineBreak","li","listItems","walk","firstLine","tail","breakAfter","child","lineEndNode","copiedListItem","breakLeftOf","limit","rightSide","parentClone","ol","langHandlerRegistry","registerLangHandler","fileExtensions","ext","extension","applyDecorator","chunks","opt_langExtension","sourceAndSpans","isIE8OrEarlier","decPos","newlineRe","sourceLength","nSpans","spanIndex","nDecorations","decorationIndex","startPos","startDec","oldDisplay","styledText","spanEnd","decEnd","textNode","span","recombineTagsAndDecorations","$prettyPrintOne","sourceCodeHtml","opt_numberLines","nl","$prettyPrint","opt_whenDone","opt_root","byTagName","tn","codeSegments","clock","langExtensionRe","prettyPrintRe","prettyPrintedRe","preformattedTagNameRe","codeRe","preCodeXmpRe","EMPTY","doWork","endTime","Infinity","cs","preceder","previousSibling","nt","nested","tagName","preformatted","currentStyle","lineNums","PR","define","_interopDefaultLegacy","$__default","Popper__default","_defineProperties","_createClass","transitionEndEmulator","Util","TRANSITION_END","triggerTransitionEnd","getUID","getSelectorFromElement","hrefAttr","getTransitionDurationFromElement","transitionDuration","transitionDelay","floatTransitionDuration","floatTransitionDelay","reflow","supportsTransitionEnd","Boolean","isElement","typeCheckConfig","componentName","config","configTypes","expectedTypes","valueType","findShadowRoot","attachShadow","ShadowRoot","jQueryDetection","emulateTransitionEnd","NAME","JQUERY_NO_CONFLICT","Alert","_element","_proto","close","rootElement","_getRootElement","_triggerCloseEvent","_removeElement","dispose","closeEvent","_destroyElement","_jQueryInterface","$element","_handleDismiss","alertInstance","JQUERY_NO_CONFLICT$1","Button","shouldAvoidTriggerChange","triggerChangeEvent","addAriaPressed","classList","hasAttribute","avoidTriggerChange","initialButton","inputBtn","_len","_button","NAME$2","EVENT_KEY$2","JQUERY_NO_CONFLICT$2","Default","keyboard","slide","pause","touch","DefaultType","PointerType","TOUCH","PEN","Carousel","_items","_interval","_activeElement","_isPaused","_isSliding","touchTimeout","touchStartX","touchDeltaX","_config","_getConfig","_indicatorsElement","_touchSupported","maxTouchPoints","_pointerEvent","PointerEvent","MSPointerEvent","_addEventListeners","_slide","nextWhenVisible","cycle","clearInterval","setInterval","visibilityState","activeIndex","_getItemIndex","direction","_handleSwipe","absDeltax","abs","_this2","_keydown","_addTouchEventListeners","_this3","move","_getItemByDirection","isNextDirection","isPrevDirection","lastItemIndex","itemIndex","_triggerSlideEvent","eventDirectionName","targetIndex","fromIndex","slideEvent","from","_setActiveIndicatorElement","indicators","nextIndicator","directionalClassName","orderClassName","_this4","activeElementIndex","nextElement","nextElementIndex","isCycling","slidEvent","nextElementInterval","defaultInterval","CLASS_NAME_ACTIVE$1","ride","_dataApiClickHandler","slideIndex","carousels","$carousel","NAME$3","JQUERY_NO_CONFLICT$3","Default$1","DefaultType$1","Collapse","_isTransitioning","_triggerArray","toggleList","filterElement","foundElem","_selector","_parent","_getParent","_addAriaAndCollapsedClass","actives","activesData","startEvent","_getDimension","setTransitioning","scrollSize","CLASS_NAME_COLLAPSE","triggerArrayLength","isTransitioning","_getTargetFromElement","triggerArray","isOpen","$trigger","$target","NAME$4","JQUERY_NO_CONFLICT$4","REGEXP_KEYDOWN","ARROW_UP_KEYCODE","Default$2","boundary","popperConfig","DefaultType$2","Dropdown","_popper","_menu","_getMenuElement","_inNavbar","_detectNavbar","isActive","_clearMenus","usePopper","showEvent","_getParentFromElement","referenceElement","_getPopperConfig","hideEvent","_getPlacement","$parentDropdown","_getOffset","toggles","clickEvent","dropdownMenu","_dataApiKeydownHandler","items","item","EVENT_CLICK_DATA_API$4","JQUERY_NO_CONFLICT$5","Default$3","backdrop","DefaultType$3","Modal","_dialog","_backdrop","_isShown","_isBodyOverflowing","_ignoreBackdropClick","_scrollbarWidth","_checkScrollbar","_setScrollbar","_adjustDialog","_setEscapeEvent","_setResizeEvent","_showBackdrop","_showElement","transition","_hideModal","htmlElement","handleUpdate","_triggerBackdropTransition","hideEventPrevented","isModalOverflowing","scrollHeight","modalTransitionDuration","modalBody","ELEMENT_NODE","_enforceFocus","shownEvent","transitionComplete","_this5","_this6","_this7","_this8","_resetAdjustments","_resetScrollbar","_removeBackdrop","_this9","backdropTransitionDuration","callbackRemove","_backdropTransitionDuration","paddingLeft","paddingRight","_getScrollbarWidth","_this10","fixedContent","stickyContent","actualPadding","calculatedPadding","actualMargin","calculatedMargin","scrollDiv","scrollbarWidth","_this11","uriAttrs","DefaultWhitelist","br","em","hr","h1","h2","h3","h4","h5","h6","img","small","sub","sup","strong","u","ul","SAFE_URL_PATTERN","DATA_URL_PATTERN","sanitizeHtml","unsafeHtml","whiteList","sanitizeFn","createdDocument","whitelistKeys","_loop","elName","attributeList","whitelistedAttributes","allowedAttributeList","attrName","regExp","attrRegex","allowedAttribute","NAME$6","JQUERY_NO_CONFLICT$6","BSCLS_PREFIX_REGEX","DISALLOWED_ATTRIBUTES","DefaultType$4","template","fallbackPlacement","sanitize","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","Default$4","HIDE","HIDDEN","SHOW","SHOWN","INSERTED","CLICK","FOCUSIN","FOCUSOUT","MOUSEENTER","MOUSELEAVE","Tooltip","_isEnabled","_timeout","_hoverState","_activeTrigger","tip","_setListeners","enable","toggleEnabled","dataKey","DATA_KEY","_getDelegateConfig","_isWithActiveTrigger","_enter","_leave","getTipElement","EVENT_KEY","_hideModalHandler","isWithContent","shadowRoot","isInTheDom","tipId","attachment","_getAttachment","addAttachmentClass","_getContainer","_fixTransition","prevHoverState","_cleanTipClass","getTitle","CLASS_PREFIX","setElementContent","CLASS_NAME_FADE$2","_handlePopperPlacementChange","eventIn","eventOut","_fixTitle","titleType","dataAttributes","$tip","tabClass","popperData","initConfigAnimation","NAME$7","JQUERY_NO_CONFLICT$7","BSCLS_PREFIX_REGEX$1","Default$5","DefaultType$5","Event$1","Popover","_Tooltip","subClass","superClass","__proto__","_getContent","CLASS_PREFIX$1","CLASS_NAME_FADE$3","NAME$8","JQUERY_NO_CONFLICT$8","Default$6","DefaultType$6","ScrollSpy","_scrollElement","_offsets","_targets","_activeTarget","_scrollHeight","_process","refresh","autoMethod","offsetMethod","offsetBase","_getScrollTop","_getScrollHeight","targetSelector","targetBCR","_getOffsetHeight","maxScroll","_activate","_clear","queries","$link","SELECTOR_NAV_LINKS","scrollSpys","$spy","JQUERY_NO_CONFLICT$9","Tab","previous","listElement","itemSelector","hiddenEvent","_transitionComplete","dropdownChild","dropdownElement","dropdownToggleList","JQUERY_NO_CONFLICT$a","DefaultType$7","autohide","Default$7","Toast","_clearTimeout","_close","Scrollspy","UTCDate","UTC","UTCToday","today","getFullYear","getMonth","getDate","isUTCEquals","date1","date2","getUTCFullYear","getUTCMonth","getUTCDate","alias","deprecationMsg","deprecated","extras","DateArray","valueOf","new_array","clear","Datepicker","_events","_secondaryEvents","_process_options","dates","viewDate","defaultViewDate","focusDate","isInput","inputField","component","isInline","picker","DPGlobal","_check_template","templates","leftArrow","rightArrow","_buildEvents","_attachEvents","rtl","calendarWeeks","startDate","_o","endDate","daysOfWeekDisabled","daysOfWeekHighlighted","datesDisabled","_allow_update","setViewMode","startView","fillDow","fillMonths","_resolveViewName","viewModes","names","_resolveDaysOfWeek","daysOfWeek","language","defaults","minViewMode","maxViewMode","multidate","multidateSeparator","weekStart","weekEnd","parseFormat","_local_to_utc","_zero_time","parseDate","assumeNearbyYear","plc","orientation","_plc","word","year","month","day","_applyEvents","evs","ev","_unapplyEvents","keyup","keydown","paste","showOnFocus","_focused_from","immediateUpdates","date","navArrowsClick","dayCellClick","resize","place","_detachEvents","_attachSecondaryEvents","_detachSecondaryEvents","_trigger","altdate","local_date","_utc_to_local","ix","formatDate","enableOnReadonly","msMaxTouchPoints","disableTouchKeyboard","forceParse","setValue","dateString","clipboardData","setDate","utc","local","getTime","getTimezoneOffset","_zero_utc_time","getDates","getUTCDates","selected_date","clearDates","setDates","setUTCDates","setUTCDate","formatted","getFormattedDate","getStartDate","setStartDate","updateNavArrows","getEndDate","setEndDate","setDaysOfWeekDisabled","setDaysOfWeekHighlighted","setDatesDisabled","calendarWidth","outerWidth","calendarHeight","outerHeight","windowWidth","appendOffset","parentsZindex","itemZIndex","zIndex","zIndexOffset","yorient","oldDates","fromArgs","dateWithinRange","updateViewDate","change","fill","showWeekDays","dowCnt","daysMin","localDate","monthsShort","setRange","getClassNames","cls","dateIsDisabled","getUTCDay","_fill_yearsView","cssClass","factor","startYear","endYear","beforeFn","tooltip","startVal","endVal","focusedVal","currVal","startMonth","endMonth","todaytxt","cleartxt","titleFormat","todayDate","titleBtnVisible","weekOfDateIsDisabled","clearBtn","prevMonth","nextMonth","setUTCFullYear","weekDay","clsName","ws","yth","calWeek","beforeShowDay","monthsTitle","months","beforeShowMonth","moDate","beforeShowYear","beforeShowDecade","beforeShowCentury","prevIsDisabled","nextIsDisabled","_setDate","setUTCMonth","timestamp","navStep","moveMonth","_toggle_multidate","toggleActive","moveDay","newDate","moveWeek","new_month","new_date","mag","moveYear","moveAvailableDate","newViewDate","dateChanged","keyboardNavigation","DateRangePicker","keepEmptyValues","datepickerPlugin","dateUpdated","pickers","updateDates","opts_from_el","re_lower","opts_from_locale","locale_opts","updateRanges","updating","dp","keep_empty_values","internal_return","elopts","locopts","en","days","daysShort","validParts","nonpunctuation","toDisplay","separators","assumeNearby","part","fn_map","dateAliases","yesterday","tomorrow","filtered","setters_order","setters_map","yyyy","threshold","_d","fparts","match_part","cnt","_date","D","DD","M","MM","yy","dd","mm","seps","headTemplate","contTemplate","footTemplate","getDragHandler","isDragOver","dataTransfer","delegatedEvent","dropEffect","fileInput","xhrFileUpload","ProgressEvent","FileReader","xhrFormDataFileUpload","blobSlice","Blob","webkitSlice","mozSlice","widget","pasteZone","replaceFileInput","singleFileUploads","limitMultiFileUploads","limitMultiFileUploadSize","limitMultiFileUploadSizeOverhead","sequentialUploads","limitConcurrentUploads","forceIframeTransport","redirect","redirectParamName","postMessage","multipart","maxChunkSize","uploadedBytes","recalculateProgress","progressInterval","bitrateInterval","autoUpload","uniqueFilenames","messages","i18n","_specialOptions","_blobSlice","_BitrateTimer","bitrate","getBitrate","timeDiff","_isXHRUpload","_getFormData","_getTotal","size","_initProgressObject","_progress","_initResponseObject","_response","_onProgress","lengthComputable","_time","chunkSize","_bitrateTimer","_initProgressListener","upload","oe","_deinitProgressListener","_isInstanceOf","_getUniqueFilename","p1","p2","_initXHRData","contentRange","blob","encodeURI","uploadName","fileName","_initIframeSettings","targetHost","_initDataSettings","_chunkedUpload","_getParamName","_initFormSettings","formAcceptCharset","_getAJAXSettings","_getDeferredState","isResolved","isRejected","_enhancePromise","_getXHRPromise","resolveOrReject","dfd","_addConvenienceMethods","getPromise","resolveFunc","rejectFunc","_processQueue","errorThrown","_onSend","processing","_getUploadedBytes","upperBytesPos","testOnly","_upload","fs","ub","mcs","currentLoaded","textStatus","_beforeSend","_active","_onDone","_onFail","_onAlways","jqXHRorResult","jqXHRorError","aborted","slot","_sending","nextSlot","_slots","_sequence","_onAdd","paramNameSet","paramNameSlice","fileSet","filesLength","limitSize","overhead","batchSize","originalFiles","newData","_replaceFileInput","inputClone","restoreFocus","fileInputClone","_handleFileTreeEntry","entry","path","dirReader","entries","errorHandler","isFile","_file","relativePath","isDirectory","createReader","readEntries","_handleFileTreeEntries","successHandler","_getDroppedFiles","webkitGetAsEntry","getAsEntry","getAsFile","_getSingleFileInputFiles","fileSize","_getFileInputFiles","_onChange","_onPaste","_onDrop","_onDragOver","_onDragEnter","_onDragLeave","_initEventHandlers","dragover","drop","dragenter","dragleave","_destroyEventHandlers","_off","_destroy","_setOption","reinit","_super","_initSpecialOptions","_getRegExp","_isRegExpOption","_initDataAttributes","_create","ui","widgetUuid","widgetSlice","existingConstructor","basePrototype","proxiedPrototype","fullName","Widget","_createWidget","_childConstructors","_superApply","__super","__superApply","widgetEventPrefix","widgetName","widgetFullName","childPrototype","bridge","inputIndex","inputLength","isMethodCall","methodValue","_init","defaultElement","uuid","eventNamespace","bindings","hoverable","focusable","classesElementLookup","_getCreateOptions","_setOptionDisabled","_getCreateEventData","_removeClass","curOption","_setOptions","_setOptionClasses","classKey","currentElements","_classes","_toggleClass","full","processClassString","checkOption","_untrackClassesElement","_addClass","suppressDisabledCheck","delegateElement","handlerProxy","eventName","_delay","_hoverable","_focusable","focusout","defaultEffect","hasOptions","effect","effectName","effects","a0","unsafeElements","len2","len3","elemCtrProto","objCtr","classListGetter","$elem","force","classListPropDesc","number","__defineGetter__","startsWith","testElement","_add","DOMTokenList","_toggle","getSelectedOptions","ignoreDisabled","selectedOptions","getSelectValues","multiple","$defineProperty","stringLength","searchString","searchLength","HTMLSelectElement","useDefault","_set","changedArguments","EventIsSupported","stringSearch","normalize","stringTypes","searchSuccess","stringType","normalizeToBase","toInteger","triggerNative","initEvent","fireEvent","createEventObject","deburredLetters","reLatin","reComboMark","deburrLetter","escaper","testRegexp","replaceRegexp","htmlEscape","keyCodeMap","32","48","49","50","51","52","53","54","55","56","57","59","65","66","67","68","69","70","71","72","73","74","75","76","77","78","79","80","81","82","83","84","85","86","87","88","89","90","96","97","98","99","100","101","102","103","104","105","keyCodes","major","dropdown","VERSION","selectId","DISABLED","DIVIDER","DROPUP","MENU","MENURIGHT","MENULEFT","BUTTONCLASS","POPOVERHEADER","ICONBASE","TICKICON","Selector","elementTemplates","subtext","noResults","checkMark","REGEXP_ARROW","REGEXP_TAB_OR_ESCAPE","generateOption","inline","insertAdjacentHTML","useFragment","subtextElement","iconElement","textElement","icon","iconBase","label","showNoResults","searchMatch","searchValue","noneResultsText","$menuInner","Selectpicker","$newElement","$button","$menu","main","isSearching","keyHistory","resetKeyHistory","sizeInfo","winPad","windowPadding","render","setStyle","selectAll","deselectAll","Plugin","_option","BootstrapVersion","toUpdate","DEFAULTS","tickIcon","chain","noneSelectedText","countSelectedText","numSelected","numTotal","maxOptionsText","numAll","numGroup","selectAllText","deselectAllText","doneButton","doneButtonText","multipleSeparator","styleBase","selectedTextFormat","hideDisabled","showSubtext","showIcon","showContent","dropupAuto","header","liveSearch","liveSearchPlaceholder","liveSearchNormalize","liveSearchStyle","actionsBox","showTick","caret","maxOptions","mobile","selectOnTab","dropdownAlignRight","virtualScroll","autofocus","createDropdown","buildData","$searchbox","checkDisabled","clickListener","liveSearchListener","focusedParent","setWidth","selectPosition","isVirtual","menuInner","emptyMenu","validity","valid","buildList","multiselectable","inputGroup","searchbox","actionsbox","donebutton","setPositionData","canHighlight","firstHighlightIndex","dividerHeight","dropdownHeaderHeight","liHeight","posinset","createView","setSize","prevActive","liIndex","selectedData","menuInnerHeight","scroll","chunkCount","firstChunk","lastChunk","currentChunk","prevPositions","positionIsDifferent","previousElements","array1","array2","menuIsDifferent","endOfChunk","position0","position1","prevActiveIndex","defocusItem","visibleElements","setOptionStatus","every","menuFragment","toSanitize","visibleElementsLen","elText","elementData","sanitized","hasScrollBar","menuInnerInnerWidth","totalMenuWidth","selectWidth","actualMenuWidth","newActive","currentActive","focusItem","updateValue","noScroll","liData","noStyle","setPlaceholder","updateIndex","titleOption","selectTitleOption","titleNotAppended","selectedOption","navigation","performance","getEntriesByType","isNotBackForward","defaultSelected","displayedValue","optionSelector","mainData","optID","startIndex","selectOptions","addDivider","previousData","addOption","inlineStyle","optionClass","optgroupClass","addOptgroup","headerIndex","lastIndex","selectData","mainElements","widestOptionLength","buildElement","liElement","combinedLength","widestOption","findLis","showCount","countMax","placeholderSelected","selectedCount","buttonInner","titleFragment","thisData","titleOptions","totalCount","tr8nText","filterExpand","newStyle","buttonClass","newElement","previousElementSibling","menu","menuInnerInner","dropdownHeader","firstOption","scrollBarWidth","headerHeight","searchHeight","actionsHeight","doneButtonHeight","menuStyle","menuWidth","menuPadding","vert","paddingTop","paddingBottom","borderBottomWidth","horiz","borderRightWidth","menuExtras","selectHeight","getSelectPosition","containerPos","$window","$container","selectOffsetTop","selectOffsetBot","selectOffsetLeft","selectOffsetRight","setMenuSize","isAuto","menuHeight","minHeight","_minHeight","maxHeight","menuInnerMinHeight","estimate","isDropup","divHeight","divLength","dropup","$selectClone","btnWidth","$bsContainer","actualHeight","getPlacement","containerPosition","selectedOnly","setDisabled","setSelected","activeIndexIsSet","keepActive","$document","setFocus","checkPopperExists","hoverLi","hoverData","retainActive","clickedData","clickedIndex","prevValue","prevIndex","prevOption","triggerChange","$option","$optgroup","$optgroupOptions","maxOptionsGrp","maxReached","maxReachedGrp","maxOptionsArr","maxTxt","maxTxtGrp","$notify","isTrusted","previousValue","q","cacheArr","searchStyle","_searchStyle","normalizeSearch","cacheLen","liPrev","liSelectedIndex","changeAll","previousSelected","currentSelected","liActive","activeLi","isToggle","$items","updateScroll","downOnTab","isArrowKey","lastIndexOf","liActiveIndex","cancel","matchIndex","keydownHandler","bootstrapKeydown","$selectpicker","isMsie","isBlankString","escapeRegExChars","isString","isNumber","isObject","isUndefined","isJQuery","toStr","cb","mixin","identity","getIdGenerator","templatify","immediate","later","callNow","throttle","stringify","_p8","WWW","defaultClassNames","hint","dataset","suggestion","selectable","cursor","highlight","www","borderColor","boxShadow","verticalAlign","backgroundColor","inputWithNoHint","ltr","backgroundImage","buildSelectors","EventBus","deprecationMap","$el","cursorchange","autocomplete","$e","deprecatedType","EventEmitter","splitter","nextTick","setImmediate","onSync","onAsync","_callbacks","callbacks","syncFlush","asyncFlush","getFlush","sync","bindContext","cancelled","wordsOnly","caseSensitive","diacriticInsensitive","accented","A","B","C","E","F","G","H","I","J","K","L","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","patterns","regexStr","escapedPatterns","escapedWord","accent_replacer","getRegex","traverse","hightlightTextNode","childNode","patternNode","wrapperNode","splitText","chr","Input","specialKeyCodeMap","$input","$hint","role","query","queryWhenFocused","$overflowHelper","whiteSpace","fontFamily","fontSize","fontStyle","fontVariant","wordSpacing","textIndent","textRendering","textTransform","_checkLanguageDirection","setHint","getHint","clearHint","clearHintIfInvalid","_updateDescendent","9","27","37","39","13","38","40","normalizeQuery","_onBlur","resetInputValue","_onFocus","_onKeydown","keyName","_managePreventDefault","_shouldTrigger","_onInput","_setQuery","getInputValue","withModifier","silent","areEquivalent","hasDifferentWhitespace","onBlur","onFocus","onKeydown","onInput","getLangDir","getQuery","setQuery","setInputValue","hasQueryChangedSinceLastFocus","valIsPrefixOfHint","hasOverflow","constraint","isCursorAtEnd","valueLength","selectionStart","moveStart","setAriaExpanded","Dataset","nameGenerator","displayFn","notFound","pending","footer","__ttAdapter","_resetLastSuggestion","extractData","_overwrite","suggestions","_renderSuggestions","_renderPending","_renderNotFound","_empty","_append","$lastSuggestion","_appendSuggestions","$fragment","_getSuggestionsFragment","_getHeader","_getFooter","_injectQuery","_query","canceled","syncCalled","rendered","isEmpty","Menu","$node","datasets","oDataset","_onSelectableClick","_onRendered","_allDatasetsEmpty","_onCleared","_propagate","_getSelectables","_removeCursor","$selectable","getActiveSelectable","_ensureVisible","elTop","elBottom","nodeScrollTop","nodeHeight","onSelectableClick","setCursor","setLanguageDirection","selectableRelativeToCursor","$selectables","$oldCursor","newIndex","getSelectableData","getTopSelectable","isValidUpdate","Status","clip","cleared","words","DefaultMenu","_show","_hide","Typeahead","onFocused","onBlurred","onEnterKeyed","onTabKeyed","onEscKeyed","onUpKeyed","onDownKeyed","onLeftKeyed","onRightKeyed","onQueryChanged","onWhitespaceChanged","eventBus","minLength","autoselect","activate","_hacks","_onSelectableClicked","_onAsyncRequested","_onAsyncCanceled","_onAsyncReceived","_onDatasetRendered","_onDatasetCleared","_onLangDirChanged","hasActive","_updateHint","cursorClass","_onFocused","_minLengthMet","_onBlurred","_onEnterKeyed","_onTabKeyed","_onEscKeyed","_onUpKeyed","moveCursor","_onDownKeyed","_onLeftKeyed","_onRightKeyed","_onQueryChanged","_onWhitespaceChanged","_openIfActive","escapedQuery","isEnabled","deactivate","setVal","getVal","$candidate","datasetName","ctx","methods","ttEach","$els","typeahead","buildHintFromInput","backgroundAttachment","backgroundOrigin","backgroundPosition","backgroundRepeat","backgroundSize","readonly","required","spellcheck","prepInput","$elOrNull","initialize","attach","$wrapper","defaultHint","defaultMenu","MenuConstructor","newVal","revert","Timeout","clearFn","_id","_clearFn","unref","enroll","msecs","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","_onTimeout","clearImmediate","registerImmediate","channel","messagePrefix","onGlobalMessage","nextHandle","tasksByHandle","currentlyRunningATask","attachTo","runIfPresent","importScripts","postMessageIsAsynchronous","oldOnMessage","onmessage","canUsePostMessage","MessageChannel","port1","port2","task","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","currentQueue","draining","queueIndex","cleanUpNextTick","drainQueue","marker","runClearTimeout","Item","browser","env","argv","versions","addListener","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","umask","$typeahead","$idInput","createTypeahead","onTypeaheadRequest","onTypeaheadSelect","onTypeaheadOpen","onAsyncResult","_idSelector","_url","_predicate","_displayKey","site"],"mappings":"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OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,KACR,OAAQ,KACR,OAAQ,KACR,OAAQ,KACR,OAAQ,KAER,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,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","file":"js/application-d915a4e65e077ca5e21e.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 = \"/packs/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 16);\n","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*!\n * jQuery JavaScript Library v3.5.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2020-05-04T22:49Z\n */\n(function (global, factory) {\n \"use strict\";\n\n if ((typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) === \"object\" && _typeof(module.exports) === \"object\") {\n // For CommonJS and CommonJS-like environments where a proper `window`\n // is present, execute the factory and get jQuery.\n // For environments that do not have a `window` with a `document`\n // (such as Node.js), expose a factory as module.exports.\n // This accentuates the need for the creation of a real `window`.\n // e.g. var jQuery = require(\"jquery\")(window);\n // See ticket #14549 for more info.\n module.exports = global.document ? factory(global, true) : function (w) {\n if (!w.document) {\n throw new Error(\"jQuery requires a window with a document\");\n }\n\n return factory(w);\n };\n } else {\n factory(global);\n } // Pass this if window is not defined yet\n\n})(typeof window !== \"undefined\" ? window : this, function (window, noGlobal) {\n // Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n // throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n // arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n // enough that all such attempts are guarded in a try block.\n \"use strict\";\n\n var arr = [];\n var getProto = Object.getPrototypeOf;\n var _slice = arr.slice;\n var flat = arr.flat ? function (array) {\n return arr.flat.call(array);\n } : function (array) {\n return arr.concat.apply([], array);\n };\n var push = arr.push;\n var indexOf = arr.indexOf;\n var class2type = {};\n var toString = class2type.toString;\n var hasOwn = class2type.hasOwnProperty;\n var fnToString = hasOwn.toString;\n var ObjectFunctionString = fnToString.call(Object);\n var support = {};\n\n var isFunction = function isFunction(obj) {\n // Support: Chrome <=57, Firefox <=52\n // In some browsers, typeof returns \"function\" for HTML <object> elements\n // (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n // We don't want to classify *any* DOM node as a function.\n return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n };\n\n var isWindow = function isWindow(obj) {\n return obj != null && obj === obj.window;\n };\n\n var document = window.document;\n var preservedScriptAttributes = {\n type: true,\n src: true,\n nonce: true,\n noModule: true\n };\n\n function DOMEval(code, node, doc) {\n doc = doc || document;\n var i,\n val,\n script = doc.createElement(\"script\");\n script.text = code;\n\n if (node) {\n for (i in preservedScriptAttributes) {\n // Support: Firefox 64+, Edge 18+\n // Some browsers don't support the \"nonce\" property on scripts.\n // On the other hand, just using `getAttribute` is not enough as\n // the `nonce` attribute is reset to an empty string whenever it\n // becomes browsing-context connected.\n // See https://github.com/whatwg/html/issues/2369\n // See https://html.spec.whatwg.org/#nonce-attributes\n // The `node.getAttribute` check was added for the sake of\n // `jQuery.globalEval` so that it can fake a nonce-containing node\n // via an object.\n val = node[i] || node.getAttribute && node.getAttribute(i);\n\n if (val) {\n script.setAttribute(i, val);\n }\n }\n }\n\n doc.head.appendChild(script).parentNode.removeChild(script);\n }\n\n function toType(obj) {\n if (obj == null) {\n return obj + \"\";\n } // Support: Android <=2.3 only (functionish RegExp)\n\n\n return _typeof(obj) === \"object\" || typeof obj === \"function\" ? class2type[toString.call(obj)] || \"object\" : _typeof(obj);\n }\n /* global Symbol */\n // Defining this global in .eslintrc.json would create a danger of using the global\n // unguarded in another place, it seems safer to define global only for this module\n\n\n var version = \"3.5.1\",\n // Define a local copy of jQuery\n jQuery = function jQuery(selector, context) {\n // The jQuery object is actually just the init constructor 'enhanced'\n // Need init if jQuery is called (just allow error to be thrown if not included)\n return new jQuery.fn.init(selector, context);\n };\n\n jQuery.fn = jQuery.prototype = {\n // The current version of jQuery being used\n jquery: version,\n constructor: jQuery,\n // The default length of a jQuery object is 0\n length: 0,\n toArray: function toArray() {\n return _slice.call(this);\n },\n // Get the Nth element in the matched element set OR\n // Get the whole matched element set as a clean array\n get: function get(num) {\n // Return all the elements in a clean array\n if (num == null) {\n return _slice.call(this);\n } // Return just the one element from the set\n\n\n return num < 0 ? this[num + this.length] : this[num];\n },\n // Take an array of elements and push it onto the stack\n // (returning the new matched element set)\n pushStack: function pushStack(elems) {\n // Build a new jQuery matched element set\n var ret = jQuery.merge(this.constructor(), elems); // Add the old object onto the stack (as a reference)\n\n ret.prevObject = this; // Return the newly-formed element set\n\n return ret;\n },\n // Execute a callback for every element in the matched set.\n each: function each(callback) {\n return jQuery.each(this, callback);\n },\n map: function map(callback) {\n return this.pushStack(jQuery.map(this, function (elem, i) {\n return callback.call(elem, i, elem);\n }));\n },\n slice: function slice() {\n return this.pushStack(_slice.apply(this, arguments));\n },\n first: function first() {\n return this.eq(0);\n },\n last: function last() {\n return this.eq(-1);\n },\n even: function even() {\n return this.pushStack(jQuery.grep(this, function (_elem, i) {\n return (i + 1) % 2;\n }));\n },\n odd: function odd() {\n return this.pushStack(jQuery.grep(this, function (_elem, i) {\n return i % 2;\n }));\n },\n eq: function eq(i) {\n var len = this.length,\n j = +i + (i < 0 ? len : 0);\n return this.pushStack(j >= 0 && j < len ? [this[j]] : []);\n },\n end: function end() {\n return this.prevObject || this.constructor();\n },\n // For internal use only.\n // Behaves like an Array's method, not like a jQuery method.\n push: push,\n sort: arr.sort,\n splice: arr.splice\n };\n\n jQuery.extend = jQuery.fn.extend = function () {\n var options,\n name,\n src,\n copy,\n copyIsArray,\n clone,\n target = arguments[0] || {},\n i = 1,\n length = arguments.length,\n deep = false; // Handle a deep copy situation\n\n if (typeof target === \"boolean\") {\n deep = target; // Skip the boolean and the target\n\n target = arguments[i] || {};\n i++;\n } // Handle case when target is a string or something (possible in deep copy)\n\n\n if (_typeof(target) !== \"object\" && !isFunction(target)) {\n target = {};\n } // Extend jQuery itself if only one argument is passed\n\n\n if (i === length) {\n target = this;\n i--;\n }\n\n for (; i < length; i++) {\n // Only deal with non-null/undefined values\n if ((options = arguments[i]) != null) {\n // Extend the base object\n for (name in options) {\n copy = options[name]; // Prevent Object.prototype pollution\n // Prevent never-ending loop\n\n if (name === \"__proto__\" || target === copy) {\n continue;\n } // Recurse if we're merging plain objects or arrays\n\n\n if (deep && copy && (jQuery.isPlainObject(copy) || (copyIsArray = Array.isArray(copy)))) {\n src = target[name]; // Ensure proper type for the source value\n\n if (copyIsArray && !Array.isArray(src)) {\n clone = [];\n } else if (!copyIsArray && !jQuery.isPlainObject(src)) {\n clone = {};\n } else {\n clone = src;\n }\n\n copyIsArray = false; // Never move original objects, clone them\n\n target[name] = jQuery.extend(deep, clone, copy); // Don't bring in undefined values\n } else if (copy !== undefined) {\n target[name] = copy;\n }\n }\n }\n } // Return the modified object\n\n\n return target;\n };\n\n jQuery.extend({\n // Unique for each copy of jQuery on the page\n expando: \"jQuery\" + (version + Math.random()).replace(/\\D/g, \"\"),\n // Assume jQuery is ready without the ready module\n isReady: true,\n error: function error(msg) {\n throw new Error(msg);\n },\n noop: function noop() {},\n isPlainObject: function isPlainObject(obj) {\n var proto, Ctor; // Detect obvious negatives\n // Use toString instead of jQuery.type to catch host objects\n\n if (!obj || toString.call(obj) !== \"[object Object]\") {\n return false;\n }\n\n proto = getProto(obj); // Objects with no prototype (e.g., `Object.create( null )`) are plain\n\n if (!proto) {\n return true;\n } // Objects with prototype are plain iff they were constructed by a global Object function\n\n\n Ctor = hasOwn.call(proto, \"constructor\") && proto.constructor;\n return typeof Ctor === \"function\" && fnToString.call(Ctor) === ObjectFunctionString;\n },\n isEmptyObject: function isEmptyObject(obj) {\n var name;\n\n for (name in obj) {\n return false;\n }\n\n return true;\n },\n // Evaluates a script in a provided context; falls back to the global one\n // if not specified.\n globalEval: function globalEval(code, options, doc) {\n DOMEval(code, {\n nonce: options && options.nonce\n }, doc);\n },\n each: function each(obj, callback) {\n var length,\n i = 0;\n\n if (isArrayLike(obj)) {\n length = obj.length;\n\n for (; i < length; i++) {\n if (callback.call(obj[i], i, obj[i]) === false) {\n break;\n }\n }\n } else {\n for (i in obj) {\n if (callback.call(obj[i], i, obj[i]) === false) {\n break;\n }\n }\n }\n\n return obj;\n },\n // results is for internal usage only\n makeArray: function makeArray(arr, results) {\n var ret = results || [];\n\n if (arr != null) {\n if (isArrayLike(Object(arr))) {\n jQuery.merge(ret, typeof arr === \"string\" ? [arr] : arr);\n } else {\n push.call(ret, arr);\n }\n }\n\n return ret;\n },\n inArray: function inArray(elem, arr, i) {\n return arr == null ? -1 : indexOf.call(arr, elem, i);\n },\n // Support: Android <=4.0 only, PhantomJS 1 only\n // push.apply(_, arraylike) throws on ancient WebKit\n merge: function merge(first, second) {\n var len = +second.length,\n j = 0,\n i = first.length;\n\n for (; j < len; j++) {\n first[i++] = second[j];\n }\n\n first.length = i;\n return first;\n },\n grep: function grep(elems, callback, invert) {\n var callbackInverse,\n matches = [],\n i = 0,\n length = elems.length,\n callbackExpect = !invert; // Go through the array, only saving the items\n // that pass the validator function\n\n for (; i < length; i++) {\n callbackInverse = !callback(elems[i], i);\n\n if (callbackInverse !== callbackExpect) {\n matches.push(elems[i]);\n }\n }\n\n return matches;\n },\n // arg is for internal usage only\n map: function map(elems, callback, arg) {\n var length,\n value,\n i = 0,\n ret = []; // Go through the array, translating each of the items to their new values\n\n if (isArrayLike(elems)) {\n length = elems.length;\n\n for (; i < length; i++) {\n value = callback(elems[i], i, arg);\n\n if (value != null) {\n ret.push(value);\n }\n } // Go through every key on the object,\n\n } else {\n for (i in elems) {\n value = callback(elems[i], i, arg);\n\n if (value != null) {\n ret.push(value);\n }\n }\n } // Flatten any nested arrays\n\n\n return flat(ret);\n },\n // A global GUID counter for objects\n guid: 1,\n // jQuery.support is not used in Core but other projects attach their\n // properties to it so it needs to exist.\n support: support\n });\n\n if (typeof Symbol === \"function\") {\n jQuery.fn[Symbol.iterator] = arr[Symbol.iterator];\n } // Populate the class2type map\n\n\n jQuery.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"), function (_i, name) {\n class2type[\"[object \" + name + \"]\"] = name.toLowerCase();\n });\n\n function isArrayLike(obj) {\n // Support: real iOS 8.2 only (not reproducible in simulator)\n // `in` check used to prevent JIT error (gh-2145)\n // hasOwn isn't used here due to false negatives\n // regarding Nodelist length in IE\n var length = !!obj && \"length\" in obj && obj.length,\n type = toType(obj);\n\n if (isFunction(obj) || isWindow(obj)) {\n return false;\n }\n\n return type === \"array\" || length === 0 || typeof length === \"number\" && length > 0 && length - 1 in obj;\n }\n\n var Sizzle =\n /*!\n * Sizzle CSS Selector Engine v2.3.5\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://js.foundation/\n *\n * Date: 2020-03-14\n */\n function (window) {\n var i,\n support,\n Expr,\n getText,\n isXML,\n tokenize,\n compile,\n select,\n outermostContext,\n sortInput,\n hasDuplicate,\n // Local document vars\n setDocument,\n document,\n docElem,\n documentIsHTML,\n rbuggyQSA,\n rbuggyMatches,\n matches,\n contains,\n // Instance-specific data\n expando = \"sizzle\" + 1 * new Date(),\n preferredDoc = window.document,\n dirruns = 0,\n done = 0,\n classCache = createCache(),\n tokenCache = createCache(),\n compilerCache = createCache(),\n nonnativeSelectorCache = createCache(),\n sortOrder = function sortOrder(a, b) {\n if (a === b) {\n hasDuplicate = true;\n }\n\n return 0;\n },\n // Instance methods\n hasOwn = {}.hasOwnProperty,\n arr = [],\n pop = arr.pop,\n pushNative = arr.push,\n push = arr.push,\n slice = arr.slice,\n // Use a stripped-down indexOf as it's faster than native\n // https://jsperf.com/thor-indexof-vs-for/5\n indexOf = function indexOf(list, elem) {\n var i = 0,\n len = list.length;\n\n for (; i < len; i++) {\n if (list[i] === elem) {\n return i;\n }\n }\n\n return -1;\n },\n booleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|\" + \"ismap|loop|multiple|open|readonly|required|scoped\",\n // Regular expressions\n // http://www.w3.org/TR/css3-selectors/#whitespace\n whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n identifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace + \"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n attributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace + // Operator (capture 2)\n \"*([*^$|!~]?=)\" + whitespace + // \"Attribute values must be CSS identifiers [capture 5]\n // or strings [capture 3 or capture 4]\"\n \"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace + \"*\\\\]\",\n pseudos = \":(\" + identifier + \")(?:\\\\((\" + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n // 1. quoted (capture 3; capture 4 or capture 5)\n \"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" + // 2. simple (capture 6)\n \"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" + // 3. anything else (capture 2)\n \".*\" + \")\\\\)|)\",\n // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n rwhitespace = new RegExp(whitespace + \"+\", \"g\"),\n rtrim = new RegExp(\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\"),\n rcomma = new RegExp(\"^\" + whitespace + \"*,\" + whitespace + \"*\"),\n rcombinators = new RegExp(\"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\"),\n rdescend = new RegExp(whitespace + \"|>\"),\n rpseudo = new RegExp(pseudos),\n ridentifier = new RegExp(\"^\" + identifier + \"$\"),\n matchExpr = {\n \"ID\": new RegExp(\"^#(\" + identifier + \")\"),\n \"CLASS\": new RegExp(\"^\\\\.(\" + identifier + \")\"),\n \"TAG\": new RegExp(\"^(\" + identifier + \"|[*])\"),\n \"ATTR\": new RegExp(\"^\" + attributes),\n \"PSEUDO\": new RegExp(\"^\" + pseudos),\n \"CHILD\": new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\"),\n \"bool\": new RegExp(\"^(?:\" + booleans + \")$\", \"i\"),\n // For use in libraries implementing .is()\n // We use this for POS matching in `select`\n \"needsContext\": new RegExp(\"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\")\n },\n rhtml = /HTML$/i,\n rinputs = /^(?:input|select|textarea|button)$/i,\n rheader = /^h\\d$/i,\n rnative = /^[^{]+\\{\\s*\\[native \\w/,\n // Easily-parseable/retrievable ID or TAG or CLASS selectors\n rquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n rsibling = /[+~]/,\n // CSS escapes\n // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n runescape = new RegExp(\"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace + \"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\"),\n funescape = function funescape(escape, nonHex) {\n var high = \"0x\" + escape.slice(1) - 0x10000;\n return nonHex ? // Strip the backslash prefix from a non-hex escape sequence\n nonHex : // Replace a hexadecimal escape sequence with the encoded Unicode code point\n // Support: IE <=11+\n // For values outside the Basic Multilingual Plane (BMP), manually construct a\n // surrogate pair\n high < 0 ? String.fromCharCode(high + 0x10000) : String.fromCharCode(high >> 10 | 0xD800, high & 0x3FF | 0xDC00);\n },\n // CSS string/identifier serialization\n // https://drafts.csswg.org/cssom/#common-serializing-idioms\n rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n fcssescape = function fcssescape(ch, asCodePoint) {\n if (asCodePoint) {\n // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n if (ch === \"\\0\") {\n return \"\\uFFFD\";\n } // Control characters and (dependent upon position) numbers get escaped as code points\n\n\n return ch.slice(0, -1) + \"\\\\\" + ch.charCodeAt(ch.length - 1).toString(16) + \" \";\n } // Other potentially-special ASCII characters get backslash-escaped\n\n\n return \"\\\\\" + ch;\n },\n // Used for iframes\n // See setDocument()\n // Removing the function wrapper causes a \"Permission Denied\"\n // error in IE\n unloadHandler = function unloadHandler() {\n setDocument();\n },\n inDisabledFieldset = addCombinator(function (elem) {\n return elem.disabled === true && elem.nodeName.toLowerCase() === \"fieldset\";\n }, {\n dir: \"parentNode\",\n next: \"legend\"\n }); // Optimize for push.apply( _, NodeList )\n\n\n try {\n push.apply(arr = slice.call(preferredDoc.childNodes), preferredDoc.childNodes); // Support: Android<4.0\n // Detect silently failing push.apply\n // eslint-disable-next-line no-unused-expressions\n\n arr[preferredDoc.childNodes.length].nodeType;\n } catch (e) {\n push = {\n apply: arr.length ? // Leverage slice if possible\n function (target, els) {\n pushNative.apply(target, slice.call(els));\n } : // Support: IE<9\n // Otherwise append directly\n function (target, els) {\n var j = target.length,\n i = 0; // Can't trust NodeList.length\n\n while (target[j++] = els[i++]) {}\n\n target.length = j - 1;\n }\n };\n }\n\n function Sizzle(selector, context, results, seed) {\n var m,\n i,\n elem,\n nid,\n match,\n groups,\n newSelector,\n newContext = context && context.ownerDocument,\n // nodeType defaults to 9, since context defaults to document\n nodeType = context ? context.nodeType : 9;\n results = results || []; // Return early from calls with invalid selector or context\n\n if (typeof selector !== \"string\" || !selector || nodeType !== 1 && nodeType !== 9 && nodeType !== 11) {\n return results;\n } // Try to shortcut find operations (as opposed to filters) in HTML documents\n\n\n if (!seed) {\n setDocument(context);\n context = context || document;\n\n if (documentIsHTML) {\n // If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n // (excepting DocumentFragment context, where the methods don't exist)\n if (nodeType !== 11 && (match = rquickExpr.exec(selector))) {\n // ID selector\n if (m = match[1]) {\n // Document context\n if (nodeType === 9) {\n if (elem = context.getElementById(m)) {\n // Support: IE, Opera, Webkit\n // TODO: identify versions\n // getElementById can match elements by name instead of ID\n if (elem.id === m) {\n results.push(elem);\n return results;\n }\n } else {\n return results;\n } // Element context\n\n } else {\n // Support: IE, Opera, Webkit\n // TODO: identify versions\n // getElementById can match elements by name instead of ID\n if (newContext && (elem = newContext.getElementById(m)) && contains(context, elem) && elem.id === m) {\n results.push(elem);\n return results;\n }\n } // Type selector\n\n } else if (match[2]) {\n push.apply(results, context.getElementsByTagName(selector));\n return results; // Class selector\n } else if ((m = match[3]) && support.getElementsByClassName && context.getElementsByClassName) {\n push.apply(results, context.getElementsByClassName(m));\n return results;\n }\n } // Take advantage of querySelectorAll\n\n\n if (support.qsa && !nonnativeSelectorCache[selector + \" \"] && (!rbuggyQSA || !rbuggyQSA.test(selector)) && ( // Support: IE 8 only\n // Exclude object elements\n nodeType !== 1 || context.nodeName.toLowerCase() !== \"object\")) {\n newSelector = selector;\n newContext = context; // qSA considers elements outside a scoping root when evaluating child or\n // descendant combinators, which is not what we want.\n // In such cases, we work around the behavior by prefixing every selector in the\n // list with an ID selector referencing the scope context.\n // The technique has to be used as well when a leading combinator is used\n // as such selectors are not recognized by querySelectorAll.\n // Thanks to Andrew Dupont for this technique.\n\n if (nodeType === 1 && (rdescend.test(selector) || rcombinators.test(selector))) {\n // Expand context for sibling selectors\n newContext = rsibling.test(selector) && testContext(context.parentNode) || context; // We can use :scope instead of the ID hack if the browser\n // supports it & if we're not changing the context.\n\n if (newContext !== context || !support.scope) {\n // Capture the context ID, setting it first if necessary\n if (nid = context.getAttribute(\"id\")) {\n nid = nid.replace(rcssescape, fcssescape);\n } else {\n context.setAttribute(\"id\", nid = expando);\n }\n } // Prefix every selector in the list\n\n\n groups = tokenize(selector);\n i = groups.length;\n\n while (i--) {\n groups[i] = (nid ? \"#\" + nid : \":scope\") + \" \" + toSelector(groups[i]);\n }\n\n newSelector = groups.join(\",\");\n }\n\n try {\n push.apply(results, newContext.querySelectorAll(newSelector));\n return results;\n } catch (qsaError) {\n nonnativeSelectorCache(selector, true);\n } finally {\n if (nid === expando) {\n context.removeAttribute(\"id\");\n }\n }\n }\n }\n } // All others\n\n\n return select(selector.replace(rtrim, \"$1\"), context, results, seed);\n }\n /**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\n\n\n function createCache() {\n var keys = [];\n\n function cache(key, value) {\n // Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n if (keys.push(key + \" \") > Expr.cacheLength) {\n // Only keep the most recent entries\n delete cache[keys.shift()];\n }\n\n return cache[key + \" \"] = value;\n }\n\n return cache;\n }\n /**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\n\n\n function markFunction(fn) {\n fn[expando] = true;\n return fn;\n }\n /**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\n\n\n function assert(fn) {\n var el = document.createElement(\"fieldset\");\n\n try {\n return !!fn(el);\n } catch (e) {\n return false;\n } finally {\n // Remove from its parent by default\n if (el.parentNode) {\n el.parentNode.removeChild(el);\n } // release memory in IE\n\n\n el = null;\n }\n }\n /**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\n\n\n function addHandle(attrs, handler) {\n var arr = attrs.split(\"|\"),\n i = arr.length;\n\n while (i--) {\n Expr.attrHandle[arr[i]] = handler;\n }\n }\n /**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\n\n\n function siblingCheck(a, b) {\n var cur = b && a,\n diff = cur && a.nodeType === 1 && b.nodeType === 1 && a.sourceIndex - b.sourceIndex; // Use IE sourceIndex if available on both nodes\n\n if (diff) {\n return diff;\n } // Check if b follows a\n\n\n if (cur) {\n while (cur = cur.nextSibling) {\n if (cur === b) {\n return -1;\n }\n }\n }\n\n return a ? 1 : -1;\n }\n /**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\n\n\n function createInputPseudo(type) {\n return function (elem) {\n var name = elem.nodeName.toLowerCase();\n return name === \"input\" && elem.type === type;\n };\n }\n /**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\n\n\n function createButtonPseudo(type) {\n return function (elem) {\n var name = elem.nodeName.toLowerCase();\n return (name === \"input\" || name === \"button\") && elem.type === type;\n };\n }\n /**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\n\n\n function createDisabledPseudo(disabled) {\n // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n return function (elem) {\n // Only certain elements can match :enabled or :disabled\n // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n if (\"form\" in elem) {\n // Check for inherited disabledness on relevant non-disabled elements:\n // * listed form-associated elements in a disabled fieldset\n // https://html.spec.whatwg.org/multipage/forms.html#category-listed\n // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n // * option elements in a disabled optgroup\n // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n // All such elements have a \"form\" property.\n if (elem.parentNode && elem.disabled === false) {\n // Option elements defer to a parent optgroup if present\n if (\"label\" in elem) {\n if (\"label\" in elem.parentNode) {\n return elem.parentNode.disabled === disabled;\n } else {\n return elem.disabled === disabled;\n }\n } // Support: IE 6 - 11\n // Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\n\n return elem.isDisabled === disabled || // Where there is no isDisabled, check manually\n\n /* jshint -W018 */\n elem.isDisabled !== !disabled && inDisabledFieldset(elem) === disabled;\n }\n\n return elem.disabled === disabled; // Try to winnow out elements that can't be disabled before trusting the disabled property.\n // Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n // even exist on them, let alone have a boolean value.\n } else if (\"label\" in elem) {\n return elem.disabled === disabled;\n } // Remaining elements are neither :enabled nor :disabled\n\n\n return false;\n };\n }\n /**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\n\n\n function createPositionalPseudo(fn) {\n return markFunction(function (argument) {\n argument = +argument;\n return markFunction(function (seed, matches) {\n var j,\n matchIndexes = fn([], seed.length, argument),\n i = matchIndexes.length; // Match elements found at the specified indexes\n\n while (i--) {\n if (seed[j = matchIndexes[i]]) {\n seed[j] = !(matches[j] = seed[j]);\n }\n }\n });\n });\n }\n /**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\n\n\n function testContext(context) {\n return context && typeof context.getElementsByTagName !== \"undefined\" && context;\n } // Expose support vars for convenience\n\n\n support = Sizzle.support = {};\n /**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\n\n isXML = Sizzle.isXML = function (elem) {\n var namespace = elem.namespaceURI,\n docElem = (elem.ownerDocument || elem).documentElement; // Support: IE <=8\n // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes\n // https://bugs.jquery.com/ticket/4833\n\n return !rhtml.test(namespace || docElem && docElem.nodeName || \"HTML\");\n };\n /**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\n\n\n setDocument = Sizzle.setDocument = function (node) {\n var hasCompare,\n subWindow,\n doc = node ? node.ownerDocument || node : preferredDoc; // Return early if doc is invalid or already selected\n // Support: IE 11+, Edge 17 - 18+\n // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n // two documents; shallow comparisons work.\n // eslint-disable-next-line eqeqeq\n\n if (doc == document || doc.nodeType !== 9 || !doc.documentElement) {\n return document;\n } // Update global variables\n\n\n document = doc;\n docElem = document.documentElement;\n documentIsHTML = !isXML(document); // Support: IE 9 - 11+, Edge 12 - 18+\n // Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n // Support: IE 11+, Edge 17 - 18+\n // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n // two documents; shallow comparisons work.\n // eslint-disable-next-line eqeqeq\n\n if (preferredDoc != document && (subWindow = document.defaultView) && subWindow.top !== subWindow) {\n // Support: IE 11, Edge\n if (subWindow.addEventListener) {\n subWindow.addEventListener(\"unload\", unloadHandler, false); // Support: IE 9 - 10 only\n } else if (subWindow.attachEvent) {\n subWindow.attachEvent(\"onunload\", unloadHandler);\n }\n } // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,\n // Safari 4 - 5 only, Opera <=11.6 - 12.x only\n // IE/Edge & older browsers don't support the :scope pseudo-class.\n // Support: Safari 6.0 only\n // Safari 6.0 supports :scope but it's an alias of :root there.\n\n\n support.scope = assert(function (el) {\n docElem.appendChild(el).appendChild(document.createElement(\"div\"));\n return typeof el.querySelectorAll !== \"undefined\" && !el.querySelectorAll(\":scope fieldset div\").length;\n });\n /* Attributes\n ---------------------------------------------------------------------- */\n // Support: IE<8\n // Verify that getAttribute really returns attributes and not properties\n // (excepting IE8 booleans)\n\n support.attributes = assert(function (el) {\n el.className = \"i\";\n return !el.getAttribute(\"className\");\n });\n /* getElement(s)By*\n ---------------------------------------------------------------------- */\n // Check if getElementsByTagName(\"*\") returns only elements\n\n support.getElementsByTagName = assert(function (el) {\n el.appendChild(document.createComment(\"\"));\n return !el.getElementsByTagName(\"*\").length;\n }); // Support: IE<9\n\n support.getElementsByClassName = rnative.test(document.getElementsByClassName); // Support: IE<10\n // Check if getElementById returns elements by name\n // The broken getElementById methods don't pick up programmatically-set names,\n // so use a roundabout getElementsByName test\n\n support.getById = assert(function (el) {\n docElem.appendChild(el).id = expando;\n return !document.getElementsByName || !document.getElementsByName(expando).length;\n }); // ID filter and find\n\n if (support.getById) {\n Expr.filter[\"ID\"] = function (id) {\n var attrId = id.replace(runescape, funescape);\n return function (elem) {\n return elem.getAttribute(\"id\") === attrId;\n };\n };\n\n Expr.find[\"ID\"] = function (id, context) {\n if (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n var elem = context.getElementById(id);\n return elem ? [elem] : [];\n }\n };\n } else {\n Expr.filter[\"ID\"] = function (id) {\n var attrId = id.replace(runescape, funescape);\n return function (elem) {\n var node = typeof elem.getAttributeNode !== \"undefined\" && elem.getAttributeNode(\"id\");\n return node && node.value === attrId;\n };\n }; // Support: IE 6 - 7 only\n // getElementById is not reliable as a find shortcut\n\n\n Expr.find[\"ID\"] = function (id, context) {\n if (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n var node,\n i,\n elems,\n elem = context.getElementById(id);\n\n if (elem) {\n // Verify the id attribute\n node = elem.getAttributeNode(\"id\");\n\n if (node && node.value === id) {\n return [elem];\n } // Fall back on getElementsByName\n\n\n elems = context.getElementsByName(id);\n i = 0;\n\n while (elem = elems[i++]) {\n node = elem.getAttributeNode(\"id\");\n\n if (node && node.value === id) {\n return [elem];\n }\n }\n }\n\n return [];\n }\n };\n } // Tag\n\n\n Expr.find[\"TAG\"] = support.getElementsByTagName ? function (tag, context) {\n if (typeof context.getElementsByTagName !== \"undefined\") {\n return context.getElementsByTagName(tag); // DocumentFragment nodes don't have gEBTN\n } else if (support.qsa) {\n return context.querySelectorAll(tag);\n }\n } : function (tag, context) {\n var elem,\n tmp = [],\n i = 0,\n // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n results = context.getElementsByTagName(tag); // Filter out possible comments\n\n if (tag === \"*\") {\n while (elem = results[i++]) {\n if (elem.nodeType === 1) {\n tmp.push(elem);\n }\n }\n\n return tmp;\n }\n\n return results;\n }; // Class\n\n Expr.find[\"CLASS\"] = support.getElementsByClassName && function (className, context) {\n if (typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML) {\n return context.getElementsByClassName(className);\n }\n };\n /* QSA/matchesSelector\n ---------------------------------------------------------------------- */\n // QSA and matchesSelector support\n // matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\n\n rbuggyMatches = []; // qSa(:focus) reports false when true (Chrome 21)\n // We allow this because of a bug in IE8/9 that throws an error\n // whenever `document.activeElement` is accessed on an iframe\n // So, we allow :focus to pass through QSA all the time to avoid the IE error\n // See https://bugs.jquery.com/ticket/13378\n\n rbuggyQSA = [];\n\n if (support.qsa = rnative.test(document.querySelectorAll)) {\n // Build QSA regex\n // Regex strategy adopted from Diego Perini\n assert(function (el) {\n var input; // Select is set to empty string on purpose\n // This is to test IE's treatment of not explicitly\n // setting a boolean content attribute,\n // since its presence should be enough\n // https://bugs.jquery.com/ticket/12359\n\n docElem.appendChild(el).innerHTML = \"<a id='\" + expando + \"'></a>\" + \"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" + \"<option selected=''></option></select>\"; // Support: IE8, Opera 11-12.16\n // Nothing should be selected when empty strings follow ^= or $= or *=\n // The test attribute must be unknown in Opera but \"safe\" for WinRT\n // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\n if (el.querySelectorAll(\"[msallowcapture^='']\").length) {\n rbuggyQSA.push(\"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\");\n } // Support: IE8\n // Boolean attributes and \"value\" are not treated correctly\n\n\n if (!el.querySelectorAll(\"[selected]\").length) {\n rbuggyQSA.push(\"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\");\n } // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\n\n if (!el.querySelectorAll(\"[id~=\" + expando + \"-]\").length) {\n rbuggyQSA.push(\"~=\");\n } // Support: IE 11+, Edge 15 - 18+\n // IE 11/Edge don't find elements on a `[name='']` query in some cases.\n // Adding a temporary attribute to the document before the selection works\n // around the issue.\n // Interestingly, IE 10 & older don't seem to have the issue.\n\n\n input = document.createElement(\"input\");\n input.setAttribute(\"name\", \"\");\n el.appendChild(input);\n\n if (!el.querySelectorAll(\"[name='']\").length) {\n rbuggyQSA.push(\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" + whitespace + \"*(?:''|\\\"\\\")\");\n } // Webkit/Opera - :checked should return selected option elements\n // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n // IE8 throws error here and will not see later tests\n\n\n if (!el.querySelectorAll(\":checked\").length) {\n rbuggyQSA.push(\":checked\");\n } // Support: Safari 8+, iOS 8+\n // https://bugs.webkit.org/show_bug.cgi?id=136851\n // In-page `selector#id sibling-combinator selector` fails\n\n\n if (!el.querySelectorAll(\"a#\" + expando + \"+*\").length) {\n rbuggyQSA.push(\".#.+[+~]\");\n } // Support: Firefox <=3.6 - 5 only\n // Old Firefox doesn't throw on a badly-escaped identifier.\n\n\n el.querySelectorAll(\"\\\\\\f\");\n rbuggyQSA.push(\"[\\\\r\\\\n\\\\f]\");\n });\n assert(function (el) {\n el.innerHTML = \"<a href='' disabled='disabled'></a>\" + \"<select disabled='disabled'><option/></select>\"; // Support: Windows 8 Native Apps\n // The type and name attributes are restricted during .innerHTML assignment\n\n var input = document.createElement(\"input\");\n input.setAttribute(\"type\", \"hidden\");\n el.appendChild(input).setAttribute(\"name\", \"D\"); // Support: IE8\n // Enforce case-sensitivity of name attribute\n\n if (el.querySelectorAll(\"[name=d]\").length) {\n rbuggyQSA.push(\"name\" + whitespace + \"*[*^$|!~]?=\");\n } // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n // IE8 throws error here and will not see later tests\n\n\n if (el.querySelectorAll(\":enabled\").length !== 2) {\n rbuggyQSA.push(\":enabled\", \":disabled\");\n } // Support: IE9-11+\n // IE's :disabled selector does not pick up the children of disabled fieldsets\n\n\n docElem.appendChild(el).disabled = true;\n\n if (el.querySelectorAll(\":disabled\").length !== 2) {\n rbuggyQSA.push(\":enabled\", \":disabled\");\n } // Support: Opera 10 - 11 only\n // Opera 10-11 does not throw on post-comma invalid pseudos\n\n\n el.querySelectorAll(\"*,:x\");\n rbuggyQSA.push(\",.*:\");\n });\n }\n\n if (support.matchesSelector = rnative.test(matches = docElem.matches || docElem.webkitMatchesSelector || docElem.mozMatchesSelector || docElem.oMatchesSelector || docElem.msMatchesSelector)) {\n assert(function (el) {\n // Check to see if it's possible to do matchesSelector\n // on a disconnected node (IE 9)\n support.disconnectedMatch = matches.call(el, \"*\"); // This should fail with an exception\n // Gecko does not error, returns false instead\n\n matches.call(el, \"[s!='']:x\");\n rbuggyMatches.push(\"!=\", pseudos);\n });\n }\n\n rbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join(\"|\"));\n rbuggyMatches = rbuggyMatches.length && new RegExp(rbuggyMatches.join(\"|\"));\n /* Contains\n ---------------------------------------------------------------------- */\n\n hasCompare = rnative.test(docElem.compareDocumentPosition); // Element contains another\n // Purposefully self-exclusive\n // As in, an element does not contain itself\n\n contains = hasCompare || rnative.test(docElem.contains) ? function (a, b) {\n var adown = a.nodeType === 9 ? a.documentElement : a,\n bup = b && b.parentNode;\n return a === bup || !!(bup && bup.nodeType === 1 && (adown.contains ? adown.contains(bup) : a.compareDocumentPosition && a.compareDocumentPosition(bup) & 16));\n } : function (a, b) {\n if (b) {\n while (b = b.parentNode) {\n if (b === a) {\n return true;\n }\n }\n }\n\n return false;\n };\n /* Sorting\n ---------------------------------------------------------------------- */\n // Document order sorting\n\n sortOrder = hasCompare ? function (a, b) {\n // Flag for duplicate removal\n if (a === b) {\n hasDuplicate = true;\n return 0;\n } // Sort on method existence if only one input has compareDocumentPosition\n\n\n var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\n if (compare) {\n return compare;\n } // Calculate position if both inputs belong to the same document\n // Support: IE 11+, Edge 17 - 18+\n // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n // two documents; shallow comparisons work.\n // eslint-disable-next-line eqeqeq\n\n\n compare = (a.ownerDocument || a) == (b.ownerDocument || b) ? a.compareDocumentPosition(b) : // Otherwise we know they are disconnected\n 1; // Disconnected nodes\n\n if (compare & 1 || !support.sortDetached && b.compareDocumentPosition(a) === compare) {\n // Choose the first element that is related to our preferred document\n // Support: IE 11+, Edge 17 - 18+\n // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n // two documents; shallow comparisons work.\n // eslint-disable-next-line eqeqeq\n if (a == document || a.ownerDocument == preferredDoc && contains(preferredDoc, a)) {\n return -1;\n } // Support: IE 11+, Edge 17 - 18+\n // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n // two documents; shallow comparisons work.\n // eslint-disable-next-line eqeqeq\n\n\n if (b == document || b.ownerDocument == preferredDoc && contains(preferredDoc, b)) {\n return 1;\n } // Maintain original order\n\n\n return sortInput ? indexOf(sortInput, a) - indexOf(sortInput, b) : 0;\n }\n\n return compare & 4 ? -1 : 1;\n } : function (a, b) {\n // Exit early if the nodes are identical\n if (a === b) {\n hasDuplicate = true;\n return 0;\n }\n\n var cur,\n i = 0,\n aup = a.parentNode,\n bup = b.parentNode,\n ap = [a],\n bp = [b]; // Parentless nodes are either documents or disconnected\n\n if (!aup || !bup) {\n // Support: IE 11+, Edge 17 - 18+\n // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n // two documents; shallow comparisons work.\n\n /* eslint-disable eqeqeq */\n return a == document ? -1 : b == document ? 1 :\n /* eslint-enable eqeqeq */\n aup ? -1 : bup ? 1 : sortInput ? indexOf(sortInput, a) - indexOf(sortInput, b) : 0; // If the nodes are siblings, we can do a quick check\n } else if (aup === bup) {\n return siblingCheck(a, b);\n } // Otherwise we need full lists of their ancestors for comparison\n\n\n cur = a;\n\n while (cur = cur.parentNode) {\n ap.unshift(cur);\n }\n\n cur = b;\n\n while (cur = cur.parentNode) {\n bp.unshift(cur);\n } // Walk down the tree looking for a discrepancy\n\n\n while (ap[i] === bp[i]) {\n i++;\n }\n\n return i ? // Do a sibling check if the nodes have a common ancestor\n siblingCheck(ap[i], bp[i]) : // Otherwise nodes in our document sort first\n // Support: IE 11+, Edge 17 - 18+\n // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n // two documents; shallow comparisons work.\n\n /* eslint-disable eqeqeq */\n ap[i] == preferredDoc ? -1 : bp[i] == preferredDoc ? 1 :\n /* eslint-enable eqeqeq */\n 0;\n };\n return document;\n };\n\n Sizzle.matches = function (expr, elements) {\n return Sizzle(expr, null, null, elements);\n };\n\n Sizzle.matchesSelector = function (elem, expr) {\n setDocument(elem);\n\n if (support.matchesSelector && documentIsHTML && !nonnativeSelectorCache[expr + \" \"] && (!rbuggyMatches || !rbuggyMatches.test(expr)) && (!rbuggyQSA || !rbuggyQSA.test(expr))) {\n try {\n var ret = matches.call(elem, expr); // IE 9's matchesSelector returns false on disconnected nodes\n\n if (ret || support.disconnectedMatch || // As well, disconnected nodes are said to be in a document\n // fragment in IE 9\n elem.document && elem.document.nodeType !== 11) {\n return ret;\n }\n } catch (e) {\n nonnativeSelectorCache(expr, true);\n }\n }\n\n return Sizzle(expr, document, null, [elem]).length > 0;\n };\n\n Sizzle.contains = function (context, elem) {\n // Set document vars if needed\n // Support: IE 11+, Edge 17 - 18+\n // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n // two documents; shallow comparisons work.\n // eslint-disable-next-line eqeqeq\n if ((context.ownerDocument || context) != document) {\n setDocument(context);\n }\n\n return contains(context, elem);\n };\n\n Sizzle.attr = function (elem, name) {\n // Set document vars if needed\n // Support: IE 11+, Edge 17 - 18+\n // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n // two documents; shallow comparisons work.\n // eslint-disable-next-line eqeqeq\n if ((elem.ownerDocument || elem) != document) {\n setDocument(elem);\n }\n\n var fn = Expr.attrHandle[name.toLowerCase()],\n // Don't get fooled by Object.prototype properties (jQuery #13807)\n val = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ? fn(elem, name, !documentIsHTML) : undefined;\n return val !== undefined ? val : support.attributes || !documentIsHTML ? elem.getAttribute(name) : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null;\n };\n\n Sizzle.escape = function (sel) {\n return (sel + \"\").replace(rcssescape, fcssescape);\n };\n\n Sizzle.error = function (msg) {\n throw new Error(\"Syntax error, unrecognized expression: \" + msg);\n };\n /**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\n\n\n Sizzle.uniqueSort = function (results) {\n var elem,\n duplicates = [],\n j = 0,\n i = 0; // Unless we *know* we can detect duplicates, assume their presence\n\n hasDuplicate = !support.detectDuplicates;\n sortInput = !support.sortStable && results.slice(0);\n results.sort(sortOrder);\n\n if (hasDuplicate) {\n while (elem = results[i++]) {\n if (elem === results[i]) {\n j = duplicates.push(i);\n }\n }\n\n while (j--) {\n results.splice(duplicates[j], 1);\n }\n } // Clear input after sorting to release objects\n // See https://github.com/jquery/sizzle/pull/225\n\n\n sortInput = null;\n return results;\n };\n /**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\n\n\n getText = Sizzle.getText = function (elem) {\n var node,\n ret = \"\",\n i = 0,\n nodeType = elem.nodeType;\n\n if (!nodeType) {\n // If no nodeType, this is expected to be an array\n while (node = elem[i++]) {\n // Do not traverse comment nodes\n ret += getText(node);\n }\n } else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {\n // Use textContent for elements\n // innerText usage removed for consistency of new lines (jQuery #11153)\n if (typeof elem.textContent === \"string\") {\n return elem.textContent;\n } else {\n // Traverse its children\n for (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n ret += getText(elem);\n }\n }\n } else if (nodeType === 3 || nodeType === 4) {\n return elem.nodeValue;\n } // Do not include comment or processing instruction nodes\n\n\n return ret;\n };\n\n Expr = Sizzle.selectors = {\n // Can be adjusted by the user\n cacheLength: 50,\n createPseudo: markFunction,\n match: matchExpr,\n attrHandle: {},\n find: {},\n relative: {\n \">\": {\n dir: \"parentNode\",\n first: true\n },\n \" \": {\n dir: \"parentNode\"\n },\n \"+\": {\n dir: \"previousSibling\",\n first: true\n },\n \"~\": {\n dir: \"previousSibling\"\n }\n },\n preFilter: {\n \"ATTR\": function ATTR(match) {\n match[1] = match[1].replace(runescape, funescape); // Move the given value to match[3] whether quoted or unquoted\n\n match[3] = (match[3] || match[4] || match[5] || \"\").replace(runescape, funescape);\n\n if (match[2] === \"~=\") {\n match[3] = \" \" + match[3] + \" \";\n }\n\n return match.slice(0, 4);\n },\n \"CHILD\": function CHILD(match) {\n /* matches from matchExpr[\"CHILD\"]\n \t1 type (only|nth|...)\n \t2 what (child|of-type)\n \t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n \t4 xn-component of xn+y argument ([+-]?\\d*n|)\n \t5 sign of xn-component\n \t6 x of xn-component\n \t7 sign of y-component\n \t8 y of y-component\n */\n match[1] = match[1].toLowerCase();\n\n if (match[1].slice(0, 3) === \"nth\") {\n // nth-* requires argument\n if (!match[3]) {\n Sizzle.error(match[0]);\n } // numeric x and y parameters for Expr.filter.CHILD\n // remember that false/true cast respectively to 0/1\n\n\n match[4] = +(match[4] ? match[5] + (match[6] || 1) : 2 * (match[3] === \"even\" || match[3] === \"odd\"));\n match[5] = +(match[7] + match[8] || match[3] === \"odd\"); // other types prohibit arguments\n } else if (match[3]) {\n Sizzle.error(match[0]);\n }\n\n return match;\n },\n \"PSEUDO\": function PSEUDO(match) {\n var excess,\n unquoted = !match[6] && match[2];\n\n if (matchExpr[\"CHILD\"].test(match[0])) {\n return null;\n } // Accept quoted arguments as-is\n\n\n if (match[3]) {\n match[2] = match[4] || match[5] || \"\"; // Strip excess characters from unquoted arguments\n } else if (unquoted && rpseudo.test(unquoted) && ( // Get excess from tokenize (recursively)\n excess = tokenize(unquoted, true)) && ( // advance to the next closing parenthesis\n excess = unquoted.indexOf(\")\", unquoted.length - excess) - unquoted.length)) {\n // excess is a negative index\n match[0] = match[0].slice(0, excess);\n match[2] = unquoted.slice(0, excess);\n } // Return only captures needed by the pseudo filter method (type and argument)\n\n\n return match.slice(0, 3);\n }\n },\n filter: {\n \"TAG\": function TAG(nodeNameSelector) {\n var nodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();\n return nodeNameSelector === \"*\" ? function () {\n return true;\n } : function (elem) {\n return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n };\n },\n \"CLASS\": function CLASS(className) {\n var pattern = classCache[className + \" \"];\n return pattern || (pattern = new RegExp(\"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\")) && classCache(className, function (elem) {\n return pattern.test(typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\");\n });\n },\n \"ATTR\": function ATTR(name, operator, check) {\n return function (elem) {\n var result = Sizzle.attr(elem, name);\n\n if (result == null) {\n return operator === \"!=\";\n }\n\n if (!operator) {\n return true;\n }\n\n result += \"\";\n /* eslint-disable max-len */\n\n return operator === \"=\" ? result === check : operator === \"!=\" ? result !== check : operator === \"^=\" ? check && result.indexOf(check) === 0 : operator === \"*=\" ? check && result.indexOf(check) > -1 : operator === \"$=\" ? check && result.slice(-check.length) === check : operator === \"~=\" ? (\" \" + result.replace(rwhitespace, \" \") + \" \").indexOf(check) > -1 : operator === \"|=\" ? result === check || result.slice(0, check.length + 1) === check + \"-\" : false;\n /* eslint-enable max-len */\n };\n },\n \"CHILD\": function CHILD(type, what, _argument, first, last) {\n var simple = type.slice(0, 3) !== \"nth\",\n forward = type.slice(-4) !== \"last\",\n ofType = what === \"of-type\";\n return first === 1 && last === 0 ? // Shortcut for :nth-*(n)\n function (elem) {\n return !!elem.parentNode;\n } : function (elem, _context, xml) {\n var cache,\n uniqueCache,\n outerCache,\n node,\n nodeIndex,\n start,\n dir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n parent = elem.parentNode,\n name = ofType && elem.nodeName.toLowerCase(),\n useCache = !xml && !ofType,\n diff = false;\n\n if (parent) {\n // :(first|last|only)-(child|of-type)\n if (simple) {\n while (dir) {\n node = elem;\n\n while (node = node[dir]) {\n if (ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) {\n return false;\n }\n } // Reverse direction for :only-* (if we haven't yet done so)\n\n\n start = dir = type === \"only\" && !start && \"nextSibling\";\n }\n\n return true;\n }\n\n start = [forward ? parent.firstChild : parent.lastChild]; // non-xml :nth-child(...) stores cache data on `parent`\n\n if (forward && useCache) {\n // Seek `elem` from a previously-cached index\n // ...in a gzip-friendly way\n node = parent;\n outerCache = node[expando] || (node[expando] = {}); // Support: IE <9 only\n // Defend against cloned attroperties (jQuery gh-1709)\n\n uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});\n cache = uniqueCache[type] || [];\n nodeIndex = cache[0] === dirruns && cache[1];\n diff = nodeIndex && cache[2];\n node = nodeIndex && parent.childNodes[nodeIndex];\n\n while (node = ++nodeIndex && node && node[dir] || ( // Fallback to seeking `elem` from the start\n diff = nodeIndex = 0) || start.pop()) {\n // When found, cache indexes on `parent` and break\n if (node.nodeType === 1 && ++diff && node === elem) {\n uniqueCache[type] = [dirruns, nodeIndex, diff];\n break;\n }\n }\n } else {\n // Use previously-cached element index if available\n if (useCache) {\n // ...in a gzip-friendly way\n node = elem;\n outerCache = node[expando] || (node[expando] = {}); // Support: IE <9 only\n // Defend against cloned attroperties (jQuery gh-1709)\n\n uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});\n cache = uniqueCache[type] || [];\n nodeIndex = cache[0] === dirruns && cache[1];\n diff = nodeIndex;\n } // xml :nth-child(...)\n // or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\n\n if (diff === false) {\n // Use the same loop as above to seek `elem` from the start\n while (node = ++nodeIndex && node && node[dir] || (diff = nodeIndex = 0) || start.pop()) {\n if ((ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) && ++diff) {\n // Cache the index of each encountered element\n if (useCache) {\n outerCache = node[expando] || (node[expando] = {}); // Support: IE <9 only\n // Defend against cloned attroperties (jQuery gh-1709)\n\n uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});\n uniqueCache[type] = [dirruns, diff];\n }\n\n if (node === elem) {\n break;\n }\n }\n }\n }\n } // Incorporate the offset, then check against cycle size\n\n\n diff -= last;\n return diff === first || diff % first === 0 && diff / first >= 0;\n }\n };\n },\n \"PSEUDO\": function PSEUDO(pseudo, argument) {\n // pseudo-class names are case-insensitive\n // http://www.w3.org/TR/selectors/#pseudo-classes\n // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n // Remember that setFilters inherits from pseudos\n var args,\n fn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] || Sizzle.error(\"unsupported pseudo: \" + pseudo); // The user may use createPseudo to indicate that\n // arguments are needed to create the filter function\n // just as Sizzle does\n\n if (fn[expando]) {\n return fn(argument);\n } // But maintain support for old signatures\n\n\n if (fn.length > 1) {\n args = [pseudo, pseudo, \"\", argument];\n return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ? markFunction(function (seed, matches) {\n var idx,\n matched = fn(seed, argument),\n i = matched.length;\n\n while (i--) {\n idx = indexOf(seed, matched[i]);\n seed[idx] = !(matches[idx] = matched[i]);\n }\n }) : function (elem) {\n return fn(elem, 0, args);\n };\n }\n\n return fn;\n }\n },\n pseudos: {\n // Potentially complex pseudos\n \"not\": markFunction(function (selector) {\n // Trim the selector passed to compile\n // to avoid treating leading and trailing\n // spaces as combinators\n var input = [],\n results = [],\n matcher = compile(selector.replace(rtrim, \"$1\"));\n return matcher[expando] ? markFunction(function (seed, matches, _context, xml) {\n var elem,\n unmatched = matcher(seed, null, xml, []),\n i = seed.length; // Match elements unmatched by `matcher`\n\n while (i--) {\n if (elem = unmatched[i]) {\n seed[i] = !(matches[i] = elem);\n }\n }\n }) : function (elem, _context, xml) {\n input[0] = elem;\n matcher(input, null, xml, results); // Don't keep the element (issue #299)\n\n input[0] = null;\n return !results.pop();\n };\n }),\n \"has\": markFunction(function (selector) {\n return function (elem) {\n return Sizzle(selector, elem).length > 0;\n };\n }),\n \"contains\": markFunction(function (text) {\n text = text.replace(runescape, funescape);\n return function (elem) {\n return (elem.textContent || getText(elem)).indexOf(text) > -1;\n };\n }),\n // \"Whether an element is represented by a :lang() selector\n // is based solely on the element's language value\n // being equal to the identifier C,\n // or beginning with the identifier C immediately followed by \"-\".\n // The matching of C against the element's language value is performed case-insensitively.\n // The identifier C does not have to be a valid language name.\"\n // http://www.w3.org/TR/selectors/#lang-pseudo\n \"lang\": markFunction(function (lang) {\n // lang value must be a valid identifier\n if (!ridentifier.test(lang || \"\")) {\n Sizzle.error(\"unsupported lang: \" + lang);\n }\n\n lang = lang.replace(runescape, funescape).toLowerCase();\n return function (elem) {\n var elemLang;\n\n do {\n if (elemLang = documentIsHTML ? elem.lang : elem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) {\n elemLang = elemLang.toLowerCase();\n return elemLang === lang || elemLang.indexOf(lang + \"-\") === 0;\n }\n } while ((elem = elem.parentNode) && elem.nodeType === 1);\n\n return false;\n };\n }),\n // Miscellaneous\n \"target\": function target(elem) {\n var hash = window.location && window.location.hash;\n return hash && hash.slice(1) === elem.id;\n },\n \"root\": function root(elem) {\n return elem === docElem;\n },\n \"focus\": function focus(elem) {\n return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n },\n // Boolean properties\n \"enabled\": createDisabledPseudo(false),\n \"disabled\": createDisabledPseudo(true),\n \"checked\": function checked(elem) {\n // In CSS3, :checked should return both checked and selected elements\n // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n var nodeName = elem.nodeName.toLowerCase();\n return nodeName === \"input\" && !!elem.checked || nodeName === \"option\" && !!elem.selected;\n },\n \"selected\": function selected(elem) {\n // Accessing this property makes selected-by-default\n // options in Safari work properly\n if (elem.parentNode) {\n // eslint-disable-next-line no-unused-expressions\n elem.parentNode.selectedIndex;\n }\n\n return elem.selected === true;\n },\n // Contents\n \"empty\": function empty(elem) {\n // http://www.w3.org/TR/selectors/#empty-pseudo\n // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n // but not by others (comment: 8; processing instruction: 7; etc.)\n // nodeType < 6 works because attributes (2) do not appear as children\n for (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n if (elem.nodeType < 6) {\n return false;\n }\n }\n\n return true;\n },\n \"parent\": function parent(elem) {\n return !Expr.pseudos[\"empty\"](elem);\n },\n // Element/input types\n \"header\": function header(elem) {\n return rheader.test(elem.nodeName);\n },\n \"input\": function input(elem) {\n return rinputs.test(elem.nodeName);\n },\n \"button\": function button(elem) {\n var name = elem.nodeName.toLowerCase();\n return name === \"input\" && elem.type === \"button\" || name === \"button\";\n },\n \"text\": function text(elem) {\n var attr;\n return elem.nodeName.toLowerCase() === \"input\" && elem.type === \"text\" && ( // Support: IE<8\n // New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\");\n },\n // Position-in-collection\n \"first\": createPositionalPseudo(function () {\n return [0];\n }),\n \"last\": createPositionalPseudo(function (_matchIndexes, length) {\n return [length - 1];\n }),\n \"eq\": createPositionalPseudo(function (_matchIndexes, length, argument) {\n return [argument < 0 ? argument + length : argument];\n }),\n \"even\": createPositionalPseudo(function (matchIndexes, length) {\n var i = 0;\n\n for (; i < length; i += 2) {\n matchIndexes.push(i);\n }\n\n return matchIndexes;\n }),\n \"odd\": createPositionalPseudo(function (matchIndexes, length) {\n var i = 1;\n\n for (; i < length; i += 2) {\n matchIndexes.push(i);\n }\n\n return matchIndexes;\n }),\n \"lt\": createPositionalPseudo(function (matchIndexes, length, argument) {\n var i = argument < 0 ? argument + length : argument > length ? length : argument;\n\n for (; --i >= 0;) {\n matchIndexes.push(i);\n }\n\n return matchIndexes;\n }),\n \"gt\": createPositionalPseudo(function (matchIndexes, length, argument) {\n var i = argument < 0 ? argument + length : argument;\n\n for (; ++i < length;) {\n matchIndexes.push(i);\n }\n\n return matchIndexes;\n })\n }\n };\n Expr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"]; // Add button/input type pseudos\n\n for (i in {\n radio: true,\n checkbox: true,\n file: true,\n password: true,\n image: true\n }) {\n Expr.pseudos[i] = createInputPseudo(i);\n }\n\n for (i in {\n submit: true,\n reset: true\n }) {\n Expr.pseudos[i] = createButtonPseudo(i);\n } // Easy API for creating new setFilters\n\n\n function setFilters() {}\n\n setFilters.prototype = Expr.filters = Expr.pseudos;\n Expr.setFilters = new setFilters();\n\n tokenize = Sizzle.tokenize = function (selector, parseOnly) {\n var matched,\n match,\n tokens,\n type,\n soFar,\n groups,\n preFilters,\n cached = tokenCache[selector + \" \"];\n\n if (cached) {\n return parseOnly ? 0 : cached.slice(0);\n }\n\n soFar = selector;\n groups = [];\n preFilters = Expr.preFilter;\n\n while (soFar) {\n // Comma and first run\n if (!matched || (match = rcomma.exec(soFar))) {\n if (match) {\n // Don't consume trailing commas as valid\n soFar = soFar.slice(match[0].length) || soFar;\n }\n\n groups.push(tokens = []);\n }\n\n matched = false; // Combinators\n\n if (match = rcombinators.exec(soFar)) {\n matched = match.shift();\n tokens.push({\n value: matched,\n // Cast descendant combinators to space\n type: match[0].replace(rtrim, \" \")\n });\n soFar = soFar.slice(matched.length);\n } // Filters\n\n\n for (type in Expr.filter) {\n if ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] || (match = preFilters[type](match)))) {\n matched = match.shift();\n tokens.push({\n value: matched,\n type: type,\n matches: match\n });\n soFar = soFar.slice(matched.length);\n }\n }\n\n if (!matched) {\n break;\n }\n } // Return the length of the invalid excess\n // if we're just parsing\n // Otherwise, throw an error or return tokens\n\n\n return parseOnly ? soFar.length : soFar ? Sizzle.error(selector) : // Cache the tokens\n tokenCache(selector, groups).slice(0);\n };\n\n function toSelector(tokens) {\n var i = 0,\n len = tokens.length,\n selector = \"\";\n\n for (; i < len; i++) {\n selector += tokens[i].value;\n }\n\n return selector;\n }\n\n function addCombinator(matcher, combinator, base) {\n var dir = combinator.dir,\n skip = combinator.next,\n key = skip || dir,\n checkNonElements = base && key === \"parentNode\",\n doneName = done++;\n return combinator.first ? // Check against closest ancestor/preceding element\n function (elem, context, xml) {\n while (elem = elem[dir]) {\n if (elem.nodeType === 1 || checkNonElements) {\n return matcher(elem, context, xml);\n }\n }\n\n return false;\n } : // Check against all ancestor/preceding elements\n function (elem, context, xml) {\n var oldCache,\n uniqueCache,\n outerCache,\n newCache = [dirruns, doneName]; // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\n if (xml) {\n while (elem = elem[dir]) {\n if (elem.nodeType === 1 || checkNonElements) {\n if (matcher(elem, context, xml)) {\n return true;\n }\n }\n }\n } else {\n while (elem = elem[dir]) {\n if (elem.nodeType === 1 || checkNonElements) {\n outerCache = elem[expando] || (elem[expando] = {}); // Support: IE <9 only\n // Defend against cloned attroperties (jQuery gh-1709)\n\n uniqueCache = outerCache[elem.uniqueID] || (outerCache[elem.uniqueID] = {});\n\n if (skip && skip === elem.nodeName.toLowerCase()) {\n elem = elem[dir] || elem;\n } else if ((oldCache = uniqueCache[key]) && oldCache[0] === dirruns && oldCache[1] === doneName) {\n // Assign to newCache so results back-propagate to previous elements\n return newCache[2] = oldCache[2];\n } else {\n // Reuse newcache so results back-propagate to previous elements\n uniqueCache[key] = newCache; // A match means we're done; a fail means we have to keep checking\n\n if (newCache[2] = matcher(elem, context, xml)) {\n return true;\n }\n }\n }\n }\n }\n\n return false;\n };\n }\n\n function elementMatcher(matchers) {\n return matchers.length > 1 ? function (elem, context, xml) {\n var i = matchers.length;\n\n while (i--) {\n if (!matchers[i](elem, context, xml)) {\n return false;\n }\n }\n\n return true;\n } : matchers[0];\n }\n\n function multipleContexts(selector, contexts, results) {\n var i = 0,\n len = contexts.length;\n\n for (; i < len; i++) {\n Sizzle(selector, contexts[i], results);\n }\n\n return results;\n }\n\n function condense(unmatched, map, filter, context, xml) {\n var elem,\n newUnmatched = [],\n i = 0,\n len = unmatched.length,\n mapped = map != null;\n\n for (; i < len; i++) {\n if (elem = unmatched[i]) {\n if (!filter || filter(elem, context, xml)) {\n newUnmatched.push(elem);\n\n if (mapped) {\n map.push(i);\n }\n }\n }\n }\n\n return newUnmatched;\n }\n\n function setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {\n if (postFilter && !postFilter[expando]) {\n postFilter = setMatcher(postFilter);\n }\n\n if (postFinder && !postFinder[expando]) {\n postFinder = setMatcher(postFinder, postSelector);\n }\n\n return markFunction(function (seed, results, context, xml) {\n var temp,\n i,\n elem,\n preMap = [],\n postMap = [],\n preexisting = results.length,\n // Get initial elements from seed or context\n elems = seed || multipleContexts(selector || \"*\", context.nodeType ? [context] : context, []),\n // Prefilter to get matcher input, preserving a map for seed-results synchronization\n matcherIn = preFilter && (seed || !selector) ? condense(elems, preMap, preFilter, context, xml) : elems,\n matcherOut = matcher ? // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n postFinder || (seed ? preFilter : preexisting || postFilter) ? // ...intermediate processing is necessary\n [] : // ...otherwise use results directly\n results : matcherIn; // Find primary matches\n\n if (matcher) {\n matcher(matcherIn, matcherOut, context, xml);\n } // Apply postFilter\n\n\n if (postFilter) {\n temp = condense(matcherOut, postMap);\n postFilter(temp, [], context, xml); // Un-match failing elements by moving them back to matcherIn\n\n i = temp.length;\n\n while (i--) {\n if (elem = temp[i]) {\n matcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);\n }\n }\n }\n\n if (seed) {\n if (postFinder || preFilter) {\n if (postFinder) {\n // Get the final matcherOut by condensing this intermediate into postFinder contexts\n temp = [];\n i = matcherOut.length;\n\n while (i--) {\n if (elem = matcherOut[i]) {\n // Restore matcherIn since elem is not yet a final match\n temp.push(matcherIn[i] = elem);\n }\n }\n\n postFinder(null, matcherOut = [], temp, xml);\n } // Move matched elements from seed to results to keep them synchronized\n\n\n i = matcherOut.length;\n\n while (i--) {\n if ((elem = matcherOut[i]) && (temp = postFinder ? indexOf(seed, elem) : preMap[i]) > -1) {\n seed[temp] = !(results[temp] = elem);\n }\n }\n } // Add elements to results, through postFinder if defined\n\n } else {\n matcherOut = condense(matcherOut === results ? matcherOut.splice(preexisting, matcherOut.length) : matcherOut);\n\n if (postFinder) {\n postFinder(null, results, matcherOut, xml);\n } else {\n push.apply(results, matcherOut);\n }\n }\n });\n }\n\n function matcherFromTokens(tokens) {\n var checkContext,\n matcher,\n j,\n len = tokens.length,\n leadingRelative = Expr.relative[tokens[0].type],\n implicitRelative = leadingRelative || Expr.relative[\" \"],\n i = leadingRelative ? 1 : 0,\n // The foundational matcher ensures that elements are reachable from top-level context(s)\n matchContext = addCombinator(function (elem) {\n return elem === checkContext;\n }, implicitRelative, true),\n matchAnyContext = addCombinator(function (elem) {\n return indexOf(checkContext, elem) > -1;\n }, implicitRelative, true),\n matchers = [function (elem, context, xml) {\n var ret = !leadingRelative && (xml || context !== outermostContext) || ((checkContext = context).nodeType ? matchContext(elem, context, xml) : matchAnyContext(elem, context, xml)); // Avoid hanging onto element (issue #299)\n\n checkContext = null;\n return ret;\n }];\n\n for (; i < len; i++) {\n if (matcher = Expr.relative[tokens[i].type]) {\n matchers = [addCombinator(elementMatcher(matchers), matcher)];\n } else {\n matcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches); // Return special upon seeing a positional matcher\n\n if (matcher[expando]) {\n // Find the next relative operator (if any) for proper handling\n j = ++i;\n\n for (; j < len; j++) {\n if (Expr.relative[tokens[j].type]) {\n break;\n }\n }\n\n return setMatcher(i > 1 && elementMatcher(matchers), i > 1 && toSelector( // If the preceding token was a descendant combinator, insert an implicit any-element `*`\n tokens.slice(0, i - 1).concat({\n value: tokens[i - 2].type === \" \" ? \"*\" : \"\"\n })).replace(rtrim, \"$1\"), matcher, i < j && matcherFromTokens(tokens.slice(i, j)), j < len && matcherFromTokens(tokens = tokens.slice(j)), j < len && toSelector(tokens));\n }\n\n matchers.push(matcher);\n }\n }\n\n return elementMatcher(matchers);\n }\n\n function matcherFromGroupMatchers(elementMatchers, setMatchers) {\n var bySet = setMatchers.length > 0,\n byElement = elementMatchers.length > 0,\n superMatcher = function superMatcher(seed, context, xml, results, outermost) {\n var elem,\n j,\n matcher,\n matchedCount = 0,\n i = \"0\",\n unmatched = seed && [],\n setMatched = [],\n contextBackup = outermostContext,\n // We must always have either seed elements or outermost context\n elems = seed || byElement && Expr.find[\"TAG\"](\"*\", outermost),\n // Use integer dirruns iff this is the outermost matcher\n dirrunsUnique = dirruns += contextBackup == null ? 1 : Math.random() || 0.1,\n len = elems.length;\n\n if (outermost) {\n // Support: IE 11+, Edge 17 - 18+\n // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n // two documents; shallow comparisons work.\n // eslint-disable-next-line eqeqeq\n outermostContext = context == document || context || outermost;\n } // Add elements passing elementMatchers directly to results\n // Support: IE<9, Safari\n // Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\n\n for (; i !== len && (elem = elems[i]) != null; i++) {\n if (byElement && elem) {\n j = 0; // Support: IE 11+, Edge 17 - 18+\n // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n // two documents; shallow comparisons work.\n // eslint-disable-next-line eqeqeq\n\n if (!context && elem.ownerDocument != document) {\n setDocument(elem);\n xml = !documentIsHTML;\n }\n\n while (matcher = elementMatchers[j++]) {\n if (matcher(elem, context || document, xml)) {\n results.push(elem);\n break;\n }\n }\n\n if (outermost) {\n dirruns = dirrunsUnique;\n }\n } // Track unmatched elements for set filters\n\n\n if (bySet) {\n // They will have gone through all possible matchers\n if (elem = !matcher && elem) {\n matchedCount--;\n } // Lengthen the array for every element, matched or not\n\n\n if (seed) {\n unmatched.push(elem);\n }\n }\n } // `i` is now the count of elements visited above, and adding it to `matchedCount`\n // makes the latter nonnegative.\n\n\n matchedCount += i; // Apply set filters to unmatched elements\n // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n // equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n // no element matchers and no seed.\n // Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n // case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n // numerically zero.\n\n if (bySet && i !== matchedCount) {\n j = 0;\n\n while (matcher = setMatchers[j++]) {\n matcher(unmatched, setMatched, context, xml);\n }\n\n if (seed) {\n // Reintegrate element matches to eliminate the need for sorting\n if (matchedCount > 0) {\n while (i--) {\n if (!(unmatched[i] || setMatched[i])) {\n setMatched[i] = pop.call(results);\n }\n }\n } // Discard index placeholder values to get only actual matches\n\n\n setMatched = condense(setMatched);\n } // Add matches to results\n\n\n push.apply(results, setMatched); // Seedless set matches succeeding multiple successful matchers stipulate sorting\n\n if (outermost && !seed && setMatched.length > 0 && matchedCount + setMatchers.length > 1) {\n Sizzle.uniqueSort(results);\n }\n } // Override manipulation of globals by nested matchers\n\n\n if (outermost) {\n dirruns = dirrunsUnique;\n outermostContext = contextBackup;\n }\n\n return unmatched;\n };\n\n return bySet ? markFunction(superMatcher) : superMatcher;\n }\n\n compile = Sizzle.compile = function (selector, match\n /* Internal Use Only */\n ) {\n var i,\n setMatchers = [],\n elementMatchers = [],\n cached = compilerCache[selector + \" \"];\n\n if (!cached) {\n // Generate a function of recursive functions that can be used to check each element\n if (!match) {\n match = tokenize(selector);\n }\n\n i = match.length;\n\n while (i--) {\n cached = matcherFromTokens(match[i]);\n\n if (cached[expando]) {\n setMatchers.push(cached);\n } else {\n elementMatchers.push(cached);\n }\n } // Cache the compiled function\n\n\n cached = compilerCache(selector, matcherFromGroupMatchers(elementMatchers, setMatchers)); // Save selector and tokenization\n\n cached.selector = selector;\n }\n\n return cached;\n };\n /**\n * A low-level selection function that works with Sizzle's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\n\n\n select = Sizzle.select = function (selector, context, results, seed) {\n var i,\n tokens,\n token,\n type,\n find,\n compiled = typeof selector === \"function\" && selector,\n match = !seed && tokenize(selector = compiled.selector || selector);\n results = results || []; // Try to minimize operations if there is only one selector in the list and no seed\n // (the latter of which guarantees us context)\n\n if (match.length === 1) {\n // Reduce context if the leading compound selector is an ID\n tokens = match[0] = match[0].slice(0);\n\n if (tokens.length > 2 && (token = tokens[0]).type === \"ID\" && context.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) {\n context = (Expr.find[\"ID\"](token.matches[0].replace(runescape, funescape), context) || [])[0];\n\n if (!context) {\n return results; // Precompiled matchers will still verify ancestry, so step up a level\n } else if (compiled) {\n context = context.parentNode;\n }\n\n selector = selector.slice(tokens.shift().value.length);\n } // Fetch a seed set for right-to-left matching\n\n\n i = matchExpr[\"needsContext\"].test(selector) ? 0 : tokens.length;\n\n while (i--) {\n token = tokens[i]; // Abort if we hit a combinator\n\n if (Expr.relative[type = token.type]) {\n break;\n }\n\n if (find = Expr.find[type]) {\n // Search, expanding context for leading sibling combinators\n if (seed = find(token.matches[0].replace(runescape, funescape), rsibling.test(tokens[0].type) && testContext(context.parentNode) || context)) {\n // If seed is empty or no tokens remain, we can return early\n tokens.splice(i, 1);\n selector = seed.length && toSelector(tokens);\n\n if (!selector) {\n push.apply(results, seed);\n return results;\n }\n\n break;\n }\n }\n }\n } // Compile and execute a filtering function if one is not provided\n // Provide `match` to avoid retokenization if we modified the selector above\n\n\n (compiled || compile(selector, match))(seed, context, !documentIsHTML, results, !context || rsibling.test(selector) && testContext(context.parentNode) || context);\n return results;\n }; // One-time assignments\n // Sort stability\n\n\n support.sortStable = expando.split(\"\").sort(sortOrder).join(\"\") === expando; // Support: Chrome 14-35+\n // Always assume duplicates if they aren't passed to the comparison function\n\n support.detectDuplicates = !!hasDuplicate; // Initialize against the default document\n\n setDocument(); // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n // Detached nodes confoundingly follow *each other*\n\n support.sortDetached = assert(function (el) {\n // Should return 1, but returns 4 (following)\n return el.compareDocumentPosition(document.createElement(\"fieldset\")) & 1;\n }); // Support: IE<8\n // Prevent attribute/property \"interpolation\"\n // https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\n\n if (!assert(function (el) {\n el.innerHTML = \"<a href='#'></a>\";\n return el.firstChild.getAttribute(\"href\") === \"#\";\n })) {\n addHandle(\"type|href|height|width\", function (elem, name, isXML) {\n if (!isXML) {\n return elem.getAttribute(name, name.toLowerCase() === \"type\" ? 1 : 2);\n }\n });\n } // Support: IE<9\n // Use defaultValue in place of getAttribute(\"value\")\n\n\n if (!support.attributes || !assert(function (el) {\n el.innerHTML = \"<input/>\";\n el.firstChild.setAttribute(\"value\", \"\");\n return el.firstChild.getAttribute(\"value\") === \"\";\n })) {\n addHandle(\"value\", function (elem, _name, isXML) {\n if (!isXML && elem.nodeName.toLowerCase() === \"input\") {\n return elem.defaultValue;\n }\n });\n } // Support: IE<9\n // Use getAttributeNode to fetch booleans when getAttribute lies\n\n\n if (!assert(function (el) {\n return el.getAttribute(\"disabled\") == null;\n })) {\n addHandle(booleans, function (elem, name, isXML) {\n var val;\n\n if (!isXML) {\n return elem[name] === true ? name.toLowerCase() : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null;\n }\n });\n }\n\n return Sizzle;\n }(window);\n\n jQuery.find = Sizzle;\n jQuery.expr = Sizzle.selectors; // Deprecated\n\n jQuery.expr[\":\"] = jQuery.expr.pseudos;\n jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\n jQuery.text = Sizzle.getText;\n jQuery.isXMLDoc = Sizzle.isXML;\n jQuery.contains = Sizzle.contains;\n jQuery.escapeSelector = Sizzle.escape;\n\n var dir = function dir(elem, _dir, until) {\n var matched = [],\n truncate = until !== undefined;\n\n while ((elem = elem[_dir]) && elem.nodeType !== 9) {\n if (elem.nodeType === 1) {\n if (truncate && jQuery(elem).is(until)) {\n break;\n }\n\n matched.push(elem);\n }\n }\n\n return matched;\n };\n\n var _siblings = function siblings(n, elem) {\n var matched = [];\n\n for (; n; n = n.nextSibling) {\n if (n.nodeType === 1 && n !== elem) {\n matched.push(n);\n }\n }\n\n return matched;\n };\n\n var rneedsContext = jQuery.expr.match.needsContext;\n\n function nodeName(elem, name) {\n return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n }\n\n ;\n var rsingleTag = /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i; // Implement the identical functionality for filter and not\n\n function winnow(elements, qualifier, not) {\n if (isFunction(qualifier)) {\n return jQuery.grep(elements, function (elem, i) {\n return !!qualifier.call(elem, i, elem) !== not;\n });\n } // Single element\n\n\n if (qualifier.nodeType) {\n return jQuery.grep(elements, function (elem) {\n return elem === qualifier !== not;\n });\n } // Arraylike of elements (jQuery, arguments, Array)\n\n\n if (typeof qualifier !== \"string\") {\n return jQuery.grep(elements, function (elem) {\n return indexOf.call(qualifier, elem) > -1 !== not;\n });\n } // Filtered directly for both simple and complex selectors\n\n\n return jQuery.filter(qualifier, elements, not);\n }\n\n jQuery.filter = function (expr, elems, not) {\n var elem = elems[0];\n\n if (not) {\n expr = \":not(\" + expr + \")\";\n }\n\n if (elems.length === 1 && elem.nodeType === 1) {\n return jQuery.find.matchesSelector(elem, expr) ? [elem] : [];\n }\n\n return jQuery.find.matches(expr, jQuery.grep(elems, function (elem) {\n return elem.nodeType === 1;\n }));\n };\n\n jQuery.fn.extend({\n find: function find(selector) {\n var i,\n ret,\n len = this.length,\n self = this;\n\n if (typeof selector !== \"string\") {\n return this.pushStack(jQuery(selector).filter(function () {\n for (i = 0; i < len; i++) {\n if (jQuery.contains(self[i], this)) {\n return true;\n }\n }\n }));\n }\n\n ret = this.pushStack([]);\n\n for (i = 0; i < len; i++) {\n jQuery.find(selector, self[i], ret);\n }\n\n return len > 1 ? jQuery.uniqueSort(ret) : ret;\n },\n filter: function filter(selector) {\n return this.pushStack(winnow(this, selector || [], false));\n },\n not: function not(selector) {\n return this.pushStack(winnow(this, selector || [], true));\n },\n is: function is(selector) {\n return !!winnow(this, // If this is a positional/relative selector, check membership in the returned set\n // so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n typeof selector === \"string\" && rneedsContext.test(selector) ? jQuery(selector) : selector || [], false).length;\n }\n }); // Initialize a jQuery object\n // A central reference to the root jQuery(document)\n\n var rootjQuery,\n // A simple way to check for HTML strings\n // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n // Strict HTML recognition (#11290: must start with <)\n // Shortcut simple #id case for speed\n rquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n init = jQuery.fn.init = function (selector, context, root) {\n var match, elem; // HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\n if (!selector) {\n return this;\n } // Method init() accepts an alternate rootjQuery\n // so migrate can support jQuery.sub (gh-2101)\n\n\n root = root || rootjQuery; // Handle HTML strings\n\n if (typeof selector === \"string\") {\n if (selector[0] === \"<\" && selector[selector.length - 1] === \">\" && selector.length >= 3) {\n // Assume that strings that start and end with <> are HTML and skip the regex check\n match = [null, selector, null];\n } else {\n match = rquickExpr.exec(selector);\n } // Match html or make sure no context is specified for #id\n\n\n if (match && (match[1] || !context)) {\n // HANDLE: $(html) -> $(array)\n if (match[1]) {\n context = context instanceof jQuery ? context[0] : context; // Option to run scripts is true for back-compat\n // Intentionally let the error be thrown if parseHTML is not present\n\n jQuery.merge(this, jQuery.parseHTML(match[1], context && context.nodeType ? context.ownerDocument || context : document, true)); // HANDLE: $(html, props)\n\n if (rsingleTag.test(match[1]) && jQuery.isPlainObject(context)) {\n for (match in context) {\n // Properties of context are called as methods if possible\n if (isFunction(this[match])) {\n this[match](context[match]); // ...and otherwise set as attributes\n } else {\n this.attr(match, context[match]);\n }\n }\n }\n\n return this; // HANDLE: $(#id)\n } else {\n elem = document.getElementById(match[2]);\n\n if (elem) {\n // Inject the element directly into the jQuery object\n this[0] = elem;\n this.length = 1;\n }\n\n return this;\n } // HANDLE: $(expr, $(...))\n\n } else if (!context || context.jquery) {\n return (context || root).find(selector); // HANDLE: $(expr, context)\n // (which is just equivalent to: $(context).find(expr)\n } else {\n return this.constructor(context).find(selector);\n } // HANDLE: $(DOMElement)\n\n } else if (selector.nodeType) {\n this[0] = selector;\n this.length = 1;\n return this; // HANDLE: $(function)\n // Shortcut for document ready\n } else if (isFunction(selector)) {\n return root.ready !== undefined ? root.ready(selector) : // Execute immediately if ready is not present\n selector(jQuery);\n }\n\n return jQuery.makeArray(selector, this);\n }; // Give the init function the jQuery prototype for later instantiation\n\n\n init.prototype = jQuery.fn; // Initialize central reference\n\n rootjQuery = jQuery(document);\n var rparentsprev = /^(?:parents|prev(?:Until|All))/,\n // Methods guaranteed to produce a unique set when starting from a unique set\n guaranteedUnique = {\n children: true,\n contents: true,\n next: true,\n prev: true\n };\n jQuery.fn.extend({\n has: function has(target) {\n var targets = jQuery(target, this),\n l = targets.length;\n return this.filter(function () {\n var i = 0;\n\n for (; i < l; i++) {\n if (jQuery.contains(this, targets[i])) {\n return true;\n }\n }\n });\n },\n closest: function closest(selectors, context) {\n var cur,\n i = 0,\n l = this.length,\n matched = [],\n targets = typeof selectors !== \"string\" && jQuery(selectors); // Positional selectors never match, since there's no _selection_ context\n\n if (!rneedsContext.test(selectors)) {\n for (; i < l; i++) {\n for (cur = this[i]; cur && cur !== context; cur = cur.parentNode) {\n // Always skip document fragments\n if (cur.nodeType < 11 && (targets ? targets.index(cur) > -1 : // Don't pass non-elements to Sizzle\n cur.nodeType === 1 && jQuery.find.matchesSelector(cur, selectors))) {\n matched.push(cur);\n break;\n }\n }\n }\n }\n\n return this.pushStack(matched.length > 1 ? jQuery.uniqueSort(matched) : matched);\n },\n // Determine the position of an element within the set\n index: function index(elem) {\n // No argument, return index in parent\n if (!elem) {\n return this[0] && this[0].parentNode ? this.first().prevAll().length : -1;\n } // Index in selector\n\n\n if (typeof elem === \"string\") {\n return indexOf.call(jQuery(elem), this[0]);\n } // Locate the position of the desired element\n\n\n return indexOf.call(this, // If it receives a jQuery object, the first element is used\n elem.jquery ? elem[0] : elem);\n },\n add: function add(selector, context) {\n return this.pushStack(jQuery.uniqueSort(jQuery.merge(this.get(), jQuery(selector, context))));\n },\n addBack: function addBack(selector) {\n return this.add(selector == null ? this.prevObject : this.prevObject.filter(selector));\n }\n });\n\n function sibling(cur, dir) {\n while ((cur = cur[dir]) && cur.nodeType !== 1) {}\n\n return cur;\n }\n\n jQuery.each({\n parent: function parent(elem) {\n var parent = elem.parentNode;\n return parent && parent.nodeType !== 11 ? parent : null;\n },\n parents: function parents(elem) {\n return dir(elem, \"parentNode\");\n },\n parentsUntil: function parentsUntil(elem, _i, until) {\n return dir(elem, \"parentNode\", until);\n },\n next: function next(elem) {\n return sibling(elem, \"nextSibling\");\n },\n prev: function prev(elem) {\n return sibling(elem, \"previousSibling\");\n },\n nextAll: function nextAll(elem) {\n return dir(elem, \"nextSibling\");\n },\n prevAll: function prevAll(elem) {\n return dir(elem, \"previousSibling\");\n },\n nextUntil: function nextUntil(elem, _i, until) {\n return dir(elem, \"nextSibling\", until);\n },\n prevUntil: function prevUntil(elem, _i, until) {\n return dir(elem, \"previousSibling\", until);\n },\n siblings: function siblings(elem) {\n return _siblings((elem.parentNode || {}).firstChild, elem);\n },\n children: function children(elem) {\n return _siblings(elem.firstChild);\n },\n contents: function contents(elem) {\n if (elem.contentDocument != null && // Support: IE 11+\n // <object> elements with no `data` attribute has an object\n // `contentDocument` with a `null` prototype.\n getProto(elem.contentDocument)) {\n return elem.contentDocument;\n } // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n // Treat the template element as a regular one in browsers that\n // don't support it.\n\n\n if (nodeName(elem, \"template\")) {\n elem = elem.content || elem;\n }\n\n return jQuery.merge([], elem.childNodes);\n }\n }, function (name, fn) {\n jQuery.fn[name] = function (until, selector) {\n var matched = jQuery.map(this, fn, until);\n\n if (name.slice(-5) !== \"Until\") {\n selector = until;\n }\n\n if (selector && typeof selector === \"string\") {\n matched = jQuery.filter(selector, matched);\n }\n\n if (this.length > 1) {\n // Remove duplicates\n if (!guaranteedUnique[name]) {\n jQuery.uniqueSort(matched);\n } // Reverse order for parents* and prev-derivatives\n\n\n if (rparentsprev.test(name)) {\n matched.reverse();\n }\n }\n\n return this.pushStack(matched);\n };\n });\n var rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g; // Convert String-formatted options into Object-formatted ones\n\n function createOptions(options) {\n var object = {};\n jQuery.each(options.match(rnothtmlwhite) || [], function (_, flag) {\n object[flag] = true;\n });\n return object;\n }\n /*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\n\n\n jQuery.Callbacks = function (options) {\n // Convert options from String-formatted to Object-formatted if needed\n // (we check in cache first)\n options = typeof options === \"string\" ? createOptions(options) : jQuery.extend({}, options);\n\n var // Flag to know if list is currently firing\n firing,\n // Last fire value for non-forgettable lists\n memory,\n // Flag to know if list was already fired\n _fired,\n // Flag to prevent firing\n _locked,\n // Actual callback list\n list = [],\n // Queue of execution data for repeatable lists\n queue = [],\n // Index of currently firing callback (modified by add/remove as needed)\n firingIndex = -1,\n // Fire callbacks\n fire = function fire() {\n // Enforce single-firing\n _locked = _locked || options.once; // Execute callbacks for all pending executions,\n // respecting firingIndex overrides and runtime changes\n\n _fired = firing = true;\n\n for (; queue.length; firingIndex = -1) {\n memory = queue.shift();\n\n while (++firingIndex < list.length) {\n // Run callback and check for early termination\n if (list[firingIndex].apply(memory[0], memory[1]) === false && options.stopOnFalse) {\n // Jump to end and forget the data so .add doesn't re-fire\n firingIndex = list.length;\n memory = false;\n }\n }\n } // Forget the data if we're done with it\n\n\n if (!options.memory) {\n memory = false;\n }\n\n firing = false; // Clean up if we're done firing for good\n\n if (_locked) {\n // Keep an empty list if we have data for future add calls\n if (memory) {\n list = []; // Otherwise, this object is spent\n } else {\n list = \"\";\n }\n }\n },\n // Actual Callbacks object\n self = {\n // Add a callback or a collection of callbacks to the list\n add: function add() {\n if (list) {\n // If we have memory from a past run, we should fire after adding\n if (memory && !firing) {\n firingIndex = list.length - 1;\n queue.push(memory);\n }\n\n (function add(args) {\n jQuery.each(args, function (_, arg) {\n if (isFunction(arg)) {\n if (!options.unique || !self.has(arg)) {\n list.push(arg);\n }\n } else if (arg && arg.length && toType(arg) !== \"string\") {\n // Inspect recursively\n add(arg);\n }\n });\n })(arguments);\n\n if (memory && !firing) {\n fire();\n }\n }\n\n return this;\n },\n // Remove a callback from the list\n remove: function remove() {\n jQuery.each(arguments, function (_, arg) {\n var index;\n\n while ((index = jQuery.inArray(arg, list, index)) > -1) {\n list.splice(index, 1); // Handle firing indexes\n\n if (index <= firingIndex) {\n firingIndex--;\n }\n }\n });\n return this;\n },\n // Check if a given callback is in the list.\n // If no argument is given, return whether or not list has callbacks attached.\n has: function has(fn) {\n return fn ? jQuery.inArray(fn, list) > -1 : list.length > 0;\n },\n // Remove all callbacks from the list\n empty: function empty() {\n if (list) {\n list = [];\n }\n\n return this;\n },\n // Disable .fire and .add\n // Abort any current/pending executions\n // Clear all callbacks and values\n disable: function disable() {\n _locked = queue = [];\n list = memory = \"\";\n return this;\n },\n disabled: function disabled() {\n return !list;\n },\n // Disable .fire\n // Also disable .add unless we have memory (since it would have no effect)\n // Abort any pending executions\n lock: function lock() {\n _locked = queue = [];\n\n if (!memory && !firing) {\n list = memory = \"\";\n }\n\n return this;\n },\n locked: function locked() {\n return !!_locked;\n },\n // Call all callbacks with the given context and arguments\n fireWith: function fireWith(context, args) {\n if (!_locked) {\n args = args || [];\n args = [context, args.slice ? args.slice() : args];\n queue.push(args);\n\n if (!firing) {\n fire();\n }\n }\n\n return this;\n },\n // Call all the callbacks with the given arguments\n fire: function fire() {\n self.fireWith(this, arguments);\n return this;\n },\n // To know if the callbacks have already been called at least once\n fired: function fired() {\n return !!_fired;\n }\n };\n\n return self;\n };\n\n function Identity(v) {\n return v;\n }\n\n function Thrower(ex) {\n throw ex;\n }\n\n function adoptValue(value, resolve, reject, noValue) {\n var method;\n\n try {\n // Check for promise aspect first to privilege synchronous behavior\n if (value && isFunction(method = value.promise)) {\n method.call(value).done(resolve).fail(reject); // Other thenables\n } else if (value && isFunction(method = value.then)) {\n method.call(value, resolve, reject); // Other non-thenables\n } else {\n // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n // * false: [ value ].slice( 0 ) => resolve( value )\n // * true: [ value ].slice( 1 ) => resolve()\n resolve.apply(undefined, [value].slice(noValue));\n } // For Promises/A+, convert exceptions into rejections\n // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n // Deferred#then to conditionally suppress rejection.\n\n } catch (value) {\n // Support: Android 4.0 only\n // Strict mode functions invoked without .call/.apply get global-object context\n reject.apply(undefined, [value]);\n }\n }\n\n jQuery.extend({\n Deferred: function Deferred(func) {\n var tuples = [// action, add listener, callbacks,\n // ... .then handlers, argument index, [final state]\n [\"notify\", \"progress\", jQuery.Callbacks(\"memory\"), jQuery.Callbacks(\"memory\"), 2], [\"resolve\", \"done\", jQuery.Callbacks(\"once memory\"), jQuery.Callbacks(\"once memory\"), 0, \"resolved\"], [\"reject\", \"fail\", jQuery.Callbacks(\"once memory\"), jQuery.Callbacks(\"once memory\"), 1, \"rejected\"]],\n _state = \"pending\",\n _promise = {\n state: function state() {\n return _state;\n },\n always: function always() {\n deferred.done(arguments).fail(arguments);\n return this;\n },\n \"catch\": function _catch(fn) {\n return _promise.then(null, fn);\n },\n // Keep pipe for back-compat\n pipe: function pipe()\n /* fnDone, fnFail, fnProgress */\n {\n var fns = arguments;\n return jQuery.Deferred(function (newDefer) {\n jQuery.each(tuples, function (_i, tuple) {\n // Map tuples (progress, done, fail) to arguments (done, fail, progress)\n var fn = isFunction(fns[tuple[4]]) && fns[tuple[4]]; // deferred.progress(function() { bind to newDefer or newDefer.notify })\n // deferred.done(function() { bind to newDefer or newDefer.resolve })\n // deferred.fail(function() { bind to newDefer or newDefer.reject })\n\n deferred[tuple[1]](function () {\n var returned = fn && fn.apply(this, arguments);\n\n if (returned && isFunction(returned.promise)) {\n returned.promise().progress(newDefer.notify).done(newDefer.resolve).fail(newDefer.reject);\n } else {\n newDefer[tuple[0] + \"With\"](this, fn ? [returned] : arguments);\n }\n });\n });\n fns = null;\n }).promise();\n },\n then: function then(onFulfilled, onRejected, onProgress) {\n var maxDepth = 0;\n\n function resolve(depth, deferred, handler, special) {\n return function () {\n var that = this,\n args = arguments,\n mightThrow = function mightThrow() {\n var returned, then; // Support: Promises/A+ section 2.3.3.3.3\n // https://promisesaplus.com/#point-59\n // Ignore double-resolution attempts\n\n if (depth < maxDepth) {\n return;\n }\n\n returned = handler.apply(that, args); // Support: Promises/A+ section 2.3.1\n // https://promisesaplus.com/#point-48\n\n if (returned === deferred.promise()) {\n throw new TypeError(\"Thenable self-resolution\");\n } // Support: Promises/A+ sections 2.3.3.1, 3.5\n // https://promisesaplus.com/#point-54\n // https://promisesaplus.com/#point-75\n // Retrieve `then` only once\n\n\n then = returned && ( // Support: Promises/A+ section 2.3.4\n // https://promisesaplus.com/#point-64\n // Only check objects and functions for thenability\n _typeof(returned) === \"object\" || typeof returned === \"function\") && returned.then; // Handle a returned thenable\n\n if (isFunction(then)) {\n // Special processors (notify) just wait for resolution\n if (special) {\n then.call(returned, resolve(maxDepth, deferred, Identity, special), resolve(maxDepth, deferred, Thrower, special)); // Normal processors (resolve) also hook into progress\n } else {\n // ...and disregard older resolution values\n maxDepth++;\n then.call(returned, resolve(maxDepth, deferred, Identity, special), resolve(maxDepth, deferred, Thrower, special), resolve(maxDepth, deferred, Identity, deferred.notifyWith));\n } // Handle all other returned values\n\n } else {\n // Only substitute handlers pass on context\n // and multiple values (non-spec behavior)\n if (handler !== Identity) {\n that = undefined;\n args = [returned];\n } // Process the value(s)\n // Default process is resolve\n\n\n (special || deferred.resolveWith)(that, args);\n }\n },\n // Only normal processors (resolve) catch and reject exceptions\n process = special ? mightThrow : function () {\n try {\n mightThrow();\n } catch (e) {\n if (jQuery.Deferred.exceptionHook) {\n jQuery.Deferred.exceptionHook(e, process.stackTrace);\n } // Support: Promises/A+ section 2.3.3.3.4.1\n // https://promisesaplus.com/#point-61\n // Ignore post-resolution exceptions\n\n\n if (depth + 1 >= maxDepth) {\n // Only substitute handlers pass on context\n // and multiple values (non-spec behavior)\n if (handler !== Thrower) {\n that = undefined;\n args = [e];\n }\n\n deferred.rejectWith(that, args);\n }\n }\n }; // Support: Promises/A+ section 2.3.3.3.1\n // https://promisesaplus.com/#point-57\n // Re-resolve promises immediately to dodge false rejection from\n // subsequent errors\n\n\n if (depth) {\n process();\n } else {\n // Call an optional hook to record the stack, in case of exception\n // since it's otherwise lost when execution goes async\n if (jQuery.Deferred.getStackHook) {\n process.stackTrace = jQuery.Deferred.getStackHook();\n }\n\n window.setTimeout(process);\n }\n };\n }\n\n return jQuery.Deferred(function (newDefer) {\n // progress_handlers.add( ... )\n tuples[0][3].add(resolve(0, newDefer, isFunction(onProgress) ? onProgress : Identity, newDefer.notifyWith)); // fulfilled_handlers.add( ... )\n\n tuples[1][3].add(resolve(0, newDefer, isFunction(onFulfilled) ? onFulfilled : Identity)); // rejected_handlers.add( ... )\n\n tuples[2][3].add(resolve(0, newDefer, isFunction(onRejected) ? onRejected : Thrower));\n }).promise();\n },\n // Get a promise for this deferred\n // If obj is provided, the promise aspect is added to the object\n promise: function promise(obj) {\n return obj != null ? jQuery.extend(obj, _promise) : _promise;\n }\n },\n deferred = {}; // Add list-specific methods\n\n jQuery.each(tuples, function (i, tuple) {\n var list = tuple[2],\n stateString = tuple[5]; // promise.progress = list.add\n // promise.done = list.add\n // promise.fail = list.add\n\n _promise[tuple[1]] = list.add; // Handle state\n\n if (stateString) {\n list.add(function () {\n // state = \"resolved\" (i.e., fulfilled)\n // state = \"rejected\"\n _state = stateString;\n }, // rejected_callbacks.disable\n // fulfilled_callbacks.disable\n tuples[3 - i][2].disable, // rejected_handlers.disable\n // fulfilled_handlers.disable\n tuples[3 - i][3].disable, // progress_callbacks.lock\n tuples[0][2].lock, // progress_handlers.lock\n tuples[0][3].lock);\n } // progress_handlers.fire\n // fulfilled_handlers.fire\n // rejected_handlers.fire\n\n\n list.add(tuple[3].fire); // deferred.notify = function() { deferred.notifyWith(...) }\n // deferred.resolve = function() { deferred.resolveWith(...) }\n // deferred.reject = function() { deferred.rejectWith(...) }\n\n deferred[tuple[0]] = function () {\n deferred[tuple[0] + \"With\"](this === deferred ? undefined : this, arguments);\n return this;\n }; // deferred.notifyWith = list.fireWith\n // deferred.resolveWith = list.fireWith\n // deferred.rejectWith = list.fireWith\n\n\n deferred[tuple[0] + \"With\"] = list.fireWith;\n }); // Make the deferred a promise\n\n _promise.promise(deferred); // Call given func if any\n\n\n if (func) {\n func.call(deferred, deferred);\n } // All done!\n\n\n return deferred;\n },\n // Deferred helper\n when: function when(singleValue) {\n var // count of uncompleted subordinates\n remaining = arguments.length,\n // count of unprocessed arguments\n i = remaining,\n // subordinate fulfillment data\n resolveContexts = Array(i),\n resolveValues = _slice.call(arguments),\n // the master Deferred\n master = jQuery.Deferred(),\n // subordinate callback factory\n updateFunc = function updateFunc(i) {\n return function (value) {\n resolveContexts[i] = this;\n resolveValues[i] = arguments.length > 1 ? _slice.call(arguments) : value;\n\n if (! --remaining) {\n master.resolveWith(resolveContexts, resolveValues);\n }\n };\n }; // Single- and empty arguments are adopted like Promise.resolve\n\n\n if (remaining <= 1) {\n adoptValue(singleValue, master.done(updateFunc(i)).resolve, master.reject, !remaining); // Use .then() to unwrap secondary thenables (cf. gh-3000)\n\n if (master.state() === \"pending\" || isFunction(resolveValues[i] && resolveValues[i].then)) {\n return master.then();\n }\n } // Multiple arguments are aggregated like Promise.all array elements\n\n\n while (i--) {\n adoptValue(resolveValues[i], updateFunc(i), master.reject);\n }\n\n return master.promise();\n }\n }); // These usually indicate a programmer mistake during development,\n // warn about them ASAP rather than swallowing them by default.\n\n var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n jQuery.Deferred.exceptionHook = function (error, stack) {\n // Support: IE 8 - 9 only\n // Console exists when dev tools are open, which can happen at any time\n if (window.console && window.console.warn && error && rerrorNames.test(error.name)) {\n window.console.warn(\"jQuery.Deferred exception: \" + error.message, error.stack, stack);\n }\n };\n\n jQuery.readyException = function (error) {\n window.setTimeout(function () {\n throw error;\n });\n }; // The deferred used on DOM ready\n\n\n var readyList = jQuery.Deferred();\n\n jQuery.fn.ready = function (fn) {\n readyList.then(fn) // Wrap jQuery.readyException in a function so that the lookup\n // happens at the time of error handling instead of callback\n // registration.\n [\"catch\"](function (error) {\n jQuery.readyException(error);\n });\n return this;\n };\n\n jQuery.extend({\n // Is the DOM ready to be used? Set to true once it occurs.\n isReady: false,\n // A counter to track how many items to wait for before\n // the ready event fires. See #6781\n readyWait: 1,\n // Handle when the DOM is ready\n ready: function ready(wait) {\n // Abort if there are pending holds or we're already ready\n if (wait === true ? --jQuery.readyWait : jQuery.isReady) {\n return;\n } // Remember that the DOM is ready\n\n\n jQuery.isReady = true; // If a normal DOM Ready event fired, decrement, and wait if need be\n\n if (wait !== true && --jQuery.readyWait > 0) {\n return;\n } // If there are functions bound, to execute\n\n\n readyList.resolveWith(document, [jQuery]);\n }\n });\n jQuery.ready.then = readyList.then; // The ready event handler and self cleanup method\n\n function completed() {\n document.removeEventListener(\"DOMContentLoaded\", completed);\n window.removeEventListener(\"load\", completed);\n jQuery.ready();\n } // Catch cases where $(document).ready() is called\n // after the browser event has already occurred.\n // Support: IE <=9 - 10 only\n // Older IE sometimes signals \"interactive\" too soon\n\n\n if (document.readyState === \"complete\" || document.readyState !== \"loading\" && !document.documentElement.doScroll) {\n // Handle it asynchronously to allow scripts the opportunity to delay ready\n window.setTimeout(jQuery.ready);\n } else {\n // Use the handy event callback\n document.addEventListener(\"DOMContentLoaded\", completed); // A fallback to window.onload, that will always work\n\n window.addEventListener(\"load\", completed);\n } // Multifunctional method to get and set values of a collection\n // The value/s can optionally be executed if it's a function\n\n\n var access = function access(elems, fn, key, value, chainable, emptyGet, raw) {\n var i = 0,\n len = elems.length,\n bulk = key == null; // Sets many values\n\n if (toType(key) === \"object\") {\n chainable = true;\n\n for (i in key) {\n access(elems, fn, i, key[i], true, emptyGet, raw);\n } // Sets one value\n\n } else if (value !== undefined) {\n chainable = true;\n\n if (!isFunction(value)) {\n raw = true;\n }\n\n if (bulk) {\n // Bulk operations run against the entire set\n if (raw) {\n fn.call(elems, value);\n fn = null; // ...except when executing function values\n } else {\n bulk = fn;\n\n fn = function fn(elem, _key, value) {\n return bulk.call(jQuery(elem), value);\n };\n }\n }\n\n if (fn) {\n for (; i < len; i++) {\n fn(elems[i], key, raw ? value : value.call(elems[i], i, fn(elems[i], key)));\n }\n }\n }\n\n if (chainable) {\n return elems;\n } // Gets\n\n\n if (bulk) {\n return fn.call(elems);\n }\n\n return len ? fn(elems[0], key) : emptyGet;\n }; // Matches dashed string for camelizing\n\n\n var rmsPrefix = /^-ms-/,\n rdashAlpha = /-([a-z])/g; // Used by camelCase as callback to replace()\n\n function fcamelCase(_all, letter) {\n return letter.toUpperCase();\n } // Convert dashed to camelCase; used by the css and data modules\n // Support: IE <=9 - 11, Edge 12 - 15\n // Microsoft forgot to hump their vendor prefix (#9572)\n\n\n function camelCase(string) {\n return string.replace(rmsPrefix, \"ms-\").replace(rdashAlpha, fcamelCase);\n }\n\n var acceptData = function acceptData(owner) {\n // Accepts only:\n // - Node\n // - Node.ELEMENT_NODE\n // - Node.DOCUMENT_NODE\n // - Object\n // - Any\n return owner.nodeType === 1 || owner.nodeType === 9 || !+owner.nodeType;\n };\n\n function Data() {\n this.expando = jQuery.expando + Data.uid++;\n }\n\n Data.uid = 1;\n Data.prototype = {\n cache: function cache(owner) {\n // Check if the owner object already has a cache\n var value = owner[this.expando]; // If not, create one\n\n if (!value) {\n value = {}; // We can accept data for non-element nodes in modern browsers,\n // but we should not, see #8335.\n // Always return an empty object.\n\n if (acceptData(owner)) {\n // If it is a node unlikely to be stringify-ed or looped over\n // use plain assignment\n if (owner.nodeType) {\n owner[this.expando] = value; // Otherwise secure it in a non-enumerable property\n // configurable must be true to allow the property to be\n // deleted when data is removed\n } else {\n Object.defineProperty(owner, this.expando, {\n value: value,\n configurable: true\n });\n }\n }\n }\n\n return value;\n },\n set: function set(owner, data, value) {\n var prop,\n cache = this.cache(owner); // Handle: [ owner, key, value ] args\n // Always use camelCase key (gh-2257)\n\n if (typeof data === \"string\") {\n cache[camelCase(data)] = value; // Handle: [ owner, { properties } ] args\n } else {\n // Copy the properties one-by-one to the cache object\n for (prop in data) {\n cache[camelCase(prop)] = data[prop];\n }\n }\n\n return cache;\n },\n get: function get(owner, key) {\n return key === undefined ? this.cache(owner) : // Always use camelCase key (gh-2257)\n owner[this.expando] && owner[this.expando][camelCase(key)];\n },\n access: function access(owner, key, value) {\n // In cases where either:\n //\n // 1. No key was specified\n // 2. A string key was specified, but no value provided\n //\n // Take the \"read\" path and allow the get method to determine\n // which value to return, respectively either:\n //\n // 1. The entire cache object\n // 2. The data stored at the key\n //\n if (key === undefined || key && typeof key === \"string\" && value === undefined) {\n return this.get(owner, key);\n } // When the key is not a string, or both a key and value\n // are specified, set or extend (existing objects) with either:\n //\n // 1. An object of properties\n // 2. A key and value\n //\n\n\n this.set(owner, key, value); // Since the \"set\" path can have two possible entry points\n // return the expected data based on which path was taken[*]\n\n return value !== undefined ? value : key;\n },\n remove: function remove(owner, key) {\n var i,\n cache = owner[this.expando];\n\n if (cache === undefined) {\n return;\n }\n\n if (key !== undefined) {\n // Support array or space separated string of keys\n if (Array.isArray(key)) {\n // If key is an array of keys...\n // We always set camelCase keys, so remove that.\n key = key.map(camelCase);\n } else {\n key = camelCase(key); // If a key with the spaces exists, use it.\n // Otherwise, create an array by matching non-whitespace\n\n key = key in cache ? [key] : key.match(rnothtmlwhite) || [];\n }\n\n i = key.length;\n\n while (i--) {\n delete cache[key[i]];\n }\n } // Remove the expando if there's no more data\n\n\n if (key === undefined || jQuery.isEmptyObject(cache)) {\n // Support: Chrome <=35 - 45\n // Webkit & Blink performance suffers when deleting properties\n // from DOM nodes, so set to undefined instead\n // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n if (owner.nodeType) {\n owner[this.expando] = undefined;\n } else {\n delete owner[this.expando];\n }\n }\n },\n hasData: function hasData(owner) {\n var cache = owner[this.expando];\n return cache !== undefined && !jQuery.isEmptyObject(cache);\n }\n };\n var dataPriv = new Data();\n var dataUser = new Data(); //\tImplementation Summary\n //\n //\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n //\t2. Improve the module's maintainability by reducing the storage\n //\t\tpaths to a single mechanism.\n //\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n //\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n //\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n //\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\n var rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n rmultiDash = /[A-Z]/g;\n\n function getData(data) {\n if (data === \"true\") {\n return true;\n }\n\n if (data === \"false\") {\n return false;\n }\n\n if (data === \"null\") {\n return null;\n } // Only convert to a number if it doesn't change the string\n\n\n if (data === +data + \"\") {\n return +data;\n }\n\n if (rbrace.test(data)) {\n return JSON.parse(data);\n }\n\n return data;\n }\n\n function dataAttr(elem, key, data) {\n var name; // If nothing was found internally, try to fetch any\n // data from the HTML5 data-* attribute\n\n if (data === undefined && elem.nodeType === 1) {\n name = \"data-\" + key.replace(rmultiDash, \"-$&\").toLowerCase();\n data = elem.getAttribute(name);\n\n if (typeof data === \"string\") {\n try {\n data = getData(data);\n } catch (e) {} // Make sure we set the data so it isn't changed later\n\n\n dataUser.set(elem, key, data);\n } else {\n data = undefined;\n }\n }\n\n return data;\n }\n\n jQuery.extend({\n hasData: function hasData(elem) {\n return dataUser.hasData(elem) || dataPriv.hasData(elem);\n },\n data: function data(elem, name, _data) {\n return dataUser.access(elem, name, _data);\n },\n removeData: function removeData(elem, name) {\n dataUser.remove(elem, name);\n },\n // TODO: Now that all calls to _data and _removeData have been replaced\n // with direct calls to dataPriv methods, these can be deprecated.\n _data: function _data(elem, name, data) {\n return dataPriv.access(elem, name, data);\n },\n _removeData: function _removeData(elem, name) {\n dataPriv.remove(elem, name);\n }\n });\n jQuery.fn.extend({\n data: function data(key, value) {\n var i,\n name,\n data,\n elem = this[0],\n attrs = elem && elem.attributes; // Gets all values\n\n if (key === undefined) {\n if (this.length) {\n data = dataUser.get(elem);\n\n if (elem.nodeType === 1 && !dataPriv.get(elem, \"hasDataAttrs\")) {\n i = attrs.length;\n\n while (i--) {\n // Support: IE 11 only\n // The attrs elements can be null (#14894)\n if (attrs[i]) {\n name = attrs[i].name;\n\n if (name.indexOf(\"data-\") === 0) {\n name = camelCase(name.slice(5));\n dataAttr(elem, name, data[name]);\n }\n }\n }\n\n dataPriv.set(elem, \"hasDataAttrs\", true);\n }\n }\n\n return data;\n } // Sets multiple values\n\n\n if (_typeof(key) === \"object\") {\n return this.each(function () {\n dataUser.set(this, key);\n });\n }\n\n return access(this, function (value) {\n var data; // The calling jQuery object (element matches) is not empty\n // (and therefore has an element appears at this[ 0 ]) and the\n // `value` parameter was not undefined. An empty jQuery object\n // will result in `undefined` for elem = this[ 0 ] which will\n // throw an exception if an attempt to read a data cache is made.\n\n if (elem && value === undefined) {\n // Attempt to get data from the cache\n // The key will always be camelCased in Data\n data = dataUser.get(elem, key);\n\n if (data !== undefined) {\n return data;\n } // Attempt to \"discover\" the data in\n // HTML5 custom data-* attrs\n\n\n data = dataAttr(elem, key);\n\n if (data !== undefined) {\n return data;\n } // We tried really hard, but the data doesn't exist.\n\n\n return;\n } // Set the data...\n\n\n this.each(function () {\n // We always store the camelCased key\n dataUser.set(this, key, value);\n });\n }, null, value, arguments.length > 1, null, true);\n },\n removeData: function removeData(key) {\n return this.each(function () {\n dataUser.remove(this, key);\n });\n }\n });\n jQuery.extend({\n queue: function queue(elem, type, data) {\n var queue;\n\n if (elem) {\n type = (type || \"fx\") + \"queue\";\n queue = dataPriv.get(elem, type); // Speed up dequeue by getting out quickly if this is just a lookup\n\n if (data) {\n if (!queue || Array.isArray(data)) {\n queue = dataPriv.access(elem, type, jQuery.makeArray(data));\n } else {\n queue.push(data);\n }\n }\n\n return queue || [];\n }\n },\n dequeue: function dequeue(elem, type) {\n type = type || \"fx\";\n\n var queue = jQuery.queue(elem, type),\n startLength = queue.length,\n fn = queue.shift(),\n hooks = jQuery._queueHooks(elem, type),\n next = function next() {\n jQuery.dequeue(elem, type);\n }; // If the fx queue is dequeued, always remove the progress sentinel\n\n\n if (fn === \"inprogress\") {\n fn = queue.shift();\n startLength--;\n }\n\n if (fn) {\n // Add a progress sentinel to prevent the fx queue from being\n // automatically dequeued\n if (type === \"fx\") {\n queue.unshift(\"inprogress\");\n } // Clear up the last queue stop function\n\n\n delete hooks.stop;\n fn.call(elem, next, hooks);\n }\n\n if (!startLength && hooks) {\n hooks.empty.fire();\n }\n },\n // Not public - generate a queueHooks object, or return the current one\n _queueHooks: function _queueHooks(elem, type) {\n var key = type + \"queueHooks\";\n return dataPriv.get(elem, key) || dataPriv.access(elem, key, {\n empty: jQuery.Callbacks(\"once memory\").add(function () {\n dataPriv.remove(elem, [type + \"queue\", key]);\n })\n });\n }\n });\n jQuery.fn.extend({\n queue: function queue(type, data) {\n var setter = 2;\n\n if (typeof type !== \"string\") {\n data = type;\n type = \"fx\";\n setter--;\n }\n\n if (arguments.length < setter) {\n return jQuery.queue(this[0], type);\n }\n\n return data === undefined ? this : this.each(function () {\n var queue = jQuery.queue(this, type, data); // Ensure a hooks for this queue\n\n jQuery._queueHooks(this, type);\n\n if (type === \"fx\" && queue[0] !== \"inprogress\") {\n jQuery.dequeue(this, type);\n }\n });\n },\n dequeue: function dequeue(type) {\n return this.each(function () {\n jQuery.dequeue(this, type);\n });\n },\n clearQueue: function clearQueue(type) {\n return this.queue(type || \"fx\", []);\n },\n // Get a promise resolved when queues of a certain type\n // are emptied (fx is the type by default)\n promise: function promise(type, obj) {\n var tmp,\n count = 1,\n defer = jQuery.Deferred(),\n elements = this,\n i = this.length,\n resolve = function resolve() {\n if (! --count) {\n defer.resolveWith(elements, [elements]);\n }\n };\n\n if (typeof type !== \"string\") {\n obj = type;\n type = undefined;\n }\n\n type = type || \"fx\";\n\n while (i--) {\n tmp = dataPriv.get(elements[i], type + \"queueHooks\");\n\n if (tmp && tmp.empty) {\n count++;\n tmp.empty.add(resolve);\n }\n }\n\n resolve();\n return defer.promise(obj);\n }\n });\n var pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\n var rcssNum = new RegExp(\"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\");\n var cssExpand = [\"Top\", \"Right\", \"Bottom\", \"Left\"];\n var documentElement = document.documentElement;\n\n var isAttached = function isAttached(elem) {\n return jQuery.contains(elem.ownerDocument, elem);\n },\n composed = {\n composed: true\n }; // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n // Check attachment across shadow DOM boundaries when possible (gh-3504)\n // Support: iOS 10.0-10.2 only\n // Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n // leading to errors. We need to check for `getRootNode`.\n\n\n if (documentElement.getRootNode) {\n isAttached = function isAttached(elem) {\n return jQuery.contains(elem.ownerDocument, elem) || elem.getRootNode(composed) === elem.ownerDocument;\n };\n }\n\n var isHiddenWithinTree = function isHiddenWithinTree(elem, el) {\n // isHiddenWithinTree might be called from jQuery#filter function;\n // in that case, element will be second argument\n elem = el || elem; // Inline style trumps all\n\n return elem.style.display === \"none\" || elem.style.display === \"\" && // Otherwise, check computed style\n // Support: Firefox <=43 - 45\n // Disconnected elements can have computed display: none, so first confirm that elem is\n // in the document.\n isAttached(elem) && jQuery.css(elem, \"display\") === \"none\";\n };\n\n function adjustCSS(elem, prop, valueParts, tween) {\n var adjusted,\n scale,\n maxIterations = 20,\n currentValue = tween ? function () {\n return tween.cur();\n } : function () {\n return jQuery.css(elem, prop, \"\");\n },\n initial = currentValue(),\n unit = valueParts && valueParts[3] || (jQuery.cssNumber[prop] ? \"\" : \"px\"),\n // Starting value computation is required for potential unit mismatches\n initialInUnit = elem.nodeType && (jQuery.cssNumber[prop] || unit !== \"px\" && +initial) && rcssNum.exec(jQuery.css(elem, prop));\n\n if (initialInUnit && initialInUnit[3] !== unit) {\n // Support: Firefox <=54\n // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n initial = initial / 2; // Trust units reported by jQuery.css\n\n unit = unit || initialInUnit[3]; // Iteratively approximate from a nonzero starting point\n\n initialInUnit = +initial || 1;\n\n while (maxIterations--) {\n // Evaluate and update our best guess (doubling guesses that zero out).\n // Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n jQuery.style(elem, prop, initialInUnit + unit);\n\n if ((1 - scale) * (1 - (scale = currentValue() / initial || 0.5)) <= 0) {\n maxIterations = 0;\n }\n\n initialInUnit = initialInUnit / scale;\n }\n\n initialInUnit = initialInUnit * 2;\n jQuery.style(elem, prop, initialInUnit + unit); // Make sure we update the tween properties later on\n\n valueParts = valueParts || [];\n }\n\n if (valueParts) {\n initialInUnit = +initialInUnit || +initial || 0; // Apply relative offset (+=/-=) if specified\n\n adjusted = valueParts[1] ? initialInUnit + (valueParts[1] + 1) * valueParts[2] : +valueParts[2];\n\n if (tween) {\n tween.unit = unit;\n tween.start = initialInUnit;\n tween.end = adjusted;\n }\n }\n\n return adjusted;\n }\n\n var defaultDisplayMap = {};\n\n function getDefaultDisplay(elem) {\n var temp,\n doc = elem.ownerDocument,\n nodeName = elem.nodeName,\n display = defaultDisplayMap[nodeName];\n\n if (display) {\n return display;\n }\n\n temp = doc.body.appendChild(doc.createElement(nodeName));\n display = jQuery.css(temp, \"display\");\n temp.parentNode.removeChild(temp);\n\n if (display === \"none\") {\n display = \"block\";\n }\n\n defaultDisplayMap[nodeName] = display;\n return display;\n }\n\n function showHide(elements, show) {\n var display,\n elem,\n values = [],\n index = 0,\n length = elements.length; // Determine new display value for elements that need to change\n\n for (; index < length; index++) {\n elem = elements[index];\n\n if (!elem.style) {\n continue;\n }\n\n display = elem.style.display;\n\n if (show) {\n // Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n // check is required in this first loop unless we have a nonempty display value (either\n // inline or about-to-be-restored)\n if (display === \"none\") {\n values[index] = dataPriv.get(elem, \"display\") || null;\n\n if (!values[index]) {\n elem.style.display = \"\";\n }\n }\n\n if (elem.style.display === \"\" && isHiddenWithinTree(elem)) {\n values[index] = getDefaultDisplay(elem);\n }\n } else {\n if (display !== \"none\") {\n values[index] = \"none\"; // Remember what we're overwriting\n\n dataPriv.set(elem, \"display\", display);\n }\n }\n } // Set the display of the elements in a second loop to avoid constant reflow\n\n\n for (index = 0; index < length; index++) {\n if (values[index] != null) {\n elements[index].style.display = values[index];\n }\n }\n\n return elements;\n }\n\n jQuery.fn.extend({\n show: function show() {\n return showHide(this, true);\n },\n hide: function hide() {\n return showHide(this);\n },\n toggle: function toggle(state) {\n if (typeof state === \"boolean\") {\n return state ? this.show() : this.hide();\n }\n\n return this.each(function () {\n if (isHiddenWithinTree(this)) {\n jQuery(this).show();\n } else {\n jQuery(this).hide();\n }\n });\n }\n });\n var rcheckableType = /^(?:checkbox|radio)$/i;\n var rtagName = /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i;\n var rscriptType = /^$|^module$|\\/(?:java|ecma)script/i;\n\n (function () {\n var fragment = document.createDocumentFragment(),\n div = fragment.appendChild(document.createElement(\"div\")),\n input = document.createElement(\"input\"); // Support: Android 4.0 - 4.3 only\n // Check state lost if the name is set (#11217)\n // Support: Windows Web Apps (WWA)\n // `name` and `type` must use .setAttribute for WWA (#14901)\n\n input.setAttribute(\"type\", \"radio\");\n input.setAttribute(\"checked\", \"checked\");\n input.setAttribute(\"name\", \"t\");\n div.appendChild(input); // Support: Android <=4.1 only\n // Older WebKit doesn't clone checked state correctly in fragments\n\n support.checkClone = div.cloneNode(true).cloneNode(true).lastChild.checked; // Support: IE <=11 only\n // Make sure textarea (and checkbox) defaultValue is properly cloned\n\n div.innerHTML = \"<textarea>x</textarea>\";\n support.noCloneChecked = !!div.cloneNode(true).lastChild.defaultValue; // Support: IE <=9 only\n // IE <=9 replaces <option> tags with their contents when inserted outside of\n // the select element.\n\n div.innerHTML = \"<option></option>\";\n support.option = !!div.lastChild;\n })(); // We have to close these tags to support XHTML (#13200)\n\n\n var wrapMap = {\n // XHTML parsers do not magically insert elements in the\n // same way that tag soup parsers do. So we cannot shorten\n // this by omitting <tbody> or other required elements.\n thead: [1, \"<table>\", \"</table>\"],\n col: [2, \"<table><colgroup>\", \"</colgroup></table>\"],\n tr: [2, \"<table><tbody>\", \"</tbody></table>\"],\n td: [3, \"<table><tbody><tr>\", \"</tr></tbody></table>\"],\n _default: [0, \"\", \"\"]\n };\n wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\n wrapMap.th = wrapMap.td; // Support: IE <=9 only\n\n if (!support.option) {\n wrapMap.optgroup = wrapMap.option = [1, \"<select multiple='multiple'>\", \"</select>\"];\n }\n\n function getAll(context, tag) {\n // Support: IE <=9 - 11 only\n // Use typeof to avoid zero-argument method invocation on host objects (#15151)\n var ret;\n\n if (typeof context.getElementsByTagName !== \"undefined\") {\n ret = context.getElementsByTagName(tag || \"*\");\n } else if (typeof context.querySelectorAll !== \"undefined\") {\n ret = context.querySelectorAll(tag || \"*\");\n } else {\n ret = [];\n }\n\n if (tag === undefined || tag && nodeName(context, tag)) {\n return jQuery.merge([context], ret);\n }\n\n return ret;\n } // Mark scripts as having already been evaluated\n\n\n function setGlobalEval(elems, refElements) {\n var i = 0,\n l = elems.length;\n\n for (; i < l; i++) {\n dataPriv.set(elems[i], \"globalEval\", !refElements || dataPriv.get(refElements[i], \"globalEval\"));\n }\n }\n\n var rhtml = /<|&#?\\w+;/;\n\n function buildFragment(elems, context, scripts, selection, ignored) {\n var elem,\n tmp,\n tag,\n wrap,\n attached,\n j,\n fragment = context.createDocumentFragment(),\n nodes = [],\n i = 0,\n l = elems.length;\n\n for (; i < l; i++) {\n elem = elems[i];\n\n if (elem || elem === 0) {\n // Add nodes directly\n if (toType(elem) === \"object\") {\n // Support: Android <=4.0 only, PhantomJS 1 only\n // push.apply(_, arraylike) throws on ancient WebKit\n jQuery.merge(nodes, elem.nodeType ? [elem] : elem); // Convert non-html into a text node\n } else if (!rhtml.test(elem)) {\n nodes.push(context.createTextNode(elem)); // Convert html into DOM nodes\n } else {\n tmp = tmp || fragment.appendChild(context.createElement(\"div\")); // Deserialize a standard representation\n\n tag = (rtagName.exec(elem) || [\"\", \"\"])[1].toLowerCase();\n wrap = wrapMap[tag] || wrapMap._default;\n tmp.innerHTML = wrap[1] + jQuery.htmlPrefilter(elem) + wrap[2]; // Descend through wrappers to the right content\n\n j = wrap[0];\n\n while (j--) {\n tmp = tmp.lastChild;\n } // Support: Android <=4.0 only, PhantomJS 1 only\n // push.apply(_, arraylike) throws on ancient WebKit\n\n\n jQuery.merge(nodes, tmp.childNodes); // Remember the top-level container\n\n tmp = fragment.firstChild; // Ensure the created nodes are orphaned (#12392)\n\n tmp.textContent = \"\";\n }\n }\n } // Remove wrapper from fragment\n\n\n fragment.textContent = \"\";\n i = 0;\n\n while (elem = nodes[i++]) {\n // Skip elements already in the context collection (trac-4087)\n if (selection && jQuery.inArray(elem, selection) > -1) {\n if (ignored) {\n ignored.push(elem);\n }\n\n continue;\n }\n\n attached = isAttached(elem); // Append to fragment\n\n tmp = getAll(fragment.appendChild(elem), \"script\"); // Preserve script evaluation history\n\n if (attached) {\n setGlobalEval(tmp);\n } // Capture executables\n\n\n if (scripts) {\n j = 0;\n\n while (elem = tmp[j++]) {\n if (rscriptType.test(elem.type || \"\")) {\n scripts.push(elem);\n }\n }\n }\n }\n\n return fragment;\n }\n\n var rkeyEvent = /^key/,\n rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\n function returnTrue() {\n return true;\n }\n\n function returnFalse() {\n return false;\n } // Support: IE <=9 - 11+\n // focus() and blur() are asynchronous, except when they are no-op.\n // So expect focus to be synchronous when the element is already active,\n // and blur to be synchronous when the element is not already active.\n // (focus and blur are always synchronous in other supported browsers,\n // this just defines when we can count on it).\n\n\n function expectSync(elem, type) {\n return elem === safeActiveElement() === (type === \"focus\");\n } // Support: IE <=9 only\n // Accessing document.activeElement can throw unexpectedly\n // https://bugs.jquery.com/ticket/13393\n\n\n function safeActiveElement() {\n try {\n return document.activeElement;\n } catch (err) {}\n }\n\n function _on(elem, types, selector, data, fn, one) {\n var origFn, type; // Types can be a map of types/handlers\n\n if (_typeof(types) === \"object\") {\n // ( types-Object, selector, data )\n if (typeof selector !== \"string\") {\n // ( types-Object, data )\n data = data || selector;\n selector = undefined;\n }\n\n for (type in types) {\n _on(elem, type, selector, data, types[type], one);\n }\n\n return elem;\n }\n\n if (data == null && fn == null) {\n // ( types, fn )\n fn = selector;\n data = selector = undefined;\n } else if (fn == null) {\n if (typeof selector === \"string\") {\n // ( types, selector, fn )\n fn = data;\n data = undefined;\n } else {\n // ( types, data, fn )\n fn = data;\n data = selector;\n selector = undefined;\n }\n }\n\n if (fn === false) {\n fn = returnFalse;\n } else if (!fn) {\n return elem;\n }\n\n if (one === 1) {\n origFn = fn;\n\n fn = function fn(event) {\n // Can use an empty set, since event contains the info\n jQuery().off(event);\n return origFn.apply(this, arguments);\n }; // Use same guid so caller can remove using origFn\n\n\n fn.guid = origFn.guid || (origFn.guid = jQuery.guid++);\n }\n\n return elem.each(function () {\n jQuery.event.add(this, types, fn, data, selector);\n });\n }\n /*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\n\n\n jQuery.event = {\n global: {},\n add: function add(elem, types, handler, data, selector) {\n var handleObjIn,\n eventHandle,\n tmp,\n events,\n t,\n handleObj,\n special,\n handlers,\n type,\n namespaces,\n origType,\n elemData = dataPriv.get(elem); // Only attach events to objects that accept data\n\n if (!acceptData(elem)) {\n return;\n } // Caller can pass in an object of custom data in lieu of the handler\n\n\n if (handler.handler) {\n handleObjIn = handler;\n handler = handleObjIn.handler;\n selector = handleObjIn.selector;\n } // Ensure that invalid selectors throw exceptions at attach time\n // Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\n\n if (selector) {\n jQuery.find.matchesSelector(documentElement, selector);\n } // Make sure that the handler has a unique ID, used to find/remove it later\n\n\n if (!handler.guid) {\n handler.guid = jQuery.guid++;\n } // Init the element's event structure and main handler, if this is the first\n\n\n if (!(events = elemData.events)) {\n events = elemData.events = Object.create(null);\n }\n\n if (!(eventHandle = elemData.handle)) {\n eventHandle = elemData.handle = function (e) {\n // Discard the second event of a jQuery.event.trigger() and\n // when an event is called after a page has unloaded\n return typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ? jQuery.event.dispatch.apply(elem, arguments) : undefined;\n };\n } // Handle multiple events separated by a space\n\n\n types = (types || \"\").match(rnothtmlwhite) || [\"\"];\n t = types.length;\n\n while (t--) {\n tmp = rtypenamespace.exec(types[t]) || [];\n type = origType = tmp[1];\n namespaces = (tmp[2] || \"\").split(\".\").sort(); // There *must* be a type, no attaching namespace-only handlers\n\n if (!type) {\n continue;\n } // If event changes its type, use the special event handlers for the changed type\n\n\n special = jQuery.event.special[type] || {}; // If selector defined, determine special event api type, otherwise given type\n\n type = (selector ? special.delegateType : special.bindType) || type; // Update special based on newly reset type\n\n special = jQuery.event.special[type] || {}; // handleObj is passed to all event handlers\n\n handleObj = jQuery.extend({\n type: type,\n origType: origType,\n data: data,\n handler: handler,\n guid: handler.guid,\n selector: selector,\n needsContext: selector && jQuery.expr.match.needsContext.test(selector),\n namespace: namespaces.join(\".\")\n }, handleObjIn); // Init the event handler queue if we're the first\n\n if (!(handlers = events[type])) {\n handlers = events[type] = [];\n handlers.delegateCount = 0; // Only use addEventListener if the special events handler returns false\n\n if (!special.setup || special.setup.call(elem, data, namespaces, eventHandle) === false) {\n if (elem.addEventListener) {\n elem.addEventListener(type, eventHandle);\n }\n }\n }\n\n if (special.add) {\n special.add.call(elem, handleObj);\n\n if (!handleObj.handler.guid) {\n handleObj.handler.guid = handler.guid;\n }\n } // Add to the element's handler list, delegates in front\n\n\n if (selector) {\n handlers.splice(handlers.delegateCount++, 0, handleObj);\n } else {\n handlers.push(handleObj);\n } // Keep track of which events have ever been used, for event optimization\n\n\n jQuery.event.global[type] = true;\n }\n },\n // Detach an event or set of events from an element\n remove: function remove(elem, types, handler, selector, mappedTypes) {\n var j,\n origCount,\n tmp,\n events,\n t,\n handleObj,\n special,\n handlers,\n type,\n namespaces,\n origType,\n elemData = dataPriv.hasData(elem) && dataPriv.get(elem);\n\n if (!elemData || !(events = elemData.events)) {\n return;\n } // Once for each type.namespace in types; type may be omitted\n\n\n types = (types || \"\").match(rnothtmlwhite) || [\"\"];\n t = types.length;\n\n while (t--) {\n tmp = rtypenamespace.exec(types[t]) || [];\n type = origType = tmp[1];\n namespaces = (tmp[2] || \"\").split(\".\").sort(); // Unbind all events (on this namespace, if provided) for the element\n\n if (!type) {\n for (type in events) {\n jQuery.event.remove(elem, type + types[t], handler, selector, true);\n }\n\n continue;\n }\n\n special = jQuery.event.special[type] || {};\n type = (selector ? special.delegateType : special.bindType) || type;\n handlers = events[type] || [];\n tmp = tmp[2] && new RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\"); // Remove matching events\n\n origCount = j = handlers.length;\n\n while (j--) {\n handleObj = handlers[j];\n\n if ((mappedTypes || origType === handleObj.origType) && (!handler || handler.guid === handleObj.guid) && (!tmp || tmp.test(handleObj.namespace)) && (!selector || selector === handleObj.selector || selector === \"**\" && handleObj.selector)) {\n handlers.splice(j, 1);\n\n if (handleObj.selector) {\n handlers.delegateCount--;\n }\n\n if (special.remove) {\n special.remove.call(elem, handleObj);\n }\n }\n } // Remove generic event handler if we removed something and no more handlers exist\n // (avoids potential for endless recursion during removal of special event handlers)\n\n\n if (origCount && !handlers.length) {\n if (!special.teardown || special.teardown.call(elem, namespaces, elemData.handle) === false) {\n jQuery.removeEvent(elem, type, elemData.handle);\n }\n\n delete events[type];\n }\n } // Remove data and the expando if it's no longer used\n\n\n if (jQuery.isEmptyObject(events)) {\n dataPriv.remove(elem, \"handle events\");\n }\n },\n dispatch: function dispatch(nativeEvent) {\n var i,\n j,\n ret,\n matched,\n handleObj,\n handlerQueue,\n args = new Array(arguments.length),\n // Make a writable jQuery.Event from the native event object\n event = jQuery.event.fix(nativeEvent),\n handlers = (dataPriv.get(this, \"events\") || Object.create(null))[event.type] || [],\n special = jQuery.event.special[event.type] || {}; // Use the fix-ed jQuery.Event rather than the (read-only) native event\n\n args[0] = event;\n\n for (i = 1; i < arguments.length; i++) {\n args[i] = arguments[i];\n }\n\n event.delegateTarget = this; // Call the preDispatch hook for the mapped type, and let it bail if desired\n\n if (special.preDispatch && special.preDispatch.call(this, event) === false) {\n return;\n } // Determine handlers\n\n\n handlerQueue = jQuery.event.handlers.call(this, event, handlers); // Run delegates first; they may want to stop propagation beneath us\n\n i = 0;\n\n while ((matched = handlerQueue[i++]) && !event.isPropagationStopped()) {\n event.currentTarget = matched.elem;\n j = 0;\n\n while ((handleObj = matched.handlers[j++]) && !event.isImmediatePropagationStopped()) {\n // If the event is namespaced, then each handler is only invoked if it is\n // specially universal or its namespaces are a superset of the event's.\n if (!event.rnamespace || handleObj.namespace === false || event.rnamespace.test(handleObj.namespace)) {\n event.handleObj = handleObj;\n event.data = handleObj.data;\n ret = ((jQuery.event.special[handleObj.origType] || {}).handle || handleObj.handler).apply(matched.elem, args);\n\n if (ret !== undefined) {\n if ((event.result = ret) === false) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n }\n }\n } // Call the postDispatch hook for the mapped type\n\n\n if (special.postDispatch) {\n special.postDispatch.call(this, event);\n }\n\n return event.result;\n },\n handlers: function handlers(event, _handlers) {\n var i,\n handleObj,\n sel,\n matchedHandlers,\n matchedSelectors,\n handlerQueue = [],\n delegateCount = _handlers.delegateCount,\n cur = event.target; // Find delegate handlers\n\n if (delegateCount && // Support: IE <=9\n // Black-hole SVG <use> instance trees (trac-13180)\n cur.nodeType && // Support: Firefox <=42\n // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n // Support: IE 11 only\n // ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n !(event.type === \"click\" && event.button >= 1)) {\n for (; cur !== this; cur = cur.parentNode || this) {\n // Don't check non-elements (#13208)\n // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n if (cur.nodeType === 1 && !(event.type === \"click\" && cur.disabled === true)) {\n matchedHandlers = [];\n matchedSelectors = {};\n\n for (i = 0; i < delegateCount; i++) {\n handleObj = _handlers[i]; // Don't conflict with Object.prototype properties (#13203)\n\n sel = handleObj.selector + \" \";\n\n if (matchedSelectors[sel] === undefined) {\n matchedSelectors[sel] = handleObj.needsContext ? jQuery(sel, this).index(cur) > -1 : jQuery.find(sel, this, null, [cur]).length;\n }\n\n if (matchedSelectors[sel]) {\n matchedHandlers.push(handleObj);\n }\n }\n\n if (matchedHandlers.length) {\n handlerQueue.push({\n elem: cur,\n handlers: matchedHandlers\n });\n }\n }\n }\n } // Add the remaining (directly-bound) handlers\n\n\n cur = this;\n\n if (delegateCount < _handlers.length) {\n handlerQueue.push({\n elem: cur,\n handlers: _handlers.slice(delegateCount)\n });\n }\n\n return handlerQueue;\n },\n addProp: function addProp(name, hook) {\n Object.defineProperty(jQuery.Event.prototype, name, {\n enumerable: true,\n configurable: true,\n get: isFunction(hook) ? function () {\n if (this.originalEvent) {\n return hook(this.originalEvent);\n }\n } : function () {\n if (this.originalEvent) {\n return this.originalEvent[name];\n }\n },\n set: function set(value) {\n Object.defineProperty(this, name, {\n enumerable: true,\n configurable: true,\n writable: true,\n value: value\n });\n }\n });\n },\n fix: function fix(originalEvent) {\n return originalEvent[jQuery.expando] ? originalEvent : new jQuery.Event(originalEvent);\n },\n special: {\n load: {\n // Prevent triggered image.load events from bubbling to window.load\n noBubble: true\n },\n click: {\n // Utilize native event to ensure correct state for checkable inputs\n setup: function setup(data) {\n // For mutual compressibility with _default, replace `this` access with a local var.\n // `|| data` is dead code meant only to preserve the variable through minification.\n var el = this || data; // Claim the first handler\n\n if (rcheckableType.test(el.type) && el.click && nodeName(el, \"input\")) {\n // dataPriv.set( el, \"click\", ... )\n leverageNative(el, \"click\", returnTrue);\n } // Return false to allow normal processing in the caller\n\n\n return false;\n },\n trigger: function trigger(data) {\n // For mutual compressibility with _default, replace `this` access with a local var.\n // `|| data` is dead code meant only to preserve the variable through minification.\n var el = this || data; // Force setup before triggering a click\n\n if (rcheckableType.test(el.type) && el.click && nodeName(el, \"input\")) {\n leverageNative(el, \"click\");\n } // Return non-false to allow normal event-path propagation\n\n\n return true;\n },\n // For cross-browser consistency, suppress native .click() on links\n // Also prevent it if we're currently inside a leveraged native-event stack\n _default: function _default(event) {\n var target = event.target;\n return rcheckableType.test(target.type) && target.click && nodeName(target, \"input\") && dataPriv.get(target, \"click\") || nodeName(target, \"a\");\n }\n },\n beforeunload: {\n postDispatch: function postDispatch(event) {\n // Support: Firefox 20+\n // Firefox doesn't alert if the returnValue field is not set.\n if (event.result !== undefined && event.originalEvent) {\n event.originalEvent.returnValue = event.result;\n }\n }\n }\n }\n }; // Ensure the presence of an event listener that handles manually-triggered\n // synthetic events by interrupting progress until reinvoked in response to\n // *native* events that it fires directly, ensuring that state changes have\n // already occurred before other listeners are invoked.\n\n function leverageNative(el, type, expectSync) {\n // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add\n if (!expectSync) {\n if (dataPriv.get(el, type) === undefined) {\n jQuery.event.add(el, type, returnTrue);\n }\n\n return;\n } // Register the controller as a special universal handler for all event namespaces\n\n\n dataPriv.set(el, type, false);\n jQuery.event.add(el, type, {\n namespace: false,\n handler: function handler(event) {\n var notAsync,\n result,\n saved = dataPriv.get(this, type);\n\n if (event.isTrigger & 1 && this[type]) {\n // Interrupt processing of the outer synthetic .trigger()ed event\n // Saved data should be false in such cases, but might be a leftover capture object\n // from an async native handler (gh-4350)\n if (!saved.length) {\n // Store arguments for use when handling the inner native event\n // There will always be at least one argument (an event object), so this array\n // will not be confused with a leftover capture object.\n saved = _slice.call(arguments);\n dataPriv.set(this, type, saved); // Trigger the native event and capture its result\n // Support: IE <=9 - 11+\n // focus() and blur() are asynchronous\n\n notAsync = expectSync(this, type);\n this[type]();\n result = dataPriv.get(this, type);\n\n if (saved !== result || notAsync) {\n dataPriv.set(this, type, false);\n } else {\n result = {};\n }\n\n if (saved !== result) {\n // Cancel the outer synthetic event\n event.stopImmediatePropagation();\n event.preventDefault();\n return result.value;\n } // If this is an inner synthetic event for an event with a bubbling surrogate\n // (focus or blur), assume that the surrogate already propagated from triggering the\n // native event and prevent that from happening again here.\n // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n // bubbling surrogate propagates *after* the non-bubbling base), but that seems\n // less bad than duplication.\n\n } else if ((jQuery.event.special[type] || {}).delegateType) {\n event.stopPropagation();\n } // If this is a native event triggered above, everything is now in order\n // Fire an inner synthetic event with the original arguments\n\n } else if (saved.length) {\n // ...and capture the result\n dataPriv.set(this, type, {\n value: jQuery.event.trigger( // Support: IE <=9 - 11+\n // Extend with the prototype to reset the above stopImmediatePropagation()\n jQuery.extend(saved[0], jQuery.Event.prototype), saved.slice(1), this)\n }); // Abort handling of the native event\n\n event.stopImmediatePropagation();\n }\n }\n });\n }\n\n jQuery.removeEvent = function (elem, type, handle) {\n // This \"if\" is needed for plain objects\n if (elem.removeEventListener) {\n elem.removeEventListener(type, handle);\n }\n };\n\n jQuery.Event = function (src, props) {\n // Allow instantiation without the 'new' keyword\n if (!(this instanceof jQuery.Event)) {\n return new jQuery.Event(src, props);\n } // Event object\n\n\n if (src && src.type) {\n this.originalEvent = src;\n this.type = src.type; // Events bubbling up the document may have been marked as prevented\n // by a handler lower down the tree; reflect the correct value.\n\n this.isDefaultPrevented = src.defaultPrevented || src.defaultPrevented === undefined && // Support: Android <=2.3 only\n src.returnValue === false ? returnTrue : returnFalse; // Create target properties\n // Support: Safari <=6 - 7 only\n // Target should not be a text node (#504, #13143)\n\n this.target = src.target && src.target.nodeType === 3 ? src.target.parentNode : src.target;\n this.currentTarget = src.currentTarget;\n this.relatedTarget = src.relatedTarget; // Event type\n } else {\n this.type = src;\n } // Put explicitly provided properties onto the event object\n\n\n if (props) {\n jQuery.extend(this, props);\n } // Create a timestamp if incoming event doesn't have one\n\n\n this.timeStamp = src && src.timeStamp || Date.now(); // Mark it as fixed\n\n this[jQuery.expando] = true;\n }; // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n // https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\n\n\n jQuery.Event.prototype = {\n constructor: jQuery.Event,\n isDefaultPrevented: returnFalse,\n isPropagationStopped: returnFalse,\n isImmediatePropagationStopped: returnFalse,\n isSimulated: false,\n preventDefault: function preventDefault() {\n var e = this.originalEvent;\n this.isDefaultPrevented = returnTrue;\n\n if (e && !this.isSimulated) {\n e.preventDefault();\n }\n },\n stopPropagation: function stopPropagation() {\n var e = this.originalEvent;\n this.isPropagationStopped = returnTrue;\n\n if (e && !this.isSimulated) {\n e.stopPropagation();\n }\n },\n stopImmediatePropagation: function stopImmediatePropagation() {\n var e = this.originalEvent;\n this.isImmediatePropagationStopped = returnTrue;\n\n if (e && !this.isSimulated) {\n e.stopImmediatePropagation();\n }\n\n this.stopPropagation();\n }\n }; // Includes all common event props including KeyEvent and MouseEvent specific props\n\n jQuery.each({\n altKey: true,\n bubbles: true,\n cancelable: true,\n changedTouches: true,\n ctrlKey: true,\n detail: true,\n eventPhase: true,\n metaKey: true,\n pageX: true,\n pageY: true,\n shiftKey: true,\n view: true,\n \"char\": true,\n code: true,\n charCode: true,\n key: true,\n keyCode: true,\n button: true,\n buttons: true,\n clientX: true,\n clientY: true,\n offsetX: true,\n offsetY: true,\n pointerId: true,\n pointerType: true,\n screenX: true,\n screenY: true,\n targetTouches: true,\n toElement: true,\n touches: true,\n which: function which(event) {\n var button = event.button; // Add which for key events\n\n if (event.which == null && rkeyEvent.test(event.type)) {\n return event.charCode != null ? event.charCode : event.keyCode;\n } // Add which for click: 1 === left; 2 === middle; 3 === right\n\n\n if (!event.which && button !== undefined && rmouseEvent.test(event.type)) {\n if (button & 1) {\n return 1;\n }\n\n if (button & 2) {\n return 3;\n }\n\n if (button & 4) {\n return 2;\n }\n\n return 0;\n }\n\n return event.which;\n }\n }, jQuery.event.addProp);\n jQuery.each({\n focus: \"focusin\",\n blur: \"focusout\"\n }, function (type, delegateType) {\n jQuery.event.special[type] = {\n // Utilize native event if possible so blur/focus sequence is correct\n setup: function setup() {\n // Claim the first handler\n // dataPriv.set( this, \"focus\", ... )\n // dataPriv.set( this, \"blur\", ... )\n leverageNative(this, type, expectSync); // Return false to allow normal processing in the caller\n\n return false;\n },\n trigger: function trigger() {\n // Force setup before trigger\n leverageNative(this, type); // Return non-false to allow normal event-path propagation\n\n return true;\n },\n delegateType: delegateType\n };\n }); // Create mouseenter/leave events using mouseover/out and event-time checks\n // so that event delegation works in jQuery.\n // Do the same for pointerenter/pointerleave and pointerover/pointerout\n //\n // Support: Safari 7 only\n // Safari sends mouseenter too often; see:\n // https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n // for the description of the bug (it existed in older Chrome versions as well).\n\n jQuery.each({\n mouseenter: \"mouseover\",\n mouseleave: \"mouseout\",\n pointerenter: \"pointerover\",\n pointerleave: \"pointerout\"\n }, function (orig, fix) {\n jQuery.event.special[orig] = {\n delegateType: fix,\n bindType: fix,\n handle: function handle(event) {\n var ret,\n target = this,\n related = event.relatedTarget,\n handleObj = event.handleObj; // For mouseenter/leave call the handler if related is outside the target.\n // NB: No relatedTarget if the mouse left/entered the browser window\n\n if (!related || related !== target && !jQuery.contains(target, related)) {\n event.type = handleObj.origType;\n ret = handleObj.handler.apply(this, arguments);\n event.type = fix;\n }\n\n return ret;\n }\n };\n });\n jQuery.fn.extend({\n on: function on(types, selector, data, fn) {\n return _on(this, types, selector, data, fn);\n },\n one: function one(types, selector, data, fn) {\n return _on(this, types, selector, data, fn, 1);\n },\n off: function off(types, selector, fn) {\n var handleObj, type;\n\n if (types && types.preventDefault && types.handleObj) {\n // ( event ) dispatched jQuery.Event\n handleObj = types.handleObj;\n jQuery(types.delegateTarget).off(handleObj.namespace ? handleObj.origType + \".\" + handleObj.namespace : handleObj.origType, handleObj.selector, handleObj.handler);\n return this;\n }\n\n if (_typeof(types) === \"object\") {\n // ( types-object [, selector] )\n for (type in types) {\n this.off(type, selector, types[type]);\n }\n\n return this;\n }\n\n if (selector === false || typeof selector === \"function\") {\n // ( types [, fn] )\n fn = selector;\n selector = undefined;\n }\n\n if (fn === false) {\n fn = returnFalse;\n }\n\n return this.each(function () {\n jQuery.event.remove(this, types, fn, selector);\n });\n }\n });\n var // Support: IE <=10 - 11, Edge 12 - 13 only\n // In IE/Edge using regex groups here causes severe slowdowns.\n // See https://connect.microsoft.com/IE/feedback/details/1736512/\n rnoInnerhtml = /<script|<style|<link/i,\n // checked=\"checked\" or checked\n rchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n rcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g; // Prefer a tbody over its parent table for containing new rows\n\n function manipulationTarget(elem, content) {\n if (nodeName(elem, \"table\") && nodeName(content.nodeType !== 11 ? content : content.firstChild, \"tr\")) {\n return jQuery(elem).children(\"tbody\")[0] || elem;\n }\n\n return elem;\n } // Replace/restore the type attribute of script elements for safe DOM manipulation\n\n\n function disableScript(elem) {\n elem.type = (elem.getAttribute(\"type\") !== null) + \"/\" + elem.type;\n return elem;\n }\n\n function restoreScript(elem) {\n if ((elem.type || \"\").slice(0, 5) === \"true/\") {\n elem.type = elem.type.slice(5);\n } else {\n elem.removeAttribute(\"type\");\n }\n\n return elem;\n }\n\n function cloneCopyEvent(src, dest) {\n var i, l, type, pdataOld, udataOld, udataCur, events;\n\n if (dest.nodeType !== 1) {\n return;\n } // 1. Copy private data: events, handlers, etc.\n\n\n if (dataPriv.hasData(src)) {\n pdataOld = dataPriv.get(src);\n events = pdataOld.events;\n\n if (events) {\n dataPriv.remove(dest, \"handle events\");\n\n for (type in events) {\n for (i = 0, l = events[type].length; i < l; i++) {\n jQuery.event.add(dest, type, events[type][i]);\n }\n }\n }\n } // 2. Copy user data\n\n\n if (dataUser.hasData(src)) {\n udataOld = dataUser.access(src);\n udataCur = jQuery.extend({}, udataOld);\n dataUser.set(dest, udataCur);\n }\n } // Fix IE bugs, see support tests\n\n\n function fixInput(src, dest) {\n var nodeName = dest.nodeName.toLowerCase(); // Fails to persist the checked state of a cloned checkbox or radio button.\n\n if (nodeName === \"input\" && rcheckableType.test(src.type)) {\n dest.checked = src.checked; // Fails to return the selected option to the default selected state when cloning options\n } else if (nodeName === \"input\" || nodeName === \"textarea\") {\n dest.defaultValue = src.defaultValue;\n }\n }\n\n function domManip(collection, args, callback, ignored) {\n // Flatten any nested arrays\n args = flat(args);\n var fragment,\n first,\n scripts,\n hasScripts,\n node,\n doc,\n i = 0,\n l = collection.length,\n iNoClone = l - 1,\n value = args[0],\n valueIsFunction = isFunction(value); // We can't cloneNode fragments that contain checked, in WebKit\n\n if (valueIsFunction || l > 1 && typeof value === \"string\" && !support.checkClone && rchecked.test(value)) {\n return collection.each(function (index) {\n var self = collection.eq(index);\n\n if (valueIsFunction) {\n args[0] = value.call(this, index, self.html());\n }\n\n domManip(self, args, callback, ignored);\n });\n }\n\n if (l) {\n fragment = buildFragment(args, collection[0].ownerDocument, false, collection, ignored);\n first = fragment.firstChild;\n\n if (fragment.childNodes.length === 1) {\n fragment = first;\n } // Require either new content or an interest in ignored elements to invoke the callback\n\n\n if (first || ignored) {\n scripts = jQuery.map(getAll(fragment, \"script\"), disableScript);\n hasScripts = scripts.length; // Use the original fragment for the last item\n // instead of the first because it can end up\n // being emptied incorrectly in certain situations (#8070).\n\n for (; i < l; i++) {\n node = fragment;\n\n if (i !== iNoClone) {\n node = jQuery.clone(node, true, true); // Keep references to cloned scripts for later restoration\n\n if (hasScripts) {\n // Support: Android <=4.0 only, PhantomJS 1 only\n // push.apply(_, arraylike) throws on ancient WebKit\n jQuery.merge(scripts, getAll(node, \"script\"));\n }\n }\n\n callback.call(collection[i], node, i);\n }\n\n if (hasScripts) {\n doc = scripts[scripts.length - 1].ownerDocument; // Reenable scripts\n\n jQuery.map(scripts, restoreScript); // Evaluate executable scripts on first document insertion\n\n for (i = 0; i < hasScripts; i++) {\n node = scripts[i];\n\n if (rscriptType.test(node.type || \"\") && !dataPriv.access(node, \"globalEval\") && jQuery.contains(doc, node)) {\n if (node.src && (node.type || \"\").toLowerCase() !== \"module\") {\n // Optional AJAX dependency, but won't run scripts if not present\n if (jQuery._evalUrl && !node.noModule) {\n jQuery._evalUrl(node.src, {\n nonce: node.nonce || node.getAttribute(\"nonce\")\n }, doc);\n }\n } else {\n DOMEval(node.textContent.replace(rcleanScript, \"\"), node, doc);\n }\n }\n }\n }\n }\n }\n\n return collection;\n }\n\n function _remove(elem, selector, keepData) {\n var node,\n nodes = selector ? jQuery.filter(selector, elem) : elem,\n i = 0;\n\n for (; (node = nodes[i]) != null; i++) {\n if (!keepData && node.nodeType === 1) {\n jQuery.cleanData(getAll(node));\n }\n\n if (node.parentNode) {\n if (keepData && isAttached(node)) {\n setGlobalEval(getAll(node, \"script\"));\n }\n\n node.parentNode.removeChild(node);\n }\n }\n\n return elem;\n }\n\n jQuery.extend({\n htmlPrefilter: function htmlPrefilter(html) {\n return html;\n },\n clone: function clone(elem, dataAndEvents, deepDataAndEvents) {\n var i,\n l,\n srcElements,\n destElements,\n clone = elem.cloneNode(true),\n inPage = isAttached(elem); // Fix IE cloning issues\n\n if (!support.noCloneChecked && (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem)) {\n // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n destElements = getAll(clone);\n srcElements = getAll(elem);\n\n for (i = 0, l = srcElements.length; i < l; i++) {\n fixInput(srcElements[i], destElements[i]);\n }\n } // Copy the events from the original to the clone\n\n\n if (dataAndEvents) {\n if (deepDataAndEvents) {\n srcElements = srcElements || getAll(elem);\n destElements = destElements || getAll(clone);\n\n for (i = 0, l = srcElements.length; i < l; i++) {\n cloneCopyEvent(srcElements[i], destElements[i]);\n }\n } else {\n cloneCopyEvent(elem, clone);\n }\n } // Preserve script evaluation history\n\n\n destElements = getAll(clone, \"script\");\n\n if (destElements.length > 0) {\n setGlobalEval(destElements, !inPage && getAll(elem, \"script\"));\n } // Return the cloned set\n\n\n return clone;\n },\n cleanData: function cleanData(elems) {\n var data,\n elem,\n type,\n special = jQuery.event.special,\n i = 0;\n\n for (; (elem = elems[i]) !== undefined; i++) {\n if (acceptData(elem)) {\n if (data = elem[dataPriv.expando]) {\n if (data.events) {\n for (type in data.events) {\n if (special[type]) {\n jQuery.event.remove(elem, type); // This is a shortcut to avoid jQuery.event.remove's overhead\n } else {\n jQuery.removeEvent(elem, type, data.handle);\n }\n }\n } // Support: Chrome <=35 - 45+\n // Assign undefined instead of using delete, see Data#remove\n\n\n elem[dataPriv.expando] = undefined;\n }\n\n if (elem[dataUser.expando]) {\n // Support: Chrome <=35 - 45+\n // Assign undefined instead of using delete, see Data#remove\n elem[dataUser.expando] = undefined;\n }\n }\n }\n }\n });\n jQuery.fn.extend({\n detach: function detach(selector) {\n return _remove(this, selector, true);\n },\n remove: function remove(selector) {\n return _remove(this, selector);\n },\n text: function text(value) {\n return access(this, function (value) {\n return value === undefined ? jQuery.text(this) : this.empty().each(function () {\n if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n this.textContent = value;\n }\n });\n }, null, value, arguments.length);\n },\n append: function append() {\n return domManip(this, arguments, function (elem) {\n if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n var target = manipulationTarget(this, elem);\n target.appendChild(elem);\n }\n });\n },\n prepend: function prepend() {\n return domManip(this, arguments, function (elem) {\n if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n var target = manipulationTarget(this, elem);\n target.insertBefore(elem, target.firstChild);\n }\n });\n },\n before: function before() {\n return domManip(this, arguments, function (elem) {\n if (this.parentNode) {\n this.parentNode.insertBefore(elem, this);\n }\n });\n },\n after: function after() {\n return domManip(this, arguments, function (elem) {\n if (this.parentNode) {\n this.parentNode.insertBefore(elem, this.nextSibling);\n }\n });\n },\n empty: function empty() {\n var elem,\n i = 0;\n\n for (; (elem = this[i]) != null; i++) {\n if (elem.nodeType === 1) {\n // Prevent memory leaks\n jQuery.cleanData(getAll(elem, false)); // Remove any remaining nodes\n\n elem.textContent = \"\";\n }\n }\n\n return this;\n },\n clone: function clone(dataAndEvents, deepDataAndEvents) {\n dataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n return this.map(function () {\n return jQuery.clone(this, dataAndEvents, deepDataAndEvents);\n });\n },\n html: function html(value) {\n return access(this, function (value) {\n var elem = this[0] || {},\n i = 0,\n l = this.length;\n\n if (value === undefined && elem.nodeType === 1) {\n return elem.innerHTML;\n } // See if we can take a shortcut and just use innerHTML\n\n\n if (typeof value === \"string\" && !rnoInnerhtml.test(value) && !wrapMap[(rtagName.exec(value) || [\"\", \"\"])[1].toLowerCase()]) {\n value = jQuery.htmlPrefilter(value);\n\n try {\n for (; i < l; i++) {\n elem = this[i] || {}; // Remove element nodes and prevent memory leaks\n\n if (elem.nodeType === 1) {\n jQuery.cleanData(getAll(elem, false));\n elem.innerHTML = value;\n }\n }\n\n elem = 0; // If using innerHTML throws an exception, use the fallback method\n } catch (e) {}\n }\n\n if (elem) {\n this.empty().append(value);\n }\n }, null, value, arguments.length);\n },\n replaceWith: function replaceWith() {\n var ignored = []; // Make the changes, replacing each non-ignored context element with the new content\n\n return domManip(this, arguments, function (elem) {\n var parent = this.parentNode;\n\n if (jQuery.inArray(this, ignored) < 0) {\n jQuery.cleanData(getAll(this));\n\n if (parent) {\n parent.replaceChild(elem, this);\n }\n } // Force callback invocation\n\n }, ignored);\n }\n });\n jQuery.each({\n appendTo: \"append\",\n prependTo: \"prepend\",\n insertBefore: \"before\",\n insertAfter: \"after\",\n replaceAll: \"replaceWith\"\n }, function (name, original) {\n jQuery.fn[name] = function (selector) {\n var elems,\n ret = [],\n insert = jQuery(selector),\n last = insert.length - 1,\n i = 0;\n\n for (; i <= last; i++) {\n elems = i === last ? this : this.clone(true);\n jQuery(insert[i])[original](elems); // Support: Android <=4.0 only, PhantomJS 1 only\n // .get() because push.apply(_, arraylike) throws on ancient WebKit\n\n push.apply(ret, elems.get());\n }\n\n return this.pushStack(ret);\n };\n });\n var rnumnonpx = new RegExp(\"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\");\n\n var getStyles = function getStyles(elem) {\n // Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n // IE throws on elements created in popups\n // FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n var view = elem.ownerDocument.defaultView;\n\n if (!view || !view.opener) {\n view = window;\n }\n\n return view.getComputedStyle(elem);\n };\n\n var swap = function swap(elem, options, callback) {\n var ret,\n name,\n old = {}; // Remember the old values, and insert the new ones\n\n for (name in options) {\n old[name] = elem.style[name];\n elem.style[name] = options[name];\n }\n\n ret = callback.call(elem); // Revert the old values\n\n for (name in options) {\n elem.style[name] = old[name];\n }\n\n return ret;\n };\n\n var rboxStyle = new RegExp(cssExpand.join(\"|\"), \"i\");\n\n (function () {\n // Executing both pixelPosition & boxSizingReliable tests require only one layout\n // so they're executed at the same time to save the second computation.\n function computeStyleTests() {\n // This is a singleton, we need to execute it only once\n if (!div) {\n return;\n }\n\n container.style.cssText = \"position:absolute;left:-11111px;width:60px;\" + \"margin-top:1px;padding:0;border:0\";\n div.style.cssText = \"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" + \"margin:auto;border:1px;padding:1px;\" + \"width:60%;top:1%\";\n documentElement.appendChild(container).appendChild(div);\n var divStyle = window.getComputedStyle(div);\n pixelPositionVal = divStyle.top !== \"1%\"; // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\n reliableMarginLeftVal = roundPixelMeasures(divStyle.marginLeft) === 12; // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n // Some styles come back with percentage values, even though they shouldn't\n\n div.style.right = \"60%\";\n pixelBoxStylesVal = roundPixelMeasures(divStyle.right) === 36; // Support: IE 9 - 11 only\n // Detect misreporting of content dimensions for box-sizing:border-box elements\n\n boxSizingReliableVal = roundPixelMeasures(divStyle.width) === 36; // Support: IE 9 only\n // Detect overflow:scroll screwiness (gh-3699)\n // Support: Chrome <=64\n // Don't get tricked when zoom affects offsetWidth (gh-4029)\n\n div.style.position = \"absolute\";\n scrollboxSizeVal = roundPixelMeasures(div.offsetWidth / 3) === 12;\n documentElement.removeChild(container); // Nullify the div so it wouldn't be stored in the memory and\n // it will also be a sign that checks already performed\n\n div = null;\n }\n\n function roundPixelMeasures(measure) {\n return Math.round(parseFloat(measure));\n }\n\n var pixelPositionVal,\n boxSizingReliableVal,\n scrollboxSizeVal,\n pixelBoxStylesVal,\n reliableTrDimensionsVal,\n reliableMarginLeftVal,\n container = document.createElement(\"div\"),\n div = document.createElement(\"div\"); // Finish early in limited (non-browser) environments\n\n if (!div.style) {\n return;\n } // Support: IE <=9 - 11 only\n // Style of cloned element affects source element cloned (#8908)\n\n\n div.style.backgroundClip = \"content-box\";\n div.cloneNode(true).style.backgroundClip = \"\";\n support.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n jQuery.extend(support, {\n boxSizingReliable: function boxSizingReliable() {\n computeStyleTests();\n return boxSizingReliableVal;\n },\n pixelBoxStyles: function pixelBoxStyles() {\n computeStyleTests();\n return pixelBoxStylesVal;\n },\n pixelPosition: function pixelPosition() {\n computeStyleTests();\n return pixelPositionVal;\n },\n reliableMarginLeft: function reliableMarginLeft() {\n computeStyleTests();\n return reliableMarginLeftVal;\n },\n scrollboxSize: function scrollboxSize() {\n computeStyleTests();\n return scrollboxSizeVal;\n },\n // Support: IE 9 - 11+, Edge 15 - 18+\n // IE/Edge misreport `getComputedStyle` of table rows with width/height\n // set in CSS while `offset*` properties report correct values.\n // Behavior in IE 9 is more subtle than in newer versions & it passes\n // some versions of this test; make sure not to make it pass there!\n reliableTrDimensions: function reliableTrDimensions() {\n var table, tr, trChild, trStyle;\n\n if (reliableTrDimensionsVal == null) {\n table = document.createElement(\"table\");\n tr = document.createElement(\"tr\");\n trChild = document.createElement(\"div\");\n table.style.cssText = \"position:absolute;left:-11111px\";\n tr.style.height = \"1px\";\n trChild.style.height = \"9px\";\n documentElement.appendChild(table).appendChild(tr).appendChild(trChild);\n trStyle = window.getComputedStyle(tr);\n reliableTrDimensionsVal = parseInt(trStyle.height) > 3;\n documentElement.removeChild(table);\n }\n\n return reliableTrDimensionsVal;\n }\n });\n })();\n\n function curCSS(elem, name, computed) {\n var width,\n minWidth,\n maxWidth,\n ret,\n // Support: Firefox 51+\n // Retrieving style before computed somehow\n // fixes an issue with getting wrong values\n // on detached elements\n style = elem.style;\n computed = computed || getStyles(elem); // getPropertyValue is needed for:\n // .css('filter') (IE 9 only, #12537)\n // .css('--customProperty) (#3144)\n\n if (computed) {\n ret = computed.getPropertyValue(name) || computed[name];\n\n if (ret === \"\" && !isAttached(elem)) {\n ret = jQuery.style(elem, name);\n } // A tribute to the \"awesome hack by Dean Edwards\"\n // Android Browser returns percentage for some values,\n // but width seems to be reliably pixels.\n // This is against the CSSOM draft spec:\n // https://drafts.csswg.org/cssom/#resolved-values\n\n\n if (!support.pixelBoxStyles() && rnumnonpx.test(ret) && rboxStyle.test(name)) {\n // Remember the original values\n width = style.width;\n minWidth = style.minWidth;\n maxWidth = style.maxWidth; // Put in the new values to get a computed value out\n\n style.minWidth = style.maxWidth = style.width = ret;\n ret = computed.width; // Revert the changed values\n\n style.width = width;\n style.minWidth = minWidth;\n style.maxWidth = maxWidth;\n }\n }\n\n return ret !== undefined ? // Support: IE <=9 - 11 only\n // IE returns zIndex value as an integer.\n ret + \"\" : ret;\n }\n\n function addGetHookIf(conditionFn, hookFn) {\n // Define the hook, we'll check on the first run if it's really needed.\n return {\n get: function get() {\n if (conditionFn()) {\n // Hook not needed (or it's not possible to use it due\n // to missing dependency), remove it.\n delete this.get;\n return;\n } // Hook needed; redefine it so that the support test is not executed again.\n\n\n return (this.get = hookFn).apply(this, arguments);\n }\n };\n }\n\n var cssPrefixes = [\"Webkit\", \"Moz\", \"ms\"],\n emptyStyle = document.createElement(\"div\").style,\n vendorProps = {}; // Return a vendor-prefixed property or undefined\n\n function vendorPropName(name) {\n // Check for vendor prefixed names\n var capName = name[0].toUpperCase() + name.slice(1),\n i = cssPrefixes.length;\n\n while (i--) {\n name = cssPrefixes[i] + capName;\n\n if (name in emptyStyle) {\n return name;\n }\n }\n } // Return a potentially-mapped jQuery.cssProps or vendor prefixed property\n\n\n function finalPropName(name) {\n var _final = jQuery.cssProps[name] || vendorProps[name];\n\n if (_final) {\n return _final;\n }\n\n if (name in emptyStyle) {\n return name;\n }\n\n return vendorProps[name] = vendorPropName(name) || name;\n }\n\n var // Swappable if display is none or starts with table\n // except \"table\", \"table-cell\", or \"table-caption\"\n // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n rdisplayswap = /^(none|table(?!-c[ea]).+)/,\n rcustomProp = /^--/,\n cssShow = {\n position: \"absolute\",\n visibility: \"hidden\",\n display: \"block\"\n },\n cssNormalTransform = {\n letterSpacing: \"0\",\n fontWeight: \"400\"\n };\n\n function setPositiveNumber(_elem, value, subtract) {\n // Any relative (+/-) values have already been\n // normalized at this point\n var matches = rcssNum.exec(value);\n return matches ? // Guard against undefined \"subtract\", e.g., when used as in cssHooks\n Math.max(0, matches[2] - (subtract || 0)) + (matches[3] || \"px\") : value;\n }\n\n function boxModelAdjustment(elem, dimension, box, isBorderBox, styles, computedVal) {\n var i = dimension === \"width\" ? 1 : 0,\n extra = 0,\n delta = 0; // Adjustment may not be necessary\n\n if (box === (isBorderBox ? \"border\" : \"content\")) {\n return 0;\n }\n\n for (; i < 4; i += 2) {\n // Both box models exclude margin\n if (box === \"margin\") {\n delta += jQuery.css(elem, box + cssExpand[i], true, styles);\n } // If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\n\n if (!isBorderBox) {\n // Add padding\n delta += jQuery.css(elem, \"padding\" + cssExpand[i], true, styles); // For \"border\" or \"margin\", add border\n\n if (box !== \"padding\") {\n delta += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles); // But still keep track of it otherwise\n } else {\n extra += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n } // If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n // \"padding\" or \"margin\"\n\n } else {\n // For \"content\", subtract padding\n if (box === \"content\") {\n delta -= jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n } // For \"content\" or \"padding\", subtract border\n\n\n if (box !== \"margin\") {\n delta -= jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n }\n }\n } // Account for positive content-box scroll gutter when requested by providing computedVal\n\n\n if (!isBorderBox && computedVal >= 0) {\n // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n // Assuming integer scroll gutter, subtract the rest and round down\n delta += Math.max(0, Math.ceil(elem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] - computedVal - delta - extra - 0.5 // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n // Use an explicit zero to avoid NaN (gh-3964)\n )) || 0;\n }\n\n return delta;\n }\n\n function getWidthOrHeight(elem, dimension, extra) {\n // Start with computed style\n var styles = getStyles(elem),\n // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n // Fake content-box until we know it's needed to know the true value.\n boxSizingNeeded = !support.boxSizingReliable() || extra,\n isBorderBox = boxSizingNeeded && jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n valueIsBorderBox = isBorderBox,\n val = curCSS(elem, dimension, styles),\n offsetProp = \"offset\" + dimension[0].toUpperCase() + dimension.slice(1); // Support: Firefox <=54\n // Return a confounding non-pixel value or feign ignorance, as appropriate.\n\n if (rnumnonpx.test(val)) {\n if (!extra) {\n return val;\n }\n\n val = \"auto\";\n } // Support: IE 9 - 11 only\n // Use offsetWidth/offsetHeight for when box sizing is unreliable.\n // In those cases, the computed value can be trusted to be border-box.\n\n\n if ((!support.boxSizingReliable() && isBorderBox || // Support: IE 10 - 11+, Edge 15 - 18+\n // IE/Edge misreport `getComputedStyle` of table rows with width/height\n // set in CSS while `offset*` properties report correct values.\n // Interestingly, in some cases IE 9 doesn't suffer from this issue.\n !support.reliableTrDimensions() && nodeName(elem, \"tr\") || // Fall back to offsetWidth/offsetHeight when value is \"auto\"\n // This happens for inline elements with no explicit setting (gh-3571)\n val === \"auto\" || // Support: Android <=4.1 - 4.3 only\n // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n !parseFloat(val) && jQuery.css(elem, \"display\", false, styles) === \"inline\") && // Make sure the element is visible & connected\n elem.getClientRects().length) {\n isBorderBox = jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\"; // Where available, offsetWidth/offsetHeight approximate border box dimensions.\n // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n // retrieved value as a content box dimension.\n\n valueIsBorderBox = offsetProp in elem;\n\n if (valueIsBorderBox) {\n val = elem[offsetProp];\n }\n } // Normalize \"\" and auto\n\n\n val = parseFloat(val) || 0; // Adjust for the element's box model\n\n return val + boxModelAdjustment(elem, dimension, extra || (isBorderBox ? \"border\" : \"content\"), valueIsBorderBox, styles, // Provide the current computed size to request scroll gutter calculation (gh-3589)\n val) + \"px\";\n }\n\n jQuery.extend({\n // Add in style property hooks for overriding the default\n // behavior of getting and setting a style property\n cssHooks: {\n opacity: {\n get: function get(elem, computed) {\n if (computed) {\n // We should always get a number back from opacity\n var ret = curCSS(elem, \"opacity\");\n return ret === \"\" ? \"1\" : ret;\n }\n }\n }\n },\n // Don't automatically add \"px\" to these possibly-unitless properties\n cssNumber: {\n \"animationIterationCount\": true,\n \"columnCount\": true,\n \"fillOpacity\": true,\n \"flexGrow\": true,\n \"flexShrink\": true,\n \"fontWeight\": true,\n \"gridArea\": true,\n \"gridColumn\": true,\n \"gridColumnEnd\": true,\n \"gridColumnStart\": true,\n \"gridRow\": true,\n \"gridRowEnd\": true,\n \"gridRowStart\": true,\n \"lineHeight\": true,\n \"opacity\": true,\n \"order\": true,\n \"orphans\": true,\n \"widows\": true,\n \"zIndex\": true,\n \"zoom\": true\n },\n // Add in properties whose names you wish to fix before\n // setting or getting the value\n cssProps: {},\n // Get and set the style property on a DOM Node\n style: function style(elem, name, value, extra) {\n // Don't set styles on text and comment nodes\n if (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) {\n return;\n } // Make sure that we're working with the right name\n\n\n var ret,\n type,\n hooks,\n origName = camelCase(name),\n isCustomProp = rcustomProp.test(name),\n style = elem.style; // Make sure that we're working with the right name. We don't\n // want to query the value if it is a CSS custom property\n // since they are user-defined.\n\n if (!isCustomProp) {\n name = finalPropName(origName);\n } // Gets hook for the prefixed version, then unprefixed version\n\n\n hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName]; // Check if we're setting a value\n\n if (value !== undefined) {\n type = _typeof(value); // Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\n if (type === \"string\" && (ret = rcssNum.exec(value)) && ret[1]) {\n value = adjustCSS(elem, name, ret); // Fixes bug #9237\n\n type = \"number\";\n } // Make sure that null and NaN values aren't set (#7116)\n\n\n if (value == null || value !== value) {\n return;\n } // If a number was passed in, add the unit (except for certain CSS properties)\n // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n // \"px\" to a few hardcoded values.\n\n\n if (type === \"number\" && !isCustomProp) {\n value += ret && ret[3] || (jQuery.cssNumber[origName] ? \"\" : \"px\");\n } // background-* props affect original clone's values\n\n\n if (!support.clearCloneStyle && value === \"\" && name.indexOf(\"background\") === 0) {\n style[name] = \"inherit\";\n } // If a hook was provided, use that value, otherwise just set the specified value\n\n\n if (!hooks || !(\"set\" in hooks) || (value = hooks.set(elem, value, extra)) !== undefined) {\n if (isCustomProp) {\n style.setProperty(name, value);\n } else {\n style[name] = value;\n }\n }\n } else {\n // If a hook was provided get the non-computed value from there\n if (hooks && \"get\" in hooks && (ret = hooks.get(elem, false, extra)) !== undefined) {\n return ret;\n } // Otherwise just get the value from the style object\n\n\n return style[name];\n }\n },\n css: function css(elem, name, extra, styles) {\n var val,\n num,\n hooks,\n origName = camelCase(name),\n isCustomProp = rcustomProp.test(name); // Make sure that we're working with the right name. We don't\n // want to modify the value if it is a CSS custom property\n // since they are user-defined.\n\n if (!isCustomProp) {\n name = finalPropName(origName);\n } // Try prefixed name followed by the unprefixed name\n\n\n hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName]; // If a hook was provided get the computed value from there\n\n if (hooks && \"get\" in hooks) {\n val = hooks.get(elem, true, extra);\n } // Otherwise, if a way to get the computed value exists, use that\n\n\n if (val === undefined) {\n val = curCSS(elem, name, styles);\n } // Convert \"normal\" to computed value\n\n\n if (val === \"normal\" && name in cssNormalTransform) {\n val = cssNormalTransform[name];\n } // Make numeric if forced or a qualifier was provided and val looks numeric\n\n\n if (extra === \"\" || extra) {\n num = parseFloat(val);\n return extra === true || isFinite(num) ? num || 0 : val;\n }\n\n return val;\n }\n });\n jQuery.each([\"height\", \"width\"], function (_i, dimension) {\n jQuery.cssHooks[dimension] = {\n get: function get(elem, computed, extra) {\n if (computed) {\n // Certain elements can have dimension info if we invisibly show them\n // but it must have a current display style that would benefit\n return rdisplayswap.test(jQuery.css(elem, \"display\")) && ( // Support: Safari 8+\n // Table columns in Safari have non-zero offsetWidth & zero\n // getBoundingClientRect().width unless display is changed.\n // Support: IE <=11 only\n // Running getBoundingClientRect on a disconnected node\n // in IE throws an error.\n !elem.getClientRects().length || !elem.getBoundingClientRect().width) ? swap(elem, cssShow, function () {\n return getWidthOrHeight(elem, dimension, extra);\n }) : getWidthOrHeight(elem, dimension, extra);\n }\n },\n set: function set(elem, value, extra) {\n var matches,\n styles = getStyles(elem),\n // Only read styles.position if the test has a chance to fail\n // to avoid forcing a reflow.\n scrollboxSizeBuggy = !support.scrollboxSize() && styles.position === \"absolute\",\n // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n boxSizingNeeded = scrollboxSizeBuggy || extra,\n isBorderBox = boxSizingNeeded && jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n subtract = extra ? boxModelAdjustment(elem, dimension, extra, isBorderBox, styles) : 0; // Account for unreliable border-box dimensions by comparing offset* to computed and\n // faking a content-box to get border and padding (gh-3699)\n\n if (isBorderBox && scrollboxSizeBuggy) {\n subtract -= Math.ceil(elem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] - parseFloat(styles[dimension]) - boxModelAdjustment(elem, dimension, \"border\", false, styles) - 0.5);\n } // Convert to pixels if value adjustment is needed\n\n\n if (subtract && (matches = rcssNum.exec(value)) && (matches[3] || \"px\") !== \"px\") {\n elem.style[dimension] = value;\n value = jQuery.css(elem, dimension);\n }\n\n return setPositiveNumber(elem, value, subtract);\n }\n };\n });\n jQuery.cssHooks.marginLeft = addGetHookIf(support.reliableMarginLeft, function (elem, computed) {\n if (computed) {\n return (parseFloat(curCSS(elem, \"marginLeft\")) || elem.getBoundingClientRect().left - swap(elem, {\n marginLeft: 0\n }, function () {\n return elem.getBoundingClientRect().left;\n })) + \"px\";\n }\n }); // These hooks are used by animate to expand properties\n\n jQuery.each({\n margin: \"\",\n padding: \"\",\n border: \"Width\"\n }, function (prefix, suffix) {\n jQuery.cssHooks[prefix + suffix] = {\n expand: function expand(value) {\n var i = 0,\n expanded = {},\n // Assumes a single number if not a string\n parts = typeof value === \"string\" ? value.split(\" \") : [value];\n\n for (; i < 4; i++) {\n expanded[prefix + cssExpand[i] + suffix] = parts[i] || parts[i - 2] || parts[0];\n }\n\n return expanded;\n }\n };\n\n if (prefix !== \"margin\") {\n jQuery.cssHooks[prefix + suffix].set = setPositiveNumber;\n }\n });\n jQuery.fn.extend({\n css: function css(name, value) {\n return access(this, function (elem, name, value) {\n var styles,\n len,\n map = {},\n i = 0;\n\n if (Array.isArray(name)) {\n styles = getStyles(elem);\n len = name.length;\n\n for (; i < len; i++) {\n map[name[i]] = jQuery.css(elem, name[i], false, styles);\n }\n\n return map;\n }\n\n return value !== undefined ? jQuery.style(elem, name, value) : jQuery.css(elem, name);\n }, name, value, arguments.length > 1);\n }\n });\n\n function Tween(elem, options, prop, end, easing) {\n return new Tween.prototype.init(elem, options, prop, end, easing);\n }\n\n jQuery.Tween = Tween;\n Tween.prototype = {\n constructor: Tween,\n init: function init(elem, options, prop, end, easing, unit) {\n this.elem = elem;\n this.prop = prop;\n this.easing = easing || jQuery.easing._default;\n this.options = options;\n this.start = this.now = this.cur();\n this.end = end;\n this.unit = unit || (jQuery.cssNumber[prop] ? \"\" : \"px\");\n },\n cur: function cur() {\n var hooks = Tween.propHooks[this.prop];\n return hooks && hooks.get ? hooks.get(this) : Tween.propHooks._default.get(this);\n },\n run: function run(percent) {\n var eased,\n hooks = Tween.propHooks[this.prop];\n\n if (this.options.duration) {\n this.pos = eased = jQuery.easing[this.easing](percent, this.options.duration * percent, 0, 1, this.options.duration);\n } else {\n this.pos = eased = percent;\n }\n\n this.now = (this.end - this.start) * eased + this.start;\n\n if (this.options.step) {\n this.options.step.call(this.elem, this.now, this);\n }\n\n if (hooks && hooks.set) {\n hooks.set(this);\n } else {\n Tween.propHooks._default.set(this);\n }\n\n return this;\n }\n };\n Tween.prototype.init.prototype = Tween.prototype;\n Tween.propHooks = {\n _default: {\n get: function get(tween) {\n var result; // Use a property on the element directly when it is not a DOM element,\n // or when there is no matching style property that exists.\n\n if (tween.elem.nodeType !== 1 || tween.elem[tween.prop] != null && tween.elem.style[tween.prop] == null) {\n return tween.elem[tween.prop];\n } // Passing an empty string as a 3rd parameter to .css will automatically\n // attempt a parseFloat and fallback to a string if the parse fails.\n // Simple values such as \"10px\" are parsed to Float;\n // complex values such as \"rotate(1rad)\" are returned as-is.\n\n\n result = jQuery.css(tween.elem, tween.prop, \"\"); // Empty strings, null, undefined and \"auto\" are converted to 0.\n\n return !result || result === \"auto\" ? 0 : result;\n },\n set: function set(tween) {\n // Use step hook for back compat.\n // Use cssHook if its there.\n // Use .style if available and use plain properties where available.\n if (jQuery.fx.step[tween.prop]) {\n jQuery.fx.step[tween.prop](tween);\n } else if (tween.elem.nodeType === 1 && (jQuery.cssHooks[tween.prop] || tween.elem.style[finalPropName(tween.prop)] != null)) {\n jQuery.style(tween.elem, tween.prop, tween.now + tween.unit);\n } else {\n tween.elem[tween.prop] = tween.now;\n }\n }\n }\n }; // Support: IE <=9 only\n // Panic based approach to setting things on disconnected nodes\n\n Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n set: function set(tween) {\n if (tween.elem.nodeType && tween.elem.parentNode) {\n tween.elem[tween.prop] = tween.now;\n }\n }\n };\n jQuery.easing = {\n linear: function linear(p) {\n return p;\n },\n swing: function swing(p) {\n return 0.5 - Math.cos(p * Math.PI) / 2;\n },\n _default: \"swing\"\n };\n jQuery.fx = Tween.prototype.init; // Back compat <1.8 extension point\n\n jQuery.fx.step = {};\n var fxNow,\n inProgress,\n rfxtypes = /^(?:toggle|show|hide)$/,\n rrun = /queueHooks$/;\n\n function schedule() {\n if (inProgress) {\n if (document.hidden === false && window.requestAnimationFrame) {\n window.requestAnimationFrame(schedule);\n } else {\n window.setTimeout(schedule, jQuery.fx.interval);\n }\n\n jQuery.fx.tick();\n }\n } // Animations created synchronously will run synchronously\n\n\n function createFxNow() {\n window.setTimeout(function () {\n fxNow = undefined;\n });\n return fxNow = Date.now();\n } // Generate parameters to create a standard animation\n\n\n function genFx(type, includeWidth) {\n var which,\n i = 0,\n attrs = {\n height: type\n }; // If we include width, step value is 1 to do all cssExpand values,\n // otherwise step value is 2 to skip over Left and Right\n\n includeWidth = includeWidth ? 1 : 0;\n\n for (; i < 4; i += 2 - includeWidth) {\n which = cssExpand[i];\n attrs[\"margin\" + which] = attrs[\"padding\" + which] = type;\n }\n\n if (includeWidth) {\n attrs.opacity = attrs.width = type;\n }\n\n return attrs;\n }\n\n function createTween(value, prop, animation) {\n var tween,\n collection = (Animation.tweeners[prop] || []).concat(Animation.tweeners[\"*\"]),\n index = 0,\n length = collection.length;\n\n for (; index < length; index++) {\n if (tween = collection[index].call(animation, prop, value)) {\n // We're done with this property\n return tween;\n }\n }\n }\n\n function defaultPrefilter(elem, props, opts) {\n var prop,\n value,\n toggle,\n hooks,\n oldfire,\n propTween,\n restoreDisplay,\n display,\n isBox = \"width\" in props || \"height\" in props,\n anim = this,\n orig = {},\n style = elem.style,\n hidden = elem.nodeType && isHiddenWithinTree(elem),\n dataShow = dataPriv.get(elem, \"fxshow\"); // Queue-skipping animations hijack the fx hooks\n\n if (!opts.queue) {\n hooks = jQuery._queueHooks(elem, \"fx\");\n\n if (hooks.unqueued == null) {\n hooks.unqueued = 0;\n oldfire = hooks.empty.fire;\n\n hooks.empty.fire = function () {\n if (!hooks.unqueued) {\n oldfire();\n }\n };\n }\n\n hooks.unqueued++;\n anim.always(function () {\n // Ensure the complete handler is called before this completes\n anim.always(function () {\n hooks.unqueued--;\n\n if (!jQuery.queue(elem, \"fx\").length) {\n hooks.empty.fire();\n }\n });\n });\n } // Detect show/hide animations\n\n\n for (prop in props) {\n value = props[prop];\n\n if (rfxtypes.test(value)) {\n delete props[prop];\n toggle = toggle || value === \"toggle\";\n\n if (value === (hidden ? \"hide\" : \"show\")) {\n // Pretend to be hidden if this is a \"show\" and\n // there is still data from a stopped show/hide\n if (value === \"show\" && dataShow && dataShow[prop] !== undefined) {\n hidden = true; // Ignore all other no-op show/hide data\n } else {\n continue;\n }\n }\n\n orig[prop] = dataShow && dataShow[prop] || jQuery.style(elem, prop);\n }\n } // Bail out if this is a no-op like .hide().hide()\n\n\n propTween = !jQuery.isEmptyObject(props);\n\n if (!propTween && jQuery.isEmptyObject(orig)) {\n return;\n } // Restrict \"overflow\" and \"display\" styles during box animations\n\n\n if (isBox && elem.nodeType === 1) {\n // Support: IE <=9 - 11, Edge 12 - 15\n // Record all 3 overflow attributes because IE does not infer the shorthand\n // from identically-valued overflowX and overflowY and Edge just mirrors\n // the overflowX value there.\n opts.overflow = [style.overflow, style.overflowX, style.overflowY]; // Identify a display type, preferring old show/hide data over the CSS cascade\n\n restoreDisplay = dataShow && dataShow.display;\n\n if (restoreDisplay == null) {\n restoreDisplay = dataPriv.get(elem, \"display\");\n }\n\n display = jQuery.css(elem, \"display\");\n\n if (display === \"none\") {\n if (restoreDisplay) {\n display = restoreDisplay;\n } else {\n // Get nonempty value(s) by temporarily forcing visibility\n showHide([elem], true);\n restoreDisplay = elem.style.display || restoreDisplay;\n display = jQuery.css(elem, \"display\");\n showHide([elem]);\n }\n } // Animate inline elements as inline-block\n\n\n if (display === \"inline\" || display === \"inline-block\" && restoreDisplay != null) {\n if (jQuery.css(elem, \"float\") === \"none\") {\n // Restore the original display value at the end of pure show/hide animations\n if (!propTween) {\n anim.done(function () {\n style.display = restoreDisplay;\n });\n\n if (restoreDisplay == null) {\n display = style.display;\n restoreDisplay = display === \"none\" ? \"\" : display;\n }\n }\n\n style.display = \"inline-block\";\n }\n }\n }\n\n if (opts.overflow) {\n style.overflow = \"hidden\";\n anim.always(function () {\n style.overflow = opts.overflow[0];\n style.overflowX = opts.overflow[1];\n style.overflowY = opts.overflow[2];\n });\n } // Implement show/hide animations\n\n\n propTween = false;\n\n for (prop in orig) {\n // General show/hide setup for this element animation\n if (!propTween) {\n if (dataShow) {\n if (\"hidden\" in dataShow) {\n hidden = dataShow.hidden;\n }\n } else {\n dataShow = dataPriv.access(elem, \"fxshow\", {\n display: restoreDisplay\n });\n } // Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\n\n if (toggle) {\n dataShow.hidden = !hidden;\n } // Show elements before animating them\n\n\n if (hidden) {\n showHide([elem], true);\n }\n /* eslint-disable no-loop-func */\n\n\n anim.done(function () {\n /* eslint-enable no-loop-func */\n // The final step of a \"hide\" animation is actually hiding the element\n if (!hidden) {\n showHide([elem]);\n }\n\n dataPriv.remove(elem, \"fxshow\");\n\n for (prop in orig) {\n jQuery.style(elem, prop, orig[prop]);\n }\n });\n } // Per-property setup\n\n\n propTween = createTween(hidden ? dataShow[prop] : 0, prop, anim);\n\n if (!(prop in dataShow)) {\n dataShow[prop] = propTween.start;\n\n if (hidden) {\n propTween.end = propTween.start;\n propTween.start = 0;\n }\n }\n }\n }\n\n function propFilter(props, specialEasing) {\n var index, name, easing, value, hooks; // camelCase, specialEasing and expand cssHook pass\n\n for (index in props) {\n name = camelCase(index);\n easing = specialEasing[name];\n value = props[index];\n\n if (Array.isArray(value)) {\n easing = value[1];\n value = props[index] = value[0];\n }\n\n if (index !== name) {\n props[name] = value;\n delete props[index];\n }\n\n hooks = jQuery.cssHooks[name];\n\n if (hooks && \"expand\" in hooks) {\n value = hooks.expand(value);\n delete props[name]; // Not quite $.extend, this won't overwrite existing keys.\n // Reusing 'index' because we have the correct \"name\"\n\n for (index in value) {\n if (!(index in props)) {\n props[index] = value[index];\n specialEasing[index] = easing;\n }\n }\n } else {\n specialEasing[name] = easing;\n }\n }\n }\n\n function Animation(elem, properties, options) {\n var result,\n stopped,\n index = 0,\n length = Animation.prefilters.length,\n deferred = jQuery.Deferred().always(function () {\n // Don't match elem in the :animated selector\n delete tick.elem;\n }),\n tick = function tick() {\n if (stopped) {\n return false;\n }\n\n var currentTime = fxNow || createFxNow(),\n remaining = Math.max(0, animation.startTime + animation.duration - currentTime),\n // Support: Android 2.3 only\n // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n temp = remaining / animation.duration || 0,\n percent = 1 - temp,\n index = 0,\n length = animation.tweens.length;\n\n for (; index < length; index++) {\n animation.tweens[index].run(percent);\n }\n\n deferred.notifyWith(elem, [animation, percent, remaining]); // If there's more to do, yield\n\n if (percent < 1 && length) {\n return remaining;\n } // If this was an empty animation, synthesize a final progress notification\n\n\n if (!length) {\n deferred.notifyWith(elem, [animation, 1, 0]);\n } // Resolve the animation and report its conclusion\n\n\n deferred.resolveWith(elem, [animation]);\n return false;\n },\n animation = deferred.promise({\n elem: elem,\n props: jQuery.extend({}, properties),\n opts: jQuery.extend(true, {\n specialEasing: {},\n easing: jQuery.easing._default\n }, options),\n originalProperties: properties,\n originalOptions: options,\n startTime: fxNow || createFxNow(),\n duration: options.duration,\n tweens: [],\n createTween: function createTween(prop, end) {\n var tween = jQuery.Tween(elem, animation.opts, prop, end, animation.opts.specialEasing[prop] || animation.opts.easing);\n animation.tweens.push(tween);\n return tween;\n },\n stop: function stop(gotoEnd) {\n var index = 0,\n // If we are going to the end, we want to run all the tweens\n // otherwise we skip this part\n length = gotoEnd ? animation.tweens.length : 0;\n\n if (stopped) {\n return this;\n }\n\n stopped = true;\n\n for (; index < length; index++) {\n animation.tweens[index].run(1);\n } // Resolve when we played the last frame; otherwise, reject\n\n\n if (gotoEnd) {\n deferred.notifyWith(elem, [animation, 1, 0]);\n deferred.resolveWith(elem, [animation, gotoEnd]);\n } else {\n deferred.rejectWith(elem, [animation, gotoEnd]);\n }\n\n return this;\n }\n }),\n props = animation.props;\n\n propFilter(props, animation.opts.specialEasing);\n\n for (; index < length; index++) {\n result = Animation.prefilters[index].call(animation, elem, props, animation.opts);\n\n if (result) {\n if (isFunction(result.stop)) {\n jQuery._queueHooks(animation.elem, animation.opts.queue).stop = result.stop.bind(result);\n }\n\n return result;\n }\n }\n\n jQuery.map(props, createTween, animation);\n\n if (isFunction(animation.opts.start)) {\n animation.opts.start.call(elem, animation);\n } // Attach callbacks from options\n\n\n animation.progress(animation.opts.progress).done(animation.opts.done, animation.opts.complete).fail(animation.opts.fail).always(animation.opts.always);\n jQuery.fx.timer(jQuery.extend(tick, {\n elem: elem,\n anim: animation,\n queue: animation.opts.queue\n }));\n return animation;\n }\n\n jQuery.Animation = jQuery.extend(Animation, {\n tweeners: {\n \"*\": [function (prop, value) {\n var tween = this.createTween(prop, value);\n adjustCSS(tween.elem, prop, rcssNum.exec(value), tween);\n return tween;\n }]\n },\n tweener: function tweener(props, callback) {\n if (isFunction(props)) {\n callback = props;\n props = [\"*\"];\n } else {\n props = props.match(rnothtmlwhite);\n }\n\n var prop,\n index = 0,\n length = props.length;\n\n for (; index < length; index++) {\n prop = props[index];\n Animation.tweeners[prop] = Animation.tweeners[prop] || [];\n Animation.tweeners[prop].unshift(callback);\n }\n },\n prefilters: [defaultPrefilter],\n prefilter: function prefilter(callback, prepend) {\n if (prepend) {\n Animation.prefilters.unshift(callback);\n } else {\n Animation.prefilters.push(callback);\n }\n }\n });\n\n jQuery.speed = function (speed, easing, fn) {\n var opt = speed && _typeof(speed) === \"object\" ? jQuery.extend({}, speed) : {\n complete: fn || !fn && easing || isFunction(speed) && speed,\n duration: speed,\n easing: fn && easing || easing && !isFunction(easing) && easing\n }; // Go to the end state if fx are off\n\n if (jQuery.fx.off) {\n opt.duration = 0;\n } else {\n if (typeof opt.duration !== \"number\") {\n if (opt.duration in jQuery.fx.speeds) {\n opt.duration = jQuery.fx.speeds[opt.duration];\n } else {\n opt.duration = jQuery.fx.speeds._default;\n }\n }\n } // Normalize opt.queue - true/undefined/null -> \"fx\"\n\n\n if (opt.queue == null || opt.queue === true) {\n opt.queue = \"fx\";\n } // Queueing\n\n\n opt.old = opt.complete;\n\n opt.complete = function () {\n if (isFunction(opt.old)) {\n opt.old.call(this);\n }\n\n if (opt.queue) {\n jQuery.dequeue(this, opt.queue);\n }\n };\n\n return opt;\n };\n\n jQuery.fn.extend({\n fadeTo: function fadeTo(speed, to, easing, callback) {\n // Show any hidden elements after setting opacity to 0\n return this.filter(isHiddenWithinTree).css(\"opacity\", 0).show() // Animate to the value specified\n .end().animate({\n opacity: to\n }, speed, easing, callback);\n },\n animate: function animate(prop, speed, easing, callback) {\n var empty = jQuery.isEmptyObject(prop),\n optall = jQuery.speed(speed, easing, callback),\n doAnimation = function doAnimation() {\n // Operate on a copy of prop so per-property easing won't be lost\n var anim = Animation(this, jQuery.extend({}, prop), optall); // Empty animations, or finishing resolves immediately\n\n if (empty || dataPriv.get(this, \"finish\")) {\n anim.stop(true);\n }\n };\n\n doAnimation.finish = doAnimation;\n return empty || optall.queue === false ? this.each(doAnimation) : this.queue(optall.queue, doAnimation);\n },\n stop: function stop(type, clearQueue, gotoEnd) {\n var stopQueue = function stopQueue(hooks) {\n var stop = hooks.stop;\n delete hooks.stop;\n stop(gotoEnd);\n };\n\n if (typeof type !== \"string\") {\n gotoEnd = clearQueue;\n clearQueue = type;\n type = undefined;\n }\n\n if (clearQueue) {\n this.queue(type || \"fx\", []);\n }\n\n return this.each(function () {\n var dequeue = true,\n index = type != null && type + \"queueHooks\",\n timers = jQuery.timers,\n data = dataPriv.get(this);\n\n if (index) {\n if (data[index] && data[index].stop) {\n stopQueue(data[index]);\n }\n } else {\n for (index in data) {\n if (data[index] && data[index].stop && rrun.test(index)) {\n stopQueue(data[index]);\n }\n }\n }\n\n for (index = timers.length; index--;) {\n if (timers[index].elem === this && (type == null || timers[index].queue === type)) {\n timers[index].anim.stop(gotoEnd);\n dequeue = false;\n timers.splice(index, 1);\n }\n } // Start the next in the queue if the last step wasn't forced.\n // Timers currently will call their complete callbacks, which\n // will dequeue but only if they were gotoEnd.\n\n\n if (dequeue || !gotoEnd) {\n jQuery.dequeue(this, type);\n }\n });\n },\n finish: function finish(type) {\n if (type !== false) {\n type = type || \"fx\";\n }\n\n return this.each(function () {\n var index,\n data = dataPriv.get(this),\n queue = data[type + \"queue\"],\n hooks = data[type + \"queueHooks\"],\n timers = jQuery.timers,\n length = queue ? queue.length : 0; // Enable finishing flag on private data\n\n data.finish = true; // Empty the queue first\n\n jQuery.queue(this, type, []);\n\n if (hooks && hooks.stop) {\n hooks.stop.call(this, true);\n } // Look for any active animations, and finish them\n\n\n for (index = timers.length; index--;) {\n if (timers[index].elem === this && timers[index].queue === type) {\n timers[index].anim.stop(true);\n timers.splice(index, 1);\n }\n } // Look for any animations in the old queue and finish them\n\n\n for (index = 0; index < length; index++) {\n if (queue[index] && queue[index].finish) {\n queue[index].finish.call(this);\n }\n } // Turn off finishing flag\n\n\n delete data.finish;\n });\n }\n });\n jQuery.each([\"toggle\", \"show\", \"hide\"], function (_i, name) {\n var cssFn = jQuery.fn[name];\n\n jQuery.fn[name] = function (speed, easing, callback) {\n return speed == null || typeof speed === \"boolean\" ? cssFn.apply(this, arguments) : this.animate(genFx(name, true), speed, easing, callback);\n };\n }); // Generate shortcuts for custom animations\n\n jQuery.each({\n slideDown: genFx(\"show\"),\n slideUp: genFx(\"hide\"),\n slideToggle: genFx(\"toggle\"),\n fadeIn: {\n opacity: \"show\"\n },\n fadeOut: {\n opacity: \"hide\"\n },\n fadeToggle: {\n opacity: \"toggle\"\n }\n }, function (name, props) {\n jQuery.fn[name] = function (speed, easing, callback) {\n return this.animate(props, speed, easing, callback);\n };\n });\n jQuery.timers = [];\n\n jQuery.fx.tick = function () {\n var timer,\n i = 0,\n timers = jQuery.timers;\n fxNow = Date.now();\n\n for (; i < timers.length; i++) {\n timer = timers[i]; // Run the timer and safely remove it when done (allowing for external removal)\n\n if (!timer() && timers[i] === timer) {\n timers.splice(i--, 1);\n }\n }\n\n if (!timers.length) {\n jQuery.fx.stop();\n }\n\n fxNow = undefined;\n };\n\n jQuery.fx.timer = function (timer) {\n jQuery.timers.push(timer);\n jQuery.fx.start();\n };\n\n jQuery.fx.interval = 13;\n\n jQuery.fx.start = function () {\n if (inProgress) {\n return;\n }\n\n inProgress = true;\n schedule();\n };\n\n jQuery.fx.stop = function () {\n inProgress = null;\n };\n\n jQuery.fx.speeds = {\n slow: 600,\n fast: 200,\n // Default speed\n _default: 400\n }; // Based off of the plugin by Clint Helfers, with permission.\n // https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\n\n jQuery.fn.delay = function (time, type) {\n time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;\n type = type || \"fx\";\n return this.queue(type, function (next, hooks) {\n var timeout = window.setTimeout(next, time);\n\n hooks.stop = function () {\n window.clearTimeout(timeout);\n };\n });\n };\n\n (function () {\n var input = document.createElement(\"input\"),\n select = document.createElement(\"select\"),\n opt = select.appendChild(document.createElement(\"option\"));\n input.type = \"checkbox\"; // Support: Android <=4.3 only\n // Default value for a checkbox should be \"on\"\n\n support.checkOn = input.value !== \"\"; // Support: IE <=11 only\n // Must access selectedIndex to make default options select\n\n support.optSelected = opt.selected; // Support: IE <=11 only\n // An input loses its value after becoming a radio\n\n input = document.createElement(\"input\");\n input.value = \"t\";\n input.type = \"radio\";\n support.radioValue = input.value === \"t\";\n })();\n\n var boolHook,\n attrHandle = jQuery.expr.attrHandle;\n jQuery.fn.extend({\n attr: function attr(name, value) {\n return access(this, jQuery.attr, name, value, arguments.length > 1);\n },\n removeAttr: function removeAttr(name) {\n return this.each(function () {\n jQuery.removeAttr(this, name);\n });\n }\n });\n jQuery.extend({\n attr: function attr(elem, name, value) {\n var ret,\n hooks,\n nType = elem.nodeType; // Don't get/set attributes on text, comment and attribute nodes\n\n if (nType === 3 || nType === 8 || nType === 2) {\n return;\n } // Fallback to prop when attributes are not supported\n\n\n if (typeof elem.getAttribute === \"undefined\") {\n return jQuery.prop(elem, name, value);\n } // Attribute hooks are determined by the lowercase version\n // Grab necessary hook if one is defined\n\n\n if (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n hooks = jQuery.attrHooks[name.toLowerCase()] || (jQuery.expr.match.bool.test(name) ? boolHook : undefined);\n }\n\n if (value !== undefined) {\n if (value === null) {\n jQuery.removeAttr(elem, name);\n return;\n }\n\n if (hooks && \"set\" in hooks && (ret = hooks.set(elem, value, name)) !== undefined) {\n return ret;\n }\n\n elem.setAttribute(name, value + \"\");\n return value;\n }\n\n if (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n return ret;\n }\n\n ret = jQuery.find.attr(elem, name); // Non-existent attributes return null, we normalize to undefined\n\n return ret == null ? undefined : ret;\n },\n attrHooks: {\n type: {\n set: function set(elem, value) {\n if (!support.radioValue && value === \"radio\" && nodeName(elem, \"input\")) {\n var val = elem.value;\n elem.setAttribute(\"type\", value);\n\n if (val) {\n elem.value = val;\n }\n\n return value;\n }\n }\n }\n },\n removeAttr: function removeAttr(elem, value) {\n var name,\n i = 0,\n // Attribute names can contain non-HTML whitespace characters\n // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n attrNames = value && value.match(rnothtmlwhite);\n\n if (attrNames && elem.nodeType === 1) {\n while (name = attrNames[i++]) {\n elem.removeAttribute(name);\n }\n }\n }\n }); // Hooks for boolean attributes\n\n boolHook = {\n set: function set(elem, value, name) {\n if (value === false) {\n // Remove boolean attributes when set to false\n jQuery.removeAttr(elem, name);\n } else {\n elem.setAttribute(name, name);\n }\n\n return name;\n }\n };\n jQuery.each(jQuery.expr.match.bool.source.match(/\\w+/g), function (_i, name) {\n var getter = attrHandle[name] || jQuery.find.attr;\n\n attrHandle[name] = function (elem, name, isXML) {\n var ret,\n handle,\n lowercaseName = name.toLowerCase();\n\n if (!isXML) {\n // Avoid an infinite loop by temporarily removing this function from the getter\n handle = attrHandle[lowercaseName];\n attrHandle[lowercaseName] = ret;\n ret = getter(elem, name, isXML) != null ? lowercaseName : null;\n attrHandle[lowercaseName] = handle;\n }\n\n return ret;\n };\n });\n var rfocusable = /^(?:input|select|textarea|button)$/i,\n rclickable = /^(?:a|area)$/i;\n jQuery.fn.extend({\n prop: function prop(name, value) {\n return access(this, jQuery.prop, name, value, arguments.length > 1);\n },\n removeProp: function removeProp(name) {\n return this.each(function () {\n delete this[jQuery.propFix[name] || name];\n });\n }\n });\n jQuery.extend({\n prop: function prop(elem, name, value) {\n var ret,\n hooks,\n nType = elem.nodeType; // Don't get/set properties on text, comment and attribute nodes\n\n if (nType === 3 || nType === 8 || nType === 2) {\n return;\n }\n\n if (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n // Fix name and attach hooks\n name = jQuery.propFix[name] || name;\n hooks = jQuery.propHooks[name];\n }\n\n if (value !== undefined) {\n if (hooks && \"set\" in hooks && (ret = hooks.set(elem, value, name)) !== undefined) {\n return ret;\n }\n\n return elem[name] = value;\n }\n\n if (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n return ret;\n }\n\n return elem[name];\n },\n propHooks: {\n tabIndex: {\n get: function get(elem) {\n // Support: IE <=9 - 11 only\n // elem.tabIndex doesn't always return the\n // correct value when it hasn't been explicitly set\n // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n // Use proper attribute retrieval(#12072)\n var tabindex = jQuery.find.attr(elem, \"tabindex\");\n\n if (tabindex) {\n return parseInt(tabindex, 10);\n }\n\n if (rfocusable.test(elem.nodeName) || rclickable.test(elem.nodeName) && elem.href) {\n return 0;\n }\n\n return -1;\n }\n }\n },\n propFix: {\n \"for\": \"htmlFor\",\n \"class\": \"className\"\n }\n }); // Support: IE <=11 only\n // Accessing the selectedIndex property\n // forces the browser to respect setting selected\n // on the option\n // The getter ensures a default option is selected\n // when in an optgroup\n // eslint rule \"no-unused-expressions\" is disabled for this code\n // since it considers such accessions noop\n\n if (!support.optSelected) {\n jQuery.propHooks.selected = {\n get: function get(elem) {\n /* eslint no-unused-expressions: \"off\" */\n var parent = elem.parentNode;\n\n if (parent && parent.parentNode) {\n parent.parentNode.selectedIndex;\n }\n\n return null;\n },\n set: function set(elem) {\n /* eslint no-unused-expressions: \"off\" */\n var parent = elem.parentNode;\n\n if (parent) {\n parent.selectedIndex;\n\n if (parent.parentNode) {\n parent.parentNode.selectedIndex;\n }\n }\n }\n };\n }\n\n jQuery.each([\"tabIndex\", \"readOnly\", \"maxLength\", \"cellSpacing\", \"cellPadding\", \"rowSpan\", \"colSpan\", \"useMap\", \"frameBorder\", \"contentEditable\"], function () {\n jQuery.propFix[this.toLowerCase()] = this;\n }); // Strip and collapse whitespace according to HTML spec\n // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\n function stripAndCollapse(value) {\n var tokens = value.match(rnothtmlwhite) || [];\n return tokens.join(\" \");\n }\n\n function getClass(elem) {\n return elem.getAttribute && elem.getAttribute(\"class\") || \"\";\n }\n\n function classesToArray(value) {\n if (Array.isArray(value)) {\n return value;\n }\n\n if (typeof value === \"string\") {\n return value.match(rnothtmlwhite) || [];\n }\n\n return [];\n }\n\n jQuery.fn.extend({\n addClass: function addClass(value) {\n var classes,\n elem,\n cur,\n curValue,\n clazz,\n j,\n finalValue,\n i = 0;\n\n if (isFunction(value)) {\n return this.each(function (j) {\n jQuery(this).addClass(value.call(this, j, getClass(this)));\n });\n }\n\n classes = classesToArray(value);\n\n if (classes.length) {\n while (elem = this[i++]) {\n curValue = getClass(elem);\n cur = elem.nodeType === 1 && \" \" + stripAndCollapse(curValue) + \" \";\n\n if (cur) {\n j = 0;\n\n while (clazz = classes[j++]) {\n if (cur.indexOf(\" \" + clazz + \" \") < 0) {\n cur += clazz + \" \";\n }\n } // Only assign if different to avoid unneeded rendering.\n\n\n finalValue = stripAndCollapse(cur);\n\n if (curValue !== finalValue) {\n elem.setAttribute(\"class\", finalValue);\n }\n }\n }\n }\n\n return this;\n },\n removeClass: function removeClass(value) {\n var classes,\n elem,\n cur,\n curValue,\n clazz,\n j,\n finalValue,\n i = 0;\n\n if (isFunction(value)) {\n return this.each(function (j) {\n jQuery(this).removeClass(value.call(this, j, getClass(this)));\n });\n }\n\n if (!arguments.length) {\n return this.attr(\"class\", \"\");\n }\n\n classes = classesToArray(value);\n\n if (classes.length) {\n while (elem = this[i++]) {\n curValue = getClass(elem); // This expression is here for better compressibility (see addClass)\n\n cur = elem.nodeType === 1 && \" \" + stripAndCollapse(curValue) + \" \";\n\n if (cur) {\n j = 0;\n\n while (clazz = classes[j++]) {\n // Remove *all* instances\n while (cur.indexOf(\" \" + clazz + \" \") > -1) {\n cur = cur.replace(\" \" + clazz + \" \", \" \");\n }\n } // Only assign if different to avoid unneeded rendering.\n\n\n finalValue = stripAndCollapse(cur);\n\n if (curValue !== finalValue) {\n elem.setAttribute(\"class\", finalValue);\n }\n }\n }\n }\n\n return this;\n },\n toggleClass: function toggleClass(value, stateVal) {\n var type = _typeof(value),\n isValidValue = type === \"string\" || Array.isArray(value);\n\n if (typeof stateVal === \"boolean\" && isValidValue) {\n return stateVal ? this.addClass(value) : this.removeClass(value);\n }\n\n if (isFunction(value)) {\n return this.each(function (i) {\n jQuery(this).toggleClass(value.call(this, i, getClass(this), stateVal), stateVal);\n });\n }\n\n return this.each(function () {\n var className, i, self, classNames;\n\n if (isValidValue) {\n // Toggle individual class names\n i = 0;\n self = jQuery(this);\n classNames = classesToArray(value);\n\n while (className = classNames[i++]) {\n // Check each className given, space separated list\n if (self.hasClass(className)) {\n self.removeClass(className);\n } else {\n self.addClass(className);\n }\n } // Toggle whole class name\n\n } else if (value === undefined || type === \"boolean\") {\n className = getClass(this);\n\n if (className) {\n // Store className if set\n dataPriv.set(this, \"__className__\", className);\n } // If the element has a class name or if we're passed `false`,\n // then remove the whole classname (if there was one, the above saved it).\n // Otherwise bring back whatever was previously saved (if anything),\n // falling back to the empty string if nothing was stored.\n\n\n if (this.setAttribute) {\n this.setAttribute(\"class\", className || value === false ? \"\" : dataPriv.get(this, \"__className__\") || \"\");\n }\n }\n });\n },\n hasClass: function hasClass(selector) {\n var className,\n elem,\n i = 0;\n className = \" \" + selector + \" \";\n\n while (elem = this[i++]) {\n if (elem.nodeType === 1 && (\" \" + stripAndCollapse(getClass(elem)) + \" \").indexOf(className) > -1) {\n return true;\n }\n }\n\n return false;\n }\n });\n var rreturn = /\\r/g;\n jQuery.fn.extend({\n val: function val(value) {\n var hooks,\n ret,\n valueIsFunction,\n elem = this[0];\n\n if (!arguments.length) {\n if (elem) {\n hooks = jQuery.valHooks[elem.type] || jQuery.valHooks[elem.nodeName.toLowerCase()];\n\n if (hooks && \"get\" in hooks && (ret = hooks.get(elem, \"value\")) !== undefined) {\n return ret;\n }\n\n ret = elem.value; // Handle most common string cases\n\n if (typeof ret === \"string\") {\n return ret.replace(rreturn, \"\");\n } // Handle cases where value is null/undef or number\n\n\n return ret == null ? \"\" : ret;\n }\n\n return;\n }\n\n valueIsFunction = isFunction(value);\n return this.each(function (i) {\n var val;\n\n if (this.nodeType !== 1) {\n return;\n }\n\n if (valueIsFunction) {\n val = value.call(this, i, jQuery(this).val());\n } else {\n val = value;\n } // Treat null/undefined as \"\"; convert numbers to string\n\n\n if (val == null) {\n val = \"\";\n } else if (typeof val === \"number\") {\n val += \"\";\n } else if (Array.isArray(val)) {\n val = jQuery.map(val, function (value) {\n return value == null ? \"\" : value + \"\";\n });\n }\n\n hooks = jQuery.valHooks[this.type] || jQuery.valHooks[this.nodeName.toLowerCase()]; // If set returns undefined, fall back to normal setting\n\n if (!hooks || !(\"set\" in hooks) || hooks.set(this, val, \"value\") === undefined) {\n this.value = val;\n }\n });\n }\n });\n jQuery.extend({\n valHooks: {\n option: {\n get: function get(elem) {\n var val = jQuery.find.attr(elem, \"value\");\n return val != null ? val : // Support: IE <=10 - 11 only\n // option.text throws exceptions (#14686, #14858)\n // Strip and collapse whitespace\n // https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n stripAndCollapse(jQuery.text(elem));\n }\n },\n select: {\n get: function get(elem) {\n var value,\n option,\n i,\n options = elem.options,\n index = elem.selectedIndex,\n one = elem.type === \"select-one\",\n values = one ? null : [],\n max = one ? index + 1 : options.length;\n\n if (index < 0) {\n i = max;\n } else {\n i = one ? index : 0;\n } // Loop through all the selected options\n\n\n for (; i < max; i++) {\n option = options[i]; // Support: IE <=9 only\n // IE8-9 doesn't update selected after form reset (#2551)\n\n if ((option.selected || i === index) && // Don't return options that are disabled or in a disabled optgroup\n !option.disabled && (!option.parentNode.disabled || !nodeName(option.parentNode, \"optgroup\"))) {\n // Get the specific value for the option\n value = jQuery(option).val(); // We don't need an array for one selects\n\n if (one) {\n return value;\n } // Multi-Selects return an array\n\n\n values.push(value);\n }\n }\n\n return values;\n },\n set: function set(elem, value) {\n var optionSet,\n option,\n options = elem.options,\n values = jQuery.makeArray(value),\n i = options.length;\n\n while (i--) {\n option = options[i];\n /* eslint-disable no-cond-assign */\n\n if (option.selected = jQuery.inArray(jQuery.valHooks.option.get(option), values) > -1) {\n optionSet = true;\n }\n /* eslint-enable no-cond-assign */\n\n } // Force browsers to behave consistently when non-matching value is set\n\n\n if (!optionSet) {\n elem.selectedIndex = -1;\n }\n\n return values;\n }\n }\n }\n }); // Radios and checkboxes getter/setter\n\n jQuery.each([\"radio\", \"checkbox\"], function () {\n jQuery.valHooks[this] = {\n set: function set(elem, value) {\n if (Array.isArray(value)) {\n return elem.checked = jQuery.inArray(jQuery(elem).val(), value) > -1;\n }\n }\n };\n\n if (!support.checkOn) {\n jQuery.valHooks[this].get = function (elem) {\n return elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n };\n }\n }); // Return jQuery for attributes-only inclusion\n\n support.focusin = \"onfocusin\" in window;\n\n var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n stopPropagationCallback = function stopPropagationCallback(e) {\n e.stopPropagation();\n };\n\n jQuery.extend(jQuery.event, {\n trigger: function trigger(event, data, elem, onlyHandlers) {\n var i,\n cur,\n tmp,\n bubbleType,\n ontype,\n handle,\n special,\n lastElement,\n eventPath = [elem || document],\n type = hasOwn.call(event, \"type\") ? event.type : event,\n namespaces = hasOwn.call(event, \"namespace\") ? event.namespace.split(\".\") : [];\n cur = lastElement = tmp = elem = elem || document; // Don't do events on text and comment nodes\n\n if (elem.nodeType === 3 || elem.nodeType === 8) {\n return;\n } // focus/blur morphs to focusin/out; ensure we're not firing them right now\n\n\n if (rfocusMorph.test(type + jQuery.event.triggered)) {\n return;\n }\n\n if (type.indexOf(\".\") > -1) {\n // Namespaced trigger; create a regexp to match event type in handle()\n namespaces = type.split(\".\");\n type = namespaces.shift();\n namespaces.sort();\n }\n\n ontype = type.indexOf(\":\") < 0 && \"on\" + type; // Caller can pass in a jQuery.Event object, Object, or just an event type string\n\n event = event[jQuery.expando] ? event : new jQuery.Event(type, _typeof(event) === \"object\" && event); // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\n event.isTrigger = onlyHandlers ? 2 : 3;\n event.namespace = namespaces.join(\".\");\n event.rnamespace = event.namespace ? new RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\") : null; // Clean up the event in case it is being reused\n\n event.result = undefined;\n\n if (!event.target) {\n event.target = elem;\n } // Clone any incoming data and prepend the event, creating the handler arg list\n\n\n data = data == null ? [event] : jQuery.makeArray(data, [event]); // Allow special events to draw outside the lines\n\n special = jQuery.event.special[type] || {};\n\n if (!onlyHandlers && special.trigger && special.trigger.apply(elem, data) === false) {\n return;\n } // Determine event propagation path in advance, per W3C events spec (#9951)\n // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\n\n if (!onlyHandlers && !special.noBubble && !isWindow(elem)) {\n bubbleType = special.delegateType || type;\n\n if (!rfocusMorph.test(bubbleType + type)) {\n cur = cur.parentNode;\n }\n\n for (; cur; cur = cur.parentNode) {\n eventPath.push(cur);\n tmp = cur;\n } // Only add window if we got to document (e.g., not plain obj or detached DOM)\n\n\n if (tmp === (elem.ownerDocument || document)) {\n eventPath.push(tmp.defaultView || tmp.parentWindow || window);\n }\n } // Fire handlers on the event path\n\n\n i = 0;\n\n while ((cur = eventPath[i++]) && !event.isPropagationStopped()) {\n lastElement = cur;\n event.type = i > 1 ? bubbleType : special.bindType || type; // jQuery handler\n\n handle = (dataPriv.get(cur, \"events\") || Object.create(null))[event.type] && dataPriv.get(cur, \"handle\");\n\n if (handle) {\n handle.apply(cur, data);\n } // Native handler\n\n\n handle = ontype && cur[ontype];\n\n if (handle && handle.apply && acceptData(cur)) {\n event.result = handle.apply(cur, data);\n\n if (event.result === false) {\n event.preventDefault();\n }\n }\n }\n\n event.type = type; // If nobody prevented the default action, do it now\n\n if (!onlyHandlers && !event.isDefaultPrevented()) {\n if ((!special._default || special._default.apply(eventPath.pop(), data) === false) && acceptData(elem)) {\n // Call a native DOM method on the target with the same name as the event.\n // Don't do default actions on window, that's where global variables be (#6170)\n if (ontype && isFunction(elem[type]) && !isWindow(elem)) {\n // Don't re-trigger an onFOO event when we call its FOO() method\n tmp = elem[ontype];\n\n if (tmp) {\n elem[ontype] = null;\n } // Prevent re-triggering of the same event, since we already bubbled it above\n\n\n jQuery.event.triggered = type;\n\n if (event.isPropagationStopped()) {\n lastElement.addEventListener(type, stopPropagationCallback);\n }\n\n elem[type]();\n\n if (event.isPropagationStopped()) {\n lastElement.removeEventListener(type, stopPropagationCallback);\n }\n\n jQuery.event.triggered = undefined;\n\n if (tmp) {\n elem[ontype] = tmp;\n }\n }\n }\n }\n\n return event.result;\n },\n // Piggyback on a donor event to simulate a different one\n // Used only for `focus(in | out)` events\n simulate: function simulate(type, elem, event) {\n var e = jQuery.extend(new jQuery.Event(), event, {\n type: type,\n isSimulated: true\n });\n jQuery.event.trigger(e, null, elem);\n }\n });\n jQuery.fn.extend({\n trigger: function trigger(type, data) {\n return this.each(function () {\n jQuery.event.trigger(type, data, this);\n });\n },\n triggerHandler: function triggerHandler(type, data) {\n var elem = this[0];\n\n if (elem) {\n return jQuery.event.trigger(type, data, elem, true);\n }\n }\n }); // Support: Firefox <=44\n // Firefox doesn't have focus(in | out) events\n // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n //\n // Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n // focus(in | out) events fire after focus & blur events,\n // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n // Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\n\n if (!support.focusin) {\n jQuery.each({\n focus: \"focusin\",\n blur: \"focusout\"\n }, function (orig, fix) {\n // Attach a single capturing handler on the document while someone wants focusin/focusout\n var handler = function handler(event) {\n jQuery.event.simulate(fix, event.target, jQuery.event.fix(event));\n };\n\n jQuery.event.special[fix] = {\n setup: function setup() {\n // Handle: regular nodes (via `this.ownerDocument`), window\n // (via `this.document`) & document (via `this`).\n var doc = this.ownerDocument || this.document || this,\n attaches = dataPriv.access(doc, fix);\n\n if (!attaches) {\n doc.addEventListener(orig, handler, true);\n }\n\n dataPriv.access(doc, fix, (attaches || 0) + 1);\n },\n teardown: function teardown() {\n var doc = this.ownerDocument || this.document || this,\n attaches = dataPriv.access(doc, fix) - 1;\n\n if (!attaches) {\n doc.removeEventListener(orig, handler, true);\n dataPriv.remove(doc, fix);\n } else {\n dataPriv.access(doc, fix, attaches);\n }\n }\n };\n });\n }\n\n var location = window.location;\n var nonce = {\n guid: Date.now()\n };\n var rquery = /\\?/; // Cross-browser xml parsing\n\n jQuery.parseXML = function (data) {\n var xml;\n\n if (!data || typeof data !== \"string\") {\n return null;\n } // Support: IE 9 - 11 only\n // IE throws on parseFromString with invalid input.\n\n\n try {\n xml = new window.DOMParser().parseFromString(data, \"text/xml\");\n } catch (e) {\n xml = undefined;\n }\n\n if (!xml || xml.getElementsByTagName(\"parsererror\").length) {\n jQuery.error(\"Invalid XML: \" + data);\n }\n\n return xml;\n };\n\n var rbracket = /\\[\\]$/,\n rCRLF = /\\r?\\n/g,\n rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n rsubmittable = /^(?:input|select|textarea|keygen)/i;\n\n function buildParams(prefix, obj, traditional, add) {\n var name;\n\n if (Array.isArray(obj)) {\n // Serialize array item.\n jQuery.each(obj, function (i, v) {\n if (traditional || rbracket.test(prefix)) {\n // Treat each array item as a scalar.\n add(prefix, v);\n } else {\n // Item is non-scalar (array or object), encode its numeric index.\n buildParams(prefix + \"[\" + (_typeof(v) === \"object\" && v != null ? i : \"\") + \"]\", v, traditional, add);\n }\n });\n } else if (!traditional && toType(obj) === \"object\") {\n // Serialize object item.\n for (name in obj) {\n buildParams(prefix + \"[\" + name + \"]\", obj[name], traditional, add);\n }\n } else {\n // Serialize scalar item.\n add(prefix, obj);\n }\n } // Serialize an array of form elements or a set of\n // key/values into a query string\n\n\n jQuery.param = function (a, traditional) {\n var prefix,\n s = [],\n add = function add(key, valueOrFunction) {\n // If value is a function, invoke it and use its return value\n var value = isFunction(valueOrFunction) ? valueOrFunction() : valueOrFunction;\n s[s.length] = encodeURIComponent(key) + \"=\" + encodeURIComponent(value == null ? \"\" : value);\n };\n\n if (a == null) {\n return \"\";\n } // If an array was passed in, assume that it is an array of form elements.\n\n\n if (Array.isArray(a) || a.jquery && !jQuery.isPlainObject(a)) {\n // Serialize the form elements\n jQuery.each(a, function () {\n add(this.name, this.value);\n });\n } else {\n // If traditional, encode the \"old\" way (the way 1.3.2 or older\n // did it), otherwise encode params recursively.\n for (prefix in a) {\n buildParams(prefix, a[prefix], traditional, add);\n }\n } // Return the resulting serialization\n\n\n return s.join(\"&\");\n };\n\n jQuery.fn.extend({\n serialize: function serialize() {\n return jQuery.param(this.serializeArray());\n },\n serializeArray: function serializeArray() {\n return this.map(function () {\n // Can add propHook for \"elements\" to filter or add form elements\n var elements = jQuery.prop(this, \"elements\");\n return elements ? jQuery.makeArray(elements) : this;\n }).filter(function () {\n var type = this.type; // Use .is( \":disabled\" ) so that fieldset[disabled] works\n\n return this.name && !jQuery(this).is(\":disabled\") && rsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) && (this.checked || !rcheckableType.test(type));\n }).map(function (_i, elem) {\n var val = jQuery(this).val();\n\n if (val == null) {\n return null;\n }\n\n if (Array.isArray(val)) {\n return jQuery.map(val, function (val) {\n return {\n name: elem.name,\n value: val.replace(rCRLF, \"\\r\\n\")\n };\n });\n }\n\n return {\n name: elem.name,\n value: val.replace(rCRLF, \"\\r\\n\")\n };\n }).get();\n }\n });\n var r20 = /%20/g,\n rhash = /#.*$/,\n rantiCache = /([?&])_=[^&]*/,\n rheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n // #7653, #8125, #8152: local protocol detection\n rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n rnoContent = /^(?:GET|HEAD)$/,\n rprotocol = /^\\/\\//,\n\n /* Prefilters\n * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n * 2) These are called:\n * - BEFORE asking for a transport\n * - AFTER param serialization (s.data is a string if s.processData is true)\n * 3) key is the dataType\n * 4) the catchall symbol \"*\" can be used\n * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n */\n prefilters = {},\n\n /* Transports bindings\n * 1) key is the dataType\n * 2) the catchall symbol \"*\" can be used\n * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n */\n transports = {},\n // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n allTypes = \"*/\".concat(\"*\"),\n // Anchor tag for parsing the document origin\n originAnchor = document.createElement(\"a\");\n originAnchor.href = location.href; // Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\n\n function addToPrefiltersOrTransports(structure) {\n // dataTypeExpression is optional and defaults to \"*\"\n return function (dataTypeExpression, func) {\n if (typeof dataTypeExpression !== \"string\") {\n func = dataTypeExpression;\n dataTypeExpression = \"*\";\n }\n\n var dataType,\n i = 0,\n dataTypes = dataTypeExpression.toLowerCase().match(rnothtmlwhite) || [];\n\n if (isFunction(func)) {\n // For each dataType in the dataTypeExpression\n while (dataType = dataTypes[i++]) {\n // Prepend if requested\n if (dataType[0] === \"+\") {\n dataType = dataType.slice(1) || \"*\";\n (structure[dataType] = structure[dataType] || []).unshift(func); // Otherwise append\n } else {\n (structure[dataType] = structure[dataType] || []).push(func);\n }\n }\n }\n };\n } // Base inspection function for prefilters and transports\n\n\n function inspectPrefiltersOrTransports(structure, options, originalOptions, jqXHR) {\n var inspected = {},\n seekingTransport = structure === transports;\n\n function inspect(dataType) {\n var selected;\n inspected[dataType] = true;\n jQuery.each(structure[dataType] || [], function (_, prefilterOrFactory) {\n var dataTypeOrTransport = prefilterOrFactory(options, originalOptions, jqXHR);\n\n if (typeof dataTypeOrTransport === \"string\" && !seekingTransport && !inspected[dataTypeOrTransport]) {\n options.dataTypes.unshift(dataTypeOrTransport);\n inspect(dataTypeOrTransport);\n return false;\n } else if (seekingTransport) {\n return !(selected = dataTypeOrTransport);\n }\n });\n return selected;\n }\n\n return inspect(options.dataTypes[0]) || !inspected[\"*\"] && inspect(\"*\");\n } // A special extend for ajax options\n // that takes \"flat\" options (not to be deep extended)\n // Fixes #9887\n\n\n function ajaxExtend(target, src) {\n var key,\n deep,\n flatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n for (key in src) {\n if (src[key] !== undefined) {\n (flatOptions[key] ? target : deep || (deep = {}))[key] = src[key];\n }\n }\n\n if (deep) {\n jQuery.extend(true, target, deep);\n }\n\n return target;\n }\n /* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\n\n\n function ajaxHandleResponses(s, jqXHR, responses) {\n var ct,\n type,\n finalDataType,\n firstDataType,\n contents = s.contents,\n dataTypes = s.dataTypes; // Remove auto dataType and get content-type in the process\n\n while (dataTypes[0] === \"*\") {\n dataTypes.shift();\n\n if (ct === undefined) {\n ct = s.mimeType || jqXHR.getResponseHeader(\"Content-Type\");\n }\n } // Check if we're dealing with a known content-type\n\n\n if (ct) {\n for (type in contents) {\n if (contents[type] && contents[type].test(ct)) {\n dataTypes.unshift(type);\n break;\n }\n }\n } // Check to see if we have a response for the expected dataType\n\n\n if (dataTypes[0] in responses) {\n finalDataType = dataTypes[0];\n } else {\n // Try convertible dataTypes\n for (type in responses) {\n if (!dataTypes[0] || s.converters[type + \" \" + dataTypes[0]]) {\n finalDataType = type;\n break;\n }\n\n if (!firstDataType) {\n firstDataType = type;\n }\n } // Or just use first one\n\n\n finalDataType = finalDataType || firstDataType;\n } // If we found a dataType\n // We add the dataType to the list if needed\n // and return the corresponding response\n\n\n if (finalDataType) {\n if (finalDataType !== dataTypes[0]) {\n dataTypes.unshift(finalDataType);\n }\n\n return responses[finalDataType];\n }\n }\n /* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\n\n\n function ajaxConvert(s, response, jqXHR, isSuccess) {\n var conv2,\n current,\n conv,\n tmp,\n prev,\n converters = {},\n // Work with a copy of dataTypes in case we need to modify it for conversion\n dataTypes = s.dataTypes.slice(); // Create converters map with lowercased keys\n\n if (dataTypes[1]) {\n for (conv in s.converters) {\n converters[conv.toLowerCase()] = s.converters[conv];\n }\n }\n\n current = dataTypes.shift(); // Convert to each sequential dataType\n\n while (current) {\n if (s.responseFields[current]) {\n jqXHR[s.responseFields[current]] = response;\n } // Apply the dataFilter if provided\n\n\n if (!prev && isSuccess && s.dataFilter) {\n response = s.dataFilter(response, s.dataType);\n }\n\n prev = current;\n current = dataTypes.shift();\n\n if (current) {\n // There's only work to do if current dataType is non-auto\n if (current === \"*\") {\n current = prev; // Convert response if prev dataType is non-auto and differs from current\n } else if (prev !== \"*\" && prev !== current) {\n // Seek a direct converter\n conv = converters[prev + \" \" + current] || converters[\"* \" + current]; // If none found, seek a pair\n\n if (!conv) {\n for (conv2 in converters) {\n // If conv2 outputs current\n tmp = conv2.split(\" \");\n\n if (tmp[1] === current) {\n // If prev can be converted to accepted input\n conv = converters[prev + \" \" + tmp[0]] || converters[\"* \" + tmp[0]];\n\n if (conv) {\n // Condense equivalence converters\n if (conv === true) {\n conv = converters[conv2]; // Otherwise, insert the intermediate dataType\n } else if (converters[conv2] !== true) {\n current = tmp[0];\n dataTypes.unshift(tmp[1]);\n }\n\n break;\n }\n }\n }\n } // Apply converter (if not an equivalence)\n\n\n if (conv !== true) {\n // Unless errors are allowed to bubble, catch and return them\n if (conv && s[\"throws\"]) {\n response = conv(response);\n } else {\n try {\n response = conv(response);\n } catch (e) {\n return {\n state: \"parsererror\",\n error: conv ? e : \"No conversion from \" + prev + \" to \" + current\n };\n }\n }\n }\n }\n }\n }\n\n return {\n state: \"success\",\n data: response\n };\n }\n\n jQuery.extend({\n // Counter for holding the number of active queries\n active: 0,\n // Last-Modified header cache for next request\n lastModified: {},\n etag: {},\n ajaxSettings: {\n url: location.href,\n type: \"GET\",\n isLocal: rlocalProtocol.test(location.protocol),\n global: true,\n processData: true,\n async: true,\n contentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n /*\n timeout: 0,\n data: null,\n dataType: null,\n username: null,\n password: null,\n cache: null,\n throws: false,\n traditional: false,\n headers: {},\n */\n accepts: {\n \"*\": allTypes,\n text: \"text/plain\",\n html: \"text/html\",\n xml: \"application/xml, text/xml\",\n json: \"application/json, text/javascript\"\n },\n contents: {\n xml: /\\bxml\\b/,\n html: /\\bhtml/,\n json: /\\bjson\\b/\n },\n responseFields: {\n xml: \"responseXML\",\n text: \"responseText\",\n json: \"responseJSON\"\n },\n // Data converters\n // Keys separate source (or catchall \"*\") and destination types with a single space\n converters: {\n // Convert anything to text\n \"* text\": String,\n // Text to html (true = no transformation)\n \"text html\": true,\n // Evaluate text as a json expression\n \"text json\": JSON.parse,\n // Parse text as xml\n \"text xml\": jQuery.parseXML\n },\n // For options that shouldn't be deep extended:\n // you can add your own custom options here if\n // and when you create one that shouldn't be\n // deep extended (see ajaxExtend)\n flatOptions: {\n url: true,\n context: true\n }\n },\n // Creates a full fledged settings object into target\n // with both ajaxSettings and settings fields.\n // If target is omitted, writes into ajaxSettings.\n ajaxSetup: function ajaxSetup(target, settings) {\n return settings ? // Building a settings object\n ajaxExtend(ajaxExtend(target, jQuery.ajaxSettings), settings) : // Extending ajaxSettings\n ajaxExtend(jQuery.ajaxSettings, target);\n },\n ajaxPrefilter: addToPrefiltersOrTransports(prefilters),\n ajaxTransport: addToPrefiltersOrTransports(transports),\n // Main method\n ajax: function ajax(url, options) {\n // If url is an object, simulate pre-1.5 signature\n if (_typeof(url) === \"object\") {\n options = url;\n url = undefined;\n } // Force options to be an object\n\n\n options = options || {};\n\n var transport,\n // URL without anti-cache param\n cacheURL,\n // Response headers\n responseHeadersString,\n responseHeaders,\n // timeout handle\n timeoutTimer,\n // Url cleanup var\n urlAnchor,\n // Request state (becomes false upon send and true upon completion)\n completed,\n // To know if global events are to be dispatched\n fireGlobals,\n // Loop variable\n i,\n // uncached part of the url\n uncached,\n // Create the final options object\n s = jQuery.ajaxSetup({}, options),\n // Callbacks context\n callbackContext = s.context || s,\n // Context for global events is callbackContext if it is a DOM node or jQuery collection\n globalEventContext = s.context && (callbackContext.nodeType || callbackContext.jquery) ? jQuery(callbackContext) : jQuery.event,\n // Deferreds\n deferred = jQuery.Deferred(),\n completeDeferred = jQuery.Callbacks(\"once memory\"),\n // Status-dependent callbacks\n _statusCode = s.statusCode || {},\n // Headers (they are sent all at once)\n requestHeaders = {},\n requestHeadersNames = {},\n // Default abort message\n strAbort = \"canceled\",\n // Fake xhr\n jqXHR = {\n readyState: 0,\n // Builds headers hashtable if needed\n getResponseHeader: function getResponseHeader(key) {\n var match;\n\n if (completed) {\n if (!responseHeaders) {\n responseHeaders = {};\n\n while (match = rheaders.exec(responseHeadersString)) {\n responseHeaders[match[1].toLowerCase() + \" \"] = (responseHeaders[match[1].toLowerCase() + \" \"] || []).concat(match[2]);\n }\n }\n\n match = responseHeaders[key.toLowerCase() + \" \"];\n }\n\n return match == null ? null : match.join(\", \");\n },\n // Raw string\n getAllResponseHeaders: function getAllResponseHeaders() {\n return completed ? responseHeadersString : null;\n },\n // Caches the header\n setRequestHeader: function setRequestHeader(name, value) {\n if (completed == null) {\n name = requestHeadersNames[name.toLowerCase()] = requestHeadersNames[name.toLowerCase()] || name;\n requestHeaders[name] = value;\n }\n\n return this;\n },\n // Overrides response content-type header\n overrideMimeType: function overrideMimeType(type) {\n if (completed == null) {\n s.mimeType = type;\n }\n\n return this;\n },\n // Status-dependent callbacks\n statusCode: function statusCode(map) {\n var code;\n\n if (map) {\n if (completed) {\n // Execute the appropriate callbacks\n jqXHR.always(map[jqXHR.status]);\n } else {\n // Lazy-add the new callbacks in a way that preserves old ones\n for (code in map) {\n _statusCode[code] = [_statusCode[code], map[code]];\n }\n }\n }\n\n return this;\n },\n // Cancel the request\n abort: function abort(statusText) {\n var finalText = statusText || strAbort;\n\n if (transport) {\n transport.abort(finalText);\n }\n\n done(0, finalText);\n return this;\n }\n }; // Attach deferreds\n\n\n deferred.promise(jqXHR); // Add protocol if not provided (prefilters might expect it)\n // Handle falsy url in the settings object (#10093: consistency with old signature)\n // We also use the url parameter if available\n\n s.url = ((url || s.url || location.href) + \"\").replace(rprotocol, location.protocol + \"//\"); // Alias method option to type as per ticket #12004\n\n s.type = options.method || options.type || s.method || s.type; // Extract dataTypes list\n\n s.dataTypes = (s.dataType || \"*\").toLowerCase().match(rnothtmlwhite) || [\"\"]; // A cross-domain request is in order when the origin doesn't match the current origin.\n\n if (s.crossDomain == null) {\n urlAnchor = document.createElement(\"a\"); // Support: IE <=8 - 11, Edge 12 - 15\n // IE throws exception on accessing the href property if url is malformed,\n // e.g. http://example.com:80x/\n\n try {\n urlAnchor.href = s.url; // Support: IE <=8 - 11 only\n // Anchor's host property isn't correctly set when s.url is relative\n\n urlAnchor.href = urlAnchor.href;\n s.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !== urlAnchor.protocol + \"//\" + urlAnchor.host;\n } catch (e) {\n // If there is an error parsing the URL, assume it is crossDomain,\n // it can be rejected by the transport if it is invalid\n s.crossDomain = true;\n }\n } // Convert data if not already a string\n\n\n if (s.data && s.processData && typeof s.data !== \"string\") {\n s.data = jQuery.param(s.data, s.traditional);\n } // Apply prefilters\n\n\n inspectPrefiltersOrTransports(prefilters, s, options, jqXHR); // If request was aborted inside a prefilter, stop there\n\n if (completed) {\n return jqXHR;\n } // We can fire global events as of now if asked to\n // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\n\n fireGlobals = jQuery.event && s.global; // Watch for a new set of requests\n\n if (fireGlobals && jQuery.active++ === 0) {\n jQuery.event.trigger(\"ajaxStart\");\n } // Uppercase the type\n\n\n s.type = s.type.toUpperCase(); // Determine if request has content\n\n s.hasContent = !rnoContent.test(s.type); // Save the URL in case we're toying with the If-Modified-Since\n // and/or If-None-Match header later on\n // Remove hash to simplify url manipulation\n\n cacheURL = s.url.replace(rhash, \"\"); // More options handling for requests with no content\n\n if (!s.hasContent) {\n // Remember the hash so we can put it back\n uncached = s.url.slice(cacheURL.length); // If data is available and should be processed, append data to url\n\n if (s.data && (s.processData || typeof s.data === \"string\")) {\n cacheURL += (rquery.test(cacheURL) ? \"&\" : \"?\") + s.data; // #9682: remove data so that it's not used in an eventual retry\n\n delete s.data;\n } // Add or update anti-cache param if needed\n\n\n if (s.cache === false) {\n cacheURL = cacheURL.replace(rantiCache, \"$1\");\n uncached = (rquery.test(cacheURL) ? \"&\" : \"?\") + \"_=\" + nonce.guid++ + uncached;\n } // Put hash and anti-cache on the URL that will be requested (gh-1732)\n\n\n s.url = cacheURL + uncached; // Change '%20' to '+' if this is encoded form body content (gh-2658)\n } else if (s.data && s.processData && (s.contentType || \"\").indexOf(\"application/x-www-form-urlencoded\") === 0) {\n s.data = s.data.replace(r20, \"+\");\n } // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\n\n if (s.ifModified) {\n if (jQuery.lastModified[cacheURL]) {\n jqXHR.setRequestHeader(\"If-Modified-Since\", jQuery.lastModified[cacheURL]);\n }\n\n if (jQuery.etag[cacheURL]) {\n jqXHR.setRequestHeader(\"If-None-Match\", jQuery.etag[cacheURL]);\n }\n } // Set the correct header, if data is being sent\n\n\n if (s.data && s.hasContent && s.contentType !== false || options.contentType) {\n jqXHR.setRequestHeader(\"Content-Type\", s.contentType);\n } // Set the Accepts header for the server, depending on the dataType\n\n\n jqXHR.setRequestHeader(\"Accept\", s.dataTypes[0] && s.accepts[s.dataTypes[0]] ? s.accepts[s.dataTypes[0]] + (s.dataTypes[0] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\") : s.accepts[\"*\"]); // Check for headers option\n\n for (i in s.headers) {\n jqXHR.setRequestHeader(i, s.headers[i]);\n } // Allow custom headers/mimetypes and early abort\n\n\n if (s.beforeSend && (s.beforeSend.call(callbackContext, jqXHR, s) === false || completed)) {\n // Abort if not done already and return\n return jqXHR.abort();\n } // Aborting is no longer a cancellation\n\n\n strAbort = \"abort\"; // Install callbacks on deferreds\n\n completeDeferred.add(s.complete);\n jqXHR.done(s.success);\n jqXHR.fail(s.error); // Get transport\n\n transport = inspectPrefiltersOrTransports(transports, s, options, jqXHR); // If no transport, we auto-abort\n\n if (!transport) {\n done(-1, \"No Transport\");\n } else {\n jqXHR.readyState = 1; // Send global event\n\n if (fireGlobals) {\n globalEventContext.trigger(\"ajaxSend\", [jqXHR, s]);\n } // If request was aborted inside ajaxSend, stop there\n\n\n if (completed) {\n return jqXHR;\n } // Timeout\n\n\n if (s.async && s.timeout > 0) {\n timeoutTimer = window.setTimeout(function () {\n jqXHR.abort(\"timeout\");\n }, s.timeout);\n }\n\n try {\n completed = false;\n transport.send(requestHeaders, done);\n } catch (e) {\n // Rethrow post-completion exceptions\n if (completed) {\n throw e;\n } // Propagate others as results\n\n\n done(-1, e);\n }\n } // Callback for when everything is done\n\n\n function done(status, nativeStatusText, responses, headers) {\n var isSuccess,\n success,\n error,\n response,\n modified,\n statusText = nativeStatusText; // Ignore repeat invocations\n\n if (completed) {\n return;\n }\n\n completed = true; // Clear timeout if it exists\n\n if (timeoutTimer) {\n window.clearTimeout(timeoutTimer);\n } // Dereference transport for early garbage collection\n // (no matter how long the jqXHR object will be used)\n\n\n transport = undefined; // Cache response headers\n\n responseHeadersString = headers || \"\"; // Set readyState\n\n jqXHR.readyState = status > 0 ? 4 : 0; // Determine if successful\n\n isSuccess = status >= 200 && status < 300 || status === 304; // Get response data\n\n if (responses) {\n response = ajaxHandleResponses(s, jqXHR, responses);\n } // Use a noop converter for missing script\n\n\n if (!isSuccess && jQuery.inArray(\"script\", s.dataTypes) > -1) {\n s.converters[\"text script\"] = function () {};\n } // Convert no matter what (that way responseXXX fields are always set)\n\n\n response = ajaxConvert(s, response, jqXHR, isSuccess); // If successful, handle type chaining\n\n if (isSuccess) {\n // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n if (s.ifModified) {\n modified = jqXHR.getResponseHeader(\"Last-Modified\");\n\n if (modified) {\n jQuery.lastModified[cacheURL] = modified;\n }\n\n modified = jqXHR.getResponseHeader(\"etag\");\n\n if (modified) {\n jQuery.etag[cacheURL] = modified;\n }\n } // if no content\n\n\n if (status === 204 || s.type === \"HEAD\") {\n statusText = \"nocontent\"; // if not modified\n } else if (status === 304) {\n statusText = \"notmodified\"; // If we have data, let's convert it\n } else {\n statusText = response.state;\n success = response.data;\n error = response.error;\n isSuccess = !error;\n }\n } else {\n // Extract error from statusText and normalize for non-aborts\n error = statusText;\n\n if (status || !statusText) {\n statusText = \"error\";\n\n if (status < 0) {\n status = 0;\n }\n }\n } // Set data for the fake xhr object\n\n\n jqXHR.status = status;\n jqXHR.statusText = (nativeStatusText || statusText) + \"\"; // Success/Error\n\n if (isSuccess) {\n deferred.resolveWith(callbackContext, [success, statusText, jqXHR]);\n } else {\n deferred.rejectWith(callbackContext, [jqXHR, statusText, error]);\n } // Status-dependent callbacks\n\n\n jqXHR.statusCode(_statusCode);\n _statusCode = undefined;\n\n if (fireGlobals) {\n globalEventContext.trigger(isSuccess ? \"ajaxSuccess\" : \"ajaxError\", [jqXHR, s, isSuccess ? success : error]);\n } // Complete\n\n\n completeDeferred.fireWith(callbackContext, [jqXHR, statusText]);\n\n if (fireGlobals) {\n globalEventContext.trigger(\"ajaxComplete\", [jqXHR, s]); // Handle the global AJAX counter\n\n if (! --jQuery.active) {\n jQuery.event.trigger(\"ajaxStop\");\n }\n }\n }\n\n return jqXHR;\n },\n getJSON: function getJSON(url, data, callback) {\n return jQuery.get(url, data, callback, \"json\");\n },\n getScript: function getScript(url, callback) {\n return jQuery.get(url, undefined, callback, \"script\");\n }\n });\n jQuery.each([\"get\", \"post\"], function (_i, method) {\n jQuery[method] = function (url, data, callback, type) {\n // Shift arguments if data argument was omitted\n if (isFunction(data)) {\n type = type || callback;\n callback = data;\n data = undefined;\n } // The url can be an options object (which then must have .url)\n\n\n return jQuery.ajax(jQuery.extend({\n url: url,\n type: method,\n dataType: type,\n data: data,\n success: callback\n }, jQuery.isPlainObject(url) && url));\n };\n });\n jQuery.ajaxPrefilter(function (s) {\n var i;\n\n for (i in s.headers) {\n if (i.toLowerCase() === \"content-type\") {\n s.contentType = s.headers[i] || \"\";\n }\n }\n });\n\n jQuery._evalUrl = function (url, options, doc) {\n return jQuery.ajax({\n url: url,\n // Make this explicit, since user can override this through ajaxSetup (#11264)\n type: \"GET\",\n dataType: \"script\",\n cache: true,\n async: false,\n global: false,\n // Only evaluate the response if it is successful (gh-4126)\n // dataFilter is not invoked for failure responses, so using it instead\n // of the default converter is kludgy but it works.\n converters: {\n \"text script\": function textScript() {}\n },\n dataFilter: function dataFilter(response) {\n jQuery.globalEval(response, options, doc);\n }\n });\n };\n\n jQuery.fn.extend({\n wrapAll: function wrapAll(html) {\n var wrap;\n\n if (this[0]) {\n if (isFunction(html)) {\n html = html.call(this[0]);\n } // The elements to wrap the target around\n\n\n wrap = jQuery(html, this[0].ownerDocument).eq(0).clone(true);\n\n if (this[0].parentNode) {\n wrap.insertBefore(this[0]);\n }\n\n wrap.map(function () {\n var elem = this;\n\n while (elem.firstElementChild) {\n elem = elem.firstElementChild;\n }\n\n return elem;\n }).append(this);\n }\n\n return this;\n },\n wrapInner: function wrapInner(html) {\n if (isFunction(html)) {\n return this.each(function (i) {\n jQuery(this).wrapInner(html.call(this, i));\n });\n }\n\n return this.each(function () {\n var self = jQuery(this),\n contents = self.contents();\n\n if (contents.length) {\n contents.wrapAll(html);\n } else {\n self.append(html);\n }\n });\n },\n wrap: function wrap(html) {\n var htmlIsFunction = isFunction(html);\n return this.each(function (i) {\n jQuery(this).wrapAll(htmlIsFunction ? html.call(this, i) : html);\n });\n },\n unwrap: function unwrap(selector) {\n this.parent(selector).not(\"body\").each(function () {\n jQuery(this).replaceWith(this.childNodes);\n });\n return this;\n }\n });\n\n jQuery.expr.pseudos.hidden = function (elem) {\n return !jQuery.expr.pseudos.visible(elem);\n };\n\n jQuery.expr.pseudos.visible = function (elem) {\n return !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);\n };\n\n jQuery.ajaxSettings.xhr = function () {\n try {\n return new window.XMLHttpRequest();\n } catch (e) {}\n };\n\n var xhrSuccessStatus = {\n // File protocol always yields status code 0, assume 200\n 0: 200,\n // Support: IE <=9 only\n // #1450: sometimes IE returns 1223 when it should be 204\n 1223: 204\n },\n xhrSupported = jQuery.ajaxSettings.xhr();\n support.cors = !!xhrSupported && \"withCredentials\" in xhrSupported;\n support.ajax = xhrSupported = !!xhrSupported;\n jQuery.ajaxTransport(function (options) {\n var _callback, errorCallback; // Cross domain only allowed if supported through XMLHttpRequest\n\n\n if (support.cors || xhrSupported && !options.crossDomain) {\n return {\n send: function send(headers, complete) {\n var i,\n xhr = options.xhr();\n xhr.open(options.type, options.url, options.async, options.username, options.password); // Apply custom fields if provided\n\n if (options.xhrFields) {\n for (i in options.xhrFields) {\n xhr[i] = options.xhrFields[i];\n }\n } // Override mime type if needed\n\n\n if (options.mimeType && xhr.overrideMimeType) {\n xhr.overrideMimeType(options.mimeType);\n } // X-Requested-With header\n // For cross-domain requests, seeing as conditions for a preflight are\n // akin to a jigsaw puzzle, we simply never set it to be sure.\n // (it can always be set on a per-request basis or even using ajaxSetup)\n // For same-domain requests, won't change header if already provided.\n\n\n if (!options.crossDomain && !headers[\"X-Requested-With\"]) {\n headers[\"X-Requested-With\"] = \"XMLHttpRequest\";\n } // Set headers\n\n\n for (i in headers) {\n xhr.setRequestHeader(i, headers[i]);\n } // Callback\n\n\n _callback = function callback(type) {\n return function () {\n if (_callback) {\n _callback = errorCallback = xhr.onload = xhr.onerror = xhr.onabort = xhr.ontimeout = xhr.onreadystatechange = null;\n\n if (type === \"abort\") {\n xhr.abort();\n } else if (type === \"error\") {\n // Support: IE <=9 only\n // On a manual native abort, IE9 throws\n // errors on any property access that is not readyState\n if (typeof xhr.status !== \"number\") {\n complete(0, \"error\");\n } else {\n complete( // File: protocol always yields status 0; see #8605, #14207\n xhr.status, xhr.statusText);\n }\n } else {\n complete(xhrSuccessStatus[xhr.status] || xhr.status, xhr.statusText, // Support: IE <=9 only\n // IE9 has no XHR2 but throws on binary (trac-11426)\n // For XHR2 non-text, let the caller handle it (gh-2498)\n (xhr.responseType || \"text\") !== \"text\" || typeof xhr.responseText !== \"string\" ? {\n binary: xhr.response\n } : {\n text: xhr.responseText\n }, xhr.getAllResponseHeaders());\n }\n }\n };\n }; // Listen to events\n\n\n xhr.onload = _callback();\n errorCallback = xhr.onerror = xhr.ontimeout = _callback(\"error\"); // Support: IE 9 only\n // Use onreadystatechange to replace onabort\n // to handle uncaught aborts\n\n if (xhr.onabort !== undefined) {\n xhr.onabort = errorCallback;\n } else {\n xhr.onreadystatechange = function () {\n // Check readyState before timeout as it changes\n if (xhr.readyState === 4) {\n // Allow onerror to be called first,\n // but that will not handle a native abort\n // Also, save errorCallback to a variable\n // as xhr.onerror cannot be accessed\n window.setTimeout(function () {\n if (_callback) {\n errorCallback();\n }\n });\n }\n };\n } // Create the abort callback\n\n\n _callback = _callback(\"abort\");\n\n try {\n // Do send the request (this may raise an exception)\n xhr.send(options.hasContent && options.data || null);\n } catch (e) {\n // #14683: Only rethrow if this hasn't been notified as an error yet\n if (_callback) {\n throw e;\n }\n }\n },\n abort: function abort() {\n if (_callback) {\n _callback();\n }\n }\n };\n }\n }); // Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\n\n jQuery.ajaxPrefilter(function (s) {\n if (s.crossDomain) {\n s.contents.script = false;\n }\n }); // Install script dataType\n\n jQuery.ajaxSetup({\n accepts: {\n script: \"text/javascript, application/javascript, \" + \"application/ecmascript, application/x-ecmascript\"\n },\n contents: {\n script: /\\b(?:java|ecma)script\\b/\n },\n converters: {\n \"text script\": function textScript(text) {\n jQuery.globalEval(text);\n return text;\n }\n }\n }); // Handle cache's special case and crossDomain\n\n jQuery.ajaxPrefilter(\"script\", function (s) {\n if (s.cache === undefined) {\n s.cache = false;\n }\n\n if (s.crossDomain) {\n s.type = \"GET\";\n }\n }); // Bind script tag hack transport\n\n jQuery.ajaxTransport(\"script\", function (s) {\n // This transport only deals with cross domain or forced-by-attrs requests\n if (s.crossDomain || s.scriptAttrs) {\n var script, _callback2;\n\n return {\n send: function send(_, complete) {\n script = jQuery(\"<script>\").attr(s.scriptAttrs || {}).prop({\n charset: s.scriptCharset,\n src: s.url\n }).on(\"load error\", _callback2 = function callback(evt) {\n script.remove();\n _callback2 = null;\n\n if (evt) {\n complete(evt.type === \"error\" ? 404 : 200, evt.type);\n }\n }); // Use native DOM manipulation to avoid our domManip AJAX trickery\n\n document.head.appendChild(script[0]);\n },\n abort: function abort() {\n if (_callback2) {\n _callback2();\n }\n }\n };\n }\n });\n var oldCallbacks = [],\n rjsonp = /(=)\\?(?=&|$)|\\?\\?/; // Default jsonp settings\n\n jQuery.ajaxSetup({\n jsonp: \"callback\",\n jsonpCallback: function jsonpCallback() {\n var callback = oldCallbacks.pop() || jQuery.expando + \"_\" + nonce.guid++;\n this[callback] = true;\n return callback;\n }\n }); // Detect, normalize options and install callbacks for jsonp requests\n\n jQuery.ajaxPrefilter(\"json jsonp\", function (s, originalSettings, jqXHR) {\n var callbackName,\n overwritten,\n responseContainer,\n jsonProp = s.jsonp !== false && (rjsonp.test(s.url) ? \"url\" : typeof s.data === \"string\" && (s.contentType || \"\").indexOf(\"application/x-www-form-urlencoded\") === 0 && rjsonp.test(s.data) && \"data\"); // Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\n if (jsonProp || s.dataTypes[0] === \"jsonp\") {\n // Get callback name, remembering preexisting value associated with it\n callbackName = s.jsonpCallback = isFunction(s.jsonpCallback) ? s.jsonpCallback() : s.jsonpCallback; // Insert callback into url or form data\n\n if (jsonProp) {\n s[jsonProp] = s[jsonProp].replace(rjsonp, \"$1\" + callbackName);\n } else if (s.jsonp !== false) {\n s.url += (rquery.test(s.url) ? \"&\" : \"?\") + s.jsonp + \"=\" + callbackName;\n } // Use data converter to retrieve json after script execution\n\n\n s.converters[\"script json\"] = function () {\n if (!responseContainer) {\n jQuery.error(callbackName + \" was not called\");\n }\n\n return responseContainer[0];\n }; // Force json dataType\n\n\n s.dataTypes[0] = \"json\"; // Install callback\n\n overwritten = window[callbackName];\n\n window[callbackName] = function () {\n responseContainer = arguments;\n }; // Clean-up function (fires after converters)\n\n\n jqXHR.always(function () {\n // If previous value didn't exist - remove it\n if (overwritten === undefined) {\n jQuery(window).removeProp(callbackName); // Otherwise restore preexisting value\n } else {\n window[callbackName] = overwritten;\n } // Save back as free\n\n\n if (s[callbackName]) {\n // Make sure that re-using the options doesn't screw things around\n s.jsonpCallback = originalSettings.jsonpCallback; // Save the callback name for future use\n\n oldCallbacks.push(callbackName);\n } // Call if it was a function and we have a response\n\n\n if (responseContainer && isFunction(overwritten)) {\n overwritten(responseContainer[0]);\n }\n\n responseContainer = overwritten = undefined;\n }); // Delegate to script\n\n return \"script\";\n }\n }); // Support: Safari 8 only\n // In Safari 8 documents created via document.implementation.createHTMLDocument\n // collapse sibling forms: the second one becomes a child of the first one.\n // Because of that, this security measure has to be disabled in Safari 8.\n // https://bugs.webkit.org/show_bug.cgi?id=137337\n\n support.createHTMLDocument = function () {\n var body = document.implementation.createHTMLDocument(\"\").body;\n body.innerHTML = \"<form></form><form></form>\";\n return body.childNodes.length === 2;\n }(); // Argument \"data\" should be string of html\n // context (optional): If specified, the fragment will be created in this context,\n // defaults to document\n // keepScripts (optional): If true, will include scripts passed in the html string\n\n\n jQuery.parseHTML = function (data, context, keepScripts) {\n if (typeof data !== \"string\") {\n return [];\n }\n\n if (typeof context === \"boolean\") {\n keepScripts = context;\n context = false;\n }\n\n var base, parsed, scripts;\n\n if (!context) {\n // Stop scripts or inline event handlers from being executed immediately\n // by using document.implementation\n if (support.createHTMLDocument) {\n context = document.implementation.createHTMLDocument(\"\"); // Set the base href for the created document\n // so any parsed elements with URLs\n // are based on the document's URL (gh-2965)\n\n base = context.createElement(\"base\");\n base.href = document.location.href;\n context.head.appendChild(base);\n } else {\n context = document;\n }\n }\n\n parsed = rsingleTag.exec(data);\n scripts = !keepScripts && []; // Single tag\n\n if (parsed) {\n return [context.createElement(parsed[1])];\n }\n\n parsed = buildFragment([data], context, scripts);\n\n if (scripts && scripts.length) {\n jQuery(scripts).remove();\n }\n\n return jQuery.merge([], parsed.childNodes);\n };\n /**\n * Load a url into a page\n */\n\n\n jQuery.fn.load = function (url, params, callback) {\n var selector,\n type,\n response,\n self = this,\n off = url.indexOf(\" \");\n\n if (off > -1) {\n selector = stripAndCollapse(url.slice(off));\n url = url.slice(0, off);\n } // If it's a function\n\n\n if (isFunction(params)) {\n // We assume that it's the callback\n callback = params;\n params = undefined; // Otherwise, build a param string\n } else if (params && _typeof(params) === \"object\") {\n type = \"POST\";\n } // If we have elements to modify, make the request\n\n\n if (self.length > 0) {\n jQuery.ajax({\n url: url,\n // If \"type\" variable is undefined, then \"GET\" method will be used.\n // Make value of this field explicit since\n // user can override it through ajaxSetup method\n type: type || \"GET\",\n dataType: \"html\",\n data: params\n }).done(function (responseText) {\n // Save response for use in complete callback\n response = arguments;\n self.html(selector ? // If a selector was specified, locate the right elements in a dummy div\n // Exclude scripts to avoid IE 'Permission Denied' errors\n jQuery(\"<div>\").append(jQuery.parseHTML(responseText)).find(selector) : // Otherwise use the full result\n responseText); // If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n // but they are ignored because response was set above.\n // If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n }).always(callback && function (jqXHR, status) {\n self.each(function () {\n callback.apply(this, response || [jqXHR.responseText, status, jqXHR]);\n });\n });\n }\n\n return this;\n };\n\n jQuery.expr.pseudos.animated = function (elem) {\n return jQuery.grep(jQuery.timers, function (fn) {\n return elem === fn.elem;\n }).length;\n };\n\n jQuery.offset = {\n setOffset: function setOffset(elem, options, i) {\n var curPosition,\n curLeft,\n curCSSTop,\n curTop,\n curOffset,\n curCSSLeft,\n calculatePosition,\n position = jQuery.css(elem, \"position\"),\n curElem = jQuery(elem),\n props = {}; // Set position first, in-case top/left are set even on static elem\n\n if (position === \"static\") {\n elem.style.position = \"relative\";\n }\n\n curOffset = curElem.offset();\n curCSSTop = jQuery.css(elem, \"top\");\n curCSSLeft = jQuery.css(elem, \"left\");\n calculatePosition = (position === \"absolute\" || position === \"fixed\") && (curCSSTop + curCSSLeft).indexOf(\"auto\") > -1; // Need to be able to calculate position if either\n // top or left is auto and position is either absolute or fixed\n\n if (calculatePosition) {\n curPosition = curElem.position();\n curTop = curPosition.top;\n curLeft = curPosition.left;\n } else {\n curTop = parseFloat(curCSSTop) || 0;\n curLeft = parseFloat(curCSSLeft) || 0;\n }\n\n if (isFunction(options)) {\n // Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n options = options.call(elem, i, jQuery.extend({}, curOffset));\n }\n\n if (options.top != null) {\n props.top = options.top - curOffset.top + curTop;\n }\n\n if (options.left != null) {\n props.left = options.left - curOffset.left + curLeft;\n }\n\n if (\"using\" in options) {\n options.using.call(elem, props);\n } else {\n if (typeof props.top === \"number\") {\n props.top += \"px\";\n }\n\n if (typeof props.left === \"number\") {\n props.left += \"px\";\n }\n\n curElem.css(props);\n }\n }\n };\n jQuery.fn.extend({\n // offset() relates an element's border box to the document origin\n offset: function offset(options) {\n // Preserve chaining for setter\n if (arguments.length) {\n return options === undefined ? this : this.each(function (i) {\n jQuery.offset.setOffset(this, options, i);\n });\n }\n\n var rect,\n win,\n elem = this[0];\n\n if (!elem) {\n return;\n } // Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n // Support: IE <=11 only\n // Running getBoundingClientRect on a\n // disconnected node in IE throws an error\n\n\n if (!elem.getClientRects().length) {\n return {\n top: 0,\n left: 0\n };\n } // Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\n\n rect = elem.getBoundingClientRect();\n win = elem.ownerDocument.defaultView;\n return {\n top: rect.top + win.pageYOffset,\n left: rect.left + win.pageXOffset\n };\n },\n // position() relates an element's margin box to its offset parent's padding box\n // This corresponds to the behavior of CSS absolute positioning\n position: function position() {\n if (!this[0]) {\n return;\n }\n\n var offsetParent,\n offset,\n doc,\n elem = this[0],\n parentOffset = {\n top: 0,\n left: 0\n }; // position:fixed elements are offset from the viewport, which itself always has zero offset\n\n if (jQuery.css(elem, \"position\") === \"fixed\") {\n // Assume position:fixed implies availability of getBoundingClientRect\n offset = elem.getBoundingClientRect();\n } else {\n offset = this.offset(); // Account for the *real* offset parent, which can be the document or its root element\n // when a statically positioned element is identified\n\n doc = elem.ownerDocument;\n offsetParent = elem.offsetParent || doc.documentElement;\n\n while (offsetParent && (offsetParent === doc.body || offsetParent === doc.documentElement) && jQuery.css(offsetParent, \"position\") === \"static\") {\n offsetParent = offsetParent.parentNode;\n }\n\n if (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {\n // Incorporate borders into its offset, since they are outside its content origin\n parentOffset = jQuery(offsetParent).offset();\n parentOffset.top += jQuery.css(offsetParent, \"borderTopWidth\", true);\n parentOffset.left += jQuery.css(offsetParent, \"borderLeftWidth\", true);\n }\n } // Subtract parent offsets and element margins\n\n\n return {\n top: offset.top - parentOffset.top - jQuery.css(elem, \"marginTop\", true),\n left: offset.left - parentOffset.left - jQuery.css(elem, \"marginLeft\", true)\n };\n },\n // This method will return documentElement in the following cases:\n // 1) For the element inside the iframe without offsetParent, this method will return\n // documentElement of the parent window\n // 2) For the hidden or detached element\n // 3) For body or html element, i.e. in case of the html node - it will return itself\n //\n // but those exceptions were never presented as a real life use-cases\n // and might be considered as more preferable results.\n //\n // This logic, however, is not guaranteed and can change at any point in the future\n offsetParent: function offsetParent() {\n return this.map(function () {\n var offsetParent = this.offsetParent;\n\n while (offsetParent && jQuery.css(offsetParent, \"position\") === \"static\") {\n offsetParent = offsetParent.offsetParent;\n }\n\n return offsetParent || documentElement;\n });\n }\n }); // Create scrollLeft and scrollTop methods\n\n jQuery.each({\n scrollLeft: \"pageXOffset\",\n scrollTop: \"pageYOffset\"\n }, function (method, prop) {\n var top = \"pageYOffset\" === prop;\n\n jQuery.fn[method] = function (val) {\n return access(this, function (elem, method, val) {\n // Coalesce documents and windows\n var win;\n\n if (isWindow(elem)) {\n win = elem;\n } else if (elem.nodeType === 9) {\n win = elem.defaultView;\n }\n\n if (val === undefined) {\n return win ? win[prop] : elem[method];\n }\n\n if (win) {\n win.scrollTo(!top ? val : win.pageXOffset, top ? val : win.pageYOffset);\n } else {\n elem[method] = val;\n }\n }, method, val, arguments.length);\n };\n }); // Support: Safari <=7 - 9.1, Chrome <=37 - 49\n // Add the top/left cssHooks using jQuery.fn.position\n // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n // Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n // getComputedStyle returns percent when specified for top/left/bottom/right;\n // rather than make the css module depend on the offset module, just check for it here\n\n jQuery.each([\"top\", \"left\"], function (_i, prop) {\n jQuery.cssHooks[prop] = addGetHookIf(support.pixelPosition, function (elem, computed) {\n if (computed) {\n computed = curCSS(elem, prop); // If curCSS returns percentage, fallback to offset\n\n return rnumnonpx.test(computed) ? jQuery(elem).position()[prop] + \"px\" : computed;\n }\n });\n }); // Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\n\n jQuery.each({\n Height: \"height\",\n Width: \"width\"\n }, function (name, type) {\n jQuery.each({\n padding: \"inner\" + name,\n content: type,\n \"\": \"outer\" + name\n }, function (defaultExtra, funcName) {\n // Margin is only for outerHeight, outerWidth\n jQuery.fn[funcName] = function (margin, value) {\n var chainable = arguments.length && (defaultExtra || typeof margin !== \"boolean\"),\n extra = defaultExtra || (margin === true || value === true ? \"margin\" : \"border\");\n return access(this, function (elem, type, value) {\n var doc;\n\n if (isWindow(elem)) {\n // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n return funcName.indexOf(\"outer\") === 0 ? elem[\"inner\" + name] : elem.document.documentElement[\"client\" + name];\n } // Get document width or height\n\n\n if (elem.nodeType === 9) {\n doc = elem.documentElement; // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n // whichever is greatest\n\n return Math.max(elem.body[\"scroll\" + name], doc[\"scroll\" + name], elem.body[\"offset\" + name], doc[\"offset\" + name], doc[\"client\" + name]);\n }\n\n return value === undefined ? // Get width or height on the element, requesting but not forcing parseFloat\n jQuery.css(elem, type, extra) : // Set width or height on the element\n jQuery.style(elem, type, value, extra);\n }, type, chainable ? margin : undefined, chainable);\n };\n });\n });\n jQuery.each([\"ajaxStart\", \"ajaxStop\", \"ajaxComplete\", \"ajaxError\", \"ajaxSuccess\", \"ajaxSend\"], function (_i, type) {\n jQuery.fn[type] = function (fn) {\n return this.on(type, fn);\n };\n });\n jQuery.fn.extend({\n bind: function bind(types, data, fn) {\n return this.on(types, null, data, fn);\n },\n unbind: function unbind(types, fn) {\n return this.off(types, null, fn);\n },\n delegate: function delegate(selector, types, data, fn) {\n return this.on(types, selector, data, fn);\n },\n undelegate: function undelegate(selector, types, fn) {\n // ( namespace ) or ( selector, types [, fn] )\n return arguments.length === 1 ? this.off(selector, \"**\") : this.off(types, selector || \"**\", fn);\n },\n hover: function hover(fnOver, fnOut) {\n return this.mouseenter(fnOver).mouseleave(fnOut || fnOver);\n }\n });\n jQuery.each((\"blur focus focusin focusout resize scroll click dblclick \" + \"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" + \"change select submit keydown keypress keyup contextmenu\").split(\" \"), function (_i, name) {\n // Handle event binding\n jQuery.fn[name] = function (data, fn) {\n return arguments.length > 0 ? this.on(name, null, data, fn) : this.trigger(name);\n };\n }); // Support: Android <=4.0 only\n // Make sure we trim BOM and NBSP\n\n var rtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g; // Bind a function to a context, optionally partially applying any\n // arguments.\n // jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n // However, it is not slated for removal any time soon\n\n jQuery.proxy = function (fn, context) {\n var tmp, args, proxy;\n\n if (typeof context === \"string\") {\n tmp = fn[context];\n context = fn;\n fn = tmp;\n } // Quick check to determine if target is callable, in the spec\n // this throws a TypeError, but we will just return undefined.\n\n\n if (!isFunction(fn)) {\n return undefined;\n } // Simulated bind\n\n\n args = _slice.call(arguments, 2);\n\n proxy = function proxy() {\n return fn.apply(context || this, args.concat(_slice.call(arguments)));\n }; // Set the guid of unique handler to the same of original handler, so it can be removed\n\n\n proxy.guid = fn.guid = fn.guid || jQuery.guid++;\n return proxy;\n };\n\n jQuery.holdReady = function (hold) {\n if (hold) {\n jQuery.readyWait++;\n } else {\n jQuery.ready(true);\n }\n };\n\n jQuery.isArray = Array.isArray;\n jQuery.parseJSON = JSON.parse;\n jQuery.nodeName = nodeName;\n jQuery.isFunction = isFunction;\n jQuery.isWindow = isWindow;\n jQuery.camelCase = camelCase;\n jQuery.type = toType;\n jQuery.now = Date.now;\n\n jQuery.isNumeric = function (obj) {\n // As of jQuery 3.0, isNumeric is limited to\n // strings and numbers (primitives or objects)\n // that can be coerced to finite numbers (gh-2662)\n var type = jQuery.type(obj);\n return (type === \"number\" || type === \"string\") && // parseFloat NaNs numeric-cast false positives (\"\")\n // ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n // subtraction forces infinities to NaN\n !isNaN(obj - parseFloat(obj));\n };\n\n jQuery.trim = function (text) {\n return text == null ? \"\" : (text + \"\").replace(rtrim, \"\");\n }; // Register as a named AMD module, since jQuery can be concatenated with other\n // files that may use define, but not via a proper concatenation script that\n // understands anonymous AMD modules. A named AMD is safest and most robust\n // way to register. Lowercase jquery is used because AMD module names are\n // derived from file names, and jQuery is normally delivered in a lowercase\n // file name. Do this after creating the global so that if an AMD module wants\n // to call noConflict to hide this version of jQuery, it will work.\n // Note that for maximum portability, libraries that are not jQuery should\n // declare themselves as anonymous modules, and avoid setting a global if an\n // AMD loader is present. jQuery is a special case. For more information, see\n // https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\n\n if (typeof define === \"function\" && define.amd) {\n define(\"jquery\", [], function () {\n return jQuery;\n });\n }\n\n var // Map over jQuery in case of overwrite\n _jQuery = window.jQuery,\n // Map over the $ in case of overwrite\n _$ = window.$;\n\n jQuery.noConflict = function (deep) {\n if (window.$ === jQuery) {\n window.$ = _$;\n }\n\n if (deep && window.jQuery === jQuery) {\n window.jQuery = _jQuery;\n }\n\n return jQuery;\n }; // Expose jQuery and $ identifiers, even in AMD\n // (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n // and CommonJS for browser emulators (#13566)\n\n\n if (typeof noGlobal === \"undefined\") {\n window.jQuery = window.$ = jQuery;\n }\n\n return jQuery;\n});","export default class ModalForm {\n constructor({\n title,\n url,\n submitButtonText,\n modalDidLoad = function() {},\n // Right now this is commented out because it needs to properly unbind\n // events, which we do in this class. If you need this functionality in the\n // future, be sure to modify modalDidHide at the end so that it can be\n // invoked by your subclass.\n // modalDidHide = function() {},\n formSubmitDidClick = function() {},\n formDidReceiveKeydown = function() {},\n formDidSubmit = function() {},\n formDidSubmitSuccessfully = function() {},\n formDidNotSubmitSuccessfully = function() {},\n additionalHandlers = [],\n }) {\n\n this.$modal = $('#modal');\n this.url = url;\n this.title = title;\n this.submitButtonText = submitButtonText;\n this.modalDidLoad = modalDidLoad;\n // this.modalDidHide = modalDidHide;\n this.formSubmitDidClick = formSubmitDidClick;\n this.formDidReceiveKeydown = formDidReceiveKeydown;\n this.formDidSubmit = formDidSubmit;\n this.formDidSubmitSuccessfully = formDidSubmitSuccessfully;\n this.formDidNotSubmitSuccessfully = formDidNotSubmitSuccessfully;\n this.additionalHandlers = additionalHandlers;\n\n this.bindEvents();\n }\n\n ////////////////////////////////////////////////////////////////////////////////\n // Modal Control\n ////////////////////////////////////////////////////////////////////////////////\n show() {\n this.$modal.modal('show');\n }\n\n hide() {\n this.$modal.modal('hide');\n }\n\n\n ////////////////////////////////////////////////////////////////////////////////\n // Form Control\n ////////////////////////////////////////////////////////////////////////////////\n disableSubmit() {\n this.find('.submit').attr('disabled', true);\n this.find('#submit-spinner').removeClass('d-none');\n }\n\n enableSubmit() {\n this.find('.submit').attr('disabled', false);\n this.find('#submit-spinner').addClass('d-none');\n }\n\n submit() {\n const event = new Event('submit', { bubbles: true });\n this.find('form')[0].dispatchEvent(event);\n }\n\n reset() {\n this.find('form')[0].reset();\n this.enableSubmit();\n }\n\n ////////////////////////////////////////////////////////////////////////////////\n // Modal Content API\n ////////////////////////////////////////////////////////////////////////////////\n setTitle(title) {\n this.find('.modal-header h5').html(title);\n }\n\n setSubmitButtonText(text) {\n this.find('.modal-footer .submit').html(text);\n }\n\n loadRemoteContent(url) {\n this.find('.modal-body')\n .load(url, this.modalDidLoad.bind(this));\n }\n\n setContent(content) {\n this.find('.modal-body').html(content);\n }\n\n\n focusOnElement(selector) {\n this.find(selector).focus();\n }\n\n find(selector) {\n return this.$modal.find(selector);\n }\n\n ////////////////////////////////////////////////////////////////////////////////\n // Events\n ////////////////////////////////////////////////////////////////////////////////\n modalShouldShow(event) {\n console.log(\"Called modalShouldShow.\");\n this.setTitle(this.title);\n this.setSubmitButtonText(this.submitButtonText);\n this.loadRemoteContent(this.url);\n }\n\n modalDidHide(event) {\n console.log(\"Called modalDidHide.\");\n this.unbindEvents();\n }\n\n bindEvents() {\n this.$modal.on('show.bs.modal', this.modalShouldShow.bind(this));\n this.$modal.on('hidden.bs.modal', this.modalDidHide.bind(this));\n this.$modal.on('click', '.submit', this.formSubmitDidClick.bind(this));\n this.$modal.on('keydown', 'form', this.formDidReceiveKeydown.bind(this));\n this.$modal.on('submit', 'form', this.formDidSubmit.bind(this));\n this.$modal.on('ajax:success', 'form', this.formDidSubmitSuccessfully.bind(this));\n this.$modal.on('ajax:error', 'form', this.formDidNotSubmitSuccessfully.bind(this));\n this.additionalHandlers.forEach((handler) => this.$modal.on(...handler));\n }\n\n unbindEvents() {\n this.$modal.off('click', '.submit');\n this.$modal.off('keydown', '.form');\n this.$modal.off('submit', 'form');\n this.$modal.off('ajax:success', 'form');\n this.$modal.off('ajax:error', 'form');\n this.$modal.off('show.bs.modal');\n this.$modal.off('hidden.bs.modal');\n\n this.additionalHandlers.forEach((handler) => this.$modal.off(...handler));\n }\n\n}\n","import ModalForm from '../../components/modal_form';\n\nexport default class TripFormModalView {\n constructor({ parentView, url, title, submitButtonText }) {\n this.parentView = parentView;\n this.url = url;\n\n this.modal = new ModalForm({\n title: title,\n submitButtonText: submitButtonText,\n url: this.url,\n formSubmitDidClick: this.formSubmitDidClick.bind(this),\n formDidSubmitSuccessfully: this.formDidSubmitSuccessfully.bind(this),\n formDidNotSubmitSuccessfully: this.formDidNotSubmitSuccessfully.bind(this),\n });\n\n this.modal.show();\n }\n\n ////////////////////////////////////////////////////////////////////////////////\n // Modal Events\n ////////////////////////////////////////////////////////////////////////////////\n formSubmitDidClick() {\n this.modal.disableSubmit();\n this.modal.submit();\n return false;\n }\n\n formDidSubmitSuccessfully(event) {\n let [data, _, xhr] = event.originalEvent.detail;\n\n if ('formDidSubmitSuccessfully' in this.parentView) {\n this.parentView.formDidSubmitSuccessfully(xhr.status, data);\n }\n\n this.modal.reset()\n this.modal.setContent(data.form_html);\n if (xhr.status == 201) { this.modal.hide(); }\n }\n\n formDidNotSubmitSuccessfully(event) {\n const response = $.parseJSON(event.originalEvent.detail[2].responseText);\n this.modal.setContent(response.form_html)\n this.modal.enableSubmit();\n }\n}\n","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar g; // This works in non-strict mode\n\ng = function () {\n return this;\n}();\n\ntry {\n // This works if eval is allowed (see CSP)\n g = g || new Function(\"return this\")();\n} catch (e) {\n // This works if the window reference is available\n if ((typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) === \"object\") g = window;\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\n\nmodule.exports = g;","import ModalForm from '../../components/modal_form';\n\nexport default class TripEntryModalView {\n constructor({ parentView, url, title, submitButtonText }) {\n this.parentView = parentView;\n this.url = url;\n\n this.modal = new ModalForm({\n title: title,\n submitButtonText: submitButtonText,\n url: this.url,\n modalDidLoad: this.modalDidLoad.bind(this),\n formSubmitDidClick: this.formSubmitDidClick.bind(this),\n formDidReceiveKeydown: this.formDidReceiveKeydown.bind(this),\n formDidSubmit: this.formDidSubmit.bind(this),\n formDidSubmitSuccessfully: this.formDidSubmitSuccessfully.bind(this),\n formDidNotSubmitSuccessfully: this.formDidNotSubmitSuccessfully.bind(this),\n\n additionalHandlers: [\n ['change', '#trip_entry_expense_type_id', this.expenseTypeChanged.bind(this)],\n ]\n });\n\n this.modal.show();\n }\n\n ////////////////////////////////////////////////////////////////////////////////\n // Modal Events\n ////////////////////////////////////////////////////////////////////////////////\n modalDidLoad() {\n this.modal.focusOnElement('#trip_entry_expense_type_id');\n }\n\n ////////////////////////////////////////////////////////////////////////////////\n // Form Events\n ////////////////////////////////////////////////////////////////////////////////\n formSubmitDidClick() {\n console.log(\"Hit formSubmitDidClick.\");\n this.modal.disableSubmit();\n this.modal.submit();\n\n return false;\n }\n\n formDidReceiveKeydown(event) {\n if (event.which == 13) { return this.formSubmitDidClick(); }\n }\n\n formDidSubmit(event) {\n console.log(\"Hit formDidSubmit.\");\n const type = this.getExpenseType();\n const category = this.getExpenseCategory();\n const cost = this.getCost();\n\n if (type == 'Advance' && category != 'Cash Advance') {\n event.preventDefault();\n\n window.alert(\"Trip entries with 'Advance' type must also have the category set to 'Cash Advance'.\");\n this.modal.enableSubmit();\n return false;\n }\n\n if (category == 'Fuel Credit' && cost >= 0) {\n event.preventDefault();\n\n window.alert(\"Fuel Credit entries must have a negative cost.\");\n this.modal.enableSubmit();\n return false;\n }\n }\n\n formDidSubmitSuccessfully(event) {\n console.log(\"Hit formDidSubmitSuccessfully.\");\n let data, _, xhr;\n [data, _, xhr] = event.originalEvent.detail;\n\n this.parentView.formDidSubmitSuccessfully(xhr.status, data);\n this.modal.reset();\n\n if (xhr.status == 201) {\n this.modal.setContent(data.form_html);\n this.modalDidLoad();\n }\n else {\n this.modal.hide();\n }\n }\n\n formDidNotSubmitSuccessfully(event) {\n const response = $.parseJSON(event.originalEvent.detail[2].responseText);\n this.modal.setContent(response.form_html);\n this.modal.enableSubmit();\n }\n\n expenseTypeChanged() {\n let $shouldReimburse = this.modal.find('#trip_entry_reimburse_to_driver');\n const type = this.getExpenseType();\n\n if (type == 'Revenue') {\n $shouldReimburse.prop(\"checked\", false);\n $shouldReimburse.attr('disabled', '');\n }\n else {\n $shouldReimburse.removeAttr('disabled');\n }\n\n // All advances are cash advance, so pre-select this.\n if (type == 'Advance') {\n let $categorySelect = this.modal.find('#trip_entry_expense_category_id');\n const cashAdvanceId = $categorySelect\n .find('option:contains(Cash Advance)')\n .val();\n $categorySelect.val(cashAdvanceId);\n }\n }\n\n ////////////////////////////////////////////////////////////////////////////////\n // Accessors\n ////////////////////////////////////////////////////////////////////////////////\n getExpenseType() {\n return this.modal\n .find('#trip_entry_expense_type_id option:selected')\n .text();\n }\n\n getExpenseCategory() {\n return this.modal\n .find('#trip_entry_expense_category_id option:selected')\n .text();\n }\n\n getCost() {\n return new Number(\n this.modal.find('#trip_entry_cost').val()\n );\n }\n\n}\n","module.exports = function (module) {\n if (!module.webpackPolyfill) {\n module.deprecate = function () {};\n\n module.paths = []; // module.parent = undefined by default\n\n if (!module.children) module.children = [];\n Object.defineProperty(module, \"loaded\", {\n enumerable: true,\n get: function get() {\n return module.l;\n }\n });\n Object.defineProperty(module, \"id\", {\n enumerable: true,\n get: function get() {\n return module.i;\n }\n });\n module.webpackPolyfill = 1;\n }\n\n return module;\n};","/**!\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version 1.16.1\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\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\n return 0;\n}();\n\nfunction microtaskDebounce(fn) {\n var called = false;\n return function () {\n if (called) {\n return;\n }\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* 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*/\n\nvar debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\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 */\n\nfunction isFunction(functionToCheck) {\n var getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\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 */\n\n\nfunction getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n } // NOTE: 1 DOM access here\n\n\n var window = element.ownerDocument.defaultView;\n var css = window.getComputedStyle(element, null);\n return property ? css[property] : css;\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 */\n\n\nfunction getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n\n return element.parentNode || element.host;\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 */\n\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\n case '#document':\n return element.body;\n } // Firefox want us to check `-x` and `-y` variations as well\n\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 * 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 */\n\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 * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\n\nfunction isIE(version) {\n if (version === 11) {\n return isIE11;\n }\n\n if (version === 10) {\n return isIE10;\n }\n\n return isIE11 || isIE10;\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 */\n\n\nfunction getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n var noOffsetParent = isIE(10) ? document.body : null; // NOTE: 1 DOM access here\n\n var offsetParent = element.offsetParent || null; // Skip hidden elements which don't have an offsetParent\n\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 } // .offsetParent will return the closest TH, TD or TABLE in case\n // no offsetParent is present, I hate this job...\n\n\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\n return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\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 */\n\n\nfunction getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\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 */\n\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 } // Here we make sure to give as \"start\" the element that comes first in the DOM\n\n\n var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n var start = order ? element1 : element2;\n var end = order ? element2 : element1; // Get common ancestor container\n\n var range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n var commonAncestorContainer = range.commonAncestorContainer; // 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 } // one of the nodes is inside shadowDOM, find which one\n\n\n var element1root = getRoot(element1);\n\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\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 */\n\n\nfunction getScroll(element) {\n var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\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 * 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 */\n\n\nfunction includeScroll(rect, element) {\n var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\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 * 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\n\nfunction getBordersSize(styles, axis) {\n var sideA = axis === 'x' ? 'Left' : 'Top';\n var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n return parseFloat(styles['border' + sideA + 'Width']) + parseFloat(styles['border' + sideB + 'Width']);\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 return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle)\n };\n}\n\nvar classCallCheck = function classCallCheck(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\nvar defineProperty = 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\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 * 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 */\n\n\nfunction getClientRect(offsets) {\n return _extends({}, offsets, {\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height\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 */\n\n\nfunction getBoundingClientRect(element) {\n var rect = {}; // 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\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 }; // subtract scrollbar size from sizes\n\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 var horizScrollbar = element.offsetWidth - width;\n var vertScrollbar = element.offsetHeight - height; // 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\n if (horizScrollbar || vertScrollbar) {\n var styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\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 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 var styles = getStyleComputedProperty(parent);\n var borderTopWidth = parseFloat(styles.borderTopWidth);\n var borderLeftWidth = parseFloat(styles.borderLeftWidth); // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n\n if (fixedPosition && isHTML) {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\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; // 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\n if (!isIE10 && isHTML) {\n var marginTop = parseFloat(styles.marginTop);\n var marginLeft = parseFloat(styles.marginLeft);\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft; // Attach marginTop and marginLeft because in some circumstances we may need them\n\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 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 var scrollTop = !excludeScroll ? getScroll(html) : 0;\n var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\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 return getClientRect(offset);\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 */\n\n\nfunction isFixed(element) {\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n\n var parentNode = getParentNode(element);\n\n if (!parentNode) {\n return false;\n }\n\n return isFixed(parentNode);\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\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\n var el = element.parentElement;\n\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n\n return el || document.documentElement;\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 */\n\n\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false; // NOTE: 1 DOM access here\n\n var boundaries = {\n top: 0,\n left: 0\n };\n var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference)); // Handle viewport case\n\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\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n\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); // In case of HTML, we need a different computation\n\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 } // Add paddings\n\n\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 return boundaries;\n}\n\nfunction getArea(_ref) {\n var width = _ref.width,\n height = _ref.height;\n return width * height;\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 */\n\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 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 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 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 var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n var variation = placement.split('-')[1];\n return computedPlacement + (variation ? '-' + variation : '');\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 */\n\n\nfunction getReferenceOffsets(state, popper, reference) {\n var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\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 */\n\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 * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\n\n\nfunction getOppositePlacement(placement) {\n var hash = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n };\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\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 */\n\n\nfunction getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0]; // Get popper node sizes\n\n var popperRect = getOuterSizes(popper); // Add position, width and height to our offsets object\n\n var popperOffsets = {\n width: popperRect.width,\n height: popperRect.height\n }; // depending by the popper placement we have to compute its offsets slightly differently\n\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 popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n\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 * 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 */\n\n\nfunction find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n } // use `filter` to obtain the same behavior of `find`\n\n\n return arr.filter(check)[0];\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 */\n\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 } // use `find` + `indexOf` if `findIndex` isn't supported\n\n\n var match = find(arr, function (obj) {\n return obj[prop] === value;\n });\n return arr.indexOf(match);\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 */\n\n\nfunction runModifiers(modifiers, data, ends) {\n var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\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\n var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n\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 data = fn(data, modifier);\n }\n });\n return data;\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 */\n\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 }; // compute reference element offsets\n\n data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed); // 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\n data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding); // store the computed placement inside `originalPlacement`\n\n data.originalPlacement = data.placement;\n data.positionFixed = this.options.positionFixed; // compute the popper offsets\n\n data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute'; // run the modifiers\n\n data = runModifiers(this.modifiers, data); // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n\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 * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\n\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 * 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 */\n\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\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n\n return null;\n}\n/**\n * Destroys the popper.\n * @method\n * @memberof Popper\n */\n\n\nfunction destroy() {\n this.state.isDestroyed = true; // touch DOM only if `applyStyle` modifier is enabled\n\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(); // remove the popper if user explicitly asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n\n return this;\n}\n/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\n\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, {\n passive: true\n });\n\n if (!isBody) {\n attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n }\n\n scrollParents.push(target);\n}\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\n\n\nfunction setupEventListeners(reference, options, state, updateBound) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, {\n passive: true\n }); // Scroll event listener on scroll parents\n\n var scrollElement = getScrollParent(reference);\n attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n return state;\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 */\n\n\nfunction enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n }\n}\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\n\n\nfunction removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound); // Remove scroll event listener on scroll parents\n\n state.scrollParents.forEach(function (target) {\n target.removeEventListener('scroll', state.updateBound);\n }); // Reset state\n\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\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 */\n\n\nfunction disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\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 */\n\n\nfunction isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(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 */\n\n\nfunction setStyles(element, styles) {\n Object.keys(styles).forEach(function (prop) {\n var unit = ''; // add unit if the value is numeric and is one of the following\n\n if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n unit = 'px';\n }\n\n element.style[prop] = styles[prop] + unit;\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 */\n\n\nfunction setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function (prop) {\n var value = attributes[prop];\n\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\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 */\n\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); // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n\n setAttributes(data.instance.popper, data.attributes); // if arrowElement is defined and arrowStyles has some properties\n\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\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 */\n\n\nfunction applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n // compute reference element offsets\n var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed); // 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\n var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n popper.setAttribute('x-placement', placement); // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n\n setStyles(popper, {\n position: options.positionFixed ? 'fixed' : 'absolute'\n });\n return options;\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 */\n\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 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 var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;\n var verticalToInteger = !shouldRound ? noRound : round;\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 * @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 */\n\nfunction computeStyle(data, options) {\n var x = options.x,\n y = options.y;\n var popper = data.offsets.popper; // 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\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\n var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n var offsetParent = getOffsetParent(data.instance.popper);\n var offsetParentRect = getBoundingClientRect(offsetParent); // Styles\n\n var styles = {\n position: popper.position\n };\n var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox);\n var sideA = x === 'bottom' ? 'top' : 'bottom';\n var sideB = y === 'right' ? 'left' : 'right'; // 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\n var prefixedProperty = getSupportedPropertyName('transform'); // 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\n var left = void 0,\n top = void 0;\n\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\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\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 } // Attributes\n\n\n var attributes = {\n 'x-placement': data.placement\n }; // Update `data` attributes, styles and arrowStyles\n\n data.attributes = _extends({}, attributes, data.attributes);\n data.styles = _extends({}, styles, data.styles);\n data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n return data;\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 */\n\n\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n var requesting = find(modifiers, function (_ref) {\n var name = _ref.name;\n return name === requestingName;\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\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\n return isRequired;\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 */\n\n\nfunction arrow(data, options) {\n var _data$offsets$arrow; // arrow depends on keepTogether in order to work\n\n\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n var arrowElement = options.element; // if arrowElement is a string, suppose it's a CSS selector\n\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement); // if arrowElement is not found, don't run the modifier\n\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 var isVertical = ['left', 'right'].indexOf(placement) !== -1;\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 // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjunction\n //\n // top/left side\n\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n } // bottom/right side\n\n\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n }\n\n data.offsets.popper = getClientRect(data.offsets.popper); // compute center of the popper\n\n var center = reference[side] + reference[len] / 2 - arrowElementSize / 2; // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n\n var css = getStyleComputedProperty(data.instance.popper);\n var popperMarginSide = parseFloat(css['margin' + sideCapitalized]);\n var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width']);\n var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide; // prevent arrowElement from being placed not contiguously to its popper\n\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\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 return data;\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 */\n\n\nfunction getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n\n return variation;\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 */\n\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']; // Get rid of `auto` `auto-start` and `auto-end`\n\nvar validPlacements = placements.slice(3);\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 */\n\nfunction clockwise(placement) {\n var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\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 * @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 */\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 var placement = data.placement.split('-')[0];\n var placementOpposite = getOppositePlacement(placement);\n var variation = data.placement.split('-')[1] || '';\n var flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n\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 var popperOffsets = data.offsets.popper;\n var refOffsets = data.offsets.reference; // using floor because the reference offsets may contain decimals we are not going to consider here\n\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 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 var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom; // flip the variation if required\n\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1; // flips variation if reference element overflows boundaries\n\n var flippedVariationByRef = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom); // flips variation if popper content overflows boundaries\n\n var flippedVariationByContent = !!options.flipVariationsByContent && (isVertical && variation === 'start' && overflowsRight || isVertical && variation === 'end' && overflowsLeft || !isVertical && variation === 'start' && overflowsBottom || !isVertical && variation === 'end' && overflowsTop);\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 : ''); // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n\n data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\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 */\n\n\nfunction keepTogether(data) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\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\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\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 */\n\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]; // If it's not a number it's an operator, I guess\n\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n var element = void 0;\n\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n\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\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\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 * 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 */\n\n\nfunction parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n var offsets = [0, 0]; // 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\n var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1; // 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\n var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n return frag.trim();\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\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 } // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n\n\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]; // Convert the values with units to absolute pixels to allow our computations\n\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 // 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 }, []) // Here we convert the string values into number values (in px)\n .map(function (str) {\n return toValue(str, measurement, popperOffsets, referenceOffsets);\n });\n }); // Loop trough the offsets arrays and execute the operations\n\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 * @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 */\n\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 var basePlacement = placement.split('-')[0];\n var offsets = void 0;\n\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 * @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 */\n\n\nfunction preventOverflow(data, options) {\n var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper); // 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\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\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\n\n var transformProp = getSupportedPropertyName('transform');\n var popperStyles = data.instance.popper.style; // assignment to help minification\n\n var top = popperStyles.top,\n left = popperStyles.left,\n transform = popperStyles[transformProp];\n popperStyles.top = '';\n popperStyles.left = '';\n popperStyles[transformProp] = '';\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed); // NOTE: DOM access here\n // restores the original style properties after the offsets have been computed\n\n popperStyles.top = top;\n popperStyles.left = left;\n popperStyles[transformProp] = transform;\n options.boundaries = boundaries;\n var order = options.priority;\n var popper = data.offsets.popper;\n var check = {\n primary: function primary(placement) {\n var value = popper[placement];\n\n if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\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\n if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n }\n\n return defineProperty({}, mainSide, value);\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 data.offsets.popper = popper;\n return data;\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 */\n\n\nfunction shift(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var shiftvariation = placement.split('-')[1]; // if shift shiftvariation is specified, run the modifier\n\n if (shiftvariation) {\n var _data$offsets = data.offsets,\n reference = _data$offsets.reference,\n popper = _data$offsets.popper;\n var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n var side = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n var shiftOffsets = {\n start: defineProperty({}, side, reference[side]),\n end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n };\n data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n }\n\n return data;\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 */\n\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 * @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 */\n\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 var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n return data;\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 */\n\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\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n\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\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n\n /** @prop {ModifierFn} */\n fn: offset,\n\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\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n\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 /**\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 /**\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\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n\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\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n\n /** @prop {ModifierFn} */\n fn: arrow,\n\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\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n\n /** @prop {ModifierFn} */\n fn: flip,\n\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 /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n\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 /**\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 /**\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\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n\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\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n\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\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n\n /** @prop {ModifierFn} */\n fn: computeStyle,\n\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 /**\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 /**\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\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n\n /** @prop {ModifierFn} */\n fn: applyStyle,\n\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n\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 * 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 */\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 * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n// Utils\n// Methods\n\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 }; // make update() debounced, so that it only runs at most once-per-tick\n\n\n this.update = debounce(this.update.bind(this)); // with {} we create a new object with the options inside it\n\n this.options = _extends({}, Popper.Defaults, options); // init state\n\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: []\n }; // get reference and popper elements (allow jQuery wrappers)\n\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper; // Deep merge modifiers options\n\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 }); // Refactoring modifiers' list (Object => Array)\n\n this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n return _extends({\n name: name\n }, _this.options.modifiers[name]);\n }) // sort the modifiers by order\n .sort(function (a, b) {\n return a.order - b.order;\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\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 }); // fire the first update to position the popper in the right place\n\n this.update();\n var eventsEnabled = this.options.eventsEnabled;\n\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 } // 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 * Schedules an update. It will run on the next UI update available.\n * @method scheduleUpdate\n * @memberof Popper\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 * 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;\nexport default Popper;","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*\nUnobtrusive JavaScript\nhttps://github.com/rails/rails/blob/master/actionview/app/assets/javascripts\nReleased under the MIT license\n */\n;\n(function () {\n var context = this;\n (function () {\n (function () {\n this.Rails = {\n linkClickSelector: 'a[data-confirm], a[data-method], a[data-remote]:not([disabled]), a[data-disable-with], a[data-disable]',\n buttonClickSelector: {\n selector: 'button[data-remote]:not([form]), button[data-confirm]:not([form])',\n exclude: 'form button'\n },\n inputChangeSelector: 'select[data-remote], input[data-remote], textarea[data-remote]',\n formSubmitSelector: 'form',\n formInputClickSelector: 'form input[type=submit], form input[type=image], form button[type=submit], form button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])',\n formDisableSelector: 'input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled',\n formEnableSelector: 'input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled',\n fileInputSelector: 'input[name][type=file]:not([disabled])',\n linkDisableSelector: 'a[data-disable-with], a[data-disable]',\n buttonDisableSelector: 'button[data-remote][data-disable-with], button[data-remote][data-disable]'\n };\n }).call(this);\n }).call(context);\n var Rails = context.Rails;\n (function () {\n (function () {\n var nonce;\n nonce = null;\n\n Rails.loadCSPNonce = function () {\n var ref;\n return nonce = (ref = document.querySelector(\"meta[name=csp-nonce]\")) != null ? ref.content : void 0;\n };\n\n Rails.cspNonce = function () {\n return nonce != null ? nonce : Rails.loadCSPNonce();\n };\n }).call(this);\n (function () {\n var expando, m;\n m = Element.prototype.matches || Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector;\n\n Rails.matches = function (element, selector) {\n if (selector.exclude != null) {\n return m.call(element, selector.selector) && !m.call(element, selector.exclude);\n } else {\n return m.call(element, selector);\n }\n };\n\n expando = '_ujsData';\n\n Rails.getData = function (element, key) {\n var ref;\n return (ref = element[expando]) != null ? ref[key] : void 0;\n };\n\n Rails.setData = function (element, key, value) {\n if (element[expando] == null) {\n element[expando] = {};\n }\n\n return element[expando][key] = value;\n };\n\n Rails.$ = function (selector) {\n return Array.prototype.slice.call(document.querySelectorAll(selector));\n };\n }).call(this);\n (function () {\n var $, csrfParam, csrfToken;\n $ = Rails.$;\n\n csrfToken = Rails.csrfToken = function () {\n var meta;\n meta = document.querySelector('meta[name=csrf-token]');\n return meta && meta.content;\n };\n\n csrfParam = Rails.csrfParam = function () {\n var meta;\n meta = document.querySelector('meta[name=csrf-param]');\n return meta && meta.content;\n };\n\n Rails.CSRFProtection = function (xhr) {\n var token;\n token = csrfToken();\n\n if (token != null) {\n return xhr.setRequestHeader('X-CSRF-Token', token);\n }\n };\n\n Rails.refreshCSRFTokens = function () {\n var param, token;\n token = csrfToken();\n param = csrfParam();\n\n if (token != null && param != null) {\n return $('form input[name=\"' + param + '\"]').forEach(function (input) {\n return input.value = token;\n });\n }\n };\n }).call(this);\n (function () {\n var CustomEvent, fire, matches, preventDefault;\n matches = Rails.matches;\n CustomEvent = window.CustomEvent;\n\n if (typeof CustomEvent !== 'function') {\n CustomEvent = function CustomEvent(event, params) {\n var evt;\n evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n preventDefault = CustomEvent.prototype.preventDefault;\n\n CustomEvent.prototype.preventDefault = function () {\n var result;\n result = preventDefault.call(this);\n\n if (this.cancelable && !this.defaultPrevented) {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function get() {\n return true;\n }\n });\n }\n\n return result;\n };\n }\n\n fire = Rails.fire = function (obj, name, data) {\n var event;\n event = new CustomEvent(name, {\n bubbles: true,\n cancelable: true,\n detail: data\n });\n obj.dispatchEvent(event);\n return !event.defaultPrevented;\n };\n\n Rails.stopEverything = function (e) {\n fire(e.target, 'ujs:everythingStopped');\n e.preventDefault();\n e.stopPropagation();\n return e.stopImmediatePropagation();\n };\n\n Rails.delegate = function (element, selector, eventType, handler) {\n return element.addEventListener(eventType, function (e) {\n var target;\n target = e.target;\n\n while (!(!(target instanceof Element) || matches(target, selector))) {\n target = target.parentNode;\n }\n\n if (target instanceof Element && handler.call(target, e) === false) {\n e.preventDefault();\n return e.stopPropagation();\n }\n });\n };\n }).call(this);\n (function () {\n var AcceptHeaders, CSRFProtection, createXHR, cspNonce, fire, prepareOptions, processResponse;\n cspNonce = Rails.cspNonce, CSRFProtection = Rails.CSRFProtection, fire = Rails.fire;\n AcceptHeaders = {\n '*': '*/*',\n text: 'text/plain',\n html: 'text/html',\n xml: 'application/xml, text/xml',\n json: 'application/json, text/javascript',\n script: 'text/javascript, application/javascript, application/ecmascript, application/x-ecmascript'\n };\n\n Rails.ajax = function (options) {\n var xhr;\n options = prepareOptions(options);\n xhr = createXHR(options, function () {\n var ref, response;\n response = processResponse((ref = xhr.response) != null ? ref : xhr.responseText, xhr.getResponseHeader('Content-Type'));\n\n if (Math.floor(xhr.status / 100) === 2) {\n if (typeof options.success === \"function\") {\n options.success(response, xhr.statusText, xhr);\n }\n } else {\n if (typeof options.error === \"function\") {\n options.error(response, xhr.statusText, xhr);\n }\n }\n\n return typeof options.complete === \"function\" ? options.complete(xhr, xhr.statusText) : void 0;\n });\n\n if (options.beforeSend != null && !options.beforeSend(xhr, options)) {\n return false;\n }\n\n if (xhr.readyState === XMLHttpRequest.OPENED) {\n return xhr.send(options.data);\n }\n };\n\n prepareOptions = function prepareOptions(options) {\n options.url = options.url || location.href;\n options.type = options.type.toUpperCase();\n\n if (options.type === 'GET' && options.data) {\n if (options.url.indexOf('?') < 0) {\n options.url += '?' + options.data;\n } else {\n options.url += '&' + options.data;\n }\n }\n\n if (AcceptHeaders[options.dataType] == null) {\n options.dataType = '*';\n }\n\n options.accept = AcceptHeaders[options.dataType];\n\n if (options.dataType !== '*') {\n options.accept += ', */*; q=0.01';\n }\n\n return options;\n };\n\n createXHR = function createXHR(options, done) {\n var xhr;\n xhr = new XMLHttpRequest();\n xhr.open(options.type, options.url, true);\n xhr.setRequestHeader('Accept', options.accept);\n\n if (typeof options.data === 'string') {\n xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');\n }\n\n if (!options.crossDomain) {\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n }\n\n CSRFProtection(xhr);\n xhr.withCredentials = !!options.withCredentials;\n\n xhr.onreadystatechange = function () {\n if (xhr.readyState === XMLHttpRequest.DONE) {\n return done(xhr);\n }\n };\n\n return xhr;\n };\n\n processResponse = function processResponse(response, type) {\n var parser, script;\n\n if (typeof response === 'string' && typeof type === 'string') {\n if (type.match(/\\bjson\\b/)) {\n try {\n response = JSON.parse(response);\n } catch (error) {}\n } else if (type.match(/\\b(?:java|ecma)script\\b/)) {\n script = document.createElement('script');\n script.setAttribute('nonce', cspNonce());\n script.text = response;\n document.head.appendChild(script).parentNode.removeChild(script);\n } else if (type.match(/\\b(xml|html|svg)\\b/)) {\n parser = new DOMParser();\n type = type.replace(/;.+/, '');\n\n try {\n response = parser.parseFromString(response, type);\n } catch (error) {}\n }\n }\n\n return response;\n };\n\n Rails.href = function (element) {\n return element.href;\n };\n\n Rails.isCrossDomain = function (url) {\n var e, originAnchor, urlAnchor;\n originAnchor = document.createElement('a');\n originAnchor.href = location.href;\n urlAnchor = document.createElement('a');\n\n try {\n urlAnchor.href = url;\n return !((!urlAnchor.protocol || urlAnchor.protocol === ':') && !urlAnchor.host || originAnchor.protocol + '//' + originAnchor.host === urlAnchor.protocol + '//' + urlAnchor.host);\n } catch (error) {\n e = error;\n return true;\n }\n };\n }).call(this);\n (function () {\n var matches, toArray;\n matches = Rails.matches;\n\n toArray = function toArray(e) {\n return Array.prototype.slice.call(e);\n };\n\n Rails.serializeElement = function (element, additionalParam) {\n var inputs, params;\n inputs = [element];\n\n if (matches(element, 'form')) {\n inputs = toArray(element.elements);\n }\n\n params = [];\n inputs.forEach(function (input) {\n if (!input.name || input.disabled) {\n return;\n }\n\n if (matches(input, 'select')) {\n return toArray(input.options).forEach(function (option) {\n if (option.selected) {\n return params.push({\n name: input.name,\n value: option.value\n });\n }\n });\n } else if (input.checked || ['radio', 'checkbox', 'submit'].indexOf(input.type) === -1) {\n return params.push({\n name: input.name,\n value: input.value\n });\n }\n });\n\n if (additionalParam) {\n params.push(additionalParam);\n }\n\n return params.map(function (param) {\n if (param.name != null) {\n return encodeURIComponent(param.name) + \"=\" + encodeURIComponent(param.value);\n } else {\n return param;\n }\n }).join('&');\n };\n\n Rails.formElements = function (form, selector) {\n if (matches(form, 'form')) {\n return toArray(form.elements).filter(function (el) {\n return matches(el, selector);\n });\n } else {\n return toArray(form.querySelectorAll(selector));\n }\n };\n }).call(this);\n (function () {\n var allowAction, fire, stopEverything;\n fire = Rails.fire, stopEverything = Rails.stopEverything;\n\n Rails.handleConfirm = function (e) {\n if (!allowAction(this)) {\n return stopEverything(e);\n }\n };\n\n allowAction = function allowAction(element) {\n var answer, callback, message;\n message = element.getAttribute('data-confirm');\n\n if (!message) {\n return true;\n }\n\n answer = false;\n\n if (fire(element, 'confirm')) {\n try {\n answer = confirm(message);\n } catch (error) {}\n\n callback = fire(element, 'confirm:complete', [answer]);\n }\n\n return answer && callback;\n };\n }).call(this);\n (function () {\n var disableFormElement, disableFormElements, disableLinkElement, enableFormElement, enableFormElements, enableLinkElement, formElements, getData, matches, setData, stopEverything;\n matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, stopEverything = Rails.stopEverything, formElements = Rails.formElements;\n\n Rails.handleDisabledElement = function (e) {\n var element;\n element = this;\n\n if (element.disabled) {\n return stopEverything(e);\n }\n };\n\n Rails.enableElement = function (e) {\n var element;\n element = e instanceof Event ? e.target : e;\n\n if (matches(element, Rails.linkDisableSelector)) {\n return enableLinkElement(element);\n } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formEnableSelector)) {\n return enableFormElement(element);\n } else if (matches(element, Rails.formSubmitSelector)) {\n return enableFormElements(element);\n }\n };\n\n Rails.disableElement = function (e) {\n var element;\n element = e instanceof Event ? e.target : e;\n\n if (matches(element, Rails.linkDisableSelector)) {\n return disableLinkElement(element);\n } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formDisableSelector)) {\n return disableFormElement(element);\n } else if (matches(element, Rails.formSubmitSelector)) {\n return disableFormElements(element);\n }\n };\n\n disableLinkElement = function disableLinkElement(element) {\n var replacement;\n replacement = element.getAttribute('data-disable-with');\n\n if (replacement != null) {\n setData(element, 'ujs:enable-with', element.innerHTML);\n element.innerHTML = replacement;\n }\n\n element.addEventListener('click', stopEverything);\n return setData(element, 'ujs:disabled', true);\n };\n\n enableLinkElement = function enableLinkElement(element) {\n var originalText;\n originalText = getData(element, 'ujs:enable-with');\n\n if (originalText != null) {\n element.innerHTML = originalText;\n setData(element, 'ujs:enable-with', null);\n }\n\n element.removeEventListener('click', stopEverything);\n return setData(element, 'ujs:disabled', null);\n };\n\n disableFormElements = function disableFormElements(form) {\n return formElements(form, Rails.formDisableSelector).forEach(disableFormElement);\n };\n\n disableFormElement = function disableFormElement(element) {\n var replacement;\n replacement = element.getAttribute('data-disable-with');\n\n if (replacement != null) {\n if (matches(element, 'button')) {\n setData(element, 'ujs:enable-with', element.innerHTML);\n element.innerHTML = replacement;\n } else {\n setData(element, 'ujs:enable-with', element.value);\n element.value = replacement;\n }\n }\n\n element.disabled = true;\n return setData(element, 'ujs:disabled', true);\n };\n\n enableFormElements = function enableFormElements(form) {\n return formElements(form, Rails.formEnableSelector).forEach(enableFormElement);\n };\n\n enableFormElement = function enableFormElement(element) {\n var originalText;\n originalText = getData(element, 'ujs:enable-with');\n\n if (originalText != null) {\n if (matches(element, 'button')) {\n element.innerHTML = originalText;\n } else {\n element.value = originalText;\n }\n\n setData(element, 'ujs:enable-with', null);\n }\n\n element.disabled = false;\n return setData(element, 'ujs:disabled', null);\n };\n }).call(this);\n (function () {\n var stopEverything;\n stopEverything = Rails.stopEverything;\n\n Rails.handleMethod = function (e) {\n var csrfParam, csrfToken, form, formContent, href, link, method;\n link = this;\n method = link.getAttribute('data-method');\n\n if (!method) {\n return;\n }\n\n href = Rails.href(link);\n csrfToken = Rails.csrfToken();\n csrfParam = Rails.csrfParam();\n form = document.createElement('form');\n formContent = \"<input name='_method' value='\" + method + \"' type='hidden' />\";\n\n if (csrfParam != null && csrfToken != null && !Rails.isCrossDomain(href)) {\n formContent += \"<input name='\" + csrfParam + \"' value='\" + csrfToken + \"' type='hidden' />\";\n }\n\n formContent += '<input type=\"submit\" />';\n form.method = 'post';\n form.action = href;\n form.target = link.target;\n form.innerHTML = formContent;\n form.style.display = 'none';\n document.body.appendChild(form);\n form.querySelector('[type=\"submit\"]').click();\n return stopEverything(e);\n };\n }).call(this);\n (function () {\n var ajax,\n fire,\n getData,\n isCrossDomain,\n isRemote,\n matches,\n serializeElement,\n setData,\n stopEverything,\n slice = [].slice;\n matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, fire = Rails.fire, stopEverything = Rails.stopEverything, ajax = Rails.ajax, isCrossDomain = Rails.isCrossDomain, serializeElement = Rails.serializeElement;\n\n isRemote = function isRemote(element) {\n var value;\n value = element.getAttribute('data-remote');\n return value != null && value !== 'false';\n };\n\n Rails.handleRemote = function (e) {\n var button, data, dataType, element, method, url, withCredentials;\n element = this;\n\n if (!isRemote(element)) {\n return true;\n }\n\n if (!fire(element, 'ajax:before')) {\n fire(element, 'ajax:stopped');\n return false;\n }\n\n withCredentials = element.getAttribute('data-with-credentials');\n dataType = element.getAttribute('data-type') || 'script';\n\n if (matches(element, Rails.formSubmitSelector)) {\n button = getData(element, 'ujs:submit-button');\n method = getData(element, 'ujs:submit-button-formmethod') || element.method;\n url = getData(element, 'ujs:submit-button-formaction') || element.getAttribute('action') || location.href;\n\n if (method.toUpperCase() === 'GET') {\n url = url.replace(/\\?.*$/, '');\n }\n\n if (element.enctype === 'multipart/form-data') {\n data = new FormData(element);\n\n if (button != null) {\n data.append(button.name, button.value);\n }\n } else {\n data = serializeElement(element, button);\n }\n\n setData(element, 'ujs:submit-button', null);\n setData(element, 'ujs:submit-button-formmethod', null);\n setData(element, 'ujs:submit-button-formaction', null);\n } else if (matches(element, Rails.buttonClickSelector) || matches(element, Rails.inputChangeSelector)) {\n method = element.getAttribute('data-method');\n url = element.getAttribute('data-url');\n data = serializeElement(element, element.getAttribute('data-params'));\n } else {\n method = element.getAttribute('data-method');\n url = Rails.href(element);\n data = element.getAttribute('data-params');\n }\n\n ajax({\n type: method || 'GET',\n url: url,\n data: data,\n dataType: dataType,\n beforeSend: function beforeSend(xhr, options) {\n if (fire(element, 'ajax:beforeSend', [xhr, options])) {\n return fire(element, 'ajax:send', [xhr]);\n } else {\n fire(element, 'ajax:stopped');\n return false;\n }\n },\n success: function success() {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:success', args);\n },\n error: function error() {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:error', args);\n },\n complete: function complete() {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:complete', args);\n },\n crossDomain: isCrossDomain(url),\n withCredentials: withCredentials != null && withCredentials !== 'false'\n });\n return stopEverything(e);\n };\n\n Rails.formSubmitButtonClick = function (e) {\n var button, form;\n button = this;\n form = button.form;\n\n if (!form) {\n return;\n }\n\n if (button.name) {\n setData(form, 'ujs:submit-button', {\n name: button.name,\n value: button.value\n });\n }\n\n setData(form, 'ujs:formnovalidate-button', button.formNoValidate);\n setData(form, 'ujs:submit-button-formaction', button.getAttribute('formaction'));\n return setData(form, 'ujs:submit-button-formmethod', button.getAttribute('formmethod'));\n };\n\n Rails.preventInsignificantClick = function (e) {\n var data, insignificantMetaClick, link, metaClick, method, nonPrimaryMouseClick;\n link = this;\n method = (link.getAttribute('data-method') || 'GET').toUpperCase();\n data = link.getAttribute('data-params');\n metaClick = e.metaKey || e.ctrlKey;\n insignificantMetaClick = metaClick && method === 'GET' && !data;\n nonPrimaryMouseClick = e.button != null && e.button !== 0;\n\n if (nonPrimaryMouseClick || insignificantMetaClick) {\n return e.stopImmediatePropagation();\n }\n };\n }).call(this);\n (function () {\n var $, CSRFProtection, delegate, disableElement, enableElement, fire, formSubmitButtonClick, getData, handleConfirm, handleDisabledElement, handleMethod, handleRemote, loadCSPNonce, preventInsignificantClick, refreshCSRFTokens;\n fire = Rails.fire, delegate = Rails.delegate, getData = Rails.getData, $ = Rails.$, refreshCSRFTokens = Rails.refreshCSRFTokens, CSRFProtection = Rails.CSRFProtection, loadCSPNonce = Rails.loadCSPNonce, enableElement = Rails.enableElement, disableElement = Rails.disableElement, handleDisabledElement = Rails.handleDisabledElement, handleConfirm = Rails.handleConfirm, preventInsignificantClick = Rails.preventInsignificantClick, handleRemote = Rails.handleRemote, formSubmitButtonClick = Rails.formSubmitButtonClick, handleMethod = Rails.handleMethod;\n\n if (typeof jQuery !== \"undefined\" && jQuery !== null && jQuery.ajax != null) {\n if (jQuery.rails) {\n throw new Error('If you load both jquery_ujs and rails-ujs, use rails-ujs only.');\n }\n\n jQuery.rails = Rails;\n jQuery.ajaxPrefilter(function (options, originalOptions, xhr) {\n if (!options.crossDomain) {\n return CSRFProtection(xhr);\n }\n });\n }\n\n Rails.start = function () {\n if (window._rails_loaded) {\n throw new Error('rails-ujs has already been loaded!');\n }\n\n window.addEventListener('pageshow', function () {\n $(Rails.formEnableSelector).forEach(function (el) {\n if (getData(el, 'ujs:disabled')) {\n return enableElement(el);\n }\n });\n return $(Rails.linkDisableSelector).forEach(function (el) {\n if (getData(el, 'ujs:disabled')) {\n return enableElement(el);\n }\n });\n });\n delegate(document, Rails.linkDisableSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.linkDisableSelector, 'ajax:stopped', enableElement);\n delegate(document, Rails.buttonDisableSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.buttonDisableSelector, 'ajax:stopped', enableElement);\n delegate(document, Rails.linkClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.linkClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.linkClickSelector, 'click', handleConfirm);\n delegate(document, Rails.linkClickSelector, 'click', disableElement);\n delegate(document, Rails.linkClickSelector, 'click', handleRemote);\n delegate(document, Rails.linkClickSelector, 'click', handleMethod);\n delegate(document, Rails.buttonClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.buttonClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.buttonClickSelector, 'click', handleConfirm);\n delegate(document, Rails.buttonClickSelector, 'click', disableElement);\n delegate(document, Rails.buttonClickSelector, 'click', handleRemote);\n delegate(document, Rails.inputChangeSelector, 'change', handleDisabledElement);\n delegate(document, Rails.inputChangeSelector, 'change', handleConfirm);\n delegate(document, Rails.inputChangeSelector, 'change', handleRemote);\n delegate(document, Rails.formSubmitSelector, 'submit', handleDisabledElement);\n delegate(document, Rails.formSubmitSelector, 'submit', handleConfirm);\n delegate(document, Rails.formSubmitSelector, 'submit', handleRemote);\n delegate(document, Rails.formSubmitSelector, 'submit', function (e) {\n return setTimeout(function () {\n return disableElement(e);\n }, 13);\n });\n delegate(document, Rails.formSubmitSelector, 'ajax:send', disableElement);\n delegate(document, Rails.formSubmitSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.formInputClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.formInputClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.formInputClickSelector, 'click', handleConfirm);\n delegate(document, Rails.formInputClickSelector, 'click', formSubmitButtonClick);\n document.addEventListener('DOMContentLoaded', refreshCSRFTokens);\n document.addEventListener('DOMContentLoaded', loadCSPNonce);\n return window._rails_loaded = true;\n };\n\n if (window.Rails === Rails && fire(document, 'rails:attachBindings')) {\n Rails.start();\n }\n }).call(this);\n }).call(this);\n\n if ((typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) === \"object\" && module.exports) {\n module.exports = Rails;\n } else if (typeof define === \"function\" && define.amd) {\n define(Rails);\n }\n}).call(this);","export default class Site {\n constructor() {\n this.initPopovers();\n // this.initCodePrettification();\n this.initTabHistorification();\n this.initDatePicker();\n this.initMultiSelect();\n this.initRemoteTypeahead();\n }\n\n initPopovers() {\n $(\"a[rel=popover]\").popover();\n\n // Diff explanation popover\n $('a#diff_explanation').popover({\n trigger: 'hover',\n html: true,\n placement: 'bottom',\n content: function() { \n var selector = $(this).attr('data-content-css');\n return $(selector).html();\n },\n });\n }\n\n initCodePrettification() {\n // prettyPrint();\n }\n\n initTabHistorification() {\n // If landing on a page with a #! anchor, set the tab as active\n if (location.hash.substr(0, 2) == \"#!\") {\n $(\"a[href='#\" + location.hash.substr(2) + \"']\").tab('show');\n }\n\n // When showing a tab, if it starts with a hash, change its history to be #!\n $(\"a[data-toggle='tab']\").on(\"shown.bs.tab\", function(e) {\n var hash = $(e.target).attr('href');\n\n if (hash.substr(0, 1) == '#') {\n location.replace(\"#!\" + hash.substr(1));\n }\n });\n }\n\n initDatePicker() {\n $('input.datepicker').datepicker({\n format: 'yyyy-mm-dd',\n viewMode: 'years',\n autoclose: true,\n todayBtn: true,\n todayHighlight: true,\n });\n }\n\n initMultiSelect() {\n $('.selectpicker').selectpicker();\n }\n\n initRemoteTypeahead() {\n $(\"[data-toggle='remoteTypeahead']\").remoteTypeahead();\n }\n}\n","import TripFormModalView from './trip_form_modal_view';\n\nexport default class TripFormView {\n constructor() {\n // this.$modal = $('#modal');\n this.events = [];\n\n this.displayErrorsForLookupFields();\n this.observeLookupFields();\n this.observeCompanyCreateClick();\n this.observeDriverCreateClick();\n }\n\n //\n // Because we're using lookup fields which utilise hidden ID fields, any\n // errors on the model actually occur on these fields and are invisible to\n // the user.\n //\n // What we do here is look at each ID field and add the error class to its\n // corresponding visible lookup field if it's in an error state.\n //\n displayErrorsForLookupFields() {\n const fields = ['broker', 'drive_away', 'pick_up_from', 'deliver_to', 'bill_to', 'driver'];\n\n for (var field of fields) {\n const $idField = $(`div.trip_${field}_id`);\n const $lookupField = $(`div.trip_${field}_lookup`);\n const $lookupGroup = $lookupField.find('.input-group');\n\n if ($idField.hasClass('form-group-invalid')) {\n\n $lookupField.addClass('form-group-invalid');\n $lookupGroup.addClass('is-invalid')\n .attr('aria-invalid', true)\n .find('input')\n .addClass('is-invalid')\n .attr('aria-invalid', true);\n\n $idField.find('.invalid-feedback')\n .appendTo($lookupField);\n }\n }\n }\n\n //\n // Adds quick lookups for all companies and the driver.\n //\n observeLookupFields() {\n var fields = ['broker', 'drive_away', 'pick_up_from', 'deliver_to', 'bill_to'];\n\n for (var field of fields) {\n $(`#trip_${field}_lookup`).remoteTypeahead({\n predicate: 'name_cont',\n url: `/${field}s.json`,\n idSelector: `#trip_${field}_id`,\n });\n }\n\n $(\"#trip_driver_lookup\").remoteTypeahead({\n predicate: 'full_name_cont',\n url: '/drivers.json',\n idSelector: \"#trip_driver_id\",\n displayKey: (val) => { return val.full_name },\n additionalParameters: () => { return {company_id_eq: ($('#trip_drive_away_id').val() || '')} }\n });\n }\n\n observeCompanyCreateClick() {\n $('form.trip').on('click', 'button.new_company', (event) => {\n console.log(\"New Company button was clicked!\");\n const href = $(event.currentTarget).attr('href');\n\n this.modalView = new TripFormModalView({\n parentView: this,\n url: href,\n title: \"Add New Company\",\n submitButtonText: \"Create Detail\",\n });\n });\n }\n\n observeDriverCreateClick() {\n $('form.trip').on('click', 'button.new_driver', (event) => {\n console.log(\"New Driver button was clicked!\");\n const href = $(event.currentTarget).attr('href');\n\n this.modalView = new TripFormModalView({\n parentView: this,\n url: href,\n title: \"Add New Driver\",\n submitButtonText: \"Create Driver\",\n });\n });\n }\n}\n","import TripModalView from './trip_modal_view';\n\nexport default class TripView {\n constructor() {\n this.observeChangeStatusClicked()\n\n const buttons = [\n [\"#pick_up\", \"Pick Up\"],\n [\"#deliver\", \"Deliver\"],\n [\"#finalize\", \"Finalize\"],\n ];\n\n\n buttons.forEach(\n (button) => {\n console.log(\"Binding on click for\", button);\n this.observeButtonPress(...button);\n }\n );\n }\n\n observeChangeStatusClicked() {\n $('#trip').on('click', 'a#change_status', function(e) {\n var result = confirm(\"You are about to change the status of a trip. \" +\n \"This change might be visible to the customer. \" +\n \"This should only be done if a mistake has been \" +\n \"made when setting the current status for this \" +\n \"trip. Are you sure you want to change this status?\");\n\n if (result) {\n $('#status_read').addClass('d-none');\n $('#status_write').removeClass('d-none');\n }\n\n e.preventDefault();\n });\n }\n\n observeButtonPress(selector, text) {\n $('#trip').on('click', selector, (e) => {\n e.preventDefault();\n console.log(`Clicked ${selector} button...`);\n\n const url = $(e.currentTarget).attr('href');\n const title = `Confirm ${text}`;\n const submitUrl = $(e.currentTarget).data('submit-url');\n\n this.modalView = new TripModalView({\n parentView: this,\n url: url,\n title: title,\n submitButtonText: title,\n dataSubmitUrl: submitUrl,\n });\n\n });\n }\n}\n","import ModalForm from '../../components/modal_form';\n\nexport default class TripModalView {\n constructor({ parentView, url, title, submitButtonText }) {\n this.parentView = parentView;\n this.url = url;\n\n this.modal = new ModalForm({\n title: title,\n submitButtonText: submitButtonText,\n url: this.url,\n formDidSubmit: this.formDidSubmit.bind(this),\n formSubmitDidClick: this.formSubmitDidClick.bind(this),\n });\n\n this.modal.show();\n }\n\n ////////////////////////////////////////////////////////////////////////////////\n // Modal Events\n ////////////////////////////////////////////////////////////////////////////////\n formSubmitDidClick(event) {\n this.modal.disableSubmit();\n this.modal.submit();\n }\n\n formDidSubmit(event) {\n // Something funky is happening with this because it's not technically a\n // remote form: instead, we're using native submit to send the form for\n // server-side processing / re-rendering.\n //\n // In other circumstances, we want to use the proper event bubbling that\n // happens in ModalForm, but in these limited circumstances it doesn't work.\n // Hence we need to just submit without triggering an event.\n\n this.modal.find('form')[0].submit();\n }\n}\n","export default class TripAttachmentFormView {\n constructor() {\n this.fileUploadSelector = '#file-upload';\n\n this.initFileUpload();\n this.observeDelete();\n this.events = [];\n\n }\n\n initFileUpload = function() {\n var $uploader = $(this.fileUploadSelector);\n if ($uploader.length == 0) { return; }\n\n $uploader.fileupload({\n url: $(\"meta[name='s3-upload-url']\").attr('content'),\n paramName: 'file',\n type: 'POST',\n dropZone: $(document),\n add: this.onFileAdd.bind(this),\n progress: this.onFileProgress.bind(this),\n fail: this.onFail.bind(this),\n stop: this.onStop.bind(this),\n });\n\n $(document).on('dragenter', function(e) { \n $('#drop-zone-overlay').addClass('hovering')\n .delay(500)\n .addClass('darken');\n });\n\n $('#drop-zone-overlay').on('dragleave', function(e) { \n $('#drop-zone-overlay').removeClass('darken')\n .removeClass('hovering');\n });\n\n $('#drop-zone-overlay').on('drop', function(e) {\n $(e.currentTarget).removeClass('darken')\n .removeClass('hovering');\n });\n }\n\n onFileAdd = function(event, data) {\n var $row = $('#trip_attachment_tmpl table tbody tr')\n .first()\n .clone();\n\n var actions = $row.find('.actions').remove();\n\n $row.find('.file_name').text(data.files[0].name);\n $row.find('.size').text('');\n\n // TODO: move markup to view\n $row\n .append($('<td class=\"actions\"><i class=\"fa.fa-sync.fa-spin\" /></td>'))\n .appendTo('#trip_attachments table tbody');\n\n data.context = { el: $row, actions: actions };\n\n $.ajax({\n url: $('#file-upload').data('signing-url'),\n type: 'GET',\n dataType: 'json',\n success: this.onSignedUrlSuccess.bind(this, data),\n error: this.onSignedUrlFailure.bind(this, data),\n data: {\n trip_attachment: {\n file_name: data.files[0].name,\n },\n },\n });\n }\n\n onSignedUrlSuccess = function(data, response) {\n var actions = data.context.el.find('.actions');\n // TODO: move markup to view\n actions\n .empty()\n .append('<div class=\"progress progress-striped active\"><div class=\"progress-bar\" /></div>');\n\n data.formData = response;\n data.submit().done(this.onSuccess.bind(this, data));\n }\n\n onSignedUrlFailure = function(data, error) {\n row.find('.actions').html(\"<i class='fa fa-exclamation-circle'></i>\");\n }\n\n onFileProgress = function(event, data) {\n var pct = parseInt(data.loaded / data.total * 100, 10);\n data.context.el.find('.progress-bar').css('width', pct + \"%\")\n }\n\n onFail = function(event, data) {\n return;\n }\n\n onStop = function(event, data) {\n return;\n }\n\n onSuccess = function(data, scope, success, response) {\n var key = $(response.responseXML).find('Key').text();\n\n $.ajax({\n url: $(this.fileUploadSelector).data('save-url'),\n type: 'POST',\n success: this.onCreateSuccess.bind(this, data),\n error: this.onCreateError.bind(this, data),\n data: {\n trip_attachment: {\n file_uid: key,\n },\n },\n });\n }\n\n onCreateSuccess = function(data, response) {\n data.context.el.replaceWith($(response));\n }\n\n onCreateError = function(data, error) {\n return;\n }\n\n observeDelete = function() {\n $(document).on('click', '#trip_attachments table td.actions a.destroy', function(e) {\n var conf = confirm(\"Are you sure you want to delete this line? You can't undo this deletion -- it is permanent.\");\n\n if (conf) {\n var $this = $(e.currentTarget);\n\n $.ajax({\n url: $this.attr('href'),\n data: { _method: 'delete' },\n type: 'post',\n dataType: 'json',\n\n success: function(data) {\n console.log(\"Completed with\", data);\n $this.parents('tr').remove()\n },\n });\n }\n\n return false;\n });\n }\n}\n","import TripEntryModalView from './trip_entry_modal_view';\n\nexport default class TripEntryFormView {\n constructor() {\n this.observeCreateClick();\n this.observeHoverEdit();\n this.observeDelete();\n }\n\n ////////////////////////////////////////////////////////////////////////////////\n // Observers\n ////////////////////////////////////////////////////////////////////////////////\n observeCreateClick() {\n var _this = this;\n\n $('a#new_trip_entry').click(function(e) {\n e.preventDefault();\n const url = $(e.currentTarget).attr('href');\n\n this.modalView = new TripEntryModalView({\n parentView: _this,\n url: url,\n title: \"Add New Detail\",\n submitButtonText: \"Create Detail\",\n });\n });\n }\n\n observeHoverEdit() {\n var _this = this;\n\n $(document).on('click', '#trip_entries > table td:not(.actions)', function(e) {\n const $tr = $(e.currentTarget).parents('tr');\n const editable = $tr.data('editable');\n const url = $tr.data('edit-url');\n\n if (editable) {\n this.modalView = new TripEntryModalView({\n parentView: _this,\n url: url,\n title: \"Editing Detail\",\n submitButtonText: \"Update Detail\",\n });\n }\n });\n }\n\n observeDelete() {\n var _this = this;\n\n $(document).on('click', '#trip_entries table td.actions a.destroy', function(e) {\n let actuallyDelete = confirm(\"Are you sure you want to delete this line? You can't undo this deletion -- it is permanent.\")\n\n if (actuallyDelete) {\n var $this = $(e.currentTarget);\n\n $.ajax({\n url: $this.attr('href'),\n data: { _method: 'delete' },\n type: 'post',\n dataType: 'json',\n success: function(data) {\n console.log(\"Completed with\", data);\n _this.updateCompositeFields(data.composite_html);\n $this.parents('tr').remove();\n },\n });\n }\n\n return false;\n });\n }\n\n ////////////////////////////////////////////////////////////////////////////////\n // Modal Management\n ////////////////////////////////////////////////////////////////////////////////\n formDidSubmitSuccessfully(status, data) {\n (status == 201) ?\n this.appendToTable(data.row_html) :\n this.replaceTableRow(data.row_id, data.row_html)\n\n this.updateCompositeFields(data.composite_html);\n }\n\n updateCompositeFields(html) {\n $('#trip #fiscal').html(html);\n }\n\n appendToTable(html) {\n $('#trip_entries > table').append(html);\n }\n\n replaceTableRow(selector, html) {\n $('#trip_entries > table').find(selector).replaceWith(html);\n }\n\n};\n","export default class TripQuickOpenView {\n constructor() {\n this.setRemoteTypeahead()\n }\n\n setRemoteTypeahead() {\n $('#trip_lookup').remoteTypeahead({\n idSelector: \"#trip_id\",\n url: \"/trips.json\",\n predicate: \"internal_id_cont\",\n displayKey: \"internal_id\",\n success: this.onRemoteTypeaheadSuccess.bind(this),\n });\n }\n\n onRemoteTypeaheadSuccess(entity, options) {\n window.location.pathname = `/trips/${entity.id}`;\n return true\n }\n}\n","import TripFormModalView from '../../trips/scripts/trip_form_modal_view';\n\nexport default class UserFormView {\n constructor() {\n this.observeDriverLookup();\n this.observeDriverCreateClick();\n // this.observeLoaded();\n // this.observeClosing();\n\n // this.events = [];\n }\n\n observeDriverLookup() {\n $('#user_driver_lookup').remoteTypeahead({\n predicate: 'full_name_cont',\n url: '/drivers.json',\n idSelector: '#user_driver_id',\n displayKey: (val) => { return val.full_name },\n });\n }\n\n observeDriverCreateClick() {\n $('form.user_form').on('click', 'button.new_driver', (event) => {\n console.log(\"New Driver button was clicked\");\n const href = $(event.currentTarget).attr('href');\n\n this.modalView = new TripFormModalView({\n parentView: this,\n url: href,\n title: \"Add New Driver\",\n submitButtonText: \"Create Driver\",\n });\n });\n }\n\n formDidSubmitSuccessfully(status, data) {\n if (status == 201) {\n const selector = '#user_driver_id';\n\n $('#user_driver_lookup').val(data.driver.to_select_option);\n $('#user_driver_id').val(data.driver.id);\n }\n }\n}\n","/* eslint no-console:0 */\n\nimport Rails from 'rails-ujs';\nRails.start();\n\n// Library Code\nimport 'code-prettify/src/prettify'; // Code Prettify\nimport 'font-awesome/css/font-awesome.min.css' // Font-Awesome\nimport 'popper.js/dist/popper.min.js'; // Bootstrap\nimport 'bootstrap/dist/js/bootstrap';\nimport 'bootstrap-datepicker/dist/js/bootstrap-datepicker' // Bootstrap datepicker: for dates\nimport 'bootstrap-datepicker/dist/css/bootstrap-datepicker'\nimport 'blueimp-file-upload/js/jquery.fileupload' // Jquery-file-upload: direct-to-cloud-uploads\nimport 'blueimp-file-upload/css/jquery.fileupload'\nimport 'bootstrap-select/dist/js/bootstrap-select' // Bootstrap select: multi-select for statuses\nimport 'bootstrap-select/dist/css/bootstrap-select'\nimport 'corejs-typeahead/dist/typeahead.jquery' // Twitter Typeahead + Wrapper\nimport \"../src/jquery/remote_typeahead\";\n// TODO: Prettify CSS?\n\n// App Proper\nimport '../src/site';\n","/**\n * @license\n * Copyright (C) 2006 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * some functions for browser-side pretty printing of code contained in html.\n *\n * <p>\n * For a fairly comprehensive set of languages see the\n * <a href=\"https://github.com/google/code-prettify#for-which-languages-does-it-work\">README</a>\n * file that came with this source. At a minimum, the lexer should work on a\n * number of languages including C and friends, Java, Python, Bash, SQL, HTML,\n * XML, CSS, Javascript, and Makefiles. It works passably on Ruby, PHP and Awk\n * and a subset of Perl, but, because of commenting conventions, doesn't work on\n * Smalltalk, Lisp-like, or CAML-like languages without an explicit lang class.\n * <p>\n * Usage: <ol>\n * <li> include this source file in an html page via\n * {@code <script type=\"text/javascript\" src=\"/path/to/prettify.js\"></script>}\n * <li> define style rules. See the example page for examples.\n * <li> mark the {@code <pre>} and {@code <code>} tags in your source with\n * {@code class=prettyprint.}\n * You can also use the (html deprecated) {@code <xmp>} tag, but the pretty\n * printer needs to do more substantial DOM manipulations to support that, so\n * some css styles may not be preserved.\n * </ol>\n * That's it. I wanted to keep the API as simple as possible, so there's no\n * need to specify which language the code is in, but if you wish, you can add\n * another class to the {@code <pre>} or {@code <code>} element to specify the\n * language, as in {@code <pre class=\"prettyprint lang-java\">}. Any class that\n * starts with \"lang-\" followed by a file extension, specifies the file type.\n * See the \"lang-*.js\" files in this directory for code that implements\n * per-language file handlers.\n * <p>\n * Change log:<br>\n * cbeust, 2006/08/22\n * <blockquote>\n * Java annotations (start with \"@\") are now captured as literals (\"lit\")\n * </blockquote>\n * @requires console\n */\n// JSLint declarations\n\n/*global console, document, navigator, setTimeout, window, define */\n\n/**\n* @typedef {!Array.<number|string>}\n* Alternating indices and the decorations that should be inserted there.\n* The indices are monotonically increasing.\n*/\nvar DecorationsT;\n/**\n* @typedef {!{\n* sourceNode: !Element,\n* pre: !(number|boolean),\n* langExtension: ?string,\n* numberLines: ?(number|boolean),\n* sourceCode: ?string,\n* spans: ?(Array.<number|Node>),\n* basePos: ?number,\n* decorations: ?DecorationsT\n* }}\n* <dl>\n* <dt>sourceNode<dd>the element containing the source\n* <dt>sourceCode<dd>source as plain text\n* <dt>pre<dd>truthy if white-space in text nodes\n* should be considered significant.\n* <dt>spans<dd> alternating span start indices into source\n* and the text node or element (e.g. {@code <BR>}) corresponding to that\n* span.\n* <dt>decorations<dd>an array of style classes preceded\n* by the position at which they start in job.sourceCode in order\n* <dt>basePos<dd>integer position of this.sourceCode in the larger chunk of\n* source.\n* </dl>\n*/\n\nvar JobT;\n/**\n* @typedef {!{\n* sourceCode: string,\n* spans: !(Array.<number|Node>)\n* }}\n* <dl>\n* <dt>sourceCode<dd>source as plain text\n* <dt>spans<dd> alternating span start indices into source\n* and the text node or element (e.g. {@code <BR>}) corresponding to that\n* span.\n* </dl>\n*/\n\nvar SourceSpansT;\n/** @define {boolean} */\n\nvar IN_GLOBAL_SCOPE = false;\nvar HACK_TO_FIX_JS_INCLUDE_PL;\n/**\n * {@type !{\n * 'createSimpleLexer': function (Array, Array): (function (JobT)),\n * 'registerLangHandler': function (function (JobT), Array.<string>),\n * 'PR_ATTRIB_NAME': string,\n * 'PR_ATTRIB_NAME': string,\n * 'PR_ATTRIB_VALUE': string,\n * 'PR_COMMENT': string,\n * 'PR_DECLARATION': string,\n * 'PR_KEYWORD': string,\n * 'PR_LITERAL': string,\n * 'PR_NOCODE': string,\n * 'PR_PLAIN': string,\n * 'PR_PUNCTUATION': string,\n * 'PR_SOURCE': string,\n * 'PR_STRING': string,\n * 'PR_TAG': string,\n * 'PR_TYPE': string,\n * 'prettyPrintOne': function (string, string, number|boolean),\n * 'prettyPrint': function (?function, ?(HTMLElement|HTMLDocument))\n * }}\n * @const\n */\n\nvar PR;\n/**\n * Split {@code prettyPrint} into multiple timeouts so as not to interfere with\n * UI events.\n * If set to {@code false}, {@code prettyPrint()} is synchronous.\n */\n\nwindow['PR_SHOULD_USE_CONTINUATION'] = true;\n/**\n * Pretty print a chunk of code.\n * @param {string} sourceCodeHtml The HTML to pretty print.\n * @param {string} opt_langExtension The language name to use.\n * Typically, a filename extension like 'cpp' or 'java'.\n * @param {number|boolean} opt_numberLines True to number lines,\n * or the 1-indexed number of the first line in sourceCodeHtml.\n * @return {string} code as html, but prettier\n */\n\nvar prettyPrintOne;\n/**\n * Find all the {@code <pre>} and {@code <code>} tags in the DOM with\n * {@code class=prettyprint} and prettify them.\n *\n * @param {Function} opt_whenDone called when prettifying is done.\n * @param {HTMLElement|HTMLDocument} opt_root an element or document\n * containing all the elements to pretty print.\n * Defaults to {@code document.body}.\n */\n\nvar prettyPrint;\n\n(function () {\n var win = window; // Keyword lists for various languages.\n // We use things that coerce to strings to make them compact when minified\n // and to defeat aggressive optimizers that fold large string constants.\n\n var FLOW_CONTROL_KEYWORDS = [\"break,continue,do,else,for,if,return,while\"];\n var C_KEYWORDS = [FLOW_CONTROL_KEYWORDS, \"auto,case,char,const,default,\" + \"double,enum,extern,float,goto,inline,int,long,register,restrict,short,signed,\" + \"sizeof,static,struct,switch,typedef,union,unsigned,void,volatile\"];\n var COMMON_KEYWORDS = [C_KEYWORDS, \"catch,class,delete,false,import,\" + \"new,operator,private,protected,public,this,throw,true,try,typeof\"];\n var CPP_KEYWORDS = [COMMON_KEYWORDS, \"alignas,alignof,align_union,asm,axiom,bool,\" + \"concept,concept_map,const_cast,constexpr,decltype,delegate,\" + \"dynamic_cast,explicit,export,friend,generic,late_check,\" + \"mutable,namespace,noexcept,noreturn,nullptr,property,reinterpret_cast,static_assert,\" + \"static_cast,template,typeid,typename,using,virtual,where\"];\n var JAVA_KEYWORDS = [COMMON_KEYWORDS, \"abstract,assert,boolean,byte,extends,finally,final,implements,import,\" + \"instanceof,interface,null,native,package,strictfp,super,synchronized,\" + \"throws,transient\"];\n var CSHARP_KEYWORDS = [COMMON_KEYWORDS, \"abstract,add,alias,as,ascending,async,await,base,bool,by,byte,checked,decimal,delegate,descending,\" + \"dynamic,event,finally,fixed,foreach,from,get,global,group,implicit,in,interface,\" + \"internal,into,is,join,let,lock,null,object,out,override,orderby,params,\" + \"partial,readonly,ref,remove,sbyte,sealed,select,set,stackalloc,string,select,uint,ulong,\" + \"unchecked,unsafe,ushort,value,var,virtual,where,yield\"];\n var COFFEE_KEYWORDS = \"all,and,by,catch,class,else,extends,false,finally,\" + \"for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,\" + \"throw,true,try,unless,until,when,while,yes\";\n var JSCRIPT_KEYWORDS = [COMMON_KEYWORDS, \"abstract,async,await,constructor,debugger,enum,eval,export,function,\" + \"get,implements,instanceof,interface,let,null,set,undefined,var,with,\" + \"yield,Infinity,NaN\"];\n var PERL_KEYWORDS = \"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,\" + \"goto,if,import,last,local,my,next,no,our,print,package,redo,require,\" + \"sub,undef,unless,until,use,wantarray,while,BEGIN,END\";\n var PYTHON_KEYWORDS = [FLOW_CONTROL_KEYWORDS, \"and,as,assert,class,def,del,\" + \"elif,except,exec,finally,from,global,import,in,is,lambda,\" + \"nonlocal,not,or,pass,print,raise,try,with,yield,\" + \"False,True,None\"];\n var RUBY_KEYWORDS = [FLOW_CONTROL_KEYWORDS, \"alias,and,begin,case,class,\" + \"def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,\" + \"rescue,retry,self,super,then,true,undef,unless,until,when,yield,\" + \"BEGIN,END\"];\n var SH_KEYWORDS = [FLOW_CONTROL_KEYWORDS, \"case,done,elif,esac,eval,fi,\" + \"function,in,local,set,then,until\"];\n var ALL_KEYWORDS = [CPP_KEYWORDS, CSHARP_KEYWORDS, JAVA_KEYWORDS, JSCRIPT_KEYWORDS, PERL_KEYWORDS, PYTHON_KEYWORDS, RUBY_KEYWORDS, SH_KEYWORDS];\n var C_TYPES = /^(DIR|FILE|array|vector|(de|priority_)?queue|(forward_)?list|stack|(const_)?(reverse_)?iterator|(unordered_)?(multi)?(set|map)|bitset|u?(int|float)\\d*)\\b/; // token style names. correspond to css classes\n\n /**\n * token style for a string literal\n * @const\n */\n\n var PR_STRING = 'str';\n /**\n * token style for a keyword\n * @const\n */\n\n var PR_KEYWORD = 'kwd';\n /**\n * token style for a comment\n * @const\n */\n\n var PR_COMMENT = 'com';\n /**\n * token style for a type\n * @const\n */\n\n var PR_TYPE = 'typ';\n /**\n * token style for a literal value. e.g. 1, null, true.\n * @const\n */\n\n var PR_LITERAL = 'lit';\n /**\n * token style for a punctuation string.\n * @const\n */\n\n var PR_PUNCTUATION = 'pun';\n /**\n * token style for plain text.\n * @const\n */\n\n var PR_PLAIN = 'pln';\n /**\n * token style for an sgml tag.\n * @const\n */\n\n var PR_TAG = 'tag';\n /**\n * token style for a markup declaration such as a DOCTYPE.\n * @const\n */\n\n var PR_DECLARATION = 'dec';\n /**\n * token style for embedded source.\n * @const\n */\n\n var PR_SOURCE = 'src';\n /**\n * token style for an sgml attribute name.\n * @const\n */\n\n var PR_ATTRIB_NAME = 'atn';\n /**\n * token style for an sgml attribute value.\n * @const\n */\n\n var PR_ATTRIB_VALUE = 'atv';\n /**\n * A class that indicates a section of markup that is not code, e.g. to allow\n * embedding of line numbers within code listings.\n * @const\n */\n\n var PR_NOCODE = 'nocode';\n /**\n * A set of tokens that can precede a regular expression literal in\n * javascript\n * http://web.archive.org/web/20070717142515/http://www.mozilla.org/js/language/js20/rationale/syntax.html\n * has the full list, but I've removed ones that might be problematic when\n * seen in languages that don't support regular expression literals.\n *\n * <p>Specifically, I've removed any keywords that can't precede a regexp\n * literal in a syntactically legal javascript program, and I've removed the\n * \"in\" keyword since it's not a keyword in many languages, and might be used\n * as a count of inches.\n *\n * <p>The link above does not accurately describe EcmaScript rules since\n * it fails to distinguish between (a=++/b/i) and (a++/b/i) but it works\n * very well in practice.\n *\n * @private\n * @const\n */\n\n var REGEXP_PRECEDER_PATTERN = '(?:^^\\\\.?|[+-]|[!=]=?=?|\\\\#|%=?|&&?=?|\\\\(|\\\\*=?|[+\\\\-]=|->|\\\\/=?|::?|<<?=?|>>?>?=?|,|;|\\\\?|@|\\\\[|~|{|\\\\^\\\\^?=?|\\\\|\\\\|?=?|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\\\s*'; // CAVEAT: this does not properly handle the case where a regular\n // expression immediately follows another since a regular expression may\n // have flags for case-sensitivity and the like. Having regexp tokens\n // adjacent is not valid in any language I'm aware of, so I'm punting.\n // TODO: maybe style special characters inside a regexp as punctuation.\n\n /**\n * Given a group of {@link RegExp}s, returns a {@code RegExp} that globally\n * matches the union of the sets of strings matched by the input RegExp.\n * Since it matches globally, if the input strings have a start-of-input\n * anchor (/^.../), it is ignored for the purposes of unioning.\n * @param {Array.<RegExp>} regexs non multiline, non-global regexs.\n * @return {RegExp} a global regex.\n */\n\n function combinePrefixPatterns(regexs) {\n var capturedGroupIndex = 0;\n var needToFoldCase = false;\n var ignoreCase = false;\n\n for (var i = 0, n = regexs.length; i < n; ++i) {\n var regex = regexs[i];\n\n if (regex.ignoreCase) {\n ignoreCase = true;\n } else if (/[a-z]/i.test(regex.source.replace(/\\\\u[0-9a-f]{4}|\\\\x[0-9a-f]{2}|\\\\[^ux]/gi, ''))) {\n needToFoldCase = true;\n ignoreCase = false;\n break;\n }\n }\n\n var escapeCharToCodeUnit = {\n 'b': 8,\n 't': 9,\n 'n': 0xa,\n 'v': 0xb,\n 'f': 0xc,\n 'r': 0xd\n };\n\n function decodeEscape(charsetPart) {\n var cc0 = charsetPart.charCodeAt(0);\n\n if (cc0 !== 92\n /* \\\\ */\n ) {\n return cc0;\n }\n\n var c1 = charsetPart.charAt(1);\n cc0 = escapeCharToCodeUnit[c1];\n\n if (cc0) {\n return cc0;\n } else if ('0' <= c1 && c1 <= '7') {\n return parseInt(charsetPart.substring(1), 8);\n } else if (c1 === 'u' || c1 === 'x') {\n return parseInt(charsetPart.substring(2), 16);\n } else {\n return charsetPart.charCodeAt(1);\n }\n }\n\n function encodeEscape(charCode) {\n if (charCode < 0x20) {\n return (charCode < 0x10 ? '\\\\x0' : '\\\\x') + charCode.toString(16);\n }\n\n var ch = String.fromCharCode(charCode);\n return ch === '\\\\' || ch === '-' || ch === ']' || ch === '^' ? \"\\\\\" + ch : ch;\n }\n\n function caseFoldCharset(charSet) {\n var charsetParts = charSet.substring(1, charSet.length - 1).match(new RegExp(\"\\\\\\\\u[0-9A-Fa-f]{4}\" + '|\\\\\\\\x[0-9A-Fa-f]{2}' + '|\\\\\\\\[0-3][0-7]{0,2}' + '|\\\\\\\\[0-7]{1,2}' + '|\\\\\\\\[\\\\s\\\\S]' + '|-' + '|[^-\\\\\\\\]', 'g'));\n var ranges = [];\n var inverse = charsetParts[0] === '^';\n var out = ['['];\n\n if (inverse) {\n out.push('^');\n }\n\n for (var i = inverse ? 1 : 0, n = charsetParts.length; i < n; ++i) {\n var p = charsetParts[i];\n\n if (/\\\\[bdsw]/i.test(p)) {\n // Don't muck with named groups.\n out.push(p);\n } else {\n var start = decodeEscape(p);\n var end;\n\n if (i + 2 < n && '-' === charsetParts[i + 1]) {\n end = decodeEscape(charsetParts[i + 2]);\n i += 2;\n } else {\n end = start;\n }\n\n ranges.push([start, end]); // If the range might intersect letters, then expand it.\n // This case handling is too simplistic.\n // It does not deal with non-latin case folding.\n // It works for latin source code identifiers though.\n\n if (!(end < 65 || start > 122)) {\n if (!(end < 65 || start > 90)) {\n ranges.push([Math.max(65, start) | 32, Math.min(end, 90) | 32]);\n }\n\n if (!(end < 97 || start > 122)) {\n ranges.push([Math.max(97, start) & ~32, Math.min(end, 122) & ~32]);\n }\n }\n }\n } // [[1, 10], [3, 4], [8, 12], [14, 14], [16, 16], [17, 17]]\n // -> [[1, 12], [14, 14], [16, 17]]\n\n\n ranges.sort(function (a, b) {\n return a[0] - b[0] || b[1] - a[1];\n });\n var consolidatedRanges = [];\n var lastRange = [];\n\n for (var i = 0; i < ranges.length; ++i) {\n var range = ranges[i];\n\n if (range[0] <= lastRange[1] + 1) {\n lastRange[1] = Math.max(lastRange[1], range[1]);\n } else {\n consolidatedRanges.push(lastRange = range);\n }\n }\n\n for (var i = 0; i < consolidatedRanges.length; ++i) {\n var range = consolidatedRanges[i];\n out.push(encodeEscape(range[0]));\n\n if (range[1] > range[0]) {\n if (range[1] + 1 > range[0]) {\n out.push('-');\n }\n\n out.push(encodeEscape(range[1]));\n }\n }\n\n out.push(']');\n return out.join('');\n }\n\n function allowAnywhereFoldCaseAndRenumberGroups(regex) {\n // Split into character sets, escape sequences, punctuation strings\n // like ('(', '(?:', ')', '^'), and runs of characters that do not\n // include any of the above.\n var parts = regex.source.match(new RegExp('(?:' + '\\\\[(?:[^\\\\x5C\\\\x5D]|\\\\\\\\[\\\\s\\\\S])*\\\\]' // a character set\n + \"|\\\\\\\\u[A-Fa-f0-9]{4}\" // a unicode escape\n + '|\\\\\\\\x[A-Fa-f0-9]{2}' // a hex escape\n + '|\\\\\\\\[0-9]+' // a back-reference or octal escape\n + '|\\\\\\\\[^ux0-9]' // other escape sequence\n + '|\\\\(\\\\?[:!=]' // start of a non-capturing group\n + '|[\\\\(\\\\)\\\\^]' // start/end of a group, or line start\n + '|[^\\\\x5B\\\\x5C\\\\(\\\\)\\\\^]+' // run of other characters\n + ')', 'g'));\n var n = parts.length; // Maps captured group numbers to the number they will occupy in\n // the output or to -1 if that has not been determined, or to\n // undefined if they need not be capturing in the output.\n\n var capturedGroups = []; // Walk over and identify back references to build the capturedGroups\n // mapping.\n\n for (var i = 0, groupIndex = 0; i < n; ++i) {\n var p = parts[i];\n\n if (p === '(') {\n // groups are 1-indexed, so max group index is count of '('\n ++groupIndex;\n } else if ('\\\\' === p.charAt(0)) {\n var decimalValue = +p.substring(1);\n\n if (decimalValue) {\n if (decimalValue <= groupIndex) {\n capturedGroups[decimalValue] = -1;\n } else {\n // Replace with an unambiguous escape sequence so that\n // an octal escape sequence does not turn into a backreference\n // to a capturing group from an earlier regex.\n parts[i] = encodeEscape(decimalValue);\n }\n }\n }\n } // Renumber groups and reduce capturing groups to non-capturing groups\n // where possible.\n\n\n for (var i = 1; i < capturedGroups.length; ++i) {\n if (-1 === capturedGroups[i]) {\n capturedGroups[i] = ++capturedGroupIndex;\n }\n }\n\n for (var i = 0, groupIndex = 0; i < n; ++i) {\n var p = parts[i];\n\n if (p === '(') {\n ++groupIndex;\n\n if (!capturedGroups[groupIndex]) {\n parts[i] = '(?:';\n }\n } else if ('\\\\' === p.charAt(0)) {\n var decimalValue = +p.substring(1);\n\n if (decimalValue && decimalValue <= groupIndex) {\n parts[i] = '\\\\' + capturedGroups[decimalValue];\n }\n }\n } // Remove any prefix anchors so that the output will match anywhere.\n // ^^ really does mean an anchored match though.\n\n\n for (var i = 0; i < n; ++i) {\n if ('^' === parts[i] && '^' !== parts[i + 1]) {\n parts[i] = '';\n }\n } // Expand letters to groups to handle mixing of case-sensitive and\n // case-insensitive patterns if necessary.\n\n\n if (regex.ignoreCase && needToFoldCase) {\n for (var i = 0; i < n; ++i) {\n var p = parts[i];\n var ch0 = p.charAt(0);\n\n if (p.length >= 2 && ch0 === '[') {\n parts[i] = caseFoldCharset(p);\n } else if (ch0 !== '\\\\') {\n // TODO: handle letters in numeric escapes.\n parts[i] = p.replace(/[a-zA-Z]/g, function (ch) {\n var cc = ch.charCodeAt(0);\n return '[' + String.fromCharCode(cc & ~32, cc | 32) + ']';\n });\n }\n }\n }\n\n return parts.join('');\n }\n\n var rewritten = [];\n\n for (var i = 0, n = regexs.length; i < n; ++i) {\n var regex = regexs[i];\n\n if (regex.global || regex.multiline) {\n throw new Error('' + regex);\n }\n\n rewritten.push('(?:' + allowAnywhereFoldCaseAndRenumberGroups(regex) + ')');\n }\n\n return new RegExp(rewritten.join('|'), ignoreCase ? 'gi' : 'g');\n }\n /**\n * Split markup into a string of source code and an array mapping ranges in\n * that string to the text nodes in which they appear.\n *\n * <p>\n * The HTML DOM structure:</p>\n * <pre>\n * (Element \"p\"\n * (Element \"b\"\n * (Text \"print \")) ; #1\n * (Text \"'Hello '\") ; #2\n * (Element \"br\") ; #3\n * (Text \" + 'World';\")) ; #4\n * </pre>\n * <p>\n * corresponds to the HTML\n * {@code <p><b>print </b>'Hello '<br> + 'World';</p>}.</p>\n *\n * <p>\n * It will produce the output:</p>\n * <pre>\n * {\n * sourceCode: \"print 'Hello '\\n + 'World';\",\n * // 1 2\n * // 012345678901234 5678901234567\n * spans: [0, #1, 6, #2, 14, #3, 15, #4]\n * }\n * </pre>\n * <p>\n * where #1 is a reference to the {@code \"print \"} text node above, and so\n * on for the other text nodes.\n * </p>\n *\n * <p>\n * The {@code} spans array is an array of pairs. Even elements are the start\n * indices of substrings, and odd elements are the text nodes (or BR elements)\n * that contain the text for those substrings.\n * Substrings continue until the next index or the end of the source.\n * </p>\n *\n * @param {Node} node an HTML DOM subtree containing source-code.\n * @param {boolean|number} isPreformatted truthy if white-space in\n * text nodes should be considered significant.\n * @return {SourceSpansT} source code and the nodes in which they occur.\n */\n\n\n function extractSourceSpans(node, isPreformatted) {\n var nocode = /(?:^|\\s)nocode(?:\\s|$)/;\n var chunks = [];\n var length = 0;\n var spans = [];\n var k = 0;\n\n function walk(node) {\n var type = node.nodeType;\n\n if (type == 1) {\n // Element\n if (nocode.test(node.className)) {\n return;\n }\n\n for (var child = node.firstChild; child; child = child.nextSibling) {\n walk(child);\n }\n\n var nodeName = node.nodeName.toLowerCase();\n\n if ('br' === nodeName || 'li' === nodeName) {\n chunks[k] = '\\n';\n spans[k << 1] = length++;\n spans[k++ << 1 | 1] = node;\n }\n } else if (type == 3 || type == 4) {\n // Text\n var text = node.nodeValue;\n\n if (text.length) {\n if (!isPreformatted) {\n text = text.replace(/[ \\t\\r\\n]+/g, ' ');\n } else {\n text = text.replace(/\\r\\n?/g, '\\n'); // Normalize newlines.\n } // TODO: handle tabs here?\n\n\n chunks[k] = text;\n spans[k << 1] = length;\n length += text.length;\n spans[k++ << 1 | 1] = node;\n }\n }\n }\n\n walk(node);\n return {\n sourceCode: chunks.join('').replace(/\\n$/, ''),\n spans: spans\n };\n }\n /**\n * Apply the given language handler to sourceCode and add the resulting\n * decorations to out.\n * @param {!Element} sourceNode\n * @param {number} basePos the index of sourceCode within the chunk of source\n * whose decorations are already present on out.\n * @param {string} sourceCode\n * @param {function(JobT)} langHandler\n * @param {DecorationsT} out\n */\n\n\n function appendDecorations(sourceNode, basePos, sourceCode, langHandler, out) {\n if (!sourceCode) {\n return;\n }\n /** @type {JobT} */\n\n\n var job = {\n sourceNode: sourceNode,\n pre: 1,\n langExtension: null,\n numberLines: null,\n sourceCode: sourceCode,\n spans: null,\n basePos: basePos,\n decorations: null\n };\n langHandler(job);\n out.push.apply(out, job.decorations);\n }\n\n var notWs = /\\S/;\n /**\n * Given an element, if it contains only one child element and any text nodes\n * it contains contain only space characters, return the sole child element.\n * Otherwise returns undefined.\n * <p>\n * This is meant to return the CODE element in {@code <pre><code ...>} when\n * there is a single child element that contains all the non-space textual\n * content, but not to return anything where there are multiple child elements\n * as in {@code <pre><code>...</code><code>...</code></pre>} or when there\n * is textual content.\n */\n\n function childContentWrapper(element) {\n var wrapper = undefined;\n\n for (var c = element.firstChild; c; c = c.nextSibling) {\n var type = c.nodeType;\n wrapper = type === 1 ? // Element Node\n wrapper ? element : c : type === 3 ? // Text Node\n notWs.test(c.nodeValue) ? element : wrapper : wrapper;\n }\n\n return wrapper === element ? undefined : wrapper;\n }\n /** Given triples of [style, pattern, context] returns a lexing function,\n * The lexing function interprets the patterns to find token boundaries and\n * returns a decoration list of the form\n * [index_0, style_0, index_1, style_1, ..., index_n, style_n]\n * where index_n is an index into the sourceCode, and style_n is a style\n * constant like PR_PLAIN. index_n-1 <= index_n, and style_n-1 applies to\n * all characters in sourceCode[index_n-1:index_n].\n *\n * The stylePatterns is a list whose elements have the form\n * [style : string, pattern : RegExp, DEPRECATED, shortcut : string].\n *\n * Style is a style constant like PR_PLAIN, or can be a string of the\n * form 'lang-FOO', where FOO is a language extension describing the\n * language of the portion of the token in $1 after pattern executes.\n * E.g., if style is 'lang-lisp', and group 1 contains the text\n * '(hello (world))', then that portion of the token will be passed to the\n * registered lisp handler for formatting.\n * The text before and after group 1 will be restyled using this decorator\n * so decorators should take care that this doesn't result in infinite\n * recursion. For example, the HTML lexer rule for SCRIPT elements looks\n * something like ['lang-js', /<[s]cript>(.+?)<\\/script>/]. This may match\n * '<script>foo()<\\/script>', which would cause the current decorator to\n * be called with '<script>' which would not match the same rule since\n * group 1 must not be empty, so it would be instead styled as PR_TAG by\n * the generic tag rule. The handler registered for the 'js' extension would\n * then be called with 'foo()', and finally, the current decorator would\n * be called with '<\\/script>' which would not match the original rule and\n * so the generic tag rule would identify it as a tag.\n *\n * Pattern must only match prefixes, and if it matches a prefix, then that\n * match is considered a token with the same style.\n *\n * Context is applied to the last non-whitespace, non-comment token\n * recognized.\n *\n * Shortcut is an optional string of characters, any of which, if the first\n * character, gurantee that this pattern and only this pattern matches.\n *\n * @param {Array} shortcutStylePatterns patterns that always start with\n * a known character. Must have a shortcut string.\n * @param {Array} fallthroughStylePatterns patterns that will be tried in\n * order if the shortcut ones fail. May have shortcuts.\n *\n * @return {function (JobT)} a function that takes an undecorated job and\n * attaches a list of decorations.\n */\n\n\n function createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns) {\n var shortcuts = {};\n var tokenizer;\n\n (function () {\n var allPatterns = shortcutStylePatterns.concat(fallthroughStylePatterns);\n var allRegexs = [];\n var regexKeys = {};\n\n for (var i = 0, n = allPatterns.length; i < n; ++i) {\n var patternParts = allPatterns[i];\n var shortcutChars = patternParts[3];\n\n if (shortcutChars) {\n for (var c = shortcutChars.length; --c >= 0;) {\n shortcuts[shortcutChars.charAt(c)] = patternParts;\n }\n }\n\n var regex = patternParts[1];\n var k = '' + regex;\n\n if (!regexKeys.hasOwnProperty(k)) {\n allRegexs.push(regex);\n regexKeys[k] = null;\n }\n }\n\n allRegexs.push(/[\\0-\\uffff]/);\n tokenizer = combinePrefixPatterns(allRegexs);\n })();\n\n var nPatterns = fallthroughStylePatterns.length;\n /**\n * Lexes job.sourceCode and attaches an output array job.decorations of\n * style classes preceded by the position at which they start in\n * job.sourceCode in order.\n *\n * @type{function (JobT)}\n */\n\n var decorate = function decorate(job) {\n var sourceCode = job.sourceCode,\n basePos = job.basePos;\n var sourceNode = job.sourceNode;\n /** Even entries are positions in source in ascending order. Odd enties\n * are style markers (e.g., PR_COMMENT) that run from that position until\n * the end.\n * @type {DecorationsT}\n */\n\n var decorations = [basePos, PR_PLAIN];\n var pos = 0; // index into sourceCode\n\n var tokens = sourceCode.match(tokenizer) || [];\n var styleCache = {};\n\n for (var ti = 0, nTokens = tokens.length; ti < nTokens; ++ti) {\n var token = tokens[ti];\n var style = styleCache[token];\n var match = void 0;\n var isEmbedded;\n\n if (typeof style === 'string') {\n isEmbedded = false;\n } else {\n var patternParts = shortcuts[token.charAt(0)];\n\n if (patternParts) {\n match = token.match(patternParts[1]);\n style = patternParts[0];\n } else {\n for (var i = 0; i < nPatterns; ++i) {\n patternParts = fallthroughStylePatterns[i];\n match = token.match(patternParts[1]);\n\n if (match) {\n style = patternParts[0];\n break;\n }\n }\n\n if (!match) {\n // make sure that we make progress\n style = PR_PLAIN;\n }\n }\n\n isEmbedded = style.length >= 5 && 'lang-' === style.substring(0, 5);\n\n if (isEmbedded && !(match && typeof match[1] === 'string')) {\n isEmbedded = false;\n style = PR_SOURCE;\n }\n\n if (!isEmbedded) {\n styleCache[token] = style;\n }\n }\n\n var tokenStart = pos;\n pos += token.length;\n\n if (!isEmbedded) {\n decorations.push(basePos + tokenStart, style);\n } else {\n // Treat group 1 as an embedded block of source code.\n var embeddedSource = match[1];\n var embeddedSourceStart = token.indexOf(embeddedSource);\n var embeddedSourceEnd = embeddedSourceStart + embeddedSource.length;\n\n if (match[2]) {\n // If embeddedSource can be blank, then it would match at the\n // beginning which would cause us to infinitely recurse on the\n // entire token, so we catch the right context in match[2].\n embeddedSourceEnd = token.length - match[2].length;\n embeddedSourceStart = embeddedSourceEnd - embeddedSource.length;\n }\n\n var lang = style.substring(5); // Decorate the left of the embedded source\n\n appendDecorations(sourceNode, basePos + tokenStart, token.substring(0, embeddedSourceStart), decorate, decorations); // Decorate the embedded source\n\n appendDecorations(sourceNode, basePos + tokenStart + embeddedSourceStart, embeddedSource, langHandlerForExtension(lang, embeddedSource), decorations); // Decorate the right of the embedded section\n\n appendDecorations(sourceNode, basePos + tokenStart + embeddedSourceEnd, token.substring(embeddedSourceEnd), decorate, decorations);\n }\n }\n\n job.decorations = decorations;\n };\n\n return decorate;\n }\n /** returns a function that produces a list of decorations from source text.\n *\n * This code treats \", ', and ` as string delimiters, and \\ as a string\n * escape. It does not recognize perl's qq() style strings.\n * It has no special handling for double delimiter escapes as in basic, or\n * the tripled delimiters used in python, but should work on those regardless\n * although in those cases a single string literal may be broken up into\n * multiple adjacent string literals.\n *\n * It recognizes C, C++, and shell style comments.\n *\n * @param {Object} options a set of optional parameters.\n * @return {function (JobT)} a function that examines the source code\n * in the input job and builds a decoration list which it attaches to\n * the job.\n */\n\n\n function sourceDecorator(options) {\n var shortcutStylePatterns = [],\n fallthroughStylePatterns = [];\n\n if (options['tripleQuotedStrings']) {\n // '''multi-line-string''', 'single-line-string', and double-quoted\n shortcutStylePatterns.push([PR_STRING, /^(?:\\'\\'\\'(?:[^\\'\\\\]|\\\\[\\s\\S]|\\'{1,2}(?=[^\\']))*(?:\\'\\'\\'|$)|\\\"\\\"\\\"(?:[^\\\"\\\\]|\\\\[\\s\\S]|\\\"{1,2}(?=[^\\\"]))*(?:\\\"\\\"\\\"|$)|\\'(?:[^\\\\\\']|\\\\[\\s\\S])*(?:\\'|$)|\\\"(?:[^\\\\\\\"]|\\\\[\\s\\S])*(?:\\\"|$))/, null, '\\'\"']);\n } else if (options['multiLineStrings']) {\n // 'multi-line-string', \"multi-line-string\"\n shortcutStylePatterns.push([PR_STRING, /^(?:\\'(?:[^\\\\\\']|\\\\[\\s\\S])*(?:\\'|$)|\\\"(?:[^\\\\\\\"]|\\\\[\\s\\S])*(?:\\\"|$)|\\`(?:[^\\\\\\`]|\\\\[\\s\\S])*(?:\\`|$))/, null, '\\'\"`']);\n } else {\n // 'single-line-string', \"single-line-string\"\n shortcutStylePatterns.push([PR_STRING, /^(?:\\'(?:[^\\\\\\'\\r\\n]|\\\\.)*(?:\\'|$)|\\\"(?:[^\\\\\\\"\\r\\n]|\\\\.)*(?:\\\"|$))/, null, '\"\\'']);\n }\n\n if (options['verbatimStrings']) {\n // verbatim-string-literal production from the C# grammar. See issue 93.\n fallthroughStylePatterns.push([PR_STRING, /^@\\\"(?:[^\\\"]|\\\"\\\")*(?:\\\"|$)/, null]);\n }\n\n var hc = options['hashComments'];\n\n if (hc) {\n if (options['cStyleComments']) {\n if (hc > 1) {\n // multiline hash comments\n shortcutStylePatterns.push([PR_COMMENT, /^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/, null, '#']);\n } else {\n // Stop C preprocessor declarations at an unclosed open comment\n shortcutStylePatterns.push([PR_COMMENT, /^#(?:(?:define|e(?:l|nd)if|else|error|ifn?def|include|line|pragma|undef|warning)\\b|[^\\r\\n]*)/, null, '#']);\n } // #include <stdio.h>\n\n\n fallthroughStylePatterns.push([PR_STRING, /^<(?:(?:(?:\\.\\.\\/)*|\\/?)(?:[\\w-]+(?:\\/[\\w-]+)+)?[\\w-]+\\.h(?:h|pp|\\+\\+)?|[a-z]\\w*)>/, null]);\n } else {\n shortcutStylePatterns.push([PR_COMMENT, /^#[^\\r\\n]*/, null, '#']);\n }\n }\n\n if (options['cStyleComments']) {\n fallthroughStylePatterns.push([PR_COMMENT, /^\\/\\/[^\\r\\n]*/, null]);\n fallthroughStylePatterns.push([PR_COMMENT, /^\\/\\*[\\s\\S]*?(?:\\*\\/|$)/, null]);\n }\n\n var regexLiterals = options['regexLiterals'];\n\n if (regexLiterals) {\n /**\n * @const\n */\n var regexExcls = regexLiterals > 1 ? '' // Multiline regex literals\n : '\\n\\r';\n /**\n * @const\n */\n\n var regexAny = regexExcls ? '.' : '[\\\\S\\\\s]';\n /**\n * @const\n */\n\n var REGEX_LITERAL = // A regular expression literal starts with a slash that is\n // not followed by * or / so that it is not confused with\n // comments.\n '/(?=[^/*' + regexExcls + '])' // and then contains any number of raw characters,\n + '(?:[^/\\\\x5B\\\\x5C' + regexExcls + ']' // escape sequences (\\x5C),\n + '|\\\\x5C' + regexAny // or non-nesting character sets (\\x5B\\x5D);\n + '|\\\\x5B(?:[^\\\\x5C\\\\x5D' + regexExcls + ']' + '|\\\\x5C' + regexAny + ')*(?:\\\\x5D|$))+' // finally closed by a /.\n + '/';\n fallthroughStylePatterns.push(['lang-regex', RegExp('^' + REGEXP_PRECEDER_PATTERN + '(' + REGEX_LITERAL + ')')]);\n }\n\n var types = options['types'];\n\n if (types) {\n fallthroughStylePatterns.push([PR_TYPE, types]);\n }\n\n var keywords = (\"\" + options['keywords']).replace(/^ | $/g, '');\n\n if (keywords.length) {\n fallthroughStylePatterns.push([PR_KEYWORD, new RegExp('^(?:' + keywords.replace(/[\\s,]+/g, '|') + ')\\\\b'), null]);\n }\n\n shortcutStylePatterns.push([PR_PLAIN, /^\\s+/, null, ' \\r\\n\\t\\xA0']);\n var punctuation = // The Bash man page says\n // A word is a sequence of characters considered as a single\n // unit by GRUB. Words are separated by metacharacters,\n // which are the following plus space, tab, and newline: { }\n // | & $ ; < >\n // ...\n // A word beginning with # causes that word and all remaining\n // characters on that line to be ignored.\n // which means that only a '#' after /(?:^|[{}|&$;<>\\s])/ starts a\n // comment but empirically\n // $ echo {#}\n // {#}\n // $ echo \\$#\n // $#\n // $ echo }#\n // }#\n // so /(?:^|[|&;<>\\s])/ is more appropriate.\n // http://gcc.gnu.org/onlinedocs/gcc-2.95.3/cpp_1.html#SEC3\n // suggests that this definition is compatible with a\n // default mode that tries to use a single token definition\n // to recognize both bash/python style comments and C\n // preprocessor directives.\n // This definition of punctuation does not include # in the list of\n // follow-on exclusions, so # will not be broken before if preceeded\n // by a punctuation character. We could try to exclude # after\n // [|&;<>] but that doesn't seem to cause many major problems.\n // If that does turn out to be a problem, we should change the below\n // when hc is truthy to include # in the run of punctuation characters\n // only when not followint [|&;<>].\n '^.[^\\\\s\\\\w.$@\\'\"`/\\\\\\\\]*';\n\n if (options['regexLiterals']) {\n punctuation += '(?!\\s*\\/)';\n }\n\n fallthroughStylePatterns.push( // TODO(mikesamuel): recognize non-latin letters and numerals in idents\n [PR_LITERAL, /^@[a-z_$][a-z_$@0-9]*/i, null], [PR_TYPE, /^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\\w+_t\\b)/, null], [PR_PLAIN, /^[a-z_$][a-z_$@0-9]*/i, null], [PR_LITERAL, new RegExp('^(?:' // A hex number\n + '0x[a-f0-9]+' // or an octal or decimal number,\n + '|(?:\\\\d(?:_\\\\d+)*\\\\d*(?:\\\\.\\\\d*)?|\\\\.\\\\d\\\\+)' // possibly in scientific notation\n + '(?:e[+\\\\-]?\\\\d+)?' + ')' // with an optional modifier like UL for unsigned long\n + '[a-z]*', 'i'), null, '0123456789'], // Don't treat escaped quotes in bash as starting strings.\n // See issue 144.\n [PR_PLAIN, /^\\\\[\\s\\S]?/, null], [PR_PUNCTUATION, new RegExp(punctuation), null]);\n return createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns);\n }\n\n var decorateSource = sourceDecorator({\n 'keywords': ALL_KEYWORDS,\n 'hashComments': true,\n 'cStyleComments': true,\n 'multiLineStrings': true,\n 'regexLiterals': true\n });\n /**\n * Given a DOM subtree, wraps it in a list, and puts each line into its own\n * list item.\n *\n * @param {Node} node modified in place. Its content is pulled into an\n * HTMLOListElement, and each line is moved into a separate list item.\n * This requires cloning elements, so the input might not have unique\n * IDs after numbering.\n * @param {number|null|boolean} startLineNum\n * If truthy, coerced to an integer which is the 1-indexed line number\n * of the first line of code. The number of the first line will be\n * attached to the list.\n * @param {boolean} isPreformatted true iff white-space in text nodes should\n * be treated as significant.\n */\n\n function numberLines(node, startLineNum, isPreformatted) {\n var nocode = /(?:^|\\s)nocode(?:\\s|$)/;\n var lineBreak = /\\r\\n?|\\n/;\n var document = node.ownerDocument;\n var li = document.createElement('li');\n\n while (node.firstChild) {\n li.appendChild(node.firstChild);\n } // An array of lines. We split below, so this is initialized to one\n // un-split line.\n\n\n var listItems = [li];\n\n function walk(node) {\n var type = node.nodeType;\n\n if (type == 1 && !nocode.test(node.className)) {\n // Element\n if ('br' === node.nodeName) {\n breakAfter(node); // Discard the <BR> since it is now flush against a </LI>.\n\n if (node.parentNode) {\n node.parentNode.removeChild(node);\n }\n } else {\n for (var child = node.firstChild; child; child = child.nextSibling) {\n walk(child);\n }\n }\n } else if ((type == 3 || type == 4) && isPreformatted) {\n // Text\n var text = node.nodeValue;\n var match = text.match(lineBreak);\n\n if (match) {\n var firstLine = text.substring(0, match.index);\n node.nodeValue = firstLine;\n var tail = text.substring(match.index + match[0].length);\n\n if (tail) {\n var parent = node.parentNode;\n parent.insertBefore(document.createTextNode(tail), node.nextSibling);\n }\n\n breakAfter(node);\n\n if (!firstLine) {\n // Don't leave blank text nodes in the DOM.\n node.parentNode.removeChild(node);\n }\n }\n }\n } // Split a line after the given node.\n\n\n function breakAfter(lineEndNode) {\n // If there's nothing to the right, then we can skip ending the line\n // here, and move root-wards since splitting just before an end-tag\n // would require us to create a bunch of empty copies.\n while (!lineEndNode.nextSibling) {\n lineEndNode = lineEndNode.parentNode;\n\n if (!lineEndNode) {\n return;\n }\n }\n\n function breakLeftOf(limit, copy) {\n // Clone shallowly if this node needs to be on both sides of the break.\n var rightSide = copy ? limit.cloneNode(false) : limit;\n var parent = limit.parentNode;\n\n if (parent) {\n // We clone the parent chain.\n // This helps us resurrect important styling elements that cross lines.\n // E.g. in <i>Foo<br>Bar</i>\n // should be rewritten to <li><i>Foo</i></li><li><i>Bar</i></li>.\n var parentClone = breakLeftOf(parent, 1); // Move the clone and everything to the right of the original\n // onto the cloned parent.\n\n var next = limit.nextSibling;\n parentClone.appendChild(rightSide);\n\n for (var sibling = next; sibling; sibling = next) {\n next = sibling.nextSibling;\n parentClone.appendChild(sibling);\n }\n }\n\n return rightSide;\n }\n\n var copiedListItem = breakLeftOf(lineEndNode.nextSibling, 0); // Walk the parent chain until we reach an unattached LI.\n\n for (var parent; // Check nodeType since IE invents document fragments.\n (parent = copiedListItem.parentNode) && parent.nodeType === 1;) {\n copiedListItem = parent;\n } // Put it on the list of lines for later processing.\n\n\n listItems.push(copiedListItem);\n } // Split lines while there are lines left to split.\n\n\n for (var i = 0; // Number of lines that have been split so far.\n i < listItems.length; // length updated by breakAfter calls.\n ++i) {\n walk(listItems[i]);\n } // Make sure numeric indices show correctly.\n\n\n if (startLineNum === (startLineNum | 0)) {\n listItems[0].setAttribute('value', startLineNum);\n }\n\n var ol = document.createElement('ol');\n ol.className = 'linenums';\n var offset = Math.max(0, startLineNum - 1\n /* zero index */\n | 0) || 0;\n\n for (var i = 0, n = listItems.length; i < n; ++i) {\n li = listItems[i]; // Stick a class on the LIs so that stylesheets can\n // color odd/even rows, or any other row pattern that\n // is co-prime with 10.\n\n li.className = 'L' + (i + offset) % 10;\n\n if (!li.firstChild) {\n li.appendChild(document.createTextNode('\\xA0'));\n }\n\n ol.appendChild(li);\n }\n\n node.appendChild(ol);\n }\n /**\n * Breaks {@code job.sourceCode} around style boundaries in\n * {@code job.decorations} and modifies {@code job.sourceNode} in place.\n * @param {JobT} job\n * @private\n */\n\n\n function recombineTagsAndDecorations(job) {\n var isIE8OrEarlier = /\\bMSIE\\s(\\d+)/.exec(navigator.userAgent);\n isIE8OrEarlier = isIE8OrEarlier && +isIE8OrEarlier[1] <= 8;\n var newlineRe = /\\n/g;\n var source = job.sourceCode;\n var sourceLength = source.length; // Index into source after the last code-unit recombined.\n\n var sourceIndex = 0;\n var spans = job.spans;\n var nSpans = spans.length; // Index into spans after the last span which ends at or before sourceIndex.\n\n var spanIndex = 0;\n var decorations = job.decorations;\n var nDecorations = decorations.length; // Index into decorations after the last decoration which ends at or before\n // sourceIndex.\n\n var decorationIndex = 0; // Remove all zero-length decorations.\n\n decorations[nDecorations] = sourceLength;\n var decPos, i;\n\n for (i = decPos = 0; i < nDecorations;) {\n if (decorations[i] !== decorations[i + 2]) {\n decorations[decPos++] = decorations[i++];\n decorations[decPos++] = decorations[i++];\n } else {\n i += 2;\n }\n }\n\n nDecorations = decPos; // Simplify decorations.\n\n for (i = decPos = 0; i < nDecorations;) {\n var startPos = decorations[i]; // Conflate all adjacent decorations that use the same style.\n\n var startDec = decorations[i + 1];\n var end = i + 2;\n\n while (end + 2 <= nDecorations && decorations[end + 1] === startDec) {\n end += 2;\n }\n\n decorations[decPos++] = startPos;\n decorations[decPos++] = startDec;\n i = end;\n }\n\n nDecorations = decorations.length = decPos;\n var sourceNode = job.sourceNode;\n var oldDisplay = \"\";\n\n if (sourceNode) {\n oldDisplay = sourceNode.style.display;\n sourceNode.style.display = 'none';\n }\n\n try {\n var decoration = null;\n\n while (spanIndex < nSpans) {\n var spanStart = spans[spanIndex];\n var spanEnd =\n /** @type{number} */\n spans[spanIndex + 2] || sourceLength;\n var decEnd = decorations[decorationIndex + 2] || sourceLength;\n var end = Math.min(spanEnd, decEnd);\n var textNode =\n /** @type{Node} */\n spans[spanIndex + 1];\n var styledText;\n\n if (textNode.nodeType !== 1 // Don't muck with <BR>s or <LI>s\n // Don't introduce spans around empty text nodes.\n && (styledText = source.substring(sourceIndex, end))) {\n // This may seem bizarre, and it is. Emitting LF on IE causes the\n // code to display with spaces instead of line breaks.\n // Emitting Windows standard issue linebreaks (CRLF) causes a blank\n // space to appear at the beginning of every line but the first.\n // Emitting an old Mac OS 9 line separator makes everything spiffy.\n if (isIE8OrEarlier) {\n styledText = styledText.replace(newlineRe, '\\r');\n }\n\n textNode.nodeValue = styledText;\n var document = textNode.ownerDocument;\n var span = document.createElement('span');\n span.className = decorations[decorationIndex + 1];\n var parentNode = textNode.parentNode;\n parentNode.replaceChild(span, textNode);\n span.appendChild(textNode);\n\n if (sourceIndex < spanEnd) {\n // Split off a text node.\n spans[spanIndex + 1] = textNode // TODO: Possibly optimize by using '' if there's no flicker.\n = document.createTextNode(source.substring(end, spanEnd));\n parentNode.insertBefore(textNode, span.nextSibling);\n }\n }\n\n sourceIndex = end;\n\n if (sourceIndex >= spanEnd) {\n spanIndex += 2;\n }\n\n if (sourceIndex >= decEnd) {\n decorationIndex += 2;\n }\n }\n } finally {\n if (sourceNode) {\n sourceNode.style.display = oldDisplay;\n }\n }\n }\n /** Maps language-specific file extensions to handlers. */\n\n\n var langHandlerRegistry = {};\n /** Register a language handler for the given file extensions.\n * @param {function (JobT)} handler a function from source code to a list\n * of decorations. Takes a single argument job which describes the\n * state of the computation and attaches the decorations to it.\n * @param {Array.<string>} fileExtensions\n */\n\n function registerLangHandler(handler, fileExtensions) {\n for (var i = fileExtensions.length; --i >= 0;) {\n var ext = fileExtensions[i];\n\n if (!langHandlerRegistry.hasOwnProperty(ext)) {\n langHandlerRegistry[ext] = handler;\n } else if (win['console']) {\n console['warn']('cannot override language handler %s', ext);\n }\n }\n }\n\n function langHandlerForExtension(extension, source) {\n if (!(extension && langHandlerRegistry.hasOwnProperty(extension))) {\n // Treat it as markup if the first non whitespace character is a < and\n // the last non-whitespace character is a >.\n extension = /^\\s*</.test(source) ? 'default-markup' : 'default-code';\n }\n\n return langHandlerRegistry[extension];\n }\n\n registerLangHandler(decorateSource, ['default-code']);\n registerLangHandler(createSimpleLexer([], [[PR_PLAIN, /^[^<?]+/], [PR_DECLARATION, /^<!\\w[^>]*(?:>|$)/], [PR_COMMENT, /^<\\!--[\\s\\S]*?(?:-\\->|$)/], // Unescaped content in an unknown language\n ['lang-', /^<\\?([\\s\\S]+?)(?:\\?>|$)/], ['lang-', /^<%([\\s\\S]+?)(?:%>|$)/], [PR_PUNCTUATION, /^(?:<[%?]|[%?]>)/], ['lang-', /^<xmp\\b[^>]*>([\\s\\S]+?)<\\/xmp\\b[^>]*>/i], // Unescaped content in javascript. (Or possibly vbscript).\n ['lang-js', /^<script\\b[^>]*>([\\s\\S]*?)(<\\/script\\b[^>]*>)/i], // Contains unescaped stylesheet content\n ['lang-css', /^<style\\b[^>]*>([\\s\\S]*?)(<\\/style\\b[^>]*>)/i], ['lang-in.tag', /^(<\\/?[a-z][^<>]*>)/i]]), ['default-markup', 'htm', 'html', 'mxml', 'xhtml', 'xml', 'xsl']);\n registerLangHandler(createSimpleLexer([[PR_PLAIN, /^[\\s]+/, null, ' \\t\\r\\n'], [PR_ATTRIB_VALUE, /^(?:\\\"[^\\\"]*\\\"?|\\'[^\\']*\\'?)/, null, '\\\"\\'']], [[PR_TAG, /^^<\\/?[a-z](?:[\\w.:-]*\\w)?|\\/?>$/i], [PR_ATTRIB_NAME, /^(?!style[\\s=]|on)[a-z](?:[\\w:-]*\\w)?/i], ['lang-uq.val', /^=\\s*([^>\\'\\\"\\s]*(?:[^>\\'\\\"\\s\\/]|\\/(?=\\s)))/], [PR_PUNCTUATION, /^[=<>\\/]+/], ['lang-js', /^on\\w+\\s*=\\s*\\\"([^\\\"]+)\\\"/i], ['lang-js', /^on\\w+\\s*=\\s*\\'([^\\']+)\\'/i], ['lang-js', /^on\\w+\\s*=\\s*([^\\\"\\'>\\s]+)/i], ['lang-css', /^style\\s*=\\s*\\\"([^\\\"]+)\\\"/i], ['lang-css', /^style\\s*=\\s*\\'([^\\']+)\\'/i], ['lang-css', /^style\\s*=\\s*([^\\\"\\'>\\s]+)/i]]), ['in.tag']);\n registerLangHandler(createSimpleLexer([], [[PR_ATTRIB_VALUE, /^[\\s\\S]+/]]), ['uq.val']);\n registerLangHandler(sourceDecorator({\n 'keywords': CPP_KEYWORDS,\n 'hashComments': true,\n 'cStyleComments': true,\n 'types': C_TYPES\n }), ['c', 'cc', 'cpp', 'cxx', 'cyc', 'm']);\n registerLangHandler(sourceDecorator({\n 'keywords': 'null,true,false'\n }), ['json']);\n registerLangHandler(sourceDecorator({\n 'keywords': CSHARP_KEYWORDS,\n 'hashComments': true,\n 'cStyleComments': true,\n 'verbatimStrings': true,\n 'types': C_TYPES\n }), ['cs']);\n registerLangHandler(sourceDecorator({\n 'keywords': JAVA_KEYWORDS,\n 'cStyleComments': true\n }), ['java']);\n registerLangHandler(sourceDecorator({\n 'keywords': SH_KEYWORDS,\n 'hashComments': true,\n 'multiLineStrings': true\n }), ['bash', 'bsh', 'csh', 'sh']);\n registerLangHandler(sourceDecorator({\n 'keywords': PYTHON_KEYWORDS,\n 'hashComments': true,\n 'multiLineStrings': true,\n 'tripleQuotedStrings': true\n }), ['cv', 'py', 'python']);\n registerLangHandler(sourceDecorator({\n 'keywords': PERL_KEYWORDS,\n 'hashComments': true,\n 'multiLineStrings': true,\n 'regexLiterals': 2 // multiline regex literals\n\n }), ['perl', 'pl', 'pm']);\n registerLangHandler(sourceDecorator({\n 'keywords': RUBY_KEYWORDS,\n 'hashComments': true,\n 'multiLineStrings': true,\n 'regexLiterals': true\n }), ['rb', 'ruby']);\n registerLangHandler(sourceDecorator({\n 'keywords': JSCRIPT_KEYWORDS,\n 'cStyleComments': true,\n 'regexLiterals': true\n }), ['javascript', 'js', 'ts', 'typescript']);\n registerLangHandler(sourceDecorator({\n 'keywords': COFFEE_KEYWORDS,\n 'hashComments': 3,\n // ### style block comments\n 'cStyleComments': true,\n 'multilineStrings': true,\n 'tripleQuotedStrings': true,\n 'regexLiterals': true\n }), ['coffee']);\n registerLangHandler(createSimpleLexer([], [[PR_STRING, /^[\\s\\S]+/]]), ['regex']);\n /** @param {JobT} job */\n\n function applyDecorator(job) {\n var opt_langExtension = job.langExtension;\n\n try {\n // Extract tags, and convert the source code to plain text.\n var sourceAndSpans = extractSourceSpans(job.sourceNode, job.pre);\n /** Plain text. @type {string} */\n\n var source = sourceAndSpans.sourceCode;\n job.sourceCode = source;\n job.spans = sourceAndSpans.spans;\n job.basePos = 0; // Apply the appropriate language handler\n\n langHandlerForExtension(opt_langExtension, source)(job); // Integrate the decorations and tags back into the source code,\n // modifying the sourceNode in place.\n\n recombineTagsAndDecorations(job);\n } catch (e) {\n if (win['console']) {\n console['log'](e && e['stack'] || e);\n }\n }\n }\n /**\n * Pretty print a chunk of code.\n * @param sourceCodeHtml {string} The HTML to pretty print.\n * @param opt_langExtension {string} The language name to use.\n * Typically, a filename extension like 'cpp' or 'java'.\n * @param opt_numberLines {number|boolean} True to number lines,\n * or the 1-indexed number of the first line in sourceCodeHtml.\n */\n\n\n function $prettyPrintOne(sourceCodeHtml, opt_langExtension, opt_numberLines) {\n /** @type{number|boolean} */\n var nl = opt_numberLines || false;\n /** @type{string|null} */\n\n var langExtension = opt_langExtension || null;\n /** @type{!Element} */\n\n var container = document.createElement('div'); // This could cause images to load and onload listeners to fire.\n // E.g. <img onerror=\"alert(1337)\" src=\"nosuchimage.png\">.\n // We assume that the inner HTML is from a trusted source.\n // The pre-tag is required for IE8 which strips newlines from innerHTML\n // when it is injected into a <pre> tag.\n // http://stackoverflow.com/questions/451486/pre-tag-loses-line-breaks-when-setting-innerhtml-in-ie\n // http://stackoverflow.com/questions/195363/inserting-a-newline-into-a-pre-tag-ie-javascript\n\n container.innerHTML = '<pre>' + sourceCodeHtml + '</pre>';\n container =\n /** @type{!Element} */\n container.firstChild;\n\n if (nl) {\n numberLines(container, nl, true);\n }\n /** @type{JobT} */\n\n\n var job = {\n langExtension: langExtension,\n numberLines: nl,\n sourceNode: container,\n pre: 1,\n sourceCode: null,\n basePos: null,\n spans: null,\n decorations: null\n };\n applyDecorator(job);\n return container.innerHTML;\n }\n /**\n * Find all the {@code <pre>} and {@code <code>} tags in the DOM with\n * {@code class=prettyprint} and prettify them.\n *\n * @param {Function} opt_whenDone called when prettifying is done.\n * @param {HTMLElement|HTMLDocument} opt_root an element or document\n * containing all the elements to pretty print.\n * Defaults to {@code document.body}.\n */\n\n\n function $prettyPrint(opt_whenDone, opt_root) {\n var root = opt_root || document.body;\n var doc = root.ownerDocument || document;\n\n function byTagName(tn) {\n return root.getElementsByTagName(tn);\n } // fetch a list of nodes to rewrite\n\n\n var codeSegments = [byTagName('pre'), byTagName('code'), byTagName('xmp')];\n var elements = [];\n\n for (var i = 0; i < codeSegments.length; ++i) {\n for (var j = 0, n = codeSegments[i].length; j < n; ++j) {\n elements.push(codeSegments[i][j]);\n }\n }\n\n codeSegments = null;\n var clock = Date;\n\n if (!clock['now']) {\n clock = {\n 'now': function now() {\n return +new Date();\n }\n };\n } // The loop is broken into a series of continuations to make sure that we\n // don't make the browser unresponsive when rewriting a large page.\n\n\n var k = 0;\n var langExtensionRe = /\\blang(?:uage)?-([\\w.]+)(?!\\S)/;\n var prettyPrintRe = /\\bprettyprint\\b/;\n var prettyPrintedRe = /\\bprettyprinted\\b/;\n var preformattedTagNameRe = /pre|xmp/i;\n var codeRe = /^code$/i;\n var preCodeXmpRe = /^(?:pre|code|xmp)$/i;\n var EMPTY = {};\n\n function doWork() {\n var endTime = win['PR_SHOULD_USE_CONTINUATION'] ? clock['now']() + 250\n /* ms */\n : Infinity;\n\n for (; k < elements.length && clock['now']() < endTime; k++) {\n var cs = elements[k]; // Look for a preceding comment like\n // <?prettify lang=\"...\" linenums=\"...\"?>\n\n var attrs = EMPTY;\n {\n for (var preceder = cs; preceder = preceder.previousSibling;) {\n var nt = preceder.nodeType; // <?foo?> is parsed by HTML 5 to a comment node (8)\n // like <!--?foo?-->, but in XML is a processing instruction\n\n var value = (nt === 7 || nt === 8) && preceder.nodeValue;\n\n if (value ? !/^\\??prettify\\b/.test(value) : nt !== 3 || /\\S/.test(preceder.nodeValue)) {\n // Skip over white-space text nodes but not others.\n break;\n }\n\n if (value) {\n attrs = {};\n value.replace(/\\b(\\w+)=([\\w:.%+-]+)/g, function (_, name, value) {\n attrs[name] = value;\n });\n break;\n }\n }\n }\n var className = cs.className;\n\n if ((attrs !== EMPTY || prettyPrintRe.test(className)) && // Don't redo this if we've already done it.\n // This allows recalling pretty print to just prettyprint elements\n // that have been added to the page since last call.\n !prettyPrintedRe.test(className)) {\n // make sure this is not nested in an already prettified element\n var nested = false;\n\n for (var p = cs.parentNode; p; p = p.parentNode) {\n var tn = p.tagName;\n\n if (preCodeXmpRe.test(tn) && p.className && prettyPrintRe.test(p.className)) {\n nested = true;\n break;\n }\n }\n\n if (!nested) {\n // Mark done. If we fail to prettyprint for whatever reason,\n // we shouldn't try again.\n cs.className += ' prettyprinted'; // If the classes includes a language extensions, use it.\n // Language extensions can be specified like\n // <pre class=\"prettyprint lang-cpp\">\n // the language extension \"cpp\" is used to find a language handler\n // as passed to PR.registerLangHandler.\n // HTML5 recommends that a language be specified using \"language-\"\n // as the prefix instead. Google Code Prettify supports both.\n // http://dev.w3.org/html5/spec-author-view/the-code-element.html\n\n var langExtension = attrs['lang'];\n\n if (!langExtension) {\n langExtension = className.match(langExtensionRe); // Support <pre class=\"prettyprint\"><code class=\"language-c\">\n\n var wrapper;\n\n if (!langExtension && (wrapper = childContentWrapper(cs)) && codeRe.test(wrapper.tagName)) {\n langExtension = wrapper.className.match(langExtensionRe);\n }\n\n if (langExtension) {\n langExtension = langExtension[1];\n }\n }\n\n var preformatted;\n\n if (preformattedTagNameRe.test(cs.tagName)) {\n preformatted = 1;\n } else {\n var currentStyle = cs['currentStyle'];\n var defaultView = doc.defaultView;\n var whitespace = currentStyle ? currentStyle['whiteSpace'] : defaultView && defaultView.getComputedStyle ? defaultView.getComputedStyle(cs, null).getPropertyValue('white-space') : 0;\n preformatted = whitespace && 'pre' === whitespace.substring(0, 3);\n } // Look for a class like linenums or linenums:<n> where <n> is the\n // 1-indexed number of the first line.\n\n\n var lineNums = attrs['linenums'];\n\n if (!(lineNums = lineNums === 'true' || +lineNums)) {\n lineNums = className.match(/\\blinenums\\b(?::(\\d+))?/);\n lineNums = lineNums ? lineNums[1] && lineNums[1].length ? +lineNums[1] : true : false;\n }\n\n if (lineNums) {\n numberLines(cs, lineNums, preformatted);\n } // do the pretty printing\n\n\n var prettyPrintingJob = {\n langExtension: langExtension,\n sourceNode: cs,\n numberLines: lineNums,\n pre: preformatted,\n sourceCode: null,\n basePos: null,\n spans: null,\n decorations: null\n };\n applyDecorator(prettyPrintingJob);\n }\n }\n }\n\n if (k < elements.length) {\n // finish up in a continuation\n win.setTimeout(doWork, 250);\n } else if ('function' === typeof opt_whenDone) {\n opt_whenDone();\n }\n }\n\n doWork();\n }\n /**\n * Contains functions for creating and registering new language handlers.\n * @type {Object}\n */\n\n\n var PR = win['PR'] = {\n 'createSimpleLexer': createSimpleLexer,\n 'registerLangHandler': registerLangHandler,\n 'sourceDecorator': sourceDecorator,\n 'PR_ATTRIB_NAME': PR_ATTRIB_NAME,\n 'PR_ATTRIB_VALUE': PR_ATTRIB_VALUE,\n 'PR_COMMENT': PR_COMMENT,\n 'PR_DECLARATION': PR_DECLARATION,\n 'PR_KEYWORD': PR_KEYWORD,\n 'PR_LITERAL': PR_LITERAL,\n 'PR_NOCODE': PR_NOCODE,\n 'PR_PLAIN': PR_PLAIN,\n 'PR_PUNCTUATION': PR_PUNCTUATION,\n 'PR_SOURCE': PR_SOURCE,\n 'PR_STRING': PR_STRING,\n 'PR_TAG': PR_TAG,\n 'PR_TYPE': PR_TYPE,\n 'prettyPrintOne': IN_GLOBAL_SCOPE ? win['prettyPrintOne'] = $prettyPrintOne : prettyPrintOne = $prettyPrintOne,\n 'prettyPrint': prettyPrint = IN_GLOBAL_SCOPE ? win['prettyPrint'] = $prettyPrint : prettyPrint = $prettyPrint\n }; // Make PR available via the Asynchronous Module Definition (AMD) API.\n // Per https://github.com/amdjs/amdjs-api/wiki/AMD:\n // The Asynchronous Module Definition (AMD) API specifies a\n // mechanism for defining modules such that the module and its\n // dependencies can be asynchronously loaded.\n // ...\n // To allow a clear indicator that a global define function (as\n // needed for script src browser loading) conforms to the AMD API,\n // any global define function SHOULD have a property called \"amd\"\n // whose value is an object. This helps avoid conflict with any\n // other existing JavaScript code that could have defined a define()\n // function that does not conform to the AMD API.\n\n var define = win['define'];\n\n if (typeof define === \"function\" && define['amd']) {\n define(\"google-code-prettify\", [], function () {\n return PR;\n });\n }\n})();","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*!\n * Bootstrap v4.5.3 (https://getbootstrap.com/)\n * Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n(function (global, factory) {\n (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery'), require('popper.js')) : typeof define === 'function' && define.amd ? define(['exports', 'jquery', 'popper.js'], factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.bootstrap = {}, global.jQuery, global.Popper));\n})(this, function (exports, $, Popper) {\n 'use strict';\n\n function _interopDefaultLegacy(e) {\n return e && _typeof(e) === 'object' && 'default' in e ? e : {\n 'default': e\n };\n }\n\n var $__default = /*#__PURE__*/_interopDefaultLegacy($);\n\n var Popper__default = /*#__PURE__*/_interopDefaultLegacy(Popper);\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 _extends() {\n _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 return _extends.apply(this, arguments);\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 * Bootstrap (v4.5.3): util.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n /**\n * ------------------------------------------------------------------------\n * Private TransitionEnd Helpers\n * ------------------------------------------------------------------------\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 if (obj === null || typeof obj === 'undefined') {\n return \"\" + obj;\n }\n\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 ($__default['default'](event.target).is(this)) {\n return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params\n }\n\n return undefined;\n }\n };\n }\n\n function transitionEndEmulator(duration) {\n var _this = this;\n\n var called = false;\n $__default['default'](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 $__default['default'].fn.emulateTransitionEnd = transitionEndEmulator;\n $__default['default'].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 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 (_) {\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 = $__default['default'](element).css('transition-duration');\n var transitionDelay = $__default['default'](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 $__default['default'](element).trigger(TRANSITION_END);\n },\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 $__default['default'] === 'undefined') {\n throw new TypeError('Bootstrap\\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\\'s JavaScript.');\n }\n\n var version = $__default['default'].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 * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME = 'alert';\n var VERSION = '4.5.3';\n var DATA_KEY = 'bs.alert';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $__default['default'].fn[NAME];\n var SELECTOR_DISMISS = '[data-dismiss=\"alert\"]';\n var EVENT_CLOSE = \"close\" + EVENT_KEY;\n var EVENT_CLOSED = \"closed\" + EVENT_KEY;\n var EVENT_CLICK_DATA_API = \"click\" + EVENT_KEY + DATA_API_KEY;\n var CLASS_NAME_ALERT = 'alert';\n var CLASS_NAME_FADE = 'fade';\n var CLASS_NAME_SHOW = 'show';\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n var Alert = /*#__PURE__*/function () {\n function Alert(element) {\n this._element = element;\n } // Getters\n\n\n var _proto = Alert.prototype; // Public\n\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 $__default['default'].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 = $__default['default'](element).closest(\".\" + CLASS_NAME_ALERT)[0];\n }\n\n return parent;\n };\n\n _proto._triggerCloseEvent = function _triggerCloseEvent(element) {\n var closeEvent = $__default['default'].Event(EVENT_CLOSE);\n $__default['default'](element).trigger(closeEvent);\n return closeEvent;\n };\n\n _proto._removeElement = function _removeElement(element) {\n var _this = this;\n\n $__default['default'](element).removeClass(CLASS_NAME_SHOW);\n\n if (!$__default['default'](element).hasClass(CLASS_NAME_FADE)) {\n this._destroyElement(element);\n\n return;\n }\n\n var transitionDuration = Util.getTransitionDurationFromElement(element);\n $__default['default'](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 $__default['default'](element).detach().trigger(EVENT_CLOSED).remove();\n } // Static\n ;\n\n Alert._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var $element = $__default['default'](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 $__default['default'](document).on(EVENT_CLICK_DATA_API, SELECTOR_DISMISS, Alert._handleDismiss(new Alert()));\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $__default['default'].fn[NAME] = Alert._jQueryInterface;\n $__default['default'].fn[NAME].Constructor = Alert;\n\n $__default['default'].fn[NAME].noConflict = function () {\n $__default['default'].fn[NAME] = JQUERY_NO_CONFLICT;\n return Alert._jQueryInterface;\n };\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n\n var NAME$1 = 'button';\n var VERSION$1 = '4.5.3';\n var DATA_KEY$1 = 'bs.button';\n var EVENT_KEY$1 = \".\" + DATA_KEY$1;\n var DATA_API_KEY$1 = '.data-api';\n var JQUERY_NO_CONFLICT$1 = $__default['default'].fn[NAME$1];\n var CLASS_NAME_ACTIVE = 'active';\n var CLASS_NAME_BUTTON = 'btn';\n var CLASS_NAME_FOCUS = 'focus';\n var SELECTOR_DATA_TOGGLE_CARROT = '[data-toggle^=\"button\"]';\n var SELECTOR_DATA_TOGGLES = '[data-toggle=\"buttons\"]';\n var SELECTOR_DATA_TOGGLE = '[data-toggle=\"button\"]';\n var SELECTOR_DATA_TOGGLES_BUTTONS = '[data-toggle=\"buttons\"] .btn';\n var SELECTOR_INPUT = 'input:not([type=\"hidden\"])';\n var SELECTOR_ACTIVE = '.active';\n var SELECTOR_BUTTON = '.btn';\n var EVENT_CLICK_DATA_API$1 = \"click\" + EVENT_KEY$1 + DATA_API_KEY$1;\n var EVENT_FOCUS_BLUR_DATA_API = \"focus\" + EVENT_KEY$1 + DATA_API_KEY$1 + \" \" + (\"blur\" + EVENT_KEY$1 + DATA_API_KEY$1);\n var EVENT_LOAD_DATA_API = \"load\" + EVENT_KEY$1 + DATA_API_KEY$1;\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n var Button = /*#__PURE__*/function () {\n function Button(element) {\n this._element = element;\n this.shouldAvoidTriggerChange = false;\n } // Getters\n\n\n var _proto = Button.prototype; // Public\n\n _proto.toggle = function toggle() {\n var triggerChangeEvent = true;\n var addAriaPressed = true;\n var rootElement = $__default['default'](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(CLASS_NAME_ACTIVE)) {\n triggerChangeEvent = false;\n } else {\n var activeElement = rootElement.querySelector(SELECTOR_ACTIVE);\n\n if (activeElement) {\n $__default['default'](activeElement).removeClass(CLASS_NAME_ACTIVE);\n }\n }\n }\n\n if (triggerChangeEvent) {\n // if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input\n if (input.type === 'checkbox' || input.type === 'radio') {\n input.checked = !this._element.classList.contains(CLASS_NAME_ACTIVE);\n }\n\n if (!this.shouldAvoidTriggerChange) {\n $__default['default'](input).trigger('change');\n }\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(CLASS_NAME_ACTIVE));\n }\n\n if (triggerChangeEvent) {\n $__default['default'](this._element).toggleClass(CLASS_NAME_ACTIVE);\n }\n }\n };\n\n _proto.dispose = function dispose() {\n $__default['default'].removeData(this._element, DATA_KEY$1);\n this._element = null;\n } // Static\n ;\n\n Button._jQueryInterface = function _jQueryInterface(config, avoidTriggerChange) {\n return this.each(function () {\n var $element = $__default['default'](this);\n var data = $element.data(DATA_KEY$1);\n\n if (!data) {\n data = new Button(this);\n $element.data(DATA_KEY$1, data);\n }\n\n data.shouldAvoidTriggerChange = avoidTriggerChange;\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$1;\n }\n }]);\n\n return Button;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $__default['default'](document).on(EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE_CARROT, function (event) {\n var button = event.target;\n var initialButton = button;\n\n if (!$__default['default'](button).hasClass(CLASS_NAME_BUTTON)) {\n button = $__default['default'](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 if (initialButton.tagName === 'INPUT' || button.tagName !== 'LABEL') {\n Button._jQueryInterface.call($__default['default'](button), 'toggle', initialButton.tagName === 'INPUT');\n }\n }\n }).on(EVENT_FOCUS_BLUR_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, function (event) {\n var button = $__default['default'](event.target).closest(SELECTOR_BUTTON)[0];\n $__default['default'](button).toggleClass(CLASS_NAME_FOCUS, /^focus(in)?$/.test(event.type));\n });\n $__default['default'](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(CLASS_NAME_ACTIVE);\n } else {\n button.classList.remove(CLASS_NAME_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(CLASS_NAME_ACTIVE);\n } else {\n _button.classList.remove(CLASS_NAME_ACTIVE);\n }\n }\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $__default['default'].fn[NAME$1] = Button._jQueryInterface;\n $__default['default'].fn[NAME$1].Constructor = Button;\n\n $__default['default'].fn[NAME$1].noConflict = function () {\n $__default['default'].fn[NAME$1] = JQUERY_NO_CONFLICT$1;\n return Button._jQueryInterface;\n };\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n\n var NAME$2 = 'carousel';\n var VERSION$2 = '4.5.3';\n var DATA_KEY$2 = 'bs.carousel';\n var EVENT_KEY$2 = \".\" + DATA_KEY$2;\n var DATA_API_KEY$2 = '.data-api';\n var JQUERY_NO_CONFLICT$2 = $__default['default'].fn[NAME$2];\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_NEXT = 'next';\n var DIRECTION_PREV = 'prev';\n var DIRECTION_LEFT = 'left';\n var DIRECTION_RIGHT = 'right';\n var EVENT_SLIDE = \"slide\" + EVENT_KEY$2;\n var EVENT_SLID = \"slid\" + EVENT_KEY$2;\n var EVENT_KEYDOWN = \"keydown\" + EVENT_KEY$2;\n var EVENT_MOUSEENTER = \"mouseenter\" + EVENT_KEY$2;\n var EVENT_MOUSELEAVE = \"mouseleave\" + EVENT_KEY$2;\n var EVENT_TOUCHSTART = \"touchstart\" + EVENT_KEY$2;\n var EVENT_TOUCHMOVE = \"touchmove\" + EVENT_KEY$2;\n var EVENT_TOUCHEND = \"touchend\" + EVENT_KEY$2;\n var EVENT_POINTERDOWN = \"pointerdown\" + EVENT_KEY$2;\n var EVENT_POINTERUP = \"pointerup\" + EVENT_KEY$2;\n var EVENT_DRAG_START = \"dragstart\" + EVENT_KEY$2;\n var EVENT_LOAD_DATA_API$1 = \"load\" + EVENT_KEY$2 + DATA_API_KEY$2;\n var EVENT_CLICK_DATA_API$2 = \"click\" + EVENT_KEY$2 + DATA_API_KEY$2;\n var CLASS_NAME_CAROUSEL = 'carousel';\n var CLASS_NAME_ACTIVE$1 = 'active';\n var CLASS_NAME_SLIDE = 'slide';\n var CLASS_NAME_RIGHT = 'carousel-item-right';\n var CLASS_NAME_LEFT = 'carousel-item-left';\n var CLASS_NAME_NEXT = 'carousel-item-next';\n var CLASS_NAME_PREV = 'carousel-item-prev';\n var CLASS_NAME_POINTER_EVENT = 'pointer-event';\n var SELECTOR_ACTIVE$1 = '.active';\n var SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\n var SELECTOR_ITEM = '.carousel-item';\n var SELECTOR_ITEM_IMG = '.carousel-item img';\n var SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\n var SELECTOR_INDICATORS = '.carousel-indicators';\n var SELECTOR_DATA_SLIDE = '[data-slide], [data-slide-to]';\n var SELECTOR_DATA_RIDE = '[data-ride=\"carousel\"]';\n var PointerType = {\n TOUCH: 'touch',\n PEN: 'pen'\n };\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n var Carousel = /*#__PURE__*/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; // Public\n\n _proto.next = function next() {\n if (!this._isSliding) {\n this._slide(DIRECTION_NEXT);\n }\n };\n\n _proto.nextWhenVisible = function nextWhenVisible() {\n var $element = $__default['default'](this._element); // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n\n if (!document.hidden && $element.is(':visible') && $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 $__default['default'](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 $__default['default'](this._element).off(EVENT_KEY$2);\n $__default['default'].removeData(this._element, DATA_KEY$2);\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 = _extends({}, Default, config);\n Util.typeCheckConfig(NAME$2, 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 $__default['default'](this._element).on(EVENT_KEYDOWN, function (event) {\n return _this2._keydown(event);\n });\n }\n\n if (this._config.pause === 'hover') {\n $__default['default'](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 $__default['default'](this._element.querySelectorAll(SELECTOR_ITEM_IMG)).on(EVENT_DRAG_START, function (e) {\n return e.preventDefault();\n });\n\n if (this._pointerEvent) {\n $__default['default'](this._element).on(EVENT_POINTERDOWN, function (event) {\n return start(event);\n });\n $__default['default'](this._element).on(EVENT_POINTERUP, function (event) {\n return end(event);\n });\n\n this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n } else {\n $__default['default'](this._element).on(EVENT_TOUCHSTART, function (event) {\n return start(event);\n });\n $__default['default'](this._element).on(EVENT_TOUCHMOVE, function (event) {\n return move(event);\n });\n $__default['default'](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 = $__default['default'].Event(EVENT_SLIDE, {\n relatedTarget: relatedTarget,\n direction: eventDirectionName,\n from: fromIndex,\n to: targetIndex\n });\n $__default['default'](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$1));\n $__default['default'](indicators).removeClass(CLASS_NAME_ACTIVE$1);\n\n var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];\n\n if (nextIndicator) {\n $__default['default'](nextIndicator).addClass(CLASS_NAME_ACTIVE$1);\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 = CLASS_NAME_LEFT;\n orderClassName = CLASS_NAME_NEXT;\n eventDirectionName = DIRECTION_LEFT;\n } else {\n directionalClassName = CLASS_NAME_RIGHT;\n orderClassName = CLASS_NAME_PREV;\n eventDirectionName = DIRECTION_RIGHT;\n }\n\n if (nextElement && $__default['default'](nextElement).hasClass(CLASS_NAME_ACTIVE$1)) {\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 = $__default['default'].Event(EVENT_SLID, {\n relatedTarget: nextElement,\n direction: eventDirectionName,\n from: activeElementIndex,\n to: nextElementIndex\n });\n\n if ($__default['default'](this._element).hasClass(CLASS_NAME_SLIDE)) {\n $__default['default'](nextElement).addClass(orderClassName);\n Util.reflow(nextElement);\n $__default['default'](activeElement).addClass(directionalClassName);\n $__default['default'](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 $__default['default'](activeElement).one(Util.TRANSITION_END, function () {\n $__default['default'](nextElement).removeClass(directionalClassName + \" \" + orderClassName).addClass(CLASS_NAME_ACTIVE$1);\n $__default['default'](activeElement).removeClass(CLASS_NAME_ACTIVE$1 + \" \" + orderClassName + \" \" + directionalClassName);\n _this4._isSliding = false;\n setTimeout(function () {\n return $__default['default'](_this4._element).trigger(slidEvent);\n }, 0);\n }).emulateTransitionEnd(transitionDuration);\n } else {\n $__default['default'](activeElement).removeClass(CLASS_NAME_ACTIVE$1);\n $__default['default'](nextElement).addClass(CLASS_NAME_ACTIVE$1);\n this._isSliding = false;\n $__default['default'](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 = $__default['default'](this).data(DATA_KEY$2);\n\n var _config = _extends({}, Default, $__default['default'](this).data());\n\n if (_typeof(config) === 'object') {\n _config = _extends({}, _config, config);\n }\n\n var action = typeof config === 'string' ? config : _config.slide;\n\n if (!data) {\n data = new Carousel(this, _config);\n $__default['default'](this).data(DATA_KEY$2, 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 = $__default['default'](selector)[0];\n\n if (!target || !$__default['default'](target).hasClass(CLASS_NAME_CAROUSEL)) {\n return;\n }\n\n var config = _extends({}, $__default['default'](target).data(), $__default['default'](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($__default['default'](target), config);\n\n if (slideIndex) {\n $__default['default'](target).data(DATA_KEY$2).to(slideIndex);\n }\n\n event.preventDefault();\n };\n\n _createClass(Carousel, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION$2;\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 $__default['default'](document).on(EVENT_CLICK_DATA_API$2, SELECTOR_DATA_SLIDE, Carousel._dataApiClickHandler);\n $__default['default'](window).on(EVENT_LOAD_DATA_API$1, 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 = $__default['default'](carousels[i]);\n\n Carousel._jQueryInterface.call($carousel, $carousel.data());\n }\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $__default['default'].fn[NAME$2] = Carousel._jQueryInterface;\n $__default['default'].fn[NAME$2].Constructor = Carousel;\n\n $__default['default'].fn[NAME$2].noConflict = function () {\n $__default['default'].fn[NAME$2] = JQUERY_NO_CONFLICT$2;\n return Carousel._jQueryInterface;\n };\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n\n var NAME$3 = 'collapse';\n var VERSION$3 = '4.5.3';\n var DATA_KEY$3 = 'bs.collapse';\n var EVENT_KEY$3 = \".\" + DATA_KEY$3;\n var DATA_API_KEY$3 = '.data-api';\n var JQUERY_NO_CONFLICT$3 = $__default['default'].fn[NAME$3];\n var Default$1 = {\n toggle: true,\n parent: ''\n };\n var DefaultType$1 = {\n toggle: 'boolean',\n parent: '(string|element)'\n };\n var EVENT_SHOW = \"show\" + EVENT_KEY$3;\n var EVENT_SHOWN = \"shown\" + EVENT_KEY$3;\n var EVENT_HIDE = \"hide\" + EVENT_KEY$3;\n var EVENT_HIDDEN = \"hidden\" + EVENT_KEY$3;\n var EVENT_CLICK_DATA_API$3 = \"click\" + EVENT_KEY$3 + DATA_API_KEY$3;\n var CLASS_NAME_SHOW$1 = 'show';\n var CLASS_NAME_COLLAPSE = 'collapse';\n var CLASS_NAME_COLLAPSING = 'collapsing';\n var CLASS_NAME_COLLAPSED = 'collapsed';\n var DIMENSION_WIDTH = 'width';\n var DIMENSION_HEIGHT = 'height';\n var SELECTOR_ACTIVES = '.show, .collapsing';\n var SELECTOR_DATA_TOGGLE$1 = '[data-toggle=\"collapse\"]';\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n var Collapse = /*#__PURE__*/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$1));\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; // Public\n\n _proto.toggle = function toggle() {\n if ($__default['default'](this._element).hasClass(CLASS_NAME_SHOW$1)) {\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 || $__default['default'](this._element).hasClass(CLASS_NAME_SHOW$1)) {\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(CLASS_NAME_COLLAPSE);\n });\n\n if (actives.length === 0) {\n actives = null;\n }\n }\n\n if (actives) {\n activesData = $__default['default'](actives).not(this._selector).data(DATA_KEY$3);\n\n if (activesData && activesData._isTransitioning) {\n return;\n }\n }\n\n var startEvent = $__default['default'].Event(EVENT_SHOW);\n $__default['default'](this._element).trigger(startEvent);\n\n if (startEvent.isDefaultPrevented()) {\n return;\n }\n\n if (actives) {\n Collapse._jQueryInterface.call($__default['default'](actives).not(this._selector), 'hide');\n\n if (!activesData) {\n $__default['default'](actives).data(DATA_KEY$3, null);\n }\n }\n\n var dimension = this._getDimension();\n\n $__default['default'](this._element).removeClass(CLASS_NAME_COLLAPSE).addClass(CLASS_NAME_COLLAPSING);\n this._element.style[dimension] = 0;\n\n if (this._triggerArray.length) {\n $__default['default'](this._triggerArray).removeClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', true);\n }\n\n this.setTransitioning(true);\n\n var complete = function complete() {\n $__default['default'](_this._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE + \" \" + CLASS_NAME_SHOW$1);\n _this._element.style[dimension] = '';\n\n _this.setTransitioning(false);\n\n $__default['default'](_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 $__default['default'](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 || !$__default['default'](this._element).hasClass(CLASS_NAME_SHOW$1)) {\n return;\n }\n\n var startEvent = $__default['default'].Event(EVENT_HIDE);\n $__default['default'](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 $__default['default'](this._element).addClass(CLASS_NAME_COLLAPSING).removeClass(CLASS_NAME_COLLAPSE + \" \" + CLASS_NAME_SHOW$1);\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 = $__default['default']([].slice.call(document.querySelectorAll(selector)));\n\n if (!$elem.hasClass(CLASS_NAME_SHOW$1)) {\n $__default['default'](trigger).addClass(CLASS_NAME_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 $__default['default'](_this2._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE).trigger(EVENT_HIDDEN);\n };\n\n this._element.style[dimension] = '';\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n $__default['default'](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 $__default['default'].removeData(this._element, DATA_KEY$3);\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 = _extends({}, Default$1, config);\n config.toggle = Boolean(config.toggle); // Coerce string values\n\n Util.typeCheckConfig(NAME$3, config, DefaultType$1);\n return config;\n };\n\n _proto._getDimension = function _getDimension() {\n var hasWidth = $__default['default'](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 $__default['default'](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 = $__default['default'](element).hasClass(CLASS_NAME_SHOW$1);\n\n if (triggerArray.length) {\n $__default['default'](triggerArray).toggleClass(CLASS_NAME_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 $element = $__default['default'](this);\n var data = $element.data(DATA_KEY$3);\n\n var _config = _extends({}, Default$1, $element.data(), _typeof(config) === 'object' && config ? config : {});\n\n if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false;\n }\n\n if (!data) {\n data = new Collapse(this, _config);\n $element.data(DATA_KEY$3, 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$3;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default$1;\n }\n }]);\n\n return Collapse;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $__default['default'](document).on(EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$1, 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 = $__default['default'](this);\n var selector = Util.getSelectorFromElement(this);\n var selectors = [].slice.call(document.querySelectorAll(selector));\n $__default['default'](selectors).each(function () {\n var $target = $__default['default'](this);\n var data = $target.data(DATA_KEY$3);\n var config = data ? 'toggle' : $trigger.data();\n\n Collapse._jQueryInterface.call($target, config);\n });\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $__default['default'].fn[NAME$3] = Collapse._jQueryInterface;\n $__default['default'].fn[NAME$3].Constructor = Collapse;\n\n $__default['default'].fn[NAME$3].noConflict = function () {\n $__default['default'].fn[NAME$3] = JQUERY_NO_CONFLICT$3;\n return Collapse._jQueryInterface;\n };\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n\n var NAME$4 = 'dropdown';\n var VERSION$4 = '4.5.3';\n var DATA_KEY$4 = 'bs.dropdown';\n var EVENT_KEY$4 = \".\" + DATA_KEY$4;\n var DATA_API_KEY$4 = '.data-api';\n var JQUERY_NO_CONFLICT$4 = $__default['default'].fn[NAME$4];\n var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key\n\n var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key\n\n var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key\n\n var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key\n\n var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)\n\n var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + \"|\" + ARROW_DOWN_KEYCODE + \"|\" + ESCAPE_KEYCODE);\n var EVENT_HIDE$1 = \"hide\" + EVENT_KEY$4;\n var EVENT_HIDDEN$1 = \"hidden\" + EVENT_KEY$4;\n var EVENT_SHOW$1 = \"show\" + EVENT_KEY$4;\n var EVENT_SHOWN$1 = \"shown\" + EVENT_KEY$4;\n var EVENT_CLICK = \"click\" + EVENT_KEY$4;\n var EVENT_CLICK_DATA_API$4 = \"click\" + EVENT_KEY$4 + DATA_API_KEY$4;\n var EVENT_KEYDOWN_DATA_API = \"keydown\" + EVENT_KEY$4 + DATA_API_KEY$4;\n var EVENT_KEYUP_DATA_API = \"keyup\" + EVENT_KEY$4 + DATA_API_KEY$4;\n var CLASS_NAME_DISABLED = 'disabled';\n var CLASS_NAME_SHOW$2 = 'show';\n var CLASS_NAME_DROPUP = 'dropup';\n var CLASS_NAME_DROPRIGHT = 'dropright';\n var CLASS_NAME_DROPLEFT = 'dropleft';\n var CLASS_NAME_MENURIGHT = 'dropdown-menu-right';\n var CLASS_NAME_POSITION_STATIC = 'position-static';\n var SELECTOR_DATA_TOGGLE$2 = '[data-toggle=\"dropdown\"]';\n var SELECTOR_FORM_CHILD = '.dropdown form';\n var SELECTOR_MENU = '.dropdown-menu';\n var SELECTOR_NAVBAR_NAV = '.navbar-nav';\n var SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\n var PLACEMENT_TOP = 'top-start';\n var PLACEMENT_TOPEND = 'top-end';\n var PLACEMENT_BOTTOM = 'bottom-start';\n var PLACEMENT_BOTTOMEND = 'bottom-end';\n var PLACEMENT_RIGHT = 'right-start';\n var PLACEMENT_LEFT = 'left-start';\n var Default$2 = {\n offset: 0,\n flip: true,\n boundary: 'scrollParent',\n reference: 'toggle',\n display: 'dynamic',\n popperConfig: null\n };\n var DefaultType$2 = {\n offset: '(number|string|function)',\n flip: 'boolean',\n boundary: '(string|element)',\n reference: '(string|element)',\n display: 'string',\n popperConfig: '(null|object)'\n };\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n var Dropdown = /*#__PURE__*/function () {\n function Dropdown(element, config) {\n this._element = element;\n this._popper = null;\n this._config = this._getConfig(config);\n this._menu = this._getMenuElement();\n this._inNavbar = this._detectNavbar();\n\n this._addEventListeners();\n } // Getters\n\n\n var _proto = Dropdown.prototype; // Public\n\n _proto.toggle = function toggle() {\n if (this._element.disabled || $__default['default'](this._element).hasClass(CLASS_NAME_DISABLED)) {\n return;\n }\n\n var isActive = $__default['default'](this._menu).hasClass(CLASS_NAME_SHOW$2);\n\n Dropdown._clearMenus();\n\n if (isActive) {\n return;\n }\n\n this.show(true);\n };\n\n _proto.show = function show(usePopper) {\n if (usePopper === void 0) {\n usePopper = false;\n }\n\n if (this._element.disabled || $__default['default'](this._element).hasClass(CLASS_NAME_DISABLED) || $__default['default'](this._menu).hasClass(CLASS_NAME_SHOW$2)) {\n return;\n }\n\n var relatedTarget = {\n relatedTarget: this._element\n };\n var showEvent = $__default['default'].Event(EVENT_SHOW$1, relatedTarget);\n\n var parent = Dropdown._getParentFromElement(this._element);\n\n $__default['default'](parent).trigger(showEvent);\n\n if (showEvent.isDefaultPrevented()) {\n return;\n } // Disable totally Popper.js for Dropdown in Navbar\n\n\n if (!this._inNavbar && usePopper) {\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper__default['default'] === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper.js (https://popper.js.org/)');\n }\n\n var referenceElement = this._element;\n\n if (this._config.reference === 'parent') {\n referenceElement = parent;\n } else if (Util.isElement(this._config.reference)) {\n referenceElement = this._config.reference; // Check if it's jQuery element\n\n if (typeof this._config.reference.jquery !== 'undefined') {\n referenceElement = this._config.reference[0];\n }\n } // If boundary is not `scrollParent`, then set position to `static`\n // to allow the menu to \"escape\" the scroll parent's boundaries\n // https://github.com/twbs/bootstrap/issues/24251\n\n\n if (this._config.boundary !== 'scrollParent') {\n $__default['default'](parent).addClass(CLASS_NAME_POSITION_STATIC);\n }\n\n this._popper = new Popper__default['default'](referenceElement, this._menu, this._getPopperConfig());\n } // 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\n if ('ontouchstart' in document.documentElement && $__default['default'](parent).closest(SELECTOR_NAVBAR_NAV).length === 0) {\n $__default['default'](document.body).children().on('mouseover', null, $__default['default'].noop);\n }\n\n this._element.focus();\n\n this._element.setAttribute('aria-expanded', true);\n\n $__default['default'](this._menu).toggleClass(CLASS_NAME_SHOW$2);\n $__default['default'](parent).toggleClass(CLASS_NAME_SHOW$2).trigger($__default['default'].Event(EVENT_SHOWN$1, relatedTarget));\n };\n\n _proto.hide = function hide() {\n if (this._element.disabled || $__default['default'](this._element).hasClass(CLASS_NAME_DISABLED) || !$__default['default'](this._menu).hasClass(CLASS_NAME_SHOW$2)) {\n return;\n }\n\n var relatedTarget = {\n relatedTarget: this._element\n };\n var hideEvent = $__default['default'].Event(EVENT_HIDE$1, relatedTarget);\n\n var parent = Dropdown._getParentFromElement(this._element);\n\n $__default['default'](parent).trigger(hideEvent);\n\n if (hideEvent.isDefaultPrevented()) {\n return;\n }\n\n if (this._popper) {\n this._popper.destroy();\n }\n\n $__default['default'](this._menu).toggleClass(CLASS_NAME_SHOW$2);\n $__default['default'](parent).toggleClass(CLASS_NAME_SHOW$2).trigger($__default['default'].Event(EVENT_HIDDEN$1, relatedTarget));\n };\n\n _proto.dispose = function dispose() {\n $__default['default'].removeData(this._element, DATA_KEY$4);\n $__default['default'](this._element).off(EVENT_KEY$4);\n this._element = null;\n this._menu = null;\n\n if (this._popper !== null) {\n this._popper.destroy();\n\n this._popper = null;\n }\n };\n\n _proto.update = function update() {\n this._inNavbar = this._detectNavbar();\n\n if (this._popper !== null) {\n this._popper.scheduleUpdate();\n }\n } // Private\n ;\n\n _proto._addEventListeners = function _addEventListeners() {\n var _this = this;\n\n $__default['default'](this._element).on(EVENT_CLICK, function (event) {\n event.preventDefault();\n event.stopPropagation();\n\n _this.toggle();\n });\n };\n\n _proto._getConfig = function _getConfig(config) {\n config = _extends({}, this.constructor.Default, $__default['default'](this._element).data(), config);\n Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n return config;\n };\n\n _proto._getMenuElement = function _getMenuElement() {\n if (!this._menu) {\n var parent = Dropdown._getParentFromElement(this._element);\n\n if (parent) {\n this._menu = parent.querySelector(SELECTOR_MENU);\n }\n }\n\n return this._menu;\n };\n\n _proto._getPlacement = function _getPlacement() {\n var $parentDropdown = $__default['default'](this._element.parentNode);\n var placement = PLACEMENT_BOTTOM; // Handle dropup\n\n if ($parentDropdown.hasClass(CLASS_NAME_DROPUP)) {\n placement = $__default['default'](this._menu).hasClass(CLASS_NAME_MENURIGHT) ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n } else if ($parentDropdown.hasClass(CLASS_NAME_DROPRIGHT)) {\n placement = PLACEMENT_RIGHT;\n } else if ($parentDropdown.hasClass(CLASS_NAME_DROPLEFT)) {\n placement = PLACEMENT_LEFT;\n } else if ($__default['default'](this._menu).hasClass(CLASS_NAME_MENURIGHT)) {\n placement = PLACEMENT_BOTTOMEND;\n }\n\n return placement;\n };\n\n _proto._detectNavbar = function _detectNavbar() {\n return $__default['default'](this._element).closest('.navbar').length > 0;\n };\n\n _proto._getOffset = function _getOffset() {\n var _this2 = this;\n\n var offset = {};\n\n if (typeof this._config.offset === 'function') {\n offset.fn = function (data) {\n data.offsets = _extends({}, data.offsets, _this2._config.offset(data.offsets, _this2._element) || {});\n return data;\n };\n } else {\n offset.offset = this._config.offset;\n }\n\n return offset;\n };\n\n _proto._getPopperConfig = function _getPopperConfig() {\n var popperConfig = {\n placement: this._getPlacement(),\n modifiers: {\n offset: this._getOffset(),\n flip: {\n enabled: this._config.flip\n },\n preventOverflow: {\n boundariesElement: this._config.boundary\n }\n }\n }; // Disable Popper.js if we have a static display\n\n if (this._config.display === 'static') {\n popperConfig.modifiers.applyStyle = {\n enabled: false\n };\n }\n\n return _extends({}, popperConfig, this._config.popperConfig);\n } // Static\n ;\n\n Dropdown._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $__default['default'](this).data(DATA_KEY$4);\n\n var _config = _typeof(config) === 'object' ? config : null;\n\n if (!data) {\n data = new Dropdown(this, _config);\n $__default['default'](this).data(DATA_KEY$4, 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 Dropdown._clearMenus = function _clearMenus(event) {\n if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n return;\n }\n\n var toggles = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$2));\n\n for (var i = 0, len = toggles.length; i < len; i++) {\n var parent = Dropdown._getParentFromElement(toggles[i]);\n\n var context = $__default['default'](toggles[i]).data(DATA_KEY$4);\n var relatedTarget = {\n relatedTarget: toggles[i]\n };\n\n if (event && event.type === 'click') {\n relatedTarget.clickEvent = event;\n }\n\n if (!context) {\n continue;\n }\n\n var dropdownMenu = context._menu;\n\n if (!$__default['default'](parent).hasClass(CLASS_NAME_SHOW$2)) {\n continue;\n }\n\n if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $__default['default'].contains(parent, event.target)) {\n continue;\n }\n\n var hideEvent = $__default['default'].Event(EVENT_HIDE$1, relatedTarget);\n $__default['default'](parent).trigger(hideEvent);\n\n if (hideEvent.isDefaultPrevented()) {\n continue;\n } // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n\n\n if ('ontouchstart' in document.documentElement) {\n $__default['default'](document.body).children().off('mouseover', null, $__default['default'].noop);\n }\n\n toggles[i].setAttribute('aria-expanded', 'false');\n\n if (context._popper) {\n context._popper.destroy();\n }\n\n $__default['default'](dropdownMenu).removeClass(CLASS_NAME_SHOW$2);\n $__default['default'](parent).removeClass(CLASS_NAME_SHOW$2).trigger($__default['default'].Event(EVENT_HIDDEN$1, relatedTarget));\n }\n };\n\n Dropdown._getParentFromElement = function _getParentFromElement(element) {\n var parent;\n var selector = Util.getSelectorFromElement(element);\n\n if (selector) {\n parent = document.querySelector(selector);\n }\n\n return parent || element.parentNode;\n } // eslint-disable-next-line complexity\n ;\n\n Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {\n // If not input/textarea:\n // - And not a key in REGEXP_KEYDOWN => not a dropdown command\n // If input/textarea:\n // - If space key => not a dropdown command\n // - If key is other than escape\n // - If key is not up or down => not a dropdown command\n // - If trigger inside the menu => not a dropdown command\n if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $__default['default'](event.target).closest(SELECTOR_MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n return;\n }\n\n if (this.disabled || $__default['default'](this).hasClass(CLASS_NAME_DISABLED)) {\n return;\n }\n\n var parent = Dropdown._getParentFromElement(this);\n\n var isActive = $__default['default'](parent).hasClass(CLASS_NAME_SHOW$2);\n\n if (!isActive && event.which === ESCAPE_KEYCODE) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n if (!isActive || event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE) {\n if (event.which === ESCAPE_KEYCODE) {\n $__default['default'](parent.querySelector(SELECTOR_DATA_TOGGLE$2)).trigger('focus');\n }\n\n $__default['default'](this).trigger('click');\n return;\n }\n\n var items = [].slice.call(parent.querySelectorAll(SELECTOR_VISIBLE_ITEMS)).filter(function (item) {\n return $__default['default'](item).is(':visible');\n });\n\n if (items.length === 0) {\n return;\n }\n\n var index = items.indexOf(event.target);\n\n if (event.which === ARROW_UP_KEYCODE && index > 0) {\n // Up\n index--;\n }\n\n if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {\n // Down\n index++;\n }\n\n if (index < 0) {\n index = 0;\n }\n\n items[index].focus();\n };\n\n _createClass(Dropdown, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION$4;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default$2;\n }\n }, {\n key: \"DefaultType\",\n get: function get() {\n return DefaultType$2;\n }\n }]);\n\n return Dropdown;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $__default['default'](document).on(EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$2, Dropdown._dataApiKeydownHandler).on(EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown._dataApiKeydownHandler).on(EVENT_CLICK_DATA_API$4 + \" \" + EVENT_KEYUP_DATA_API, Dropdown._clearMenus).on(EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$2, function (event) {\n event.preventDefault();\n event.stopPropagation();\n\n Dropdown._jQueryInterface.call($__default['default'](this), 'toggle');\n }).on(EVENT_CLICK_DATA_API$4, SELECTOR_FORM_CHILD, function (e) {\n e.stopPropagation();\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $__default['default'].fn[NAME$4] = Dropdown._jQueryInterface;\n $__default['default'].fn[NAME$4].Constructor = Dropdown;\n\n $__default['default'].fn[NAME$4].noConflict = function () {\n $__default['default'].fn[NAME$4] = JQUERY_NO_CONFLICT$4;\n return Dropdown._jQueryInterface;\n };\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n\n var NAME$5 = 'modal';\n var VERSION$5 = '4.5.3';\n var DATA_KEY$5 = 'bs.modal';\n var EVENT_KEY$5 = \".\" + DATA_KEY$5;\n var DATA_API_KEY$5 = '.data-api';\n var JQUERY_NO_CONFLICT$5 = $__default['default'].fn[NAME$5];\n var ESCAPE_KEYCODE$1 = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n var Default$3 = {\n backdrop: true,\n keyboard: true,\n focus: true,\n show: true\n };\n var DefaultType$3 = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n focus: 'boolean',\n show: 'boolean'\n };\n var EVENT_HIDE$2 = \"hide\" + EVENT_KEY$5;\n var EVENT_HIDE_PREVENTED = \"hidePrevented\" + EVENT_KEY$5;\n var EVENT_HIDDEN$2 = \"hidden\" + EVENT_KEY$5;\n var EVENT_SHOW$2 = \"show\" + EVENT_KEY$5;\n var EVENT_SHOWN$2 = \"shown\" + EVENT_KEY$5;\n var EVENT_FOCUSIN = \"focusin\" + EVENT_KEY$5;\n var EVENT_RESIZE = \"resize\" + EVENT_KEY$5;\n var EVENT_CLICK_DISMISS = \"click.dismiss\" + EVENT_KEY$5;\n var EVENT_KEYDOWN_DISMISS = \"keydown.dismiss\" + EVENT_KEY$5;\n var EVENT_MOUSEUP_DISMISS = \"mouseup.dismiss\" + EVENT_KEY$5;\n var EVENT_MOUSEDOWN_DISMISS = \"mousedown.dismiss\" + EVENT_KEY$5;\n var EVENT_CLICK_DATA_API$5 = \"click\" + EVENT_KEY$5 + DATA_API_KEY$5;\n var CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable';\n var CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure';\n var CLASS_NAME_BACKDROP = 'modal-backdrop';\n var CLASS_NAME_OPEN = 'modal-open';\n var CLASS_NAME_FADE$1 = 'fade';\n var CLASS_NAME_SHOW$3 = 'show';\n var CLASS_NAME_STATIC = 'modal-static';\n var SELECTOR_DIALOG = '.modal-dialog';\n var SELECTOR_MODAL_BODY = '.modal-body';\n var SELECTOR_DATA_TOGGLE$3 = '[data-toggle=\"modal\"]';\n var SELECTOR_DATA_DISMISS = '[data-dismiss=\"modal\"]';\n var SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\n var SELECTOR_STICKY_CONTENT = '.sticky-top';\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n var Modal = /*#__PURE__*/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; // Public\n\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 ($__default['default'](this._element).hasClass(CLASS_NAME_FADE$1)) {\n this._isTransitioning = true;\n }\n\n var showEvent = $__default['default'].Event(EVENT_SHOW$2, {\n relatedTarget: relatedTarget\n });\n $__default['default'](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 $__default['default'](this._element).on(EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, function (event) {\n return _this.hide(event);\n });\n $__default['default'](this._dialog).on(EVENT_MOUSEDOWN_DISMISS, function () {\n $__default['default'](_this._element).one(EVENT_MOUSEUP_DISMISS, function (event) {\n if ($__default['default'](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 = $__default['default'].Event(EVENT_HIDE$2);\n $__default['default'](this._element).trigger(hideEvent);\n\n if (!this._isShown || hideEvent.isDefaultPrevented()) {\n return;\n }\n\n this._isShown = false;\n var transition = $__default['default'](this._element).hasClass(CLASS_NAME_FADE$1);\n\n if (transition) {\n this._isTransitioning = true;\n }\n\n this._setEscapeEvent();\n\n this._setResizeEvent();\n\n $__default['default'](document).off(EVENT_FOCUSIN);\n $__default['default'](this._element).removeClass(CLASS_NAME_SHOW$3);\n $__default['default'](this._element).off(EVENT_CLICK_DISMISS);\n $__default['default'](this._dialog).off(EVENT_MOUSEDOWN_DISMISS);\n\n if (transition) {\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n $__default['default'](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 $__default['default'](htmlElement).off(EVENT_KEY$5);\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 $__default['default'](document).off(EVENT_FOCUSIN);\n $__default['default'].removeData(this._element, DATA_KEY$5);\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 = _extends({}, Default$3, config);\n Util.typeCheckConfig(NAME$5, config, DefaultType$3);\n return config;\n };\n\n _proto._triggerBackdropTransition = function _triggerBackdropTransition() {\n var _this3 = this;\n\n if (this._config.backdrop === 'static') {\n var hideEventPrevented = $__default['default'].Event(EVENT_HIDE_PREVENTED);\n $__default['default'](this._element).trigger(hideEventPrevented);\n\n if (hideEventPrevented.isDefaultPrevented()) {\n return;\n }\n\n var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden';\n }\n\n this._element.classList.add(CLASS_NAME_STATIC);\n\n var modalTransitionDuration = Util.getTransitionDurationFromElement(this._dialog);\n $__default['default'](this._element).off(Util.TRANSITION_END);\n $__default['default'](this._element).one(Util.TRANSITION_END, function () {\n _this3._element.classList.remove(CLASS_NAME_STATIC);\n\n if (!isModalOverflowing) {\n $__default['default'](_this3._element).one(Util.TRANSITION_END, function () {\n _this3._element.style.overflowY = '';\n }).emulateTransitionEnd(_this3._element, modalTransitionDuration);\n }\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 = $__default['default'](this._element).hasClass(CLASS_NAME_FADE$1);\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 this._element.setAttribute('role', 'dialog');\n\n if ($__default['default'](this._dialog).hasClass(CLASS_NAME_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 $__default['default'](this._element).addClass(CLASS_NAME_SHOW$3);\n\n if (this._config.focus) {\n this._enforceFocus();\n }\n\n var shownEvent = $__default['default'].Event(EVENT_SHOWN$2, {\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 $__default['default'](_this4._element).trigger(shownEvent);\n };\n\n if (transition) {\n var transitionDuration = Util.getTransitionDurationFromElement(this._dialog);\n $__default['default'](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 $__default['default'](document).off(EVENT_FOCUSIN) // Guard against infinite focus loop\n .on(EVENT_FOCUSIN, function (event) {\n if (document !== event.target && _this5._element !== event.target && $__default['default'](_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) {\n $__default['default'](this._element).on(EVENT_KEYDOWN_DISMISS, function (event) {\n if (_this6._config.keyboard && event.which === ESCAPE_KEYCODE$1) {\n event.preventDefault();\n\n _this6.hide();\n } else if (!_this6._config.keyboard && event.which === ESCAPE_KEYCODE$1) {\n _this6._triggerBackdropTransition();\n }\n });\n } else if (!this._isShown) {\n $__default['default'](this._element).off(EVENT_KEYDOWN_DISMISS);\n }\n };\n\n _proto._setResizeEvent = function _setResizeEvent() {\n var _this7 = this;\n\n if (this._isShown) {\n $__default['default'](window).on(EVENT_RESIZE, function (event) {\n return _this7.handleUpdate(event);\n });\n } else {\n $__default['default'](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._element.removeAttribute('role');\n\n this._isTransitioning = false;\n\n this._showBackdrop(function () {\n $__default['default'](document.body).removeClass(CLASS_NAME_OPEN);\n\n _this8._resetAdjustments();\n\n _this8._resetScrollbar();\n\n $__default['default'](_this8._element).trigger(EVENT_HIDDEN$2);\n });\n };\n\n _proto._removeBackdrop = function _removeBackdrop() {\n if (this._backdrop) {\n $__default['default'](this._backdrop).remove();\n this._backdrop = null;\n }\n };\n\n _proto._showBackdrop = function _showBackdrop(callback) {\n var _this9 = this;\n\n var animate = $__default['default'](this._element).hasClass(CLASS_NAME_FADE$1) ? CLASS_NAME_FADE$1 : '';\n\n if (this._isShown && this._config.backdrop) {\n this._backdrop = document.createElement('div');\n this._backdrop.className = CLASS_NAME_BACKDROP;\n\n if (animate) {\n this._backdrop.classList.add(animate);\n }\n\n $__default['default'](this._backdrop).appendTo(document.body);\n $__default['default'](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 $__default['default'](this._backdrop).addClass(CLASS_NAME_SHOW$3);\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 $__default['default'](this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);\n } else if (!this._isShown && this._backdrop) {\n $__default['default'](this._backdrop).removeClass(CLASS_NAME_SHOW$3);\n\n var callbackRemove = function callbackRemove() {\n _this9._removeBackdrop();\n\n if (callback) {\n callback();\n }\n };\n\n if ($__default['default'](this._element).hasClass(CLASS_NAME_FADE$1)) {\n var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n\n $__default['default'](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 = Math.round(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 $__default['default'](fixedContent).each(function (index, element) {\n var actualPadding = element.style.paddingRight;\n var calculatedPadding = $__default['default'](element).css('padding-right');\n $__default['default'](element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this10._scrollbarWidth + \"px\");\n }); // Adjust sticky content margin\n\n $__default['default'](stickyContent).each(function (index, element) {\n var actualMargin = element.style.marginRight;\n var calculatedMargin = $__default['default'](element).css('margin-right');\n $__default['default'](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 = $__default['default'](document.body).css('padding-right');\n $__default['default'](document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + \"px\");\n }\n\n $__default['default'](document.body).addClass(CLASS_NAME_OPEN);\n };\n\n _proto._resetScrollbar = function _resetScrollbar() {\n // Restore fixed content padding\n var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT));\n $__default['default'](fixedContent).each(function (index, element) {\n var padding = $__default['default'](element).data('padding-right');\n $__default['default'](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 $__default['default'](elements).each(function (index, element) {\n var margin = $__default['default'](element).data('margin-right');\n\n if (typeof margin !== 'undefined') {\n $__default['default'](element).css('margin-right', margin).removeData('margin-right');\n }\n }); // Restore body padding\n\n var padding = $__default['default'](document.body).data('padding-right');\n $__default['default'](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 = CLASS_NAME_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 = $__default['default'](this).data(DATA_KEY$5);\n\n var _config = _extends({}, Default$3, $__default['default'](this).data(), _typeof(config) === 'object' && config ? config : {});\n\n if (!data) {\n data = new Modal(this, _config);\n $__default['default'](this).data(DATA_KEY$5, 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$5;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default$3;\n }\n }]);\n\n return Modal;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $__default['default'](document).on(EVENT_CLICK_DATA_API$5, SELECTOR_DATA_TOGGLE$3, 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 = $__default['default'](target).data(DATA_KEY$5) ? 'toggle' : _extends({}, $__default['default'](target).data(), $__default['default'](this).data());\n\n if (this.tagName === 'A' || this.tagName === 'AREA') {\n event.preventDefault();\n }\n\n var $target = $__default['default'](target).one(EVENT_SHOW$2, 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$2, function () {\n if ($__default['default'](_this11).is(':visible')) {\n _this11.focus();\n }\n });\n });\n\n Modal._jQueryInterface.call($__default['default'](target), config, this);\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $__default['default'].fn[NAME$5] = Modal._jQueryInterface;\n $__default['default'].fn[NAME$5].Constructor = Modal;\n\n $__default['default'].fn[NAME$5].noConflict = function () {\n $__default['default'].fn[NAME$5] = JQUERY_NO_CONFLICT$5;\n return Modal._jQueryInterface;\n };\n /**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.3): tools/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\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', 'srcset', '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,[\\d+/a-z]+=*$/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, len = regExp.length; i < len; 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 * Constants\n * ------------------------------------------------------------------------\n */\n\n\n var NAME$6 = 'tooltip';\n var VERSION$6 = '4.5.3';\n var DATA_KEY$6 = 'bs.tooltip';\n var EVENT_KEY$6 = \".\" + DATA_KEY$6;\n var JQUERY_NO_CONFLICT$6 = $__default['default'].fn[NAME$6];\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$4 = {\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$4 = {\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 HOVER_STATE_SHOW = 'show';\n var HOVER_STATE_OUT = 'out';\n var Event = {\n HIDE: \"hide\" + EVENT_KEY$6,\n HIDDEN: \"hidden\" + EVENT_KEY$6,\n SHOW: \"show\" + EVENT_KEY$6,\n SHOWN: \"shown\" + EVENT_KEY$6,\n INSERTED: \"inserted\" + EVENT_KEY$6,\n CLICK: \"click\" + EVENT_KEY$6,\n FOCUSIN: \"focusin\" + EVENT_KEY$6,\n FOCUSOUT: \"focusout\" + EVENT_KEY$6,\n MOUSEENTER: \"mouseenter\" + EVENT_KEY$6,\n MOUSELEAVE: \"mouseleave\" + EVENT_KEY$6\n };\n var CLASS_NAME_FADE$2 = 'fade';\n var CLASS_NAME_SHOW$4 = 'show';\n var SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\n var SELECTOR_ARROW = '.arrow';\n var TRIGGER_HOVER = 'hover';\n var TRIGGER_FOCUS = 'focus';\n var TRIGGER_CLICK = 'click';\n var TRIGGER_MANUAL = 'manual';\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n var Tooltip = /*#__PURE__*/function () {\n function Tooltip(element, config) {\n if (typeof Popper__default['default'] === '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; // Public\n\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 = $__default['default'](event.currentTarget).data(dataKey);\n\n if (!context) {\n context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n $__default['default'](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 ($__default['default'](this.getTipElement()).hasClass(CLASS_NAME_SHOW$4)) {\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 $__default['default'].removeData(this.element, this.constructor.DATA_KEY);\n $__default['default'](this.element).off(this.constructor.EVENT_KEY);\n $__default['default'](this.element).closest('.modal').off('hide.bs.modal', this._hideModalHandler);\n\n if (this.tip) {\n $__default['default'](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 ($__default['default'](this.element).css('display') === 'none') {\n throw new Error('Please use show on visible elements');\n }\n\n var showEvent = $__default['default'].Event(this.constructor.Event.SHOW);\n\n if (this.isWithContent() && this._isEnabled) {\n $__default['default'](this.element).trigger(showEvent);\n var shadowRoot = Util.findShadowRoot(this.element);\n var isInTheDom = $__default['default'].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 $__default['default'](tip).addClass(CLASS_NAME_FADE$2);\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 $__default['default'](tip).data(this.constructor.DATA_KEY, this);\n\n if (!$__default['default'].contains(this.element.ownerDocument.documentElement, this.tip)) {\n $__default['default'](tip).appendTo(container);\n }\n\n $__default['default'](this.element).trigger(this.constructor.Event.INSERTED);\n this._popper = new Popper__default['default'](this.element, tip, this._getPopperConfig(attachment));\n $__default['default'](tip).addClass(CLASS_NAME_SHOW$4); // 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 $__default['default'](document.body).children().on('mouseover', null, $__default['default'].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 $__default['default'](_this.element).trigger(_this.constructor.Event.SHOWN);\n\n if (prevHoverState === HOVER_STATE_OUT) {\n _this._leave(null, _this);\n }\n };\n\n if ($__default['default'](this.tip).hasClass(CLASS_NAME_FADE$2)) {\n var transitionDuration = Util.getTransitionDurationFromElement(this.tip);\n $__default['default'](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 = $__default['default'].Event(this.constructor.Event.HIDE);\n\n var complete = function complete() {\n if (_this2._hoverState !== HOVER_STATE_SHOW && tip.parentNode) {\n tip.parentNode.removeChild(tip);\n }\n\n _this2._cleanTipClass();\n\n _this2.element.removeAttribute('aria-describedby');\n\n $__default['default'](_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 $__default['default'](this.element).trigger(hideEvent);\n\n if (hideEvent.isDefaultPrevented()) {\n return;\n }\n\n $__default['default'](tip).removeClass(CLASS_NAME_SHOW$4); // 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 $__default['default'](document.body).children().off('mouseover', null, $__default['default'].noop);\n }\n\n this._activeTrigger[TRIGGER_CLICK] = false;\n this._activeTrigger[TRIGGER_FOCUS] = false;\n this._activeTrigger[TRIGGER_HOVER] = false;\n\n if ($__default['default'](this.tip).hasClass(CLASS_NAME_FADE$2)) {\n var transitionDuration = Util.getTransitionDurationFromElement(tip);\n $__default['default'](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 $__default['default'](this.getTipElement()).addClass(CLASS_PREFIX + \"-\" + attachment);\n };\n\n _proto.getTipElement = function getTipElement() {\n this.tip = this.tip || $__default['default'](this.config.template)[0];\n return this.tip;\n };\n\n _proto.setContent = function setContent() {\n var tip = this.getTipElement();\n this.setElementContent($__default['default'](tip.querySelectorAll(SELECTOR_TOOLTIP_INNER)), this.getTitle());\n $__default['default'](tip).removeClass(CLASS_NAME_FADE$2 + \" \" + CLASS_NAME_SHOW$4);\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 (!$__default['default'](content).parent().is($element)) {\n $element.empty().append(content);\n }\n } else {\n $element.text($__default['default'](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 _extends({}, 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 = _extends({}, 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 $__default['default'](this.config.container);\n }\n\n return $__default['default'](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 $__default['default'](_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 $__default['default'](_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 $__default['default'](this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler);\n\n if (this.config.selector) {\n this.config = _extends({}, 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 || $__default['default'](event.currentTarget).data(dataKey);\n\n if (!context) {\n context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n $__default['default'](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 ($__default['default'](context.getTipElement()).hasClass(CLASS_NAME_SHOW$4) || context._hoverState === HOVER_STATE_SHOW) {\n context._hoverState = HOVER_STATE_SHOW;\n return;\n }\n\n clearTimeout(context._timeout);\n context._hoverState = HOVER_STATE_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 === HOVER_STATE_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 || $__default['default'](event.currentTarget).data(dataKey);\n\n if (!context) {\n context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n $__default['default'](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 = HOVER_STATE_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 === HOVER_STATE_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 = $__default['default'](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 = _extends({}, 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$6, 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 = $__default['default'](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 this.tip = popperData.instance.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 $__default['default'](tip).removeClass(CLASS_NAME_FADE$2);\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 $element = $__default['default'](this);\n var data = $element.data(DATA_KEY$6);\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 $element.data(DATA_KEY$6, 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$6;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default$4;\n }\n }, {\n key: \"NAME\",\n get: function get() {\n return NAME$6;\n }\n }, {\n key: \"DATA_KEY\",\n get: function get() {\n return DATA_KEY$6;\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$6;\n }\n }, {\n key: \"DefaultType\",\n get: function get() {\n return DefaultType$4;\n }\n }]);\n\n return Tooltip;\n }();\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n\n $__default['default'].fn[NAME$6] = Tooltip._jQueryInterface;\n $__default['default'].fn[NAME$6].Constructor = Tooltip;\n\n $__default['default'].fn[NAME$6].noConflict = function () {\n $__default['default'].fn[NAME$6] = JQUERY_NO_CONFLICT$6;\n return Tooltip._jQueryInterface;\n };\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n\n var NAME$7 = 'popover';\n var VERSION$7 = '4.5.3';\n var DATA_KEY$7 = 'bs.popover';\n var EVENT_KEY$7 = \".\" + DATA_KEY$7;\n var JQUERY_NO_CONFLICT$7 = $__default['default'].fn[NAME$7];\n var CLASS_PREFIX$1 = 'bs-popover';\n var BSCLS_PREFIX_REGEX$1 = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX$1 + \"\\\\S+\", 'g');\n\n var Default$5 = _extends({}, 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$5 = _extends({}, Tooltip.DefaultType, {\n content: '(string|element|function)'\n });\n\n var CLASS_NAME_FADE$3 = 'fade';\n var CLASS_NAME_SHOW$5 = 'show';\n var SELECTOR_TITLE = '.popover-header';\n var SELECTOR_CONTENT = '.popover-body';\n var Event$1 = {\n HIDE: \"hide\" + EVENT_KEY$7,\n HIDDEN: \"hidden\" + EVENT_KEY$7,\n SHOW: \"show\" + EVENT_KEY$7,\n SHOWN: \"shown\" + EVENT_KEY$7,\n INSERTED: \"inserted\" + EVENT_KEY$7,\n CLICK: \"click\" + EVENT_KEY$7,\n FOCUSIN: \"focusin\" + EVENT_KEY$7,\n FOCUSOUT: \"focusout\" + EVENT_KEY$7,\n MOUSEENTER: \"mouseenter\" + EVENT_KEY$7,\n MOUSELEAVE: \"mouseleave\" + EVENT_KEY$7\n };\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n var Popover = /*#__PURE__*/function (_Tooltip) {\n _inheritsLoose(Popover, _Tooltip);\n\n function Popover() {\n return _Tooltip.apply(this, arguments) || this;\n }\n\n var _proto = Popover.prototype; // Overrides\n\n _proto.isWithContent = function isWithContent() {\n return this.getTitle() || this._getContent();\n };\n\n _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n $__default['default'](this.getTipElement()).addClass(CLASS_PREFIX$1 + \"-\" + attachment);\n };\n\n _proto.getTipElement = function getTipElement() {\n this.tip = this.tip || $__default['default'](this.config.template)[0];\n return this.tip;\n };\n\n _proto.setContent = function setContent() {\n var $tip = $__default['default'](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(CLASS_NAME_FADE$3 + \" \" + CLASS_NAME_SHOW$5);\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 = $__default['default'](this.getTipElement());\n var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX$1);\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 = $__default['default'](this).data(DATA_KEY$7);\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 $__default['default'](this).data(DATA_KEY$7, 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$7;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default$5;\n }\n }, {\n key: \"NAME\",\n get: function get() {\n return NAME$7;\n }\n }, {\n key: \"DATA_KEY\",\n get: function get() {\n return DATA_KEY$7;\n }\n }, {\n key: \"Event\",\n get: function get() {\n return Event$1;\n }\n }, {\n key: \"EVENT_KEY\",\n get: function get() {\n return EVENT_KEY$7;\n }\n }, {\n key: \"DefaultType\",\n get: function get() {\n return DefaultType$5;\n }\n }]);\n\n return Popover;\n }(Tooltip);\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n\n $__default['default'].fn[NAME$7] = Popover._jQueryInterface;\n $__default['default'].fn[NAME$7].Constructor = Popover;\n\n $__default['default'].fn[NAME$7].noConflict = function () {\n $__default['default'].fn[NAME$7] = JQUERY_NO_CONFLICT$7;\n return Popover._jQueryInterface;\n };\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n\n var NAME$8 = 'scrollspy';\n var VERSION$8 = '4.5.3';\n var DATA_KEY$8 = 'bs.scrollspy';\n var EVENT_KEY$8 = \".\" + DATA_KEY$8;\n var DATA_API_KEY$6 = '.data-api';\n var JQUERY_NO_CONFLICT$8 = $__default['default'].fn[NAME$8];\n var Default$6 = {\n offset: 10,\n method: 'auto',\n target: ''\n };\n var DefaultType$6 = {\n offset: 'number',\n method: 'string',\n target: '(string|element)'\n };\n var EVENT_ACTIVATE = \"activate\" + EVENT_KEY$8;\n var EVENT_SCROLL = \"scroll\" + EVENT_KEY$8;\n var EVENT_LOAD_DATA_API$2 = \"load\" + EVENT_KEY$8 + DATA_API_KEY$6;\n var CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\n var CLASS_NAME_ACTIVE$2 = 'active';\n var SELECTOR_DATA_SPY = '[data-spy=\"scroll\"]';\n var SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\n var SELECTOR_NAV_LINKS = '.nav-link';\n var SELECTOR_NAV_ITEMS = '.nav-item';\n var SELECTOR_LIST_ITEMS = '.list-group-item';\n var SELECTOR_DROPDOWN = '.dropdown';\n var SELECTOR_DROPDOWN_ITEMS = '.dropdown-item';\n var SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\n var METHOD_OFFSET = 'offset';\n var METHOD_POSITION = 'position';\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n var ScrollSpy = /*#__PURE__*/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 $__default['default'](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; // Public\n\n _proto.refresh = function refresh() {\n var _this2 = this;\n\n var autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n var offsetBase = offsetMethod === METHOD_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 [$__default['default'](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 $__default['default'].removeData(this._element, DATA_KEY$8);\n $__default['default'](this._scrollElement).off(EVENT_KEY$8);\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 = _extends({}, Default$6, _typeof(config) === 'object' && config ? config : {});\n\n if (typeof config.target !== 'string' && Util.isElement(config.target)) {\n var id = $__default['default'](config.target).attr('id');\n\n if (!id) {\n id = Util.getUID(NAME$8);\n $__default['default'](config.target).attr('id', id);\n }\n\n config.target = \"#\" + id;\n }\n\n Util.typeCheckConfig(NAME$8, config, DefaultType$6);\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 for (var i = this._offsets.length; 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 = $__default['default']([].slice.call(document.querySelectorAll(queries.join(','))));\n\n if ($link.hasClass(CLASS_NAME_DROPDOWN_ITEM)) {\n $link.closest(SELECTOR_DROPDOWN).find(SELECTOR_DROPDOWN_TOGGLE).addClass(CLASS_NAME_ACTIVE$2);\n $link.addClass(CLASS_NAME_ACTIVE$2);\n } else {\n // Set triggered link as active\n $link.addClass(CLASS_NAME_ACTIVE$2); // 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(CLASS_NAME_ACTIVE$2); // 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(CLASS_NAME_ACTIVE$2);\n }\n\n $__default['default'](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(CLASS_NAME_ACTIVE$2);\n }).forEach(function (node) {\n return node.classList.remove(CLASS_NAME_ACTIVE$2);\n });\n } // Static\n ;\n\n ScrollSpy._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $__default['default'](this).data(DATA_KEY$8);\n\n var _config = _typeof(config) === 'object' && config;\n\n if (!data) {\n data = new ScrollSpy(this, _config);\n $__default['default'](this).data(DATA_KEY$8, 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$8;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default$6;\n }\n }]);\n\n return ScrollSpy;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $__default['default'](window).on(EVENT_LOAD_DATA_API$2, 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 = $__default['default'](scrollSpys[i]);\n\n ScrollSpy._jQueryInterface.call($spy, $spy.data());\n }\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $__default['default'].fn[NAME$8] = ScrollSpy._jQueryInterface;\n $__default['default'].fn[NAME$8].Constructor = ScrollSpy;\n\n $__default['default'].fn[NAME$8].noConflict = function () {\n $__default['default'].fn[NAME$8] = JQUERY_NO_CONFLICT$8;\n return ScrollSpy._jQueryInterface;\n };\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n\n var NAME$9 = 'tab';\n var VERSION$9 = '4.5.3';\n var DATA_KEY$9 = 'bs.tab';\n var EVENT_KEY$9 = \".\" + DATA_KEY$9;\n var DATA_API_KEY$7 = '.data-api';\n var JQUERY_NO_CONFLICT$9 = $__default['default'].fn[NAME$9];\n var EVENT_HIDE$3 = \"hide\" + EVENT_KEY$9;\n var EVENT_HIDDEN$3 = \"hidden\" + EVENT_KEY$9;\n var EVENT_SHOW$3 = \"show\" + EVENT_KEY$9;\n var EVENT_SHOWN$3 = \"shown\" + EVENT_KEY$9;\n var EVENT_CLICK_DATA_API$6 = \"click\" + EVENT_KEY$9 + DATA_API_KEY$7;\n var CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\n var CLASS_NAME_ACTIVE$3 = 'active';\n var CLASS_NAME_DISABLED$1 = 'disabled';\n var CLASS_NAME_FADE$4 = 'fade';\n var CLASS_NAME_SHOW$6 = 'show';\n var SELECTOR_DROPDOWN$1 = '.dropdown';\n var SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\n var SELECTOR_ACTIVE$2 = '.active';\n var SELECTOR_ACTIVE_UL = '> li > .active';\n var SELECTOR_DATA_TOGGLE$4 = '[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]';\n var SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\n var SELECTOR_DROPDOWN_ACTIVE_CHILD = '> .dropdown-menu .active';\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n var Tab = /*#__PURE__*/function () {\n function Tab(element) {\n this._element = element;\n } // Getters\n\n\n var _proto = Tab.prototype; // Public\n\n _proto.show = function show() {\n var _this = this;\n\n if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $__default['default'](this._element).hasClass(CLASS_NAME_ACTIVE$3) || $__default['default'](this._element).hasClass(CLASS_NAME_DISABLED$1)) {\n return;\n }\n\n var target;\n var previous;\n var listElement = $__default['default'](this._element).closest(SELECTOR_NAV_LIST_GROUP$1)[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$2;\n previous = $__default['default'].makeArray($__default['default'](listElement).find(itemSelector));\n previous = previous[previous.length - 1];\n }\n\n var hideEvent = $__default['default'].Event(EVENT_HIDE$3, {\n relatedTarget: this._element\n });\n var showEvent = $__default['default'].Event(EVENT_SHOW$3, {\n relatedTarget: previous\n });\n\n if (previous) {\n $__default['default'](previous).trigger(hideEvent);\n }\n\n $__default['default'](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 = $__default['default'].Event(EVENT_HIDDEN$3, {\n relatedTarget: _this._element\n });\n var shownEvent = $__default['default'].Event(EVENT_SHOWN$3, {\n relatedTarget: previous\n });\n $__default['default'](previous).trigger(hiddenEvent);\n $__default['default'](_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 $__default['default'].removeData(this._element, DATA_KEY$9);\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') ? $__default['default'](container).find(SELECTOR_ACTIVE_UL) : $__default['default'](container).children(SELECTOR_ACTIVE$2);\n var active = activeElements[0];\n var isTransitioning = callback && active && $__default['default'](active).hasClass(CLASS_NAME_FADE$4);\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 $__default['default'](active).removeClass(CLASS_NAME_SHOW$6).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 $__default['default'](active).removeClass(CLASS_NAME_ACTIVE$3);\n var dropdownChild = $__default['default'](active.parentNode).find(SELECTOR_DROPDOWN_ACTIVE_CHILD)[0];\n\n if (dropdownChild) {\n $__default['default'](dropdownChild).removeClass(CLASS_NAME_ACTIVE$3);\n }\n\n if (active.getAttribute('role') === 'tab') {\n active.setAttribute('aria-selected', false);\n }\n }\n\n $__default['default'](element).addClass(CLASS_NAME_ACTIVE$3);\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(CLASS_NAME_FADE$4)) {\n element.classList.add(CLASS_NAME_SHOW$6);\n }\n\n if (element.parentNode && $__default['default'](element.parentNode).hasClass(CLASS_NAME_DROPDOWN_MENU)) {\n var dropdownElement = $__default['default'](element).closest(SELECTOR_DROPDOWN$1)[0];\n\n if (dropdownElement) {\n var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(SELECTOR_DROPDOWN_TOGGLE$1));\n $__default['default'](dropdownToggleList).addClass(CLASS_NAME_ACTIVE$3);\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 = $__default['default'](this);\n var data = $this.data(DATA_KEY$9);\n\n if (!data) {\n data = new Tab(this);\n $this.data(DATA_KEY$9, 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$9;\n }\n }]);\n\n return Tab;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $__default['default'](document).on(EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$4, function (event) {\n event.preventDefault();\n\n Tab._jQueryInterface.call($__default['default'](this), 'show');\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $__default['default'].fn[NAME$9] = Tab._jQueryInterface;\n $__default['default'].fn[NAME$9].Constructor = Tab;\n\n $__default['default'].fn[NAME$9].noConflict = function () {\n $__default['default'].fn[NAME$9] = JQUERY_NO_CONFLICT$9;\n return Tab._jQueryInterface;\n };\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n\n var NAME$a = 'toast';\n var VERSION$a = '4.5.3';\n var DATA_KEY$a = 'bs.toast';\n var EVENT_KEY$a = \".\" + DATA_KEY$a;\n var JQUERY_NO_CONFLICT$a = $__default['default'].fn[NAME$a];\n var EVENT_CLICK_DISMISS$1 = \"click.dismiss\" + EVENT_KEY$a;\n var EVENT_HIDE$4 = \"hide\" + EVENT_KEY$a;\n var EVENT_HIDDEN$4 = \"hidden\" + EVENT_KEY$a;\n var EVENT_SHOW$4 = \"show\" + EVENT_KEY$a;\n var EVENT_SHOWN$4 = \"shown\" + EVENT_KEY$a;\n var CLASS_NAME_FADE$5 = 'fade';\n var CLASS_NAME_HIDE = 'hide';\n var CLASS_NAME_SHOW$7 = 'show';\n var CLASS_NAME_SHOWING = 'showing';\n var DefaultType$7 = {\n animation: 'boolean',\n autohide: 'boolean',\n delay: 'number'\n };\n var Default$7 = {\n animation: true,\n autohide: true,\n delay: 500\n };\n var SELECTOR_DATA_DISMISS$1 = '[data-dismiss=\"toast\"]';\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n var Toast = /*#__PURE__*/function () {\n function Toast(element, config) {\n this._element = element;\n this._config = this._getConfig(config);\n this._timeout = null;\n\n this._setListeners();\n } // Getters\n\n\n var _proto = Toast.prototype; // Public\n\n _proto.show = function show() {\n var _this = this;\n\n var showEvent = $__default['default'].Event(EVENT_SHOW$4);\n $__default['default'](this._element).trigger(showEvent);\n\n if (showEvent.isDefaultPrevented()) {\n return;\n }\n\n this._clearTimeout();\n\n if (this._config.animation) {\n this._element.classList.add(CLASS_NAME_FADE$5);\n }\n\n var complete = function complete() {\n _this._element.classList.remove(CLASS_NAME_SHOWING);\n\n _this._element.classList.add(CLASS_NAME_SHOW$7);\n\n $__default['default'](_this._element).trigger(EVENT_SHOWN$4);\n\n if (_this._config.autohide) {\n _this._timeout = setTimeout(function () {\n _this.hide();\n }, _this._config.delay);\n }\n };\n\n this._element.classList.remove(CLASS_NAME_HIDE);\n\n Util.reflow(this._element);\n\n this._element.classList.add(CLASS_NAME_SHOWING);\n\n if (this._config.animation) {\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n $__default['default'](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n } else {\n complete();\n }\n };\n\n _proto.hide = function hide() {\n if (!this._element.classList.contains(CLASS_NAME_SHOW$7)) {\n return;\n }\n\n var hideEvent = $__default['default'].Event(EVENT_HIDE$4);\n $__default['default'](this._element).trigger(hideEvent);\n\n if (hideEvent.isDefaultPrevented()) {\n return;\n }\n\n this._close();\n };\n\n _proto.dispose = function dispose() {\n this._clearTimeout();\n\n if (this._element.classList.contains(CLASS_NAME_SHOW$7)) {\n this._element.classList.remove(CLASS_NAME_SHOW$7);\n }\n\n $__default['default'](this._element).off(EVENT_CLICK_DISMISS$1);\n $__default['default'].removeData(this._element, DATA_KEY$a);\n this._element = null;\n this._config = null;\n } // Private\n ;\n\n _proto._getConfig = function _getConfig(config) {\n config = _extends({}, Default$7, $__default['default'](this._element).data(), _typeof(config) === 'object' && config ? config : {});\n Util.typeCheckConfig(NAME$a, config, this.constructor.DefaultType);\n return config;\n };\n\n _proto._setListeners = function _setListeners() {\n var _this2 = this;\n\n $__default['default'](this._element).on(EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, function () {\n return _this2.hide();\n });\n };\n\n _proto._close = function _close() {\n var _this3 = this;\n\n var complete = function complete() {\n _this3._element.classList.add(CLASS_NAME_HIDE);\n\n $__default['default'](_this3._element).trigger(EVENT_HIDDEN$4);\n };\n\n this._element.classList.remove(CLASS_NAME_SHOW$7);\n\n if (this._config.animation) {\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n $__default['default'](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n } else {\n complete();\n }\n };\n\n _proto._clearTimeout = function _clearTimeout() {\n clearTimeout(this._timeout);\n this._timeout = null;\n } // Static\n ;\n\n Toast._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var $element = $__default['default'](this);\n var data = $element.data(DATA_KEY$a);\n\n var _config = _typeof(config) === 'object' && config;\n\n if (!data) {\n data = new Toast(this, _config);\n $element.data(DATA_KEY$a, 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](this);\n }\n });\n };\n\n _createClass(Toast, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION$a;\n }\n }, {\n key: \"DefaultType\",\n get: function get() {\n return DefaultType$7;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default$7;\n }\n }]);\n\n return Toast;\n }();\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n\n $__default['default'].fn[NAME$a] = Toast._jQueryInterface;\n $__default['default'].fn[NAME$a].Constructor = Toast;\n\n $__default['default'].fn[NAME$a].noConflict = function () {\n $__default['default'].fn[NAME$a] = JQUERY_NO_CONFLICT$a;\n return Toast._jQueryInterface;\n };\n\n exports.Alert = Alert;\n exports.Button = Button;\n exports.Carousel = Carousel;\n exports.Collapse = Collapse;\n exports.Dropdown = Dropdown;\n exports.Modal = Modal;\n exports.Popover = Popover;\n exports.Scrollspy = ScrollSpy;\n exports.Tab = Tab;\n exports.Toast = Toast;\n exports.Tooltip = Tooltip;\n exports.Util = Util;\n Object.defineProperty(exports, '__esModule', {\n value: true\n });\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*!\n * Datepicker for Bootstrap v1.9.0 (https://github.com/uxsolutions/bootstrap-datepicker)\n *\n * Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0)\n */\n(function (factory) {\n if (typeof define === 'function' && define.amd) {\n define(['jquery'], factory);\n } else if ((typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object') {\n factory(require('jquery'));\n } else {\n factory(jQuery);\n }\n})(function ($, undefined) {\n function UTCDate() {\n return new Date(Date.UTC.apply(Date, arguments));\n }\n\n function UTCToday() {\n var today = new Date();\n return UTCDate(today.getFullYear(), today.getMonth(), today.getDate());\n }\n\n function isUTCEquals(date1, date2) {\n return date1.getUTCFullYear() === date2.getUTCFullYear() && date1.getUTCMonth() === date2.getUTCMonth() && date1.getUTCDate() === date2.getUTCDate();\n }\n\n function alias(method, deprecationMsg) {\n return function () {\n if (deprecationMsg !== undefined) {\n $.fn.datepicker.deprecated(deprecationMsg);\n }\n\n return this[method].apply(this, arguments);\n };\n }\n\n function isValidDate(d) {\n return d && !isNaN(d.getTime());\n }\n\n var DateArray = function () {\n var extras = {\n get: function get(i) {\n return this.slice(i)[0];\n },\n contains: function contains(d) {\n // Array.indexOf is not cross-browser;\n // $.inArray doesn't work with Dates\n var val = d && d.valueOf();\n\n for (var i = 0, l = this.length; i < l; i++) {\n // Use date arithmetic to allow dates with different times to match\n if (0 <= this[i].valueOf() - val && this[i].valueOf() - val < 1000 * 60 * 60 * 24) return i;\n }\n\n return -1;\n },\n remove: function remove(i) {\n this.splice(i, 1);\n },\n replace: function replace(new_array) {\n if (!new_array) return;\n if (!$.isArray(new_array)) new_array = [new_array];\n this.clear();\n this.push.apply(this, new_array);\n },\n clear: function clear() {\n this.length = 0;\n },\n copy: function copy() {\n var a = new DateArray();\n a.replace(this);\n return a;\n }\n };\n return function () {\n var a = [];\n a.push.apply(a, arguments);\n $.extend(a, extras);\n return a;\n };\n }(); // Picker object\n\n\n var Datepicker = function Datepicker(element, options) {\n $.data(element, 'datepicker', this);\n this._events = [];\n this._secondaryEvents = [];\n\n this._process_options(options);\n\n this.dates = new DateArray();\n this.viewDate = this.o.defaultViewDate;\n this.focusDate = null;\n this.element = $(element);\n this.isInput = this.element.is('input');\n this.inputField = this.isInput ? this.element : this.element.find('input');\n this.component = this.element.hasClass('date') ? this.element.find('.add-on, .input-group-addon, .input-group-append, .input-group-prepend, .btn') : false;\n if (this.component && this.component.length === 0) this.component = false;\n this.isInline = !this.component && this.element.is('div');\n this.picker = $(DPGlobal.template); // Checking templates and inserting\n\n if (this._check_template(this.o.templates.leftArrow)) {\n this.picker.find('.prev').html(this.o.templates.leftArrow);\n }\n\n if (this._check_template(this.o.templates.rightArrow)) {\n this.picker.find('.next').html(this.o.templates.rightArrow);\n }\n\n this._buildEvents();\n\n this._attachEvents();\n\n if (this.isInline) {\n this.picker.addClass('datepicker-inline').appendTo(this.element);\n } else {\n this.picker.addClass('datepicker-dropdown dropdown-menu');\n }\n\n if (this.o.rtl) {\n this.picker.addClass('datepicker-rtl');\n }\n\n if (this.o.calendarWeeks) {\n this.picker.find('.datepicker-days .datepicker-switch, thead .datepicker-title, tfoot .today, tfoot .clear').attr('colspan', function (i, val) {\n return Number(val) + 1;\n });\n }\n\n this._process_options({\n startDate: this._o.startDate,\n endDate: this._o.endDate,\n daysOfWeekDisabled: this.o.daysOfWeekDisabled,\n daysOfWeekHighlighted: this.o.daysOfWeekHighlighted,\n datesDisabled: this.o.datesDisabled\n });\n\n this._allow_update = false;\n this.setViewMode(this.o.startView);\n this._allow_update = true;\n this.fillDow();\n this.fillMonths();\n this.update();\n\n if (this.isInline) {\n this.show();\n }\n };\n\n Datepicker.prototype = {\n constructor: Datepicker,\n _resolveViewName: function _resolveViewName(view) {\n $.each(DPGlobal.viewModes, function (i, viewMode) {\n if (view === i || $.inArray(view, viewMode.names) !== -1) {\n view = i;\n return false;\n }\n });\n return view;\n },\n _resolveDaysOfWeek: function _resolveDaysOfWeek(daysOfWeek) {\n if (!$.isArray(daysOfWeek)) daysOfWeek = daysOfWeek.split(/[,\\s]*/);\n return $.map(daysOfWeek, Number);\n },\n _check_template: function _check_template(tmp) {\n try {\n // If empty\n if (tmp === undefined || tmp === \"\") {\n return false;\n } // If no html, everything ok\n\n\n if ((tmp.match(/[<>]/g) || []).length <= 0) {\n return true;\n } // Checking if html is fine\n\n\n var jDom = $(tmp);\n return jDom.length > 0;\n } catch (ex) {\n return false;\n }\n },\n _process_options: function _process_options(opts) {\n // Store raw options for reference\n this._o = $.extend({}, this._o, opts); // Processed options\n\n var o = this.o = $.extend({}, this._o); // Check if \"de-DE\" style date is available, if not language should\n // fallback to 2 letter code eg \"de\"\n\n var lang = o.language;\n\n if (!dates[lang]) {\n lang = lang.split('-')[0];\n if (!dates[lang]) lang = defaults.language;\n }\n\n o.language = lang; // Retrieve view index from any aliases\n\n o.startView = this._resolveViewName(o.startView);\n o.minViewMode = this._resolveViewName(o.minViewMode);\n o.maxViewMode = this._resolveViewName(o.maxViewMode); // Check view is between min and max\n\n o.startView = Math.max(this.o.minViewMode, Math.min(this.o.maxViewMode, o.startView)); // true, false, or Number > 0\n\n if (o.multidate !== true) {\n o.multidate = Number(o.multidate) || false;\n if (o.multidate !== false) o.multidate = Math.max(0, o.multidate);\n }\n\n o.multidateSeparator = String(o.multidateSeparator);\n o.weekStart %= 7;\n o.weekEnd = (o.weekStart + 6) % 7;\n var format = DPGlobal.parseFormat(o.format);\n\n if (o.startDate !== -Infinity) {\n if (!!o.startDate) {\n if (o.startDate instanceof Date) o.startDate = this._local_to_utc(this._zero_time(o.startDate));else o.startDate = DPGlobal.parseDate(o.startDate, format, o.language, o.assumeNearbyYear);\n } else {\n o.startDate = -Infinity;\n }\n }\n\n if (o.endDate !== Infinity) {\n if (!!o.endDate) {\n if (o.endDate instanceof Date) o.endDate = this._local_to_utc(this._zero_time(o.endDate));else o.endDate = DPGlobal.parseDate(o.endDate, format, o.language, o.assumeNearbyYear);\n } else {\n o.endDate = Infinity;\n }\n }\n\n o.daysOfWeekDisabled = this._resolveDaysOfWeek(o.daysOfWeekDisabled || []);\n o.daysOfWeekHighlighted = this._resolveDaysOfWeek(o.daysOfWeekHighlighted || []);\n o.datesDisabled = o.datesDisabled || [];\n\n if (!$.isArray(o.datesDisabled)) {\n o.datesDisabled = o.datesDisabled.split(',');\n }\n\n o.datesDisabled = $.map(o.datesDisabled, function (d) {\n return DPGlobal.parseDate(d, format, o.language, o.assumeNearbyYear);\n });\n\n var plc = String(o.orientation).toLowerCase().split(/\\s+/g),\n _plc = o.orientation.toLowerCase();\n\n plc = $.grep(plc, function (word) {\n return /^auto|left|right|top|bottom$/.test(word);\n });\n o.orientation = {\n x: 'auto',\n y: 'auto'\n };\n if (!_plc || _plc === 'auto') ; // no action\n else if (plc.length === 1) {\n switch (plc[0]) {\n case 'top':\n case 'bottom':\n o.orientation.y = plc[0];\n break;\n\n case 'left':\n case 'right':\n o.orientation.x = plc[0];\n break;\n }\n } else {\n _plc = $.grep(plc, function (word) {\n return /^left|right$/.test(word);\n });\n o.orientation.x = _plc[0] || 'auto';\n _plc = $.grep(plc, function (word) {\n return /^top|bottom$/.test(word);\n });\n o.orientation.y = _plc[0] || 'auto';\n }\n\n if (o.defaultViewDate instanceof Date || typeof o.defaultViewDate === 'string') {\n o.defaultViewDate = DPGlobal.parseDate(o.defaultViewDate, format, o.language, o.assumeNearbyYear);\n } else if (o.defaultViewDate) {\n var year = o.defaultViewDate.year || new Date().getFullYear();\n var month = o.defaultViewDate.month || 0;\n var day = o.defaultViewDate.day || 1;\n o.defaultViewDate = UTCDate(year, month, day);\n } else {\n o.defaultViewDate = UTCToday();\n }\n },\n _applyEvents: function _applyEvents(evs) {\n for (var i = 0, el, ch, ev; i < evs.length; i++) {\n el = evs[i][0];\n\n if (evs[i].length === 2) {\n ch = undefined;\n ev = evs[i][1];\n } else if (evs[i].length === 3) {\n ch = evs[i][1];\n ev = evs[i][2];\n }\n\n el.on(ev, ch);\n }\n },\n _unapplyEvents: function _unapplyEvents(evs) {\n for (var i = 0, el, ev, ch; i < evs.length; i++) {\n el = evs[i][0];\n\n if (evs[i].length === 2) {\n ch = undefined;\n ev = evs[i][1];\n } else if (evs[i].length === 3) {\n ch = evs[i][1];\n ev = evs[i][2];\n }\n\n el.off(ev, ch);\n }\n },\n _buildEvents: function _buildEvents() {\n var events = {\n keyup: $.proxy(function (e) {\n if ($.inArray(e.keyCode, [27, 37, 39, 38, 40, 32, 13, 9]) === -1) this.update();\n }, this),\n keydown: $.proxy(this.keydown, this),\n paste: $.proxy(this.paste, this)\n };\n\n if (this.o.showOnFocus === true) {\n events.focus = $.proxy(this.show, this);\n }\n\n if (this.isInput) {\n // single input\n this._events = [[this.element, events]];\n } // component: input + button\n else if (this.component && this.inputField.length) {\n this._events = [// For components that are not readonly, allow keyboard nav\n [this.inputField, events], [this.component, {\n click: $.proxy(this.show, this)\n }]];\n } else {\n this._events = [[this.element, {\n click: $.proxy(this.show, this),\n keydown: $.proxy(this.keydown, this)\n }]];\n }\n\n this._events.push( // Component: listen for blur on element descendants\n [this.element, '*', {\n blur: $.proxy(function (e) {\n this._focused_from = e.target;\n }, this)\n }], // Input: listen for blur on element\n [this.element, {\n blur: $.proxy(function (e) {\n this._focused_from = e.target;\n }, this)\n }]);\n\n if (this.o.immediateUpdates) {\n // Trigger input updates immediately on changed year/month\n this._events.push([this.element, {\n 'changeYear changeMonth': $.proxy(function (e) {\n this.update(e.date);\n }, this)\n }]);\n }\n\n this._secondaryEvents = [[this.picker, {\n click: $.proxy(this.click, this)\n }], [this.picker, '.prev, .next', {\n click: $.proxy(this.navArrowsClick, this)\n }], [this.picker, '.day:not(.disabled)', {\n click: $.proxy(this.dayCellClick, this)\n }], [$(window), {\n resize: $.proxy(this.place, this)\n }], [$(document), {\n 'mousedown touchstart': $.proxy(function (e) {\n // Clicked outside the datepicker, hide it\n if (!(this.element.is(e.target) || this.element.find(e.target).length || this.picker.is(e.target) || this.picker.find(e.target).length || this.isInline)) {\n this.hide();\n }\n }, this)\n }]];\n },\n _attachEvents: function _attachEvents() {\n this._detachEvents();\n\n this._applyEvents(this._events);\n },\n _detachEvents: function _detachEvents() {\n this._unapplyEvents(this._events);\n },\n _attachSecondaryEvents: function _attachSecondaryEvents() {\n this._detachSecondaryEvents();\n\n this._applyEvents(this._secondaryEvents);\n },\n _detachSecondaryEvents: function _detachSecondaryEvents() {\n this._unapplyEvents(this._secondaryEvents);\n },\n _trigger: function _trigger(event, altdate) {\n var date = altdate || this.dates.get(-1),\n local_date = this._utc_to_local(date);\n\n this.element.trigger({\n type: event,\n date: local_date,\n viewMode: this.viewMode,\n dates: $.map(this.dates, this._utc_to_local),\n format: $.proxy(function (ix, format) {\n if (arguments.length === 0) {\n ix = this.dates.length - 1;\n format = this.o.format;\n } else if (typeof ix === 'string') {\n format = ix;\n ix = this.dates.length - 1;\n }\n\n format = format || this.o.format;\n var date = this.dates.get(ix);\n return DPGlobal.formatDate(date, format, this.o.language);\n }, this)\n });\n },\n show: function show() {\n if (this.inputField.is(':disabled') || this.inputField.prop('readonly') && this.o.enableOnReadonly === false) return;\n if (!this.isInline) this.picker.appendTo(this.o.container);\n this.place();\n this.picker.show();\n\n this._attachSecondaryEvents();\n\n this._trigger('show');\n\n if ((window.navigator.msMaxTouchPoints || 'ontouchstart' in document) && this.o.disableTouchKeyboard) {\n $(this.element).blur();\n }\n\n return this;\n },\n hide: function hide() {\n if (this.isInline || !this.picker.is(':visible')) return this;\n this.focusDate = null;\n this.picker.hide().detach();\n\n this._detachSecondaryEvents();\n\n this.setViewMode(this.o.startView);\n if (this.o.forceParse && this.inputField.val()) this.setValue();\n\n this._trigger('hide');\n\n return this;\n },\n destroy: function destroy() {\n this.hide();\n\n this._detachEvents();\n\n this._detachSecondaryEvents();\n\n this.picker.remove();\n delete this.element.data().datepicker;\n\n if (!this.isInput) {\n delete this.element.data().date;\n }\n\n return this;\n },\n paste: function paste(e) {\n var dateString;\n\n if (e.originalEvent.clipboardData && e.originalEvent.clipboardData.types && $.inArray('text/plain', e.originalEvent.clipboardData.types) !== -1) {\n dateString = e.originalEvent.clipboardData.getData('text/plain');\n } else if (window.clipboardData) {\n dateString = window.clipboardData.getData('Text');\n } else {\n return;\n }\n\n this.setDate(dateString);\n this.update();\n e.preventDefault();\n },\n _utc_to_local: function _utc_to_local(utc) {\n if (!utc) {\n return utc;\n }\n\n var local = new Date(utc.getTime() + utc.getTimezoneOffset() * 60000);\n\n if (local.getTimezoneOffset() !== utc.getTimezoneOffset()) {\n local = new Date(utc.getTime() + local.getTimezoneOffset() * 60000);\n }\n\n return local;\n },\n _local_to_utc: function _local_to_utc(local) {\n return local && new Date(local.getTime() - local.getTimezoneOffset() * 60000);\n },\n _zero_time: function _zero_time(local) {\n return local && new Date(local.getFullYear(), local.getMonth(), local.getDate());\n },\n _zero_utc_time: function _zero_utc_time(utc) {\n return utc && UTCDate(utc.getUTCFullYear(), utc.getUTCMonth(), utc.getUTCDate());\n },\n getDates: function getDates() {\n return $.map(this.dates, this._utc_to_local);\n },\n getUTCDates: function getUTCDates() {\n return $.map(this.dates, function (d) {\n return new Date(d);\n });\n },\n getDate: function getDate() {\n return this._utc_to_local(this.getUTCDate());\n },\n getUTCDate: function getUTCDate() {\n var selected_date = this.dates.get(-1);\n\n if (selected_date !== undefined) {\n return new Date(selected_date);\n } else {\n return null;\n }\n },\n clearDates: function clearDates() {\n this.inputField.val('');\n this.update();\n\n this._trigger('changeDate');\n\n if (this.o.autoclose) {\n this.hide();\n }\n },\n setDates: function setDates() {\n var args = $.isArray(arguments[0]) ? arguments[0] : arguments;\n this.update.apply(this, args);\n\n this._trigger('changeDate');\n\n this.setValue();\n return this;\n },\n setUTCDates: function setUTCDates() {\n var args = $.isArray(arguments[0]) ? arguments[0] : arguments;\n this.setDates.apply(this, $.map(args, this._utc_to_local));\n return this;\n },\n setDate: alias('setDates'),\n setUTCDate: alias('setUTCDates'),\n remove: alias('destroy', 'Method `remove` is deprecated and will be removed in version 2.0. Use `destroy` instead'),\n setValue: function setValue() {\n var formatted = this.getFormattedDate();\n this.inputField.val(formatted);\n return this;\n },\n getFormattedDate: function getFormattedDate(format) {\n if (format === undefined) format = this.o.format;\n var lang = this.o.language;\n return $.map(this.dates, function (d) {\n return DPGlobal.formatDate(d, format, lang);\n }).join(this.o.multidateSeparator);\n },\n getStartDate: function getStartDate() {\n return this.o.startDate;\n },\n setStartDate: function setStartDate(startDate) {\n this._process_options({\n startDate: startDate\n });\n\n this.update();\n this.updateNavArrows();\n return this;\n },\n getEndDate: function getEndDate() {\n return this.o.endDate;\n },\n setEndDate: function setEndDate(endDate) {\n this._process_options({\n endDate: endDate\n });\n\n this.update();\n this.updateNavArrows();\n return this;\n },\n setDaysOfWeekDisabled: function setDaysOfWeekDisabled(daysOfWeekDisabled) {\n this._process_options({\n daysOfWeekDisabled: daysOfWeekDisabled\n });\n\n this.update();\n return this;\n },\n setDaysOfWeekHighlighted: function setDaysOfWeekHighlighted(daysOfWeekHighlighted) {\n this._process_options({\n daysOfWeekHighlighted: daysOfWeekHighlighted\n });\n\n this.update();\n return this;\n },\n setDatesDisabled: function setDatesDisabled(datesDisabled) {\n this._process_options({\n datesDisabled: datesDisabled\n });\n\n this.update();\n return this;\n },\n place: function place() {\n if (this.isInline) return this;\n var calendarWidth = this.picker.outerWidth(),\n calendarHeight = this.picker.outerHeight(),\n visualPadding = 10,\n container = $(this.o.container),\n windowWidth = container.width(),\n scrollTop = this.o.container === 'body' ? $(document).scrollTop() : container.scrollTop(),\n appendOffset = container.offset();\n var parentsZindex = [0];\n this.element.parents().each(function () {\n var itemZIndex = $(this).css('z-index');\n if (itemZIndex !== 'auto' && Number(itemZIndex) !== 0) parentsZindex.push(Number(itemZIndex));\n });\n var zIndex = Math.max.apply(Math, parentsZindex) + this.o.zIndexOffset;\n var offset = this.component ? this.component.parent().offset() : this.element.offset();\n var height = this.component ? this.component.outerHeight(true) : this.element.outerHeight(false);\n var width = this.component ? this.component.outerWidth(true) : this.element.outerWidth(false);\n var left = offset.left - appendOffset.left;\n var top = offset.top - appendOffset.top;\n\n if (this.o.container !== 'body') {\n top += scrollTop;\n }\n\n this.picker.removeClass('datepicker-orient-top datepicker-orient-bottom ' + 'datepicker-orient-right datepicker-orient-left');\n\n if (this.o.orientation.x !== 'auto') {\n this.picker.addClass('datepicker-orient-' + this.o.orientation.x);\n if (this.o.orientation.x === 'right') left -= calendarWidth - width;\n } // auto x orientation is best-placement: if it crosses a window\n // edge, fudge it sideways\n else {\n if (offset.left < 0) {\n // component is outside the window on the left side. Move it into visible range\n this.picker.addClass('datepicker-orient-left');\n left -= offset.left - visualPadding;\n } else if (left + calendarWidth > windowWidth) {\n // the calendar passes the widow right edge. Align it to component right side\n this.picker.addClass('datepicker-orient-right');\n left += width - calendarWidth;\n } else {\n if (this.o.rtl) {\n // Default to right\n this.picker.addClass('datepicker-orient-right');\n } else {\n // Default to left\n this.picker.addClass('datepicker-orient-left');\n }\n }\n } // auto y orientation is best-situation: top or bottom, no fudging,\n // decision based on which shows more of the calendar\n\n\n var yorient = this.o.orientation.y,\n top_overflow;\n\n if (yorient === 'auto') {\n top_overflow = -scrollTop + top - calendarHeight;\n yorient = top_overflow < 0 ? 'bottom' : 'top';\n }\n\n this.picker.addClass('datepicker-orient-' + yorient);\n if (yorient === 'top') top -= calendarHeight + parseInt(this.picker.css('padding-top'));else top += height;\n\n if (this.o.rtl) {\n var right = windowWidth - (left + width);\n this.picker.css({\n top: top,\n right: right,\n zIndex: zIndex\n });\n } else {\n this.picker.css({\n top: top,\n left: left,\n zIndex: zIndex\n });\n }\n\n return this;\n },\n _allow_update: true,\n update: function update() {\n if (!this._allow_update) return this;\n var oldDates = this.dates.copy(),\n dates = [],\n fromArgs = false;\n\n if (arguments.length) {\n $.each(arguments, $.proxy(function (i, date) {\n if (date instanceof Date) date = this._local_to_utc(date);\n dates.push(date);\n }, this));\n fromArgs = true;\n } else {\n dates = this.isInput ? this.element.val() : this.element.data('date') || this.inputField.val();\n if (dates && this.o.multidate) dates = dates.split(this.o.multidateSeparator);else dates = [dates];\n delete this.element.data().date;\n }\n\n dates = $.map(dates, $.proxy(function (date) {\n return DPGlobal.parseDate(date, this.o.format, this.o.language, this.o.assumeNearbyYear);\n }, this));\n dates = $.grep(dates, $.proxy(function (date) {\n return !this.dateWithinRange(date) || !date;\n }, this), true);\n this.dates.replace(dates);\n\n if (this.o.updateViewDate) {\n if (this.dates.length) this.viewDate = new Date(this.dates.get(-1));else if (this.viewDate < this.o.startDate) this.viewDate = new Date(this.o.startDate);else if (this.viewDate > this.o.endDate) this.viewDate = new Date(this.o.endDate);else this.viewDate = this.o.defaultViewDate;\n }\n\n if (fromArgs) {\n // setting date by clicking\n this.setValue();\n this.element.change();\n } else if (this.dates.length) {\n // setting date by typing\n if (String(oldDates) !== String(this.dates) && fromArgs) {\n this._trigger('changeDate');\n\n this.element.change();\n }\n }\n\n if (!this.dates.length && oldDates.length) {\n this._trigger('clearDate');\n\n this.element.change();\n }\n\n this.fill();\n return this;\n },\n fillDow: function fillDow() {\n if (this.o.showWeekDays) {\n var dowCnt = this.o.weekStart,\n html = '<tr>';\n\n if (this.o.calendarWeeks) {\n html += '<th class=\"cw\"> </th>';\n }\n\n while (dowCnt < this.o.weekStart + 7) {\n html += '<th class=\"dow';\n if ($.inArray(dowCnt, this.o.daysOfWeekDisabled) !== -1) html += ' disabled';\n html += '\">' + dates[this.o.language].daysMin[dowCnt++ % 7] + '</th>';\n }\n\n html += '</tr>';\n this.picker.find('.datepicker-days thead').append(html);\n }\n },\n fillMonths: function fillMonths() {\n var localDate = this._utc_to_local(this.viewDate);\n\n var html = '';\n var focused;\n\n for (var i = 0; i < 12; i++) {\n focused = localDate && localDate.getMonth() === i ? ' focused' : '';\n html += '<span class=\"month' + focused + '\">' + dates[this.o.language].monthsShort[i] + '</span>';\n }\n\n this.picker.find('.datepicker-months td').html(html);\n },\n setRange: function setRange(range) {\n if (!range || !range.length) delete this.range;else this.range = $.map(range, function (d) {\n return d.valueOf();\n });\n this.fill();\n },\n getClassNames: function getClassNames(date) {\n var cls = [],\n year = this.viewDate.getUTCFullYear(),\n month = this.viewDate.getUTCMonth(),\n today = UTCToday();\n\n if (date.getUTCFullYear() < year || date.getUTCFullYear() === year && date.getUTCMonth() < month) {\n cls.push('old');\n } else if (date.getUTCFullYear() > year || date.getUTCFullYear() === year && date.getUTCMonth() > month) {\n cls.push('new');\n }\n\n if (this.focusDate && date.valueOf() === this.focusDate.valueOf()) cls.push('focused'); // Compare internal UTC date with UTC today, not local today\n\n if (this.o.todayHighlight && isUTCEquals(date, today)) {\n cls.push('today');\n }\n\n if (this.dates.contains(date) !== -1) cls.push('active');\n\n if (!this.dateWithinRange(date)) {\n cls.push('disabled');\n }\n\n if (this.dateIsDisabled(date)) {\n cls.push('disabled', 'disabled-date');\n }\n\n if ($.inArray(date.getUTCDay(), this.o.daysOfWeekHighlighted) !== -1) {\n cls.push('highlighted');\n }\n\n if (this.range) {\n if (date > this.range[0] && date < this.range[this.range.length - 1]) {\n cls.push('range');\n }\n\n if ($.inArray(date.valueOf(), this.range) !== -1) {\n cls.push('selected');\n }\n\n if (date.valueOf() === this.range[0]) {\n cls.push('range-start');\n }\n\n if (date.valueOf() === this.range[this.range.length - 1]) {\n cls.push('range-end');\n }\n }\n\n return cls;\n },\n _fill_yearsView: function _fill_yearsView(selector, cssClass, factor, year, startYear, endYear, beforeFn) {\n var html = '';\n var step = factor / 10;\n var view = this.picker.find(selector);\n var startVal = Math.floor(year / factor) * factor;\n var endVal = startVal + step * 9;\n var focusedVal = Math.floor(this.viewDate.getFullYear() / step) * step;\n var selected = $.map(this.dates, function (d) {\n return Math.floor(d.getUTCFullYear() / step) * step;\n });\n var classes, tooltip, before;\n\n for (var currVal = startVal - step; currVal <= endVal + step; currVal += step) {\n classes = [cssClass];\n tooltip = null;\n\n if (currVal === startVal - step) {\n classes.push('old');\n } else if (currVal === endVal + step) {\n classes.push('new');\n }\n\n if ($.inArray(currVal, selected) !== -1) {\n classes.push('active');\n }\n\n if (currVal < startYear || currVal > endYear) {\n classes.push('disabled');\n }\n\n if (currVal === focusedVal) {\n classes.push('focused');\n }\n\n if (beforeFn !== $.noop) {\n before = beforeFn(new Date(currVal, 0, 1));\n\n if (before === undefined) {\n before = {};\n } else if (typeof before === 'boolean') {\n before = {\n enabled: before\n };\n } else if (typeof before === 'string') {\n before = {\n classes: before\n };\n }\n\n if (before.enabled === false) {\n classes.push('disabled');\n }\n\n if (before.classes) {\n classes = classes.concat(before.classes.split(/\\s+/));\n }\n\n if (before.tooltip) {\n tooltip = before.tooltip;\n }\n }\n\n html += '<span class=\"' + classes.join(' ') + '\"' + (tooltip ? ' title=\"' + tooltip + '\"' : '') + '>' + currVal + '</span>';\n }\n\n view.find('.datepicker-switch').text(startVal + '-' + endVal);\n view.find('td').html(html);\n },\n fill: function fill() {\n var d = new Date(this.viewDate),\n year = d.getUTCFullYear(),\n month = d.getUTCMonth(),\n startYear = this.o.startDate !== -Infinity ? this.o.startDate.getUTCFullYear() : -Infinity,\n startMonth = this.o.startDate !== -Infinity ? this.o.startDate.getUTCMonth() : -Infinity,\n endYear = this.o.endDate !== Infinity ? this.o.endDate.getUTCFullYear() : Infinity,\n endMonth = this.o.endDate !== Infinity ? this.o.endDate.getUTCMonth() : Infinity,\n todaytxt = dates[this.o.language].today || dates['en'].today || '',\n cleartxt = dates[this.o.language].clear || dates['en'].clear || '',\n titleFormat = dates[this.o.language].titleFormat || dates['en'].titleFormat,\n todayDate = UTCToday(),\n titleBtnVisible = (this.o.todayBtn === true || this.o.todayBtn === 'linked') && todayDate >= this.o.startDate && todayDate <= this.o.endDate && !this.weekOfDateIsDisabled(todayDate),\n tooltip,\n before;\n if (isNaN(year) || isNaN(month)) return;\n this.picker.find('.datepicker-days .datepicker-switch').text(DPGlobal.formatDate(d, titleFormat, this.o.language));\n this.picker.find('tfoot .today').text(todaytxt).css('display', titleBtnVisible ? 'table-cell' : 'none');\n this.picker.find('tfoot .clear').text(cleartxt).css('display', this.o.clearBtn === true ? 'table-cell' : 'none');\n this.picker.find('thead .datepicker-title').text(this.o.title).css('display', typeof this.o.title === 'string' && this.o.title !== '' ? 'table-cell' : 'none');\n this.updateNavArrows();\n this.fillMonths();\n var prevMonth = UTCDate(year, month, 0),\n day = prevMonth.getUTCDate();\n prevMonth.setUTCDate(day - (prevMonth.getUTCDay() - this.o.weekStart + 7) % 7);\n var nextMonth = new Date(prevMonth);\n\n if (prevMonth.getUTCFullYear() < 100) {\n nextMonth.setUTCFullYear(prevMonth.getUTCFullYear());\n }\n\n nextMonth.setUTCDate(nextMonth.getUTCDate() + 42);\n nextMonth = nextMonth.valueOf();\n var html = [];\n var weekDay, clsName;\n\n while (prevMonth.valueOf() < nextMonth) {\n weekDay = prevMonth.getUTCDay();\n\n if (weekDay === this.o.weekStart) {\n html.push('<tr>');\n\n if (this.o.calendarWeeks) {\n // ISO 8601: First week contains first thursday.\n // ISO also states week starts on Monday, but we can be more abstract here.\n var // Start of current week: based on weekstart/current date\n ws = new Date(+prevMonth + (this.o.weekStart - weekDay - 7) % 7 * 864e5),\n // Thursday of this week\n th = new Date(Number(ws) + (7 + 4 - ws.getUTCDay()) % 7 * 864e5),\n // First Thursday of year, year from thursday\n yth = new Date(Number(yth = UTCDate(th.getUTCFullYear(), 0, 1)) + (7 + 4 - yth.getUTCDay()) % 7 * 864e5),\n // Calendar week: ms between thursdays, div ms per day, div 7 days\n calWeek = (th - yth) / 864e5 / 7 + 1;\n html.push('<td class=\"cw\">' + calWeek + '</td>');\n }\n }\n\n clsName = this.getClassNames(prevMonth);\n clsName.push('day');\n var content = prevMonth.getUTCDate();\n\n if (this.o.beforeShowDay !== $.noop) {\n before = this.o.beforeShowDay(this._utc_to_local(prevMonth));\n if (before === undefined) before = {};else if (typeof before === 'boolean') before = {\n enabled: before\n };else if (typeof before === 'string') before = {\n classes: before\n };\n if (before.enabled === false) clsName.push('disabled');\n if (before.classes) clsName = clsName.concat(before.classes.split(/\\s+/));\n if (before.tooltip) tooltip = before.tooltip;\n if (before.content) content = before.content;\n } //Check if uniqueSort exists (supported by jquery >=1.12 and >=2.2)\n //Fallback to unique function for older jquery versions\n\n\n if ($.isFunction($.uniqueSort)) {\n clsName = $.uniqueSort(clsName);\n } else {\n clsName = $.unique(clsName);\n }\n\n html.push('<td class=\"' + clsName.join(' ') + '\"' + (tooltip ? ' title=\"' + tooltip + '\"' : '') + ' data-date=\"' + prevMonth.getTime().toString() + '\">' + content + '</td>');\n tooltip = null;\n\n if (weekDay === this.o.weekEnd) {\n html.push('</tr>');\n }\n\n prevMonth.setUTCDate(prevMonth.getUTCDate() + 1);\n }\n\n this.picker.find('.datepicker-days tbody').html(html.join(''));\n var monthsTitle = dates[this.o.language].monthsTitle || dates['en'].monthsTitle || 'Months';\n var months = this.picker.find('.datepicker-months').find('.datepicker-switch').text(this.o.maxViewMode < 2 ? monthsTitle : year).end().find('tbody span').removeClass('active');\n $.each(this.dates, function (i, d) {\n if (d.getUTCFullYear() === year) months.eq(d.getUTCMonth()).addClass('active');\n });\n\n if (year < startYear || year > endYear) {\n months.addClass('disabled');\n }\n\n if (year === startYear) {\n months.slice(0, startMonth).addClass('disabled');\n }\n\n if (year === endYear) {\n months.slice(endMonth + 1).addClass('disabled');\n }\n\n if (this.o.beforeShowMonth !== $.noop) {\n var that = this;\n $.each(months, function (i, month) {\n var moDate = new Date(year, i, 1);\n var before = that.o.beforeShowMonth(moDate);\n if (before === undefined) before = {};else if (typeof before === 'boolean') before = {\n enabled: before\n };else if (typeof before === 'string') before = {\n classes: before\n };\n if (before.enabled === false && !$(month).hasClass('disabled')) $(month).addClass('disabled');\n if (before.classes) $(month).addClass(before.classes);\n if (before.tooltip) $(month).prop('title', before.tooltip);\n });\n } // Generating decade/years picker\n\n\n this._fill_yearsView('.datepicker-years', 'year', 10, year, startYear, endYear, this.o.beforeShowYear); // Generating century/decades picker\n\n\n this._fill_yearsView('.datepicker-decades', 'decade', 100, year, startYear, endYear, this.o.beforeShowDecade); // Generating millennium/centuries picker\n\n\n this._fill_yearsView('.datepicker-centuries', 'century', 1000, year, startYear, endYear, this.o.beforeShowCentury);\n },\n updateNavArrows: function updateNavArrows() {\n if (!this._allow_update) return;\n var d = new Date(this.viewDate),\n year = d.getUTCFullYear(),\n month = d.getUTCMonth(),\n startYear = this.o.startDate !== -Infinity ? this.o.startDate.getUTCFullYear() : -Infinity,\n startMonth = this.o.startDate !== -Infinity ? this.o.startDate.getUTCMonth() : -Infinity,\n endYear = this.o.endDate !== Infinity ? this.o.endDate.getUTCFullYear() : Infinity,\n endMonth = this.o.endDate !== Infinity ? this.o.endDate.getUTCMonth() : Infinity,\n prevIsDisabled,\n nextIsDisabled,\n factor = 1;\n\n switch (this.viewMode) {\n case 4:\n factor *= 10;\n\n /* falls through */\n\n case 3:\n factor *= 10;\n\n /* falls through */\n\n case 2:\n factor *= 10;\n\n /* falls through */\n\n case 1:\n prevIsDisabled = Math.floor(year / factor) * factor <= startYear;\n nextIsDisabled = Math.floor(year / factor) * factor + factor > endYear;\n break;\n\n case 0:\n prevIsDisabled = year <= startYear && month <= startMonth;\n nextIsDisabled = year >= endYear && month >= endMonth;\n break;\n }\n\n this.picker.find('.prev').toggleClass('disabled', prevIsDisabled);\n this.picker.find('.next').toggleClass('disabled', nextIsDisabled);\n },\n click: function click(e) {\n e.preventDefault();\n e.stopPropagation();\n var target, dir, day, year, month;\n target = $(e.target); // Clicked on the switch\n\n if (target.hasClass('datepicker-switch') && this.viewMode !== this.o.maxViewMode) {\n this.setViewMode(this.viewMode + 1);\n } // Clicked on today button\n\n\n if (target.hasClass('today') && !target.hasClass('day')) {\n this.setViewMode(0);\n\n this._setDate(UTCToday(), this.o.todayBtn === 'linked' ? null : 'view');\n } // Clicked on clear button\n\n\n if (target.hasClass('clear')) {\n this.clearDates();\n }\n\n if (!target.hasClass('disabled')) {\n // Clicked on a month, year, decade, century\n if (target.hasClass('month') || target.hasClass('year') || target.hasClass('decade') || target.hasClass('century')) {\n this.viewDate.setUTCDate(1);\n day = 1;\n\n if (this.viewMode === 1) {\n month = target.parent().find('span').index(target);\n year = this.viewDate.getUTCFullYear();\n this.viewDate.setUTCMonth(month);\n } else {\n month = 0;\n year = Number(target.text());\n this.viewDate.setUTCFullYear(year);\n }\n\n this._trigger(DPGlobal.viewModes[this.viewMode - 1].e, this.viewDate);\n\n if (this.viewMode === this.o.minViewMode) {\n this._setDate(UTCDate(year, month, day));\n } else {\n this.setViewMode(this.viewMode - 1);\n this.fill();\n }\n }\n }\n\n if (this.picker.is(':visible') && this._focused_from) {\n this._focused_from.focus();\n }\n\n delete this._focused_from;\n },\n dayCellClick: function dayCellClick(e) {\n var $target = $(e.currentTarget);\n var timestamp = $target.data('date');\n var date = new Date(timestamp);\n\n if (this.o.updateViewDate) {\n if (date.getUTCFullYear() !== this.viewDate.getUTCFullYear()) {\n this._trigger('changeYear', this.viewDate);\n }\n\n if (date.getUTCMonth() !== this.viewDate.getUTCMonth()) {\n this._trigger('changeMonth', this.viewDate);\n }\n }\n\n this._setDate(date);\n },\n // Clicked on prev or next\n navArrowsClick: function navArrowsClick(e) {\n var $target = $(e.currentTarget);\n var dir = $target.hasClass('prev') ? -1 : 1;\n\n if (this.viewMode !== 0) {\n dir *= DPGlobal.viewModes[this.viewMode].navStep * 12;\n }\n\n this.viewDate = this.moveMonth(this.viewDate, dir);\n\n this._trigger(DPGlobal.viewModes[this.viewMode].e, this.viewDate);\n\n this.fill();\n },\n _toggle_multidate: function _toggle_multidate(date) {\n var ix = this.dates.contains(date);\n\n if (!date) {\n this.dates.clear();\n }\n\n if (ix !== -1) {\n if (this.o.multidate === true || this.o.multidate > 1 || this.o.toggleActive) {\n this.dates.remove(ix);\n }\n } else if (this.o.multidate === false) {\n this.dates.clear();\n this.dates.push(date);\n } else {\n this.dates.push(date);\n }\n\n if (typeof this.o.multidate === 'number') while (this.dates.length > this.o.multidate) {\n this.dates.remove(0);\n }\n },\n _setDate: function _setDate(date, which) {\n if (!which || which === 'date') this._toggle_multidate(date && new Date(date));\n if (!which && this.o.updateViewDate || which === 'view') this.viewDate = date && new Date(date);\n this.fill();\n this.setValue();\n\n if (!which || which !== 'view') {\n this._trigger('changeDate');\n }\n\n this.inputField.trigger('change');\n\n if (this.o.autoclose && (!which || which === 'date')) {\n this.hide();\n }\n },\n moveDay: function moveDay(date, dir) {\n var newDate = new Date(date);\n newDate.setUTCDate(date.getUTCDate() + dir);\n return newDate;\n },\n moveWeek: function moveWeek(date, dir) {\n return this.moveDay(date, dir * 7);\n },\n moveMonth: function moveMonth(date, dir) {\n if (!isValidDate(date)) return this.o.defaultViewDate;\n if (!dir) return date;\n var new_date = new Date(date.valueOf()),\n day = new_date.getUTCDate(),\n month = new_date.getUTCMonth(),\n mag = Math.abs(dir),\n new_month,\n test;\n dir = dir > 0 ? 1 : -1;\n\n if (mag === 1) {\n test = dir === -1 // If going back one month, make sure month is not current month\n // (eg, Mar 31 -> Feb 31 == Feb 28, not Mar 02)\n ? function () {\n return new_date.getUTCMonth() === month;\n } // If going forward one month, make sure month is as expected\n // (eg, Jan 31 -> Feb 31 == Feb 28, not Mar 02)\n : function () {\n return new_date.getUTCMonth() !== new_month;\n };\n new_month = month + dir;\n new_date.setUTCMonth(new_month); // Dec -> Jan (12) or Jan -> Dec (-1) -- limit expected date to 0-11\n\n new_month = (new_month + 12) % 12;\n } else {\n // For magnitudes >1, move one month at a time...\n for (var i = 0; i < mag; i++) {\n // ...which might decrease the day (eg, Jan 31 to Feb 28, etc)...\n new_date = this.moveMonth(new_date, dir);\n } // ...then reset the day, keeping it in the new month\n\n\n new_month = new_date.getUTCMonth();\n new_date.setUTCDate(day);\n\n test = function test() {\n return new_month !== new_date.getUTCMonth();\n };\n } // Common date-resetting loop -- if date is beyond end of month, make it\n // end of month\n\n\n while (test()) {\n new_date.setUTCDate(--day);\n new_date.setUTCMonth(new_month);\n }\n\n return new_date;\n },\n moveYear: function moveYear(date, dir) {\n return this.moveMonth(date, dir * 12);\n },\n moveAvailableDate: function moveAvailableDate(date, dir, fn) {\n do {\n date = this[fn](date, dir);\n if (!this.dateWithinRange(date)) return false;\n fn = 'moveDay';\n } while (this.dateIsDisabled(date));\n\n return date;\n },\n weekOfDateIsDisabled: function weekOfDateIsDisabled(date) {\n return $.inArray(date.getUTCDay(), this.o.daysOfWeekDisabled) !== -1;\n },\n dateIsDisabled: function dateIsDisabled(date) {\n return this.weekOfDateIsDisabled(date) || $.grep(this.o.datesDisabled, function (d) {\n return isUTCEquals(date, d);\n }).length > 0;\n },\n dateWithinRange: function dateWithinRange(date) {\n return date >= this.o.startDate && date <= this.o.endDate;\n },\n keydown: function keydown(e) {\n if (!this.picker.is(':visible')) {\n if (e.keyCode === 40 || e.keyCode === 27) {\n // allow down to re-show picker\n this.show();\n e.stopPropagation();\n }\n\n return;\n }\n\n var dateChanged = false,\n dir,\n newViewDate,\n focusDate = this.focusDate || this.viewDate;\n\n switch (e.keyCode) {\n case 27:\n // escape\n if (this.focusDate) {\n this.focusDate = null;\n this.viewDate = this.dates.get(-1) || this.viewDate;\n this.fill();\n } else this.hide();\n\n e.preventDefault();\n e.stopPropagation();\n break;\n\n case 37: // left\n\n case 38: // up\n\n case 39: // right\n\n case 40:\n // down\n if (!this.o.keyboardNavigation || this.o.daysOfWeekDisabled.length === 7) break;\n dir = e.keyCode === 37 || e.keyCode === 38 ? -1 : 1;\n\n if (this.viewMode === 0) {\n if (e.ctrlKey) {\n newViewDate = this.moveAvailableDate(focusDate, dir, 'moveYear');\n if (newViewDate) this._trigger('changeYear', this.viewDate);\n } else if (e.shiftKey) {\n newViewDate = this.moveAvailableDate(focusDate, dir, 'moveMonth');\n if (newViewDate) this._trigger('changeMonth', this.viewDate);\n } else if (e.keyCode === 37 || e.keyCode === 39) {\n newViewDate = this.moveAvailableDate(focusDate, dir, 'moveDay');\n } else if (!this.weekOfDateIsDisabled(focusDate)) {\n newViewDate = this.moveAvailableDate(focusDate, dir, 'moveWeek');\n }\n } else if (this.viewMode === 1) {\n if (e.keyCode === 38 || e.keyCode === 40) {\n dir = dir * 4;\n }\n\n newViewDate = this.moveAvailableDate(focusDate, dir, 'moveMonth');\n } else if (this.viewMode === 2) {\n if (e.keyCode === 38 || e.keyCode === 40) {\n dir = dir * 4;\n }\n\n newViewDate = this.moveAvailableDate(focusDate, dir, 'moveYear');\n }\n\n if (newViewDate) {\n this.focusDate = this.viewDate = newViewDate;\n this.setValue();\n this.fill();\n e.preventDefault();\n }\n\n break;\n\n case 13:\n // enter\n if (!this.o.forceParse) break;\n focusDate = this.focusDate || this.dates.get(-1) || this.viewDate;\n\n if (this.o.keyboardNavigation) {\n this._toggle_multidate(focusDate);\n\n dateChanged = true;\n }\n\n this.focusDate = null;\n this.viewDate = this.dates.get(-1) || this.viewDate;\n this.setValue();\n this.fill();\n\n if (this.picker.is(':visible')) {\n e.preventDefault();\n e.stopPropagation();\n if (this.o.autoclose) this.hide();\n }\n\n break;\n\n case 9:\n // tab\n this.focusDate = null;\n this.viewDate = this.dates.get(-1) || this.viewDate;\n this.fill();\n this.hide();\n break;\n }\n\n if (dateChanged) {\n if (this.dates.length) this._trigger('changeDate');else this._trigger('clearDate');\n this.inputField.trigger('change');\n }\n },\n setViewMode: function setViewMode(viewMode) {\n this.viewMode = viewMode;\n this.picker.children('div').hide().filter('.datepicker-' + DPGlobal.viewModes[this.viewMode].clsName).show();\n this.updateNavArrows();\n\n this._trigger('changeViewMode', new Date(this.viewDate));\n }\n };\n\n var DateRangePicker = function DateRangePicker(element, options) {\n $.data(element, 'datepicker', this);\n this.element = $(element);\n this.inputs = $.map(options.inputs, function (i) {\n return i.jquery ? i[0] : i;\n });\n delete options.inputs;\n this.keepEmptyValues = options.keepEmptyValues;\n delete options.keepEmptyValues;\n datepickerPlugin.call($(this.inputs), options).on('changeDate', $.proxy(this.dateUpdated, this));\n this.pickers = $.map(this.inputs, function (i) {\n return $.data(i, 'datepicker');\n });\n this.updateDates();\n };\n\n DateRangePicker.prototype = {\n updateDates: function updateDates() {\n this.dates = $.map(this.pickers, function (i) {\n return i.getUTCDate();\n });\n this.updateRanges();\n },\n updateRanges: function updateRanges() {\n var range = $.map(this.dates, function (d) {\n return d.valueOf();\n });\n $.each(this.pickers, function (i, p) {\n p.setRange(range);\n });\n },\n clearDates: function clearDates() {\n $.each(this.pickers, function (i, p) {\n p.clearDates();\n });\n },\n dateUpdated: function dateUpdated(e) {\n // `this.updating` is a workaround for preventing infinite recursion\n // between `changeDate` triggering and `setUTCDate` calling. Until\n // there is a better mechanism.\n if (this.updating) return;\n this.updating = true;\n var dp = $.data(e.target, 'datepicker');\n\n if (dp === undefined) {\n return;\n }\n\n var new_date = dp.getUTCDate(),\n keep_empty_values = this.keepEmptyValues,\n i = $.inArray(e.target, this.inputs),\n j = i - 1,\n k = i + 1,\n l = this.inputs.length;\n if (i === -1) return;\n $.each(this.pickers, function (i, p) {\n if (!p.getUTCDate() && (p === dp || !keep_empty_values)) p.setUTCDate(new_date);\n });\n\n if (new_date < this.dates[j]) {\n // Date being moved earlier/left\n while (j >= 0 && new_date < this.dates[j]) {\n this.pickers[j--].setUTCDate(new_date);\n }\n } else if (new_date > this.dates[k]) {\n // Date being moved later/right\n while (k < l && new_date > this.dates[k]) {\n this.pickers[k++].setUTCDate(new_date);\n }\n }\n\n this.updateDates();\n delete this.updating;\n },\n destroy: function destroy() {\n $.map(this.pickers, function (p) {\n p.destroy();\n });\n $(this.inputs).off('changeDate', this.dateUpdated);\n delete this.element.data().datepicker;\n },\n remove: alias('destroy', 'Method `remove` is deprecated and will be removed in version 2.0. Use `destroy` instead')\n };\n\n function opts_from_el(el, prefix) {\n // Derive options from element data-attrs\n var data = $(el).data(),\n out = {},\n inkey,\n replace = new RegExp('^' + prefix.toLowerCase() + '([A-Z])');\n prefix = new RegExp('^' + prefix.toLowerCase());\n\n function re_lower(_, a) {\n return a.toLowerCase();\n }\n\n for (var key in data) {\n if (prefix.test(key)) {\n inkey = key.replace(replace, re_lower);\n out[inkey] = data[key];\n }\n }\n\n return out;\n }\n\n function opts_from_locale(lang) {\n // Derive options from locale plugins\n var out = {}; // Check if \"de-DE\" style date is available, if not language should\n // fallback to 2 letter code eg \"de\"\n\n if (!dates[lang]) {\n lang = lang.split('-')[0];\n if (!dates[lang]) return;\n }\n\n var d = dates[lang];\n $.each(locale_opts, function (i, k) {\n if (k in d) out[k] = d[k];\n });\n return out;\n }\n\n var old = $.fn.datepicker;\n\n var datepickerPlugin = function datepickerPlugin(option) {\n var args = Array.apply(null, arguments);\n args.shift();\n var internal_return;\n this.each(function () {\n var $this = $(this),\n data = $this.data('datepicker'),\n options = _typeof(option) === 'object' && option;\n\n if (!data) {\n var elopts = opts_from_el(this, 'date'),\n // Preliminary otions\n xopts = $.extend({}, defaults, elopts, options),\n locopts = opts_from_locale(xopts.language),\n // Options priority: js args, data-attrs, locales, defaults\n opts = $.extend({}, defaults, locopts, elopts, options);\n\n if ($this.hasClass('input-daterange') || opts.inputs) {\n $.extend(opts, {\n inputs: opts.inputs || $this.find('input').toArray()\n });\n data = new DateRangePicker(this, opts);\n } else {\n data = new Datepicker(this, opts);\n }\n\n $this.data('datepicker', data);\n }\n\n if (typeof option === 'string' && typeof data[option] === 'function') {\n internal_return = data[option].apply(data, args);\n }\n });\n if (internal_return === undefined || internal_return instanceof Datepicker || internal_return instanceof DateRangePicker) return this;\n if (this.length > 1) throw new Error('Using only allowed for the collection of a single element (' + option + ' function)');else return internal_return;\n };\n\n $.fn.datepicker = datepickerPlugin;\n var defaults = $.fn.datepicker.defaults = {\n assumeNearbyYear: false,\n autoclose: false,\n beforeShowDay: $.noop,\n beforeShowMonth: $.noop,\n beforeShowYear: $.noop,\n beforeShowDecade: $.noop,\n beforeShowCentury: $.noop,\n calendarWeeks: false,\n clearBtn: false,\n toggleActive: false,\n daysOfWeekDisabled: [],\n daysOfWeekHighlighted: [],\n datesDisabled: [],\n endDate: Infinity,\n forceParse: true,\n format: 'mm/dd/yyyy',\n keepEmptyValues: false,\n keyboardNavigation: true,\n language: 'en',\n minViewMode: 0,\n maxViewMode: 4,\n multidate: false,\n multidateSeparator: ',',\n orientation: \"auto\",\n rtl: false,\n startDate: -Infinity,\n startView: 0,\n todayBtn: false,\n todayHighlight: false,\n updateViewDate: true,\n weekStart: 0,\n disableTouchKeyboard: false,\n enableOnReadonly: true,\n showOnFocus: true,\n zIndexOffset: 10,\n container: 'body',\n immediateUpdates: false,\n title: '',\n templates: {\n leftArrow: '«',\n rightArrow: '»'\n },\n showWeekDays: true\n };\n var locale_opts = $.fn.datepicker.locale_opts = ['format', 'rtl', 'weekStart'];\n $.fn.datepicker.Constructor = Datepicker;\n var dates = $.fn.datepicker.dates = {\n en: {\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n daysShort: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n daysMin: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n monthsShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\n today: \"Today\",\n clear: \"Clear\",\n titleFormat: \"MM yyyy\"\n }\n };\n var DPGlobal = {\n viewModes: [{\n names: ['days', 'month'],\n clsName: 'days',\n e: 'changeMonth'\n }, {\n names: ['months', 'year'],\n clsName: 'months',\n e: 'changeYear',\n navStep: 1\n }, {\n names: ['years', 'decade'],\n clsName: 'years',\n e: 'changeDecade',\n navStep: 10\n }, {\n names: ['decades', 'century'],\n clsName: 'decades',\n e: 'changeCentury',\n navStep: 100\n }, {\n names: ['centuries', 'millennium'],\n clsName: 'centuries',\n e: 'changeMillennium',\n navStep: 1000\n }],\n validParts: /dd?|DD?|mm?|MM?|yy(?:yy)?/g,\n nonpunctuation: /[^ -\\/:-@\\u5e74\\u6708\\u65e5\\[-`{-~\\t\\n\\r]+/g,\n parseFormat: function parseFormat(format) {\n if (typeof format.toValue === 'function' && typeof format.toDisplay === 'function') return format; // IE treats \\0 as a string end in inputs (truncating the value),\n // so it's a bad format delimiter, anyway\n\n var separators = format.replace(this.validParts, '\\0').split('\\0'),\n parts = format.match(this.validParts);\n\n if (!separators || !separators.length || !parts || parts.length === 0) {\n throw new Error(\"Invalid date format.\");\n }\n\n return {\n separators: separators,\n parts: parts\n };\n },\n parseDate: function parseDate(date, format, language, assumeNearby) {\n if (!date) return undefined;\n if (date instanceof Date) return date;\n if (typeof format === 'string') format = DPGlobal.parseFormat(format);\n if (format.toValue) return format.toValue(date, format, language);\n var fn_map = {\n d: 'moveDay',\n m: 'moveMonth',\n w: 'moveWeek',\n y: 'moveYear'\n },\n dateAliases = {\n yesterday: '-1d',\n today: '+0d',\n tomorrow: '+1d'\n },\n parts,\n part,\n dir,\n i,\n fn;\n\n if (date in dateAliases) {\n date = dateAliases[date];\n }\n\n if (/^[\\-+]\\d+[dmwy]([\\s,]+[\\-+]\\d+[dmwy])*$/i.test(date)) {\n parts = date.match(/([\\-+]\\d+)([dmwy])/gi);\n date = new Date();\n\n for (i = 0; i < parts.length; i++) {\n part = parts[i].match(/([\\-+]\\d+)([dmwy])/i);\n dir = Number(part[1]);\n fn = fn_map[part[2].toLowerCase()];\n date = Datepicker.prototype[fn](date, dir);\n }\n\n return Datepicker.prototype._zero_utc_time(date);\n }\n\n parts = date && date.match(this.nonpunctuation) || [];\n\n function applyNearbyYear(year, threshold) {\n if (threshold === true) threshold = 10; // if year is 2 digits or less, than the user most likely is trying to get a recent century\n\n if (year < 100) {\n year += 2000; // if the new year is more than threshold years in advance, use last century\n\n if (year > new Date().getFullYear() + threshold) {\n year -= 100;\n }\n }\n\n return year;\n }\n\n var parsed = {},\n setters_order = ['yyyy', 'yy', 'M', 'MM', 'm', 'mm', 'd', 'dd'],\n setters_map = {\n yyyy: function yyyy(d, v) {\n return d.setUTCFullYear(assumeNearby ? applyNearbyYear(v, assumeNearby) : v);\n },\n m: function m(d, v) {\n if (isNaN(d)) return d;\n v -= 1;\n\n while (v < 0) {\n v += 12;\n }\n\n v %= 12;\n d.setUTCMonth(v);\n\n while (d.getUTCMonth() !== v) {\n d.setUTCDate(d.getUTCDate() - 1);\n }\n\n return d;\n },\n d: function d(_d, v) {\n return _d.setUTCDate(v);\n }\n },\n val,\n filtered;\n setters_map['yy'] = setters_map['yyyy'];\n setters_map['M'] = setters_map['MM'] = setters_map['mm'] = setters_map['m'];\n setters_map['dd'] = setters_map['d'];\n date = UTCToday();\n var fparts = format.parts.slice(); // Remove noop parts\n\n if (parts.length !== fparts.length) {\n fparts = $(fparts).filter(function (i, p) {\n return $.inArray(p, setters_order) !== -1;\n }).toArray();\n } // Process remainder\n\n\n function match_part() {\n var m = this.slice(0, parts[i].length),\n p = parts[i].slice(0, m.length);\n return m.toLowerCase() === p.toLowerCase();\n }\n\n if (parts.length === fparts.length) {\n var cnt;\n\n for (i = 0, cnt = fparts.length; i < cnt; i++) {\n val = parseInt(parts[i], 10);\n part = fparts[i];\n\n if (isNaN(val)) {\n switch (part) {\n case 'MM':\n filtered = $(dates[language].months).filter(match_part);\n val = $.inArray(filtered[0], dates[language].months) + 1;\n break;\n\n case 'M':\n filtered = $(dates[language].monthsShort).filter(match_part);\n val = $.inArray(filtered[0], dates[language].monthsShort) + 1;\n break;\n }\n }\n\n parsed[part] = val;\n }\n\n var _date, s;\n\n for (i = 0; i < setters_order.length; i++) {\n s = setters_order[i];\n\n if (s in parsed && !isNaN(parsed[s])) {\n _date = new Date(date);\n setters_map[s](_date, parsed[s]);\n if (!isNaN(_date)) date = _date;\n }\n }\n }\n\n return date;\n },\n formatDate: function formatDate(date, format, language) {\n if (!date) return '';\n if (typeof format === 'string') format = DPGlobal.parseFormat(format);\n if (format.toDisplay) return format.toDisplay(date, format, language);\n var val = {\n d: date.getUTCDate(),\n D: dates[language].daysShort[date.getUTCDay()],\n DD: dates[language].days[date.getUTCDay()],\n m: date.getUTCMonth() + 1,\n M: dates[language].monthsShort[date.getUTCMonth()],\n MM: dates[language].months[date.getUTCMonth()],\n yy: date.getUTCFullYear().toString().substring(2),\n yyyy: date.getUTCFullYear()\n };\n val.dd = (val.d < 10 ? '0' : '') + val.d;\n val.mm = (val.m < 10 ? '0' : '') + val.m;\n date = [];\n var seps = $.extend([], format.separators);\n\n for (var i = 0, cnt = format.parts.length; i <= cnt; i++) {\n if (seps.length) date.push(seps.shift());\n date.push(val[format.parts[i]]);\n }\n\n return date.join('');\n },\n headTemplate: '<thead>' + '<tr>' + '<th colspan=\"7\" class=\"datepicker-title\"></th>' + '</tr>' + '<tr>' + '<th class=\"prev\">' + defaults.templates.leftArrow + '</th>' + '<th colspan=\"5\" class=\"datepicker-switch\"></th>' + '<th class=\"next\">' + defaults.templates.rightArrow + '</th>' + '</tr>' + '</thead>',\n contTemplate: '<tbody><tr><td colspan=\"7\"></td></tr></tbody>',\n footTemplate: '<tfoot>' + '<tr>' + '<th colspan=\"7\" class=\"today\"></th>' + '</tr>' + '<tr>' + '<th colspan=\"7\" class=\"clear\"></th>' + '</tr>' + '</tfoot>'\n };\n DPGlobal.template = '<div class=\"datepicker\">' + '<div class=\"datepicker-days\">' + '<table class=\"table-condensed\">' + DPGlobal.headTemplate + '<tbody></tbody>' + DPGlobal.footTemplate + '</table>' + '</div>' + '<div class=\"datepicker-months\">' + '<table class=\"table-condensed\">' + DPGlobal.headTemplate + DPGlobal.contTemplate + DPGlobal.footTemplate + '</table>' + '</div>' + '<div class=\"datepicker-years\">' + '<table class=\"table-condensed\">' + DPGlobal.headTemplate + DPGlobal.contTemplate + DPGlobal.footTemplate + '</table>' + '</div>' + '<div class=\"datepicker-decades\">' + '<table class=\"table-condensed\">' + DPGlobal.headTemplate + DPGlobal.contTemplate + DPGlobal.footTemplate + '</table>' + '</div>' + '<div class=\"datepicker-centuries\">' + '<table class=\"table-condensed\">' + DPGlobal.headTemplate + DPGlobal.contTemplate + DPGlobal.footTemplate + '</table>' + '</div>' + '</div>';\n $.fn.datepicker.DPGlobal = DPGlobal;\n /* DATEPICKER NO CONFLICT\n * =================== */\n\n $.fn.datepicker.noConflict = function () {\n $.fn.datepicker = old;\n return this;\n };\n /* DATEPICKER VERSION\n * =================== */\n\n\n $.fn.datepicker.version = '1.9.0';\n\n $.fn.datepicker.deprecated = function (msg) {\n var console = window.console;\n\n if (console && console.warn) {\n console.warn('DEPRECATED: ' + msg);\n }\n };\n /* DATEPICKER DATA-API\n * ================== */\n\n\n $(document).on('focus.datepicker.data-api click.datepicker.data-api', '[data-provide=\"datepicker\"]', function (e) {\n var $this = $(this);\n if ($this.data('datepicker')) return;\n e.preventDefault(); // component click requires us to explicitly show it\n\n datepickerPlugin.call($this, 'show');\n });\n $(function () {\n datepickerPlugin.call($('[data-provide=\"datepicker-inline\"]'));\n });\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*\n * jQuery File Upload Plugin\n * https://github.com/blueimp/jQuery-File-Upload\n *\n * Copyright 2010, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n */\n\n/* jshint nomen:false */\n\n/* global define, require, window, document, location, Blob, FormData */\n;\n\n(function (factory) {\n 'use strict';\n\n if (typeof define === 'function' && define.amd) {\n // Register as an anonymous AMD module:\n define(['jquery', 'jquery-ui/ui/widget'], factory);\n } else if ((typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object') {\n // Node/CommonJS:\n factory(require('jquery'), require('./vendor/jquery.ui.widget'));\n } else {\n // Browser globals:\n factory(window.jQuery);\n }\n})(function ($) {\n 'use strict'; // Detect file input support, based on\n // http://viljamis.com/blog/2012/file-upload-support-on-mobile/\n\n $.support.fileInput = !(new RegExp( // Handle devices which give false positives for the feature detection:\n '(Android (1\\\\.[0156]|2\\\\.[01]))' + '|(Windows Phone (OS 7|8\\\\.0))|(XBLWP)|(ZuneWP)|(WPDesktop)' + '|(w(eb)?OSBrowser)|(webOS)' + '|(Kindle/(1\\\\.0|2\\\\.[05]|3\\\\.0))').test(window.navigator.userAgent) || // Feature detection for all other devices:\n $('<input type=\"file\"/>').prop('disabled')); // The FileReader API is not actually used, but works as feature detection,\n // as some Safari versions (5?) support XHR file uploads via the FormData API,\n // but not non-multipart XHR file uploads.\n // window.XMLHttpRequestUpload is not available on IE10, so we check for\n // window.ProgressEvent instead to detect XHR2 file upload capability:\n\n $.support.xhrFileUpload = !!(window.ProgressEvent && window.FileReader);\n $.support.xhrFormDataFileUpload = !!window.FormData; // Detect support for Blob slicing (required for chunked uploads):\n\n $.support.blobSlice = window.Blob && (Blob.prototype.slice || Blob.prototype.webkitSlice || Blob.prototype.mozSlice); // Helper function to create drag handlers for dragover/dragenter/dragleave:\n\n function getDragHandler(type) {\n var isDragOver = type === 'dragover';\n return function (e) {\n e.dataTransfer = e.originalEvent && e.originalEvent.dataTransfer;\n var dataTransfer = e.dataTransfer;\n\n if (dataTransfer && $.inArray('Files', dataTransfer.types) !== -1 && this._trigger(type, $.Event(type, {\n delegatedEvent: e\n })) !== false) {\n e.preventDefault();\n\n if (isDragOver) {\n dataTransfer.dropEffect = 'copy';\n }\n }\n };\n } // The fileupload widget listens for change events on file input fields defined\n // via fileInput setting and paste or drop events of the given dropZone.\n // In addition to the default jQuery Widget methods, the fileupload widget\n // exposes the \"add\" and \"send\" methods, to add or directly send files using\n // the fileupload API.\n // By default, files added via file input selection, paste, drag & drop or\n // \"add\" method are uploaded immediately, but it is possible to override\n // the \"add\" callback option to queue file uploads.\n\n\n $.widget('blueimp.fileupload', {\n options: {\n // The drop target element(s), by the default the complete document.\n // Set to null to disable drag & drop support:\n dropZone: $(document),\n // The paste target element(s), by the default undefined.\n // Set to a DOM node or jQuery object to enable file pasting:\n pasteZone: undefined,\n // The file input field(s), that are listened to for change events.\n // If undefined, it is set to the file input fields inside\n // of the widget element on plugin initialization.\n // Set to null to disable the change listener.\n fileInput: undefined,\n // By default, the file input field is replaced with a clone after\n // each input field change event. This is required for iframe transport\n // queues and allows change events to be fired for the same file\n // selection, but can be disabled by setting the following option to false:\n replaceFileInput: true,\n // The parameter name for the file form data (the request argument name).\n // If undefined or empty, the name property of the file input field is\n // used, or \"files[]\" if the file input name property is also empty,\n // can be a string or an array of strings:\n paramName: undefined,\n // By default, each file of a selection is uploaded using an individual\n // request for XHR type uploads. Set to false to upload file\n // selections in one request each:\n singleFileUploads: true,\n // To limit the number of files uploaded with one XHR request,\n // set the following option to an integer greater than 0:\n limitMultiFileUploads: undefined,\n // The following option limits the number of files uploaded with one\n // XHR request to keep the request size under or equal to the defined\n // limit in bytes:\n limitMultiFileUploadSize: undefined,\n // Multipart file uploads add a number of bytes to each uploaded file,\n // therefore the following option adds an overhead for each file used\n // in the limitMultiFileUploadSize configuration:\n limitMultiFileUploadSizeOverhead: 512,\n // Set the following option to true to issue all file upload requests\n // in a sequential order:\n sequentialUploads: false,\n // To limit the number of concurrent uploads,\n // set the following option to an integer greater than 0:\n limitConcurrentUploads: undefined,\n // Set the following option to true to force iframe transport uploads:\n forceIframeTransport: false,\n // Set the following option to the location of a redirect url on the\n // origin server, for cross-domain iframe transport uploads:\n redirect: undefined,\n // The parameter name for the redirect url, sent as part of the form\n // data and set to 'redirect' if this option is empty:\n redirectParamName: undefined,\n // Set the following option to the location of a postMessage window,\n // to enable postMessage transport uploads:\n postMessage: undefined,\n // By default, XHR file uploads are sent as multipart/form-data.\n // The iframe transport is always using multipart/form-data.\n // Set to false to enable non-multipart XHR uploads:\n multipart: true,\n // To upload large files in smaller chunks, set the following option\n // to a preferred maximum chunk size. If set to 0, null or undefined,\n // or the browser does not support the required Blob API, files will\n // be uploaded as a whole.\n maxChunkSize: undefined,\n // When a non-multipart upload or a chunked multipart upload has been\n // aborted, this option can be used to resume the upload by setting\n // it to the size of the already uploaded bytes. This option is most\n // useful when modifying the options object inside of the \"add\" or\n // \"send\" callbacks, as the options are cloned for each file upload.\n uploadedBytes: undefined,\n // By default, failed (abort or error) file uploads are removed from the\n // global progress calculation. Set the following option to false to\n // prevent recalculating the global progress data:\n recalculateProgress: true,\n // Interval in milliseconds to calculate and trigger progress events:\n progressInterval: 100,\n // Interval in milliseconds to calculate progress bitrate:\n bitrateInterval: 500,\n // By default, uploads are started automatically when adding files:\n autoUpload: true,\n // By default, duplicate file names are expected to be handled on\n // the server-side. If this is not possible (e.g. when uploading\n // files directly to Amazon S3), the following option can be set to\n // an empty object or an object mapping existing filenames, e.g.:\n // { \"image.jpg\": true, \"image (1).jpg\": true }\n // If it is set, all files will be uploaded with unique filenames,\n // adding increasing number suffixes if necessary, e.g.:\n // \"image (2).jpg\"\n uniqueFilenames: undefined,\n // Error and info messages:\n messages: {\n uploadedBytes: 'Uploaded bytes exceed file size'\n },\n // Translation function, gets the message key to be translated\n // and an object with context specific data as arguments:\n i18n: function i18n(message, context) {\n message = this.messages[message] || message.toString();\n\n if (context) {\n $.each(context, function (key, value) {\n message = message.replace('{' + key + '}', value);\n });\n }\n\n return message;\n },\n // Additional form data to be sent along with the file uploads can be set\n // using this option, which accepts an array of objects with name and\n // value properties, a function returning such an array, a FormData\n // object (for XHR file uploads), or a simple object.\n // The form of the first fileInput is given as parameter to the function:\n formData: function formData(form) {\n return form.serializeArray();\n },\n // The add callback is invoked as soon as files are added to the fileupload\n // widget (via file input selection, drag & drop, paste or add API call).\n // If the singleFileUploads option is enabled, this callback will be\n // called once for each file in the selection for XHR file uploads, else\n // once for each file selection.\n //\n // The upload starts when the submit method is invoked on the data parameter.\n // The data object contains a files property holding the added files\n // and allows you to override plugin options as well as define ajax settings.\n //\n // Listeners for this callback can also be bound the following way:\n // .bind('fileuploadadd', func);\n //\n // data.submit() returns a Promise object and allows to attach additional\n // handlers using jQuery's Deferred callbacks:\n // data.submit().done(func).fail(func).always(func);\n add: function add(e, data) {\n if (e.isDefaultPrevented()) {\n return false;\n }\n\n if (data.autoUpload || data.autoUpload !== false && $(this).fileupload('option', 'autoUpload')) {\n data.process().done(function () {\n data.submit();\n });\n }\n },\n // Other callbacks:\n // Callback for the submit event of each file upload:\n // submit: function (e, data) {}, // .bind('fileuploadsubmit', func);\n // Callback for the start of each file upload request:\n // send: function (e, data) {}, // .bind('fileuploadsend', func);\n // Callback for successful uploads:\n // done: function (e, data) {}, // .bind('fileuploaddone', func);\n // Callback for failed (abort or error) uploads:\n // fail: function (e, data) {}, // .bind('fileuploadfail', func);\n // Callback for completed (success, abort or error) requests:\n // always: function (e, data) {}, // .bind('fileuploadalways', func);\n // Callback for upload progress events:\n // progress: function (e, data) {}, // .bind('fileuploadprogress', func);\n // Callback for global upload progress events:\n // progressall: function (e, data) {}, // .bind('fileuploadprogressall', func);\n // Callback for uploads start, equivalent to the global ajaxStart event:\n // start: function (e) {}, // .bind('fileuploadstart', func);\n // Callback for uploads stop, equivalent to the global ajaxStop event:\n // stop: function (e) {}, // .bind('fileuploadstop', func);\n // Callback for change events of the fileInput(s):\n // change: function (e, data) {}, // .bind('fileuploadchange', func);\n // Callback for paste events to the pasteZone(s):\n // paste: function (e, data) {}, // .bind('fileuploadpaste', func);\n // Callback for drop events of the dropZone(s):\n // drop: function (e, data) {}, // .bind('fileuploaddrop', func);\n // Callback for dragover events of the dropZone(s):\n // dragover: function (e) {}, // .bind('fileuploaddragover', func);\n // Callback before the start of each chunk upload request (before form data initialization):\n // chunkbeforesend: function (e, data) {}, // .bind('fileuploadchunkbeforesend', func);\n // Callback for the start of each chunk upload request:\n // chunksend: function (e, data) {}, // .bind('fileuploadchunksend', func);\n // Callback for successful chunk uploads:\n // chunkdone: function (e, data) {}, // .bind('fileuploadchunkdone', func);\n // Callback for failed (abort or error) chunk uploads:\n // chunkfail: function (e, data) {}, // .bind('fileuploadchunkfail', func);\n // Callback for completed (success, abort or error) chunk upload requests:\n // chunkalways: function (e, data) {}, // .bind('fileuploadchunkalways', func);\n // The plugin options are used as settings object for the ajax calls.\n // The following are jQuery ajax settings required for the file uploads:\n processData: false,\n contentType: false,\n cache: false,\n timeout: 0\n },\n // A list of options that require reinitializing event listeners and/or\n // special initialization code:\n _specialOptions: ['fileInput', 'dropZone', 'pasteZone', 'multipart', 'forceIframeTransport'],\n _blobSlice: $.support.blobSlice && function () {\n var slice = this.slice || this.webkitSlice || this.mozSlice;\n return slice.apply(this, arguments);\n },\n _BitrateTimer: function _BitrateTimer() {\n this.timestamp = Date.now ? Date.now() : new Date().getTime();\n this.loaded = 0;\n this.bitrate = 0;\n\n this.getBitrate = function (now, loaded, interval) {\n var timeDiff = now - this.timestamp;\n\n if (!this.bitrate || !interval || timeDiff > interval) {\n this.bitrate = (loaded - this.loaded) * (1000 / timeDiff) * 8;\n this.loaded = loaded;\n this.timestamp = now;\n }\n\n return this.bitrate;\n };\n },\n _isXHRUpload: function _isXHRUpload(options) {\n return !options.forceIframeTransport && (!options.multipart && $.support.xhrFileUpload || $.support.xhrFormDataFileUpload);\n },\n _getFormData: function _getFormData(options) {\n var formData;\n\n if ($.type(options.formData) === 'function') {\n return options.formData(options.form);\n }\n\n if ($.isArray(options.formData)) {\n return options.formData;\n }\n\n if ($.type(options.formData) === 'object') {\n formData = [];\n $.each(options.formData, function (name, value) {\n formData.push({\n name: name,\n value: value\n });\n });\n return formData;\n }\n\n return [];\n },\n _getTotal: function _getTotal(files) {\n var total = 0;\n $.each(files, function (index, file) {\n total += file.size || 1;\n });\n return total;\n },\n _initProgressObject: function _initProgressObject(obj) {\n var progress = {\n loaded: 0,\n total: 0,\n bitrate: 0\n };\n\n if (obj._progress) {\n $.extend(obj._progress, progress);\n } else {\n obj._progress = progress;\n }\n },\n _initResponseObject: function _initResponseObject(obj) {\n var prop;\n\n if (obj._response) {\n for (prop in obj._response) {\n if (obj._response.hasOwnProperty(prop)) {\n delete obj._response[prop];\n }\n }\n } else {\n obj._response = {};\n }\n },\n _onProgress: function _onProgress(e, data) {\n if (e.lengthComputable) {\n var now = Date.now ? Date.now() : new Date().getTime(),\n loaded;\n\n if (data._time && data.progressInterval && now - data._time < data.progressInterval && e.loaded !== e.total) {\n return;\n }\n\n data._time = now;\n loaded = Math.floor(e.loaded / e.total * (data.chunkSize || data._progress.total)) + (data.uploadedBytes || 0); // Add the difference from the previously loaded state\n // to the global loaded counter:\n\n this._progress.loaded += loaded - data._progress.loaded;\n this._progress.bitrate = this._bitrateTimer.getBitrate(now, this._progress.loaded, data.bitrateInterval);\n data._progress.loaded = data.loaded = loaded;\n data._progress.bitrate = data.bitrate = data._bitrateTimer.getBitrate(now, loaded, data.bitrateInterval); // Trigger a custom progress event with a total data property set\n // to the file size(s) of the current upload and a loaded data\n // property calculated accordingly:\n\n this._trigger('progress', $.Event('progress', {\n delegatedEvent: e\n }), data); // Trigger a global progress event for all current file uploads,\n // including ajax calls queued for sequential file uploads:\n\n\n this._trigger('progressall', $.Event('progressall', {\n delegatedEvent: e\n }), this._progress);\n }\n },\n _initProgressListener: function _initProgressListener(options) {\n var that = this,\n xhr = options.xhr ? options.xhr() : $.ajaxSettings.xhr(); // Accesss to the native XHR object is required to add event listeners\n // for the upload progress event:\n\n if (xhr.upload) {\n $(xhr.upload).bind('progress', function (e) {\n var oe = e.originalEvent; // Make sure the progress event properties get copied over:\n\n e.lengthComputable = oe.lengthComputable;\n e.loaded = oe.loaded;\n e.total = oe.total;\n\n that._onProgress(e, options);\n });\n\n options.xhr = function () {\n return xhr;\n };\n }\n },\n _deinitProgressListener: function _deinitProgressListener(options) {\n var xhr = options.xhr ? options.xhr() : $.ajaxSettings.xhr();\n\n if (xhr.upload) {\n $(xhr.upload).unbind('progress');\n }\n },\n _isInstanceOf: function _isInstanceOf(type, obj) {\n // Cross-frame instanceof check\n return Object.prototype.toString.call(obj) === '[object ' + type + ']';\n },\n _getUniqueFilename: function _getUniqueFilename(name, map) {\n name = String(name);\n\n if (map[name]) {\n name = name.replace(/(?: \\(([\\d]+)\\))?(\\.[^.]+)?$/, function (_, p1, p2) {\n var index = p1 ? Number(p1) + 1 : 1;\n var ext = p2 || '';\n return ' (' + index + ')' + ext;\n });\n return this._getUniqueFilename(name, map);\n }\n\n map[name] = true;\n return name;\n },\n _initXHRData: function _initXHRData(options) {\n var that = this,\n formData,\n file = options.files[0],\n // Ignore non-multipart setting if not supported:\n multipart = options.multipart || !$.support.xhrFileUpload,\n paramName = $.type(options.paramName) === 'array' ? options.paramName[0] : options.paramName;\n options.headers = $.extend({}, options.headers);\n\n if (options.contentRange) {\n options.headers['Content-Range'] = options.contentRange;\n }\n\n if (!multipart || options.blob || !this._isInstanceOf('File', file)) {\n options.headers['Content-Disposition'] = 'attachment; filename=\"' + encodeURI(file.uploadName || file.name) + '\"';\n }\n\n if (!multipart) {\n options.contentType = file.type || 'application/octet-stream';\n options.data = options.blob || file;\n } else if ($.support.xhrFormDataFileUpload) {\n if (options.postMessage) {\n // window.postMessage does not allow sending FormData\n // objects, so we just add the File/Blob objects to\n // the formData array and let the postMessage window\n // create the FormData object out of this array:\n formData = this._getFormData(options);\n\n if (options.blob) {\n formData.push({\n name: paramName,\n value: options.blob\n });\n } else {\n $.each(options.files, function (index, file) {\n formData.push({\n name: $.type(options.paramName) === 'array' && options.paramName[index] || paramName,\n value: file\n });\n });\n }\n } else {\n if (that._isInstanceOf('FormData', options.formData)) {\n formData = options.formData;\n } else {\n formData = new FormData();\n $.each(this._getFormData(options), function (index, field) {\n formData.append(field.name, field.value);\n });\n }\n\n if (options.blob) {\n formData.append(paramName, options.blob, file.uploadName || file.name);\n } else {\n $.each(options.files, function (index, file) {\n // This check allows the tests to run with\n // dummy objects:\n if (that._isInstanceOf('File', file) || that._isInstanceOf('Blob', file)) {\n var fileName = file.uploadName || file.name;\n\n if (options.uniqueFilenames) {\n fileName = that._getUniqueFilename(fileName, options.uniqueFilenames);\n }\n\n formData.append($.type(options.paramName) === 'array' && options.paramName[index] || paramName, file, fileName);\n }\n });\n }\n }\n\n options.data = formData;\n } // Blob reference is not needed anymore, free memory:\n\n\n options.blob = null;\n },\n _initIframeSettings: function _initIframeSettings(options) {\n var targetHost = $('<a></a>').prop('href', options.url).prop('host'); // Setting the dataType to iframe enables the iframe transport:\n\n options.dataType = 'iframe ' + (options.dataType || ''); // The iframe transport accepts a serialized array as form data:\n\n options.formData = this._getFormData(options); // Add redirect url to form data on cross-domain uploads:\n\n if (options.redirect && targetHost && targetHost !== location.host) {\n options.formData.push({\n name: options.redirectParamName || 'redirect',\n value: options.redirect\n });\n }\n },\n _initDataSettings: function _initDataSettings(options) {\n if (this._isXHRUpload(options)) {\n if (!this._chunkedUpload(options, true)) {\n if (!options.data) {\n this._initXHRData(options);\n }\n\n this._initProgressListener(options);\n }\n\n if (options.postMessage) {\n // Setting the dataType to postmessage enables the\n // postMessage transport:\n options.dataType = 'postmessage ' + (options.dataType || '');\n }\n } else {\n this._initIframeSettings(options);\n }\n },\n _getParamName: function _getParamName(options) {\n var fileInput = $(options.fileInput),\n paramName = options.paramName;\n\n if (!paramName) {\n paramName = [];\n fileInput.each(function () {\n var input = $(this),\n name = input.prop('name') || 'files[]',\n i = (input.prop('files') || [1]).length;\n\n while (i) {\n paramName.push(name);\n i -= 1;\n }\n });\n\n if (!paramName.length) {\n paramName = [fileInput.prop('name') || 'files[]'];\n }\n } else if (!$.isArray(paramName)) {\n paramName = [paramName];\n }\n\n return paramName;\n },\n _initFormSettings: function _initFormSettings(options) {\n // Retrieve missing options from the input field and the\n // associated form, if available:\n if (!options.form || !options.form.length) {\n options.form = $(options.fileInput.prop('form')); // If the given file input doesn't have an associated form,\n // use the default widget file input's form:\n\n if (!options.form.length) {\n options.form = $(this.options.fileInput.prop('form'));\n }\n }\n\n options.paramName = this._getParamName(options);\n\n if (!options.url) {\n options.url = options.form.prop('action') || location.href;\n } // The HTTP request method must be \"POST\" or \"PUT\":\n\n\n options.type = (options.type || $.type(options.form.prop('method')) === 'string' && options.form.prop('method') || '').toUpperCase();\n\n if (options.type !== 'POST' && options.type !== 'PUT' && options.type !== 'PATCH') {\n options.type = 'POST';\n }\n\n if (!options.formAcceptCharset) {\n options.formAcceptCharset = options.form.attr('accept-charset');\n }\n },\n _getAJAXSettings: function _getAJAXSettings(data) {\n var options = $.extend({}, this.options, data);\n\n this._initFormSettings(options);\n\n this._initDataSettings(options);\n\n return options;\n },\n // jQuery 1.6 doesn't provide .state(),\n // while jQuery 1.8+ removed .isRejected() and .isResolved():\n _getDeferredState: function _getDeferredState(deferred) {\n if (deferred.state) {\n return deferred.state();\n }\n\n if (deferred.isResolved()) {\n return 'resolved';\n }\n\n if (deferred.isRejected()) {\n return 'rejected';\n }\n\n return 'pending';\n },\n // Maps jqXHR callbacks to the equivalent\n // methods of the given Promise object:\n _enhancePromise: function _enhancePromise(promise) {\n promise.success = promise.done;\n promise.error = promise.fail;\n promise.complete = promise.always;\n return promise;\n },\n // Creates and returns a Promise object enhanced with\n // the jqXHR methods abort, success, error and complete:\n _getXHRPromise: function _getXHRPromise(resolveOrReject, context, args) {\n var dfd = $.Deferred(),\n promise = dfd.promise();\n context = context || this.options.context || promise;\n\n if (resolveOrReject === true) {\n dfd.resolveWith(context, args);\n } else if (resolveOrReject === false) {\n dfd.rejectWith(context, args);\n }\n\n promise.abort = dfd.promise;\n return this._enhancePromise(promise);\n },\n // Adds convenience methods to the data callback argument:\n _addConvenienceMethods: function _addConvenienceMethods(e, data) {\n var that = this,\n getPromise = function getPromise(args) {\n return $.Deferred().resolveWith(that, args).promise();\n };\n\n data.process = function (resolveFunc, rejectFunc) {\n if (resolveFunc || rejectFunc) {\n data._processQueue = this._processQueue = (this._processQueue || getPromise([this])).then(function () {\n if (data.errorThrown) {\n return $.Deferred().rejectWith(that, [data]).promise();\n }\n\n return getPromise(arguments);\n }).then(resolveFunc, rejectFunc);\n }\n\n return this._processQueue || getPromise([this]);\n };\n\n data.submit = function () {\n if (this.state() !== 'pending') {\n data.jqXHR = this.jqXHR = that._trigger('submit', $.Event('submit', {\n delegatedEvent: e\n }), this) !== false && that._onSend(e, this);\n }\n\n return this.jqXHR || that._getXHRPromise();\n };\n\n data.abort = function () {\n if (this.jqXHR) {\n return this.jqXHR.abort();\n }\n\n this.errorThrown = 'abort';\n\n that._trigger('fail', null, this);\n\n return that._getXHRPromise(false);\n };\n\n data.state = function () {\n if (this.jqXHR) {\n return that._getDeferredState(this.jqXHR);\n }\n\n if (this._processQueue) {\n return that._getDeferredState(this._processQueue);\n }\n };\n\n data.processing = function () {\n return !this.jqXHR && this._processQueue && that._getDeferredState(this._processQueue) === 'pending';\n };\n\n data.progress = function () {\n return this._progress;\n };\n\n data.response = function () {\n return this._response;\n };\n },\n // Parses the Range header from the server response\n // and returns the uploaded bytes:\n _getUploadedBytes: function _getUploadedBytes(jqXHR) {\n var range = jqXHR.getResponseHeader('Range'),\n parts = range && range.split('-'),\n upperBytesPos = parts && parts.length > 1 && parseInt(parts[1], 10);\n return upperBytesPos && upperBytesPos + 1;\n },\n // Uploads a file in multiple, sequential requests\n // by splitting the file up in multiple blob chunks.\n // If the second parameter is true, only tests if the file\n // should be uploaded in chunks, but does not invoke any\n // upload requests:\n _chunkedUpload: function _chunkedUpload(options, testOnly) {\n options.uploadedBytes = options.uploadedBytes || 0;\n\n var that = this,\n file = options.files[0],\n fs = file.size,\n ub = options.uploadedBytes,\n mcs = options.maxChunkSize || fs,\n slice = this._blobSlice,\n dfd = $.Deferred(),\n promise = dfd.promise(),\n jqXHR,\n _upload;\n\n if (!(this._isXHRUpload(options) && slice && (ub || ($.type(mcs) === 'function' ? mcs(options) : mcs) < fs)) || options.data) {\n return false;\n }\n\n if (testOnly) {\n return true;\n }\n\n if (ub >= fs) {\n file.error = options.i18n('uploadedBytes');\n return this._getXHRPromise(false, options.context, [null, 'error', file.error]);\n } // The chunk upload method:\n\n\n _upload = function upload() {\n // Clone the options object for each chunk upload:\n var o = $.extend({}, options),\n currentLoaded = o._progress.loaded;\n o.blob = slice.call(file, ub, ub + ($.type(mcs) === 'function' ? mcs(o) : mcs), file.type); // Store the current chunk size, as the blob itself\n // will be dereferenced after data processing:\n\n o.chunkSize = o.blob.size; // Expose the chunk bytes position range:\n\n o.contentRange = 'bytes ' + ub + '-' + (ub + o.chunkSize - 1) + '/' + fs; // Trigger chunkbeforesend to allow form data to be updated for this chunk\n\n that._trigger('chunkbeforesend', null, o); // Process the upload data (the blob and potential form data):\n\n\n that._initXHRData(o); // Add progress listeners for this chunk upload:\n\n\n that._initProgressListener(o);\n\n jqXHR = (that._trigger('chunksend', null, o) !== false && $.ajax(o) || that._getXHRPromise(false, o.context)).done(function (result, textStatus, jqXHR) {\n ub = that._getUploadedBytes(jqXHR) || ub + o.chunkSize; // Create a progress event if no final progress event\n // with loaded equaling total has been triggered\n // for this chunk:\n\n if (currentLoaded + o.chunkSize - o._progress.loaded) {\n that._onProgress($.Event('progress', {\n lengthComputable: true,\n loaded: ub - o.uploadedBytes,\n total: ub - o.uploadedBytes\n }), o);\n }\n\n options.uploadedBytes = o.uploadedBytes = ub;\n o.result = result;\n o.textStatus = textStatus;\n o.jqXHR = jqXHR;\n\n that._trigger('chunkdone', null, o);\n\n that._trigger('chunkalways', null, o);\n\n if (ub < fs) {\n // File upload not yet complete,\n // continue with the next chunk:\n _upload();\n } else {\n dfd.resolveWith(o.context, [result, textStatus, jqXHR]);\n }\n }).fail(function (jqXHR, textStatus, errorThrown) {\n o.jqXHR = jqXHR;\n o.textStatus = textStatus;\n o.errorThrown = errorThrown;\n\n that._trigger('chunkfail', null, o);\n\n that._trigger('chunkalways', null, o);\n\n dfd.rejectWith(o.context, [jqXHR, textStatus, errorThrown]);\n }).always(function () {\n that._deinitProgressListener(o);\n });\n };\n\n this._enhancePromise(promise);\n\n promise.abort = function () {\n return jqXHR.abort();\n };\n\n _upload();\n\n return promise;\n },\n _beforeSend: function _beforeSend(e, data) {\n if (this._active === 0) {\n // the start callback is triggered when an upload starts\n // and no other uploads are currently running,\n // equivalent to the global ajaxStart event:\n this._trigger('start'); // Set timer for global bitrate progress calculation:\n\n\n this._bitrateTimer = new this._BitrateTimer(); // Reset the global progress values:\n\n this._progress.loaded = this._progress.total = 0;\n this._progress.bitrate = 0;\n } // Make sure the container objects for the .response() and\n // .progress() methods on the data object are available\n // and reset to their initial state:\n\n\n this._initResponseObject(data);\n\n this._initProgressObject(data);\n\n data._progress.loaded = data.loaded = data.uploadedBytes || 0;\n data._progress.total = data.total = this._getTotal(data.files) || 1;\n data._progress.bitrate = data.bitrate = 0;\n this._active += 1; // Initialize the global progress values:\n\n this._progress.loaded += data.loaded;\n this._progress.total += data.total;\n },\n _onDone: function _onDone(result, textStatus, jqXHR, options) {\n var total = options._progress.total,\n response = options._response;\n\n if (options._progress.loaded < total) {\n // Create a progress event if no final progress event\n // with loaded equaling total has been triggered:\n this._onProgress($.Event('progress', {\n lengthComputable: true,\n loaded: total,\n total: total\n }), options);\n }\n\n response.result = options.result = result;\n response.textStatus = options.textStatus = textStatus;\n response.jqXHR = options.jqXHR = jqXHR;\n\n this._trigger('done', null, options);\n },\n _onFail: function _onFail(jqXHR, textStatus, errorThrown, options) {\n var response = options._response;\n\n if (options.recalculateProgress) {\n // Remove the failed (error or abort) file upload from\n // the global progress calculation:\n this._progress.loaded -= options._progress.loaded;\n this._progress.total -= options._progress.total;\n }\n\n response.jqXHR = options.jqXHR = jqXHR;\n response.textStatus = options.textStatus = textStatus;\n response.errorThrown = options.errorThrown = errorThrown;\n\n this._trigger('fail', null, options);\n },\n _onAlways: function _onAlways(jqXHRorResult, textStatus, jqXHRorError, options) {\n // jqXHRorResult, textStatus and jqXHRorError are added to the\n // options object via done and fail callbacks\n this._trigger('always', null, options);\n },\n _onSend: function _onSend(e, data) {\n if (!data.submit) {\n this._addConvenienceMethods(e, data);\n }\n\n var that = this,\n jqXHR,\n aborted,\n slot,\n pipe,\n options = that._getAJAXSettings(data),\n send = function send() {\n that._sending += 1; // Set timer for bitrate progress calculation:\n\n options._bitrateTimer = new that._BitrateTimer();\n jqXHR = jqXHR || ((aborted || that._trigger('send', $.Event('send', {\n delegatedEvent: e\n }), options) === false) && that._getXHRPromise(false, options.context, aborted) || that._chunkedUpload(options) || $.ajax(options)).done(function (result, textStatus, jqXHR) {\n that._onDone(result, textStatus, jqXHR, options);\n }).fail(function (jqXHR, textStatus, errorThrown) {\n that._onFail(jqXHR, textStatus, errorThrown, options);\n }).always(function (jqXHRorResult, textStatus, jqXHRorError) {\n that._deinitProgressListener(options);\n\n that._onAlways(jqXHRorResult, textStatus, jqXHRorError, options);\n\n that._sending -= 1;\n that._active -= 1;\n\n if (options.limitConcurrentUploads && options.limitConcurrentUploads > that._sending) {\n // Start the next queued upload,\n // that has not been aborted:\n var nextSlot = that._slots.shift();\n\n while (nextSlot) {\n if (that._getDeferredState(nextSlot) === 'pending') {\n nextSlot.resolve();\n break;\n }\n\n nextSlot = that._slots.shift();\n }\n }\n\n if (that._active === 0) {\n // The stop callback is triggered when all uploads have\n // been completed, equivalent to the global ajaxStop event:\n that._trigger('stop');\n }\n });\n return jqXHR;\n };\n\n this._beforeSend(e, options);\n\n if (this.options.sequentialUploads || this.options.limitConcurrentUploads && this.options.limitConcurrentUploads <= this._sending) {\n if (this.options.limitConcurrentUploads > 1) {\n slot = $.Deferred();\n\n this._slots.push(slot);\n\n pipe = slot.then(send);\n } else {\n this._sequence = this._sequence.then(send, send);\n pipe = this._sequence;\n } // Return the piped Promise object, enhanced with an abort method,\n // which is delegated to the jqXHR object of the current upload,\n // and jqXHR callbacks mapped to the equivalent Promise methods:\n\n\n pipe.abort = function () {\n aborted = [undefined, 'abort', 'abort'];\n\n if (!jqXHR) {\n if (slot) {\n slot.rejectWith(options.context, aborted);\n }\n\n return send();\n }\n\n return jqXHR.abort();\n };\n\n return this._enhancePromise(pipe);\n }\n\n return send();\n },\n _onAdd: function _onAdd(e, data) {\n var that = this,\n result = true,\n options = $.extend({}, this.options, data),\n files = data.files,\n filesLength = files.length,\n limit = options.limitMultiFileUploads,\n limitSize = options.limitMultiFileUploadSize,\n overhead = options.limitMultiFileUploadSizeOverhead,\n batchSize = 0,\n paramName = this._getParamName(options),\n paramNameSet,\n paramNameSlice,\n fileSet,\n i,\n j = 0;\n\n if (!filesLength) {\n return false;\n }\n\n if (limitSize && files[0].size === undefined) {\n limitSize = undefined;\n }\n\n if (!(options.singleFileUploads || limit || limitSize) || !this._isXHRUpload(options)) {\n fileSet = [files];\n paramNameSet = [paramName];\n } else if (!(options.singleFileUploads || limitSize) && limit) {\n fileSet = [];\n paramNameSet = [];\n\n for (i = 0; i < filesLength; i += limit) {\n fileSet.push(files.slice(i, i + limit));\n paramNameSlice = paramName.slice(i, i + limit);\n\n if (!paramNameSlice.length) {\n paramNameSlice = paramName;\n }\n\n paramNameSet.push(paramNameSlice);\n }\n } else if (!options.singleFileUploads && limitSize) {\n fileSet = [];\n paramNameSet = [];\n\n for (i = 0; i < filesLength; i = i + 1) {\n batchSize += files[i].size + overhead;\n\n if (i + 1 === filesLength || batchSize + files[i + 1].size + overhead > limitSize || limit && i + 1 - j >= limit) {\n fileSet.push(files.slice(j, i + 1));\n paramNameSlice = paramName.slice(j, i + 1);\n\n if (!paramNameSlice.length) {\n paramNameSlice = paramName;\n }\n\n paramNameSet.push(paramNameSlice);\n j = i + 1;\n batchSize = 0;\n }\n }\n } else {\n paramNameSet = paramName;\n }\n\n data.originalFiles = files;\n $.each(fileSet || files, function (index, element) {\n var newData = $.extend({}, data);\n newData.files = fileSet ? element : [element];\n newData.paramName = paramNameSet[index];\n\n that._initResponseObject(newData);\n\n that._initProgressObject(newData);\n\n that._addConvenienceMethods(e, newData);\n\n result = that._trigger('add', $.Event('add', {\n delegatedEvent: e\n }), newData);\n return result;\n });\n return result;\n },\n _replaceFileInput: function _replaceFileInput(data) {\n var input = data.fileInput,\n inputClone = input.clone(true),\n restoreFocus = input.is(document.activeElement); // Add a reference for the new cloned file input to the data argument:\n\n data.fileInputClone = inputClone;\n $('<form></form>').append(inputClone)[0].reset(); // Detaching allows to insert the fileInput on another form\n // without loosing the file input value:\n\n input.after(inputClone).detach(); // If the fileInput had focus before it was detached,\n // restore focus to the inputClone.\n\n if (restoreFocus) {\n inputClone.focus();\n } // Avoid memory leaks with the detached file input:\n\n\n $.cleanData(input.unbind('remove')); // Replace the original file input element in the fileInput\n // elements set with the clone, which has been copied including\n // event handlers:\n\n this.options.fileInput = this.options.fileInput.map(function (i, el) {\n if (el === input[0]) {\n return inputClone[0];\n }\n\n return el;\n }); // If the widget has been initialized on the file input itself,\n // override this.element with the file input clone:\n\n if (input[0] === this.element[0]) {\n this.element = inputClone;\n }\n },\n _handleFileTreeEntry: function _handleFileTreeEntry(entry, path) {\n var that = this,\n dfd = $.Deferred(),\n entries = [],\n dirReader,\n errorHandler = function errorHandler(e) {\n if (e && !e.entry) {\n e.entry = entry;\n } // Since $.when returns immediately if one\n // Deferred is rejected, we use resolve instead.\n // This allows valid files and invalid items\n // to be returned together in one set:\n\n\n dfd.resolve([e]);\n },\n successHandler = function successHandler(entries) {\n that._handleFileTreeEntries(entries, path + entry.name + '/').done(function (files) {\n dfd.resolve(files);\n }).fail(errorHandler);\n },\n readEntries = function readEntries() {\n dirReader.readEntries(function (results) {\n if (!results.length) {\n successHandler(entries);\n } else {\n entries = entries.concat(results);\n readEntries();\n }\n }, errorHandler);\n };\n\n path = path || '';\n\n if (entry.isFile) {\n if (entry._file) {\n // Workaround for Chrome bug #149735\n entry._file.relativePath = path;\n dfd.resolve(entry._file);\n } else {\n entry.file(function (file) {\n file.relativePath = path;\n dfd.resolve(file);\n }, errorHandler);\n }\n } else if (entry.isDirectory) {\n dirReader = entry.createReader();\n readEntries();\n } else {\n // Return an empty list for file system items\n // other than files or directories:\n dfd.resolve([]);\n }\n\n return dfd.promise();\n },\n _handleFileTreeEntries: function _handleFileTreeEntries(entries, path) {\n var that = this;\n return $.when.apply($, $.map(entries, function (entry) {\n return that._handleFileTreeEntry(entry, path);\n })).then(function () {\n return Array.prototype.concat.apply([], arguments);\n });\n },\n _getDroppedFiles: function _getDroppedFiles(dataTransfer) {\n dataTransfer = dataTransfer || {};\n var items = dataTransfer.items;\n\n if (items && items.length && (items[0].webkitGetAsEntry || items[0].getAsEntry)) {\n return this._handleFileTreeEntries($.map(items, function (item) {\n var entry;\n\n if (item.webkitGetAsEntry) {\n entry = item.webkitGetAsEntry();\n\n if (entry) {\n // Workaround for Chrome bug #149735:\n entry._file = item.getAsFile();\n }\n\n return entry;\n }\n\n return item.getAsEntry();\n }));\n }\n\n return $.Deferred().resolve($.makeArray(dataTransfer.files)).promise();\n },\n _getSingleFileInputFiles: function _getSingleFileInputFiles(fileInput) {\n fileInput = $(fileInput);\n var entries = fileInput.prop('webkitEntries') || fileInput.prop('entries'),\n files,\n value;\n\n if (entries && entries.length) {\n return this._handleFileTreeEntries(entries);\n }\n\n files = $.makeArray(fileInput.prop('files'));\n\n if (!files.length) {\n value = fileInput.prop('value');\n\n if (!value) {\n return $.Deferred().resolve([]).promise();\n } // If the files property is not available, the browser does not\n // support the File API and we add a pseudo File object with\n // the input value as name with path information removed:\n\n\n files = [{\n name: value.replace(/^.*\\\\/, '')\n }];\n } else if (files[0].name === undefined && files[0].fileName) {\n // File normalization for Safari 4 and Firefox 3:\n $.each(files, function (index, file) {\n file.name = file.fileName;\n file.size = file.fileSize;\n });\n }\n\n return $.Deferred().resolve(files).promise();\n },\n _getFileInputFiles: function _getFileInputFiles(fileInput) {\n if (!(fileInput instanceof $) || fileInput.length === 1) {\n return this._getSingleFileInputFiles(fileInput);\n }\n\n return $.when.apply($, $.map(fileInput, this._getSingleFileInputFiles)).then(function () {\n return Array.prototype.concat.apply([], arguments);\n });\n },\n _onChange: function _onChange(e) {\n var that = this,\n data = {\n fileInput: $(e.target),\n form: $(e.target.form)\n };\n\n this._getFileInputFiles(data.fileInput).always(function (files) {\n data.files = files;\n\n if (that.options.replaceFileInput) {\n that._replaceFileInput(data);\n }\n\n if (that._trigger('change', $.Event('change', {\n delegatedEvent: e\n }), data) !== false) {\n that._onAdd(e, data);\n }\n });\n },\n _onPaste: function _onPaste(e) {\n var items = e.originalEvent && e.originalEvent.clipboardData && e.originalEvent.clipboardData.items,\n data = {\n files: []\n };\n\n if (items && items.length) {\n $.each(items, function (index, item) {\n var file = item.getAsFile && item.getAsFile();\n\n if (file) {\n data.files.push(file);\n }\n });\n\n if (this._trigger('paste', $.Event('paste', {\n delegatedEvent: e\n }), data) !== false) {\n this._onAdd(e, data);\n }\n }\n },\n _onDrop: function _onDrop(e) {\n e.dataTransfer = e.originalEvent && e.originalEvent.dataTransfer;\n var that = this,\n dataTransfer = e.dataTransfer,\n data = {};\n\n if (dataTransfer && dataTransfer.files && dataTransfer.files.length) {\n e.preventDefault();\n\n this._getDroppedFiles(dataTransfer).always(function (files) {\n data.files = files;\n\n if (that._trigger('drop', $.Event('drop', {\n delegatedEvent: e\n }), data) !== false) {\n that._onAdd(e, data);\n }\n });\n }\n },\n _onDragOver: getDragHandler('dragover'),\n _onDragEnter: getDragHandler('dragenter'),\n _onDragLeave: getDragHandler('dragleave'),\n _initEventHandlers: function _initEventHandlers() {\n if (this._isXHRUpload(this.options)) {\n this._on(this.options.dropZone, {\n dragover: this._onDragOver,\n drop: this._onDrop,\n // event.preventDefault() on dragenter is required for IE10+:\n dragenter: this._onDragEnter,\n // dragleave is not required, but added for completeness:\n dragleave: this._onDragLeave\n });\n\n this._on(this.options.pasteZone, {\n paste: this._onPaste\n });\n }\n\n if ($.support.fileInput) {\n this._on(this.options.fileInput, {\n change: this._onChange\n });\n }\n },\n _destroyEventHandlers: function _destroyEventHandlers() {\n this._off(this.options.dropZone, 'dragenter dragleave dragover drop');\n\n this._off(this.options.pasteZone, 'paste');\n\n this._off(this.options.fileInput, 'change');\n },\n _destroy: function _destroy() {\n this._destroyEventHandlers();\n },\n _setOption: function _setOption(key, value) {\n var reinit = $.inArray(key, this._specialOptions) !== -1;\n\n if (reinit) {\n this._destroyEventHandlers();\n }\n\n this._super(key, value);\n\n if (reinit) {\n this._initSpecialOptions();\n\n this._initEventHandlers();\n }\n },\n _initSpecialOptions: function _initSpecialOptions() {\n var options = this.options;\n\n if (options.fileInput === undefined) {\n options.fileInput = this.element.is('input[type=\"file\"]') ? this.element : this.element.find('input[type=\"file\"]');\n } else if (!(options.fileInput instanceof $)) {\n options.fileInput = $(options.fileInput);\n }\n\n if (!(options.dropZone instanceof $)) {\n options.dropZone = $(options.dropZone);\n }\n\n if (!(options.pasteZone instanceof $)) {\n options.pasteZone = $(options.pasteZone);\n }\n },\n _getRegExp: function _getRegExp(str) {\n var parts = str.split('/'),\n modifiers = parts.pop();\n parts.shift();\n return new RegExp(parts.join('/'), modifiers);\n },\n _isRegExpOption: function _isRegExpOption(key, value) {\n return key !== 'url' && $.type(value) === 'string' && /^\\/.*\\/[igm]{0,3}$/.test(value);\n },\n _initDataAttributes: function _initDataAttributes() {\n var that = this,\n options = this.options,\n data = this.element.data(); // Initialize options set via HTML5 data-attributes:\n\n $.each(this.element[0].attributes, function (index, attr) {\n var key = attr.name.toLowerCase(),\n value;\n\n if (/^data-/.test(key)) {\n // Convert hyphen-ated key to camelCase:\n key = key.slice(5).replace(/-[a-z]/g, function (str) {\n return str.charAt(1).toUpperCase();\n });\n value = data[key];\n\n if (that._isRegExpOption(key, value)) {\n value = that._getRegExp(value);\n }\n\n options[key] = value;\n }\n });\n },\n _create: function _create() {\n this._initDataAttributes();\n\n this._initSpecialOptions();\n\n this._slots = [];\n this._sequence = this._getXHRPromise(true);\n this._sending = this._active = 0;\n\n this._initProgressObject(this);\n\n this._initEventHandlers();\n },\n // This method is exposed to the widget API and allows to query\n // the number of active uploads:\n active: function active() {\n return this._active;\n },\n // This method is exposed to the widget API and allows to query\n // the widget upload progress.\n // It returns an object with loaded, total and bitrate properties\n // for the running uploads:\n progress: function progress() {\n return this._progress;\n },\n // This method is exposed to the widget API and allows adding files\n // using the fileupload API. The data parameter accepts an object which\n // must have a files property and can contain additional options:\n // .fileupload('add', {files: filesList});\n add: function add(data) {\n var that = this;\n\n if (!data || this.options.disabled) {\n return;\n }\n\n if (data.fileInput && !data.files) {\n this._getFileInputFiles(data.fileInput).always(function (files) {\n data.files = files;\n\n that._onAdd(null, data);\n });\n } else {\n data.files = $.makeArray(data.files);\n\n this._onAdd(null, data);\n }\n },\n // This method is exposed to the widget API and allows sending files\n // using the fileupload API. The data parameter accepts an object which\n // must have a files or fileInput property and can contain additional options:\n // .fileupload('send', {files: filesList});\n // The method returns a Promise object for the file upload call.\n send: function send(data) {\n if (data && !this.options.disabled) {\n if (data.fileInput && !data.files) {\n var that = this,\n dfd = $.Deferred(),\n promise = dfd.promise(),\n jqXHR,\n aborted;\n\n promise.abort = function () {\n aborted = true;\n\n if (jqXHR) {\n return jqXHR.abort();\n }\n\n dfd.reject(null, 'abort', 'abort');\n return promise;\n };\n\n this._getFileInputFiles(data.fileInput).always(function (files) {\n if (aborted) {\n return;\n }\n\n if (!files.length) {\n dfd.reject();\n return;\n }\n\n data.files = files;\n jqXHR = that._onSend(null, data);\n jqXHR.then(function (result, textStatus, jqXHR) {\n dfd.resolve(result, textStatus, jqXHR);\n }, function (jqXHR, textStatus, errorThrown) {\n dfd.reject(jqXHR, textStatus, errorThrown);\n });\n });\n\n return this._enhancePromise(promise);\n }\n\n data.files = $.makeArray(data.files);\n\n if (data.files.length) {\n return this._onSend(null, data);\n }\n }\n\n return this._getXHRPromise(false, data && data.context);\n }\n });\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*! jQuery UI - v1.12.1+CommonJS - 2018-02-10\n * http://jqueryui.com\n * Includes: widget.js\n * Copyright jQuery Foundation and other contributors; Licensed MIT */\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 exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === \"object\") {\n // Node/CommonJS\n factory(require(\"jquery\"));\n } else {\n // Browser globals\n factory(jQuery);\n }\n})(function ($) {\n $.ui = $.ui || {};\n var version = $.ui.version = \"1.12.1\";\n /*!\n * jQuery UI Widget 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n //>>label: Widget\n //>>group: Core\n //>>description: Provides a factory for creating stateful widgets with a common API.\n //>>docs: http://api.jqueryui.com/jQuery.widget/\n //>>demos: http://jqueryui.com/widget/\n\n var widgetUuid = 0;\n var widgetSlice = Array.prototype.slice;\n\n $.cleanData = function (orig) {\n return function (elems) {\n var events, elem, i;\n\n for (i = 0; (elem = elems[i]) != null; i++) {\n try {\n // Only trigger remove when necessary to save time\n events = $._data(elem, \"events\");\n\n if (events && events.remove) {\n $(elem).triggerHandler(\"remove\");\n } // Http://bugs.jquery.com/ticket/8235\n\n } catch (e) {}\n }\n\n orig(elems);\n };\n }($.cleanData);\n\n $.widget = function (name, base, prototype) {\n var existingConstructor, constructor, basePrototype; // ProxiedPrototype allows the provided prototype to remain unmodified\n // so that it can be used as a mixin for multiple widgets (#8876)\n\n var proxiedPrototype = {};\n var namespace = name.split(\".\")[0];\n name = name.split(\".\")[1];\n var fullName = namespace + \"-\" + name;\n\n if (!prototype) {\n prototype = base;\n base = $.Widget;\n }\n\n if ($.isArray(prototype)) {\n prototype = $.extend.apply(null, [{}].concat(prototype));\n } // Create selector for plugin\n\n\n $.expr[\":\"][fullName.toLowerCase()] = function (elem) {\n return !!$.data(elem, fullName);\n };\n\n $[namespace] = $[namespace] || {};\n existingConstructor = $[namespace][name];\n\n constructor = $[namespace][name] = function (options, element) {\n // Allow instantiation without \"new\" keyword\n if (!this._createWidget) {\n return new constructor(options, element);\n } // Allow instantiation without initializing for simple inheritance\n // must use \"new\" keyword (the code above always passes args)\n\n\n if (arguments.length) {\n this._createWidget(options, element);\n }\n }; // Extend with the existing constructor to carry over any static properties\n\n\n $.extend(constructor, existingConstructor, {\n version: prototype.version,\n // Copy the object used to create the prototype in case we need to\n // redefine the widget later\n _proto: $.extend({}, prototype),\n // Track widgets that inherit from this widget in case this widget is\n // redefined after a widget inherits from it\n _childConstructors: []\n });\n basePrototype = new base(); // We need to make the options hash a property directly on the new instance\n // otherwise we'll modify the options hash on the prototype that we're\n // inheriting from\n\n basePrototype.options = $.widget.extend({}, basePrototype.options);\n $.each(prototype, function (prop, value) {\n if (!$.isFunction(value)) {\n proxiedPrototype[prop] = value;\n return;\n }\n\n proxiedPrototype[prop] = function () {\n function _super() {\n return base.prototype[prop].apply(this, arguments);\n }\n\n function _superApply(args) {\n return base.prototype[prop].apply(this, args);\n }\n\n return function () {\n var __super = this._super;\n var __superApply = this._superApply;\n var returnValue;\n this._super = _super;\n this._superApply = _superApply;\n returnValue = value.apply(this, arguments);\n this._super = __super;\n this._superApply = __superApply;\n return returnValue;\n };\n }();\n });\n constructor.prototype = $.widget.extend(basePrototype, {\n // TODO: remove support for widgetEventPrefix\n // always use the name + a colon as the prefix, e.g., draggable:start\n // don't prefix for widgets that aren't DOM-based\n widgetEventPrefix: existingConstructor ? basePrototype.widgetEventPrefix || name : name\n }, proxiedPrototype, {\n constructor: constructor,\n namespace: namespace,\n widgetName: name,\n widgetFullName: fullName\n }); // If this widget is being redefined then we need to find all widgets that\n // are inheriting from it and redefine all of them so that they inherit from\n // the new version of this widget. We're essentially trying to replace one\n // level in the prototype chain.\n\n if (existingConstructor) {\n $.each(existingConstructor._childConstructors, function (i, child) {\n var childPrototype = child.prototype; // Redefine the child widget using the same prototype that was\n // originally used, but inherit from the new version of the base\n\n $.widget(childPrototype.namespace + \".\" + childPrototype.widgetName, constructor, child._proto);\n }); // Remove the list of existing child constructors from the old constructor\n // so the old child constructors can be garbage collected\n\n delete existingConstructor._childConstructors;\n } else {\n base._childConstructors.push(constructor);\n }\n\n $.widget.bridge(name, constructor);\n return constructor;\n };\n\n $.widget.extend = function (target) {\n var input = widgetSlice.call(arguments, 1);\n var inputIndex = 0;\n var inputLength = input.length;\n var key;\n var value;\n\n for (; inputIndex < inputLength; inputIndex++) {\n for (key in input[inputIndex]) {\n value = input[inputIndex][key];\n\n if (input[inputIndex].hasOwnProperty(key) && value !== undefined) {\n // Clone objects\n if ($.isPlainObject(value)) {\n target[key] = $.isPlainObject(target[key]) ? $.widget.extend({}, target[key], value) : // Don't extend strings, arrays, etc. with objects\n $.widget.extend({}, value); // Copy everything else by reference\n } else {\n target[key] = value;\n }\n }\n }\n }\n\n return target;\n };\n\n $.widget.bridge = function (name, object) {\n var fullName = object.prototype.widgetFullName || name;\n\n $.fn[name] = function (options) {\n var isMethodCall = typeof options === \"string\";\n var args = widgetSlice.call(arguments, 1);\n var returnValue = this;\n\n if (isMethodCall) {\n // If this is an empty collection, we need to have the instance method\n // return undefined instead of the jQuery instance\n if (!this.length && options === \"instance\") {\n returnValue = undefined;\n } else {\n this.each(function () {\n var methodValue;\n var instance = $.data(this, fullName);\n\n if (options === \"instance\") {\n returnValue = instance;\n return false;\n }\n\n if (!instance) {\n return $.error(\"cannot call methods on \" + name + \" prior to initialization; \" + \"attempted to call method '\" + options + \"'\");\n }\n\n if (!$.isFunction(instance[options]) || options.charAt(0) === \"_\") {\n return $.error(\"no such method '\" + options + \"' for \" + name + \" widget instance\");\n }\n\n methodValue = instance[options].apply(instance, args);\n\n if (methodValue !== instance && methodValue !== undefined) {\n returnValue = methodValue && methodValue.jquery ? returnValue.pushStack(methodValue.get()) : methodValue;\n return false;\n }\n });\n }\n } else {\n // Allow multiple hashes to be passed on init\n if (args.length) {\n options = $.widget.extend.apply(null, [options].concat(args));\n }\n\n this.each(function () {\n var instance = $.data(this, fullName);\n\n if (instance) {\n instance.option(options || {});\n\n if (instance._init) {\n instance._init();\n }\n } else {\n $.data(this, fullName, new object(options, this));\n }\n });\n }\n\n return returnValue;\n };\n };\n\n $.Widget = function ()\n /* options, element */\n {};\n\n $.Widget._childConstructors = [];\n $.Widget.prototype = {\n widgetName: \"widget\",\n widgetEventPrefix: \"\",\n defaultElement: \"<div>\",\n options: {\n classes: {},\n disabled: false,\n // Callbacks\n create: null\n },\n _createWidget: function _createWidget(options, element) {\n element = $(element || this.defaultElement || this)[0];\n this.element = $(element);\n this.uuid = widgetUuid++;\n this.eventNamespace = \".\" + this.widgetName + this.uuid;\n this.bindings = $();\n this.hoverable = $();\n this.focusable = $();\n this.classesElementLookup = {};\n\n if (element !== this) {\n $.data(element, this.widgetFullName, this);\n\n this._on(true, this.element, {\n remove: function remove(event) {\n if (event.target === element) {\n this.destroy();\n }\n }\n });\n\n this.document = $(element.style ? // Element within the document\n element.ownerDocument : // Element is window or document\n element.document || element);\n this.window = $(this.document[0].defaultView || this.document[0].parentWindow);\n }\n\n this.options = $.widget.extend({}, this.options, this._getCreateOptions(), options);\n\n this._create();\n\n if (this.options.disabled) {\n this._setOptionDisabled(this.options.disabled);\n }\n\n this._trigger(\"create\", null, this._getCreateEventData());\n\n this._init();\n },\n _getCreateOptions: function _getCreateOptions() {\n return {};\n },\n _getCreateEventData: $.noop,\n _create: $.noop,\n _init: $.noop,\n destroy: function destroy() {\n var that = this;\n\n this._destroy();\n\n $.each(this.classesElementLookup, function (key, value) {\n that._removeClass(value, key);\n }); // We can probably remove the unbind calls in 2.0\n // all event bindings should go through this._on()\n\n this.element.off(this.eventNamespace).removeData(this.widgetFullName);\n this.widget().off(this.eventNamespace).removeAttr(\"aria-disabled\"); // Clean up events and states\n\n this.bindings.off(this.eventNamespace);\n },\n _destroy: $.noop,\n widget: function widget() {\n return this.element;\n },\n option: function option(key, value) {\n var options = key;\n var parts;\n var curOption;\n var i;\n\n if (arguments.length === 0) {\n // Don't return a reference to the internal hash\n return $.widget.extend({}, this.options);\n }\n\n if (typeof key === \"string\") {\n // Handle nested keys, e.g., \"foo.bar\" => { foo: { bar: ___ } }\n options = {};\n parts = key.split(\".\");\n key = parts.shift();\n\n if (parts.length) {\n curOption = options[key] = $.widget.extend({}, this.options[key]);\n\n for (i = 0; i < parts.length - 1; i++) {\n curOption[parts[i]] = curOption[parts[i]] || {};\n curOption = curOption[parts[i]];\n }\n\n key = parts.pop();\n\n if (arguments.length === 1) {\n return curOption[key] === undefined ? null : curOption[key];\n }\n\n curOption[key] = value;\n } else {\n if (arguments.length === 1) {\n return this.options[key] === undefined ? null : this.options[key];\n }\n\n options[key] = value;\n }\n }\n\n this._setOptions(options);\n\n return this;\n },\n _setOptions: function _setOptions(options) {\n var key;\n\n for (key in options) {\n this._setOption(key, options[key]);\n }\n\n return this;\n },\n _setOption: function _setOption(key, value) {\n if (key === \"classes\") {\n this._setOptionClasses(value);\n }\n\n this.options[key] = value;\n\n if (key === \"disabled\") {\n this._setOptionDisabled(value);\n }\n\n return this;\n },\n _setOptionClasses: function _setOptionClasses(value) {\n var classKey, elements, currentElements;\n\n for (classKey in value) {\n currentElements = this.classesElementLookup[classKey];\n\n if (value[classKey] === this.options.classes[classKey] || !currentElements || !currentElements.length) {\n continue;\n } // We are doing this to create a new jQuery object because the _removeClass() call\n // on the next line is going to destroy the reference to the current elements being\n // tracked. We need to save a copy of this collection so that we can add the new classes\n // below.\n\n\n elements = $(currentElements.get());\n\n this._removeClass(currentElements, classKey); // We don't use _addClass() here, because that uses this.options.classes\n // for generating the string of classes. We want to use the value passed in from\n // _setOption(), this is the new value of the classes option which was passed to\n // _setOption(). We pass this value directly to _classes().\n\n\n elements.addClass(this._classes({\n element: elements,\n keys: classKey,\n classes: value,\n add: true\n }));\n }\n },\n _setOptionDisabled: function _setOptionDisabled(value) {\n this._toggleClass(this.widget(), this.widgetFullName + \"-disabled\", null, !!value); // If the widget is becoming disabled, then nothing is interactive\n\n\n if (value) {\n this._removeClass(this.hoverable, null, \"ui-state-hover\");\n\n this._removeClass(this.focusable, null, \"ui-state-focus\");\n }\n },\n enable: function enable() {\n return this._setOptions({\n disabled: false\n });\n },\n disable: function disable() {\n return this._setOptions({\n disabled: true\n });\n },\n _classes: function _classes(options) {\n var full = [];\n var that = this;\n options = $.extend({\n element: this.element,\n classes: this.options.classes || {}\n }, options);\n\n function processClassString(classes, checkOption) {\n var current, i;\n\n for (i = 0; i < classes.length; i++) {\n current = that.classesElementLookup[classes[i]] || $();\n\n if (options.add) {\n current = $($.unique(current.get().concat(options.element.get())));\n } else {\n current = $(current.not(options.element).get());\n }\n\n that.classesElementLookup[classes[i]] = current;\n full.push(classes[i]);\n\n if (checkOption && options.classes[classes[i]]) {\n full.push(options.classes[classes[i]]);\n }\n }\n }\n\n this._on(options.element, {\n \"remove\": \"_untrackClassesElement\"\n });\n\n if (options.keys) {\n processClassString(options.keys.match(/\\S+/g) || [], true);\n }\n\n if (options.extra) {\n processClassString(options.extra.match(/\\S+/g) || []);\n }\n\n return full.join(\" \");\n },\n _untrackClassesElement: function _untrackClassesElement(event) {\n var that = this;\n $.each(that.classesElementLookup, function (key, value) {\n if ($.inArray(event.target, value) !== -1) {\n that.classesElementLookup[key] = $(value.not(event.target).get());\n }\n });\n },\n _removeClass: function _removeClass(element, keys, extra) {\n return this._toggleClass(element, keys, extra, false);\n },\n _addClass: function _addClass(element, keys, extra) {\n return this._toggleClass(element, keys, extra, true);\n },\n _toggleClass: function _toggleClass(element, keys, extra, add) {\n add = typeof add === \"boolean\" ? add : extra;\n var shift = typeof element === \"string\" || element === null,\n options = {\n extra: shift ? keys : extra,\n keys: shift ? element : keys,\n element: shift ? this.element : element,\n add: add\n };\n options.element.toggleClass(this._classes(options), add);\n return this;\n },\n _on: function _on(suppressDisabledCheck, element, handlers) {\n var delegateElement;\n var instance = this; // No suppressDisabledCheck flag, shuffle arguments\n\n if (typeof suppressDisabledCheck !== \"boolean\") {\n handlers = element;\n element = suppressDisabledCheck;\n suppressDisabledCheck = false;\n } // No element argument, shuffle and use this.element\n\n\n if (!handlers) {\n handlers = element;\n element = this.element;\n delegateElement = this.widget();\n } else {\n element = delegateElement = $(element);\n this.bindings = this.bindings.add(element);\n }\n\n $.each(handlers, function (event, handler) {\n function handlerProxy() {\n // Allow widgets to customize the disabled handling\n // - disabled as an array instead of boolean\n // - disabled class as method for disabling individual parts\n if (!suppressDisabledCheck && (instance.options.disabled === true || $(this).hasClass(\"ui-state-disabled\"))) {\n return;\n }\n\n return (typeof handler === \"string\" ? instance[handler] : handler).apply(instance, arguments);\n } // Copy the guid so direct unbinding works\n\n\n if (typeof handler !== \"string\") {\n handlerProxy.guid = handler.guid = handler.guid || handlerProxy.guid || $.guid++;\n }\n\n var match = event.match(/^([\\w:-]*)\\s*(.*)$/);\n var eventName = match[1] + instance.eventNamespace;\n var selector = match[2];\n\n if (selector) {\n delegateElement.on(eventName, selector, handlerProxy);\n } else {\n element.on(eventName, handlerProxy);\n }\n });\n },\n _off: function _off(element, eventName) {\n eventName = (eventName || \"\").split(\" \").join(this.eventNamespace + \" \") + this.eventNamespace;\n element.off(eventName).off(eventName); // Clear the stack to avoid memory leaks (#10056)\n\n this.bindings = $(this.bindings.not(element).get());\n this.focusable = $(this.focusable.not(element).get());\n this.hoverable = $(this.hoverable.not(element).get());\n },\n _delay: function _delay(handler, delay) {\n function handlerProxy() {\n return (typeof handler === \"string\" ? instance[handler] : handler).apply(instance, arguments);\n }\n\n var instance = this;\n return setTimeout(handlerProxy, delay || 0);\n },\n _hoverable: function _hoverable(element) {\n this.hoverable = this.hoverable.add(element);\n\n this._on(element, {\n mouseenter: function mouseenter(event) {\n this._addClass($(event.currentTarget), null, \"ui-state-hover\");\n },\n mouseleave: function mouseleave(event) {\n this._removeClass($(event.currentTarget), null, \"ui-state-hover\");\n }\n });\n },\n _focusable: function _focusable(element) {\n this.focusable = this.focusable.add(element);\n\n this._on(element, {\n focusin: function focusin(event) {\n this._addClass($(event.currentTarget), null, \"ui-state-focus\");\n },\n focusout: function focusout(event) {\n this._removeClass($(event.currentTarget), null, \"ui-state-focus\");\n }\n });\n },\n _trigger: function _trigger(type, event, data) {\n var prop, orig;\n var callback = this.options[type];\n data = data || {};\n event = $.Event(event);\n event.type = (type === this.widgetEventPrefix ? type : this.widgetEventPrefix + type).toLowerCase(); // The original event may come from any element\n // so we need to reset the target on the new event\n\n event.target = this.element[0]; // Copy original event properties over to the new event\n\n orig = event.originalEvent;\n\n if (orig) {\n for (prop in orig) {\n if (!(prop in event)) {\n event[prop] = orig[prop];\n }\n }\n }\n\n this.element.trigger(event, data);\n return !($.isFunction(callback) && callback.apply(this.element[0], [event].concat(data)) === false || event.isDefaultPrevented());\n }\n };\n $.each({\n show: \"fadeIn\",\n hide: \"fadeOut\"\n }, function (method, defaultEffect) {\n $.Widget.prototype[\"_\" + method] = function (element, options, callback) {\n if (typeof options === \"string\") {\n options = {\n effect: options\n };\n }\n\n var hasOptions;\n var effectName = !options ? method : options === true || typeof options === \"number\" ? defaultEffect : options.effect || defaultEffect;\n options = options || {};\n\n if (typeof options === \"number\") {\n options = {\n duration: options\n };\n }\n\n hasOptions = !$.isEmptyObject(options);\n options.complete = callback;\n\n if (options.delay) {\n element.delay(options.delay);\n }\n\n if (hasOptions && $.effects && $.effects.effect[effectName]) {\n element[method](options);\n } else if (effectName !== method && element[effectName]) {\n element[effectName](options.duration, options.easing, callback);\n } else {\n element.queue(function (next) {\n $(this)[method]();\n\n if (callback) {\n callback.call(element[0]);\n }\n\n next();\n });\n }\n };\n });\n var widget = $.widget;\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*!\r\n * Bootstrap-select v1.13.18 (https://developer.snapappointments.com/bootstrap-select)\r\n *\r\n * Copyright 2012-2020 SnapAppointments, LLC\r\n * Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)\r\n */\n(function (root, factory) {\n if (root === undefined && window !== undefined) root = window;\n\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module unless amdModuleId is set\n define([\"jquery\"], function (a0) {\n return factory(a0);\n });\n } else if ((typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) === 'object' && module.exports) {\n // Node. Does not work with strict CommonJS, but\n // only CommonJS-like environments that support module.exports,\n // like Node.\n module.exports = factory(require(\"jquery\"));\n } else {\n factory(root[\"jQuery\"]);\n }\n})(this, function (jQuery) {\n (function ($) {\n 'use strict';\n\n var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'];\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', 'tabindex', 'style', 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 /**\r\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\r\n *\r\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\r\n */\n\n var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi;\n /**\r\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\r\n *\r\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\r\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 ($.inArray(attrName, allowedAttributeList) !== -1) {\n if ($.inArray(attrName, uriAttrs) !== -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 (index, value) {\n return value 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(unsafeElements, whiteList, sanitizeFn) {\n if (sanitizeFn && typeof sanitizeFn === 'function') {\n return sanitizeFn(unsafeElements);\n }\n\n var whitelistKeys = Object.keys(whiteList);\n\n for (var i = 0, len = unsafeElements.length; i < len; i++) {\n var elements = unsafeElements[i].querySelectorAll('*');\n\n for (var j = 0, len2 = elements.length; j < len2; j++) {\n var el = elements[j];\n var elName = el.nodeName.toLowerCase();\n\n if (whitelistKeys.indexOf(elName) === -1) {\n el.parentNode.removeChild(el);\n continue;\n }\n\n var attributeList = [].slice.call(el.attributes);\n var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);\n\n for (var k = 0, len3 = attributeList.length; k < len3; k++) {\n var attr = attributeList[k];\n\n if (!allowedAttribute(attr, whitelistedAttributes)) {\n el.removeAttribute(attr.nodeName);\n }\n }\n }\n }\n } // Polyfill for browsers with no classList support\n // Remove in v2\n\n\n if (!('classList' in document.createElement('_'))) {\n (function (view) {\n if (!('Element' in view)) return;\n\n var classListProp = 'classList',\n protoProp = 'prototype',\n elemCtrProto = view.Element[protoProp],\n objCtr = Object,\n classListGetter = function classListGetter() {\n var $elem = $(this);\n return {\n add: function add(classes) {\n classes = Array.prototype.slice.call(arguments).join(' ');\n return $elem.addClass(classes);\n },\n remove: function remove(classes) {\n classes = Array.prototype.slice.call(arguments).join(' ');\n return $elem.removeClass(classes);\n },\n toggle: function toggle(classes, force) {\n return $elem.toggleClass(classes, force);\n },\n contains: function contains(classes) {\n return $elem.hasClass(classes);\n }\n };\n };\n\n if (objCtr.defineProperty) {\n var classListPropDesc = {\n get: classListGetter,\n enumerable: true,\n configurable: true\n };\n\n try {\n objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);\n } catch (ex) {\n // IE 8 doesn't support enumerable:true\n // adding undefined to fight this issue https://github.com/eligrey/classList.js/issues/36\n // modernie IE8-MSW7 machine has IE8 8.0.6001.18702 and is affected\n if (ex.number === undefined || ex.number === -0x7FF5EC54) {\n classListPropDesc.enumerable = false;\n objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);\n }\n }\n } else if (objCtr[protoProp].__defineGetter__) {\n elemCtrProto.__defineGetter__(classListProp, classListGetter);\n }\n })(window);\n }\n\n var testElement = document.createElement('_');\n testElement.classList.add('c1', 'c2');\n\n if (!testElement.classList.contains('c2')) {\n var _add = DOMTokenList.prototype.add,\n _remove = DOMTokenList.prototype.remove;\n\n DOMTokenList.prototype.add = function () {\n Array.prototype.forEach.call(arguments, _add.bind(this));\n };\n\n DOMTokenList.prototype.remove = function () {\n Array.prototype.forEach.call(arguments, _remove.bind(this));\n };\n }\n\n testElement.classList.toggle('c3', false); // Polyfill for IE 10 and Firefox <24, where classList.toggle does not\n // support the second argument.\n\n if (testElement.classList.contains('c3')) {\n var _toggle = DOMTokenList.prototype.toggle;\n\n DOMTokenList.prototype.toggle = function (token, force) {\n if (1 in arguments && !this.contains(token) === !force) {\n return force;\n } else {\n return _toggle.call(this, token);\n }\n };\n }\n\n testElement = null; // shallow array comparison\n\n function isEqual(array1, array2) {\n return array1.length === array2.length && array1.every(function (element, index) {\n return element === array2[index];\n });\n }\n\n ; // <editor-fold desc=\"Shims\">\n\n if (!String.prototype.startsWith) {\n (function () {\n 'use strict'; // needed to support `apply`/`call` with `undefined`/`null`\n\n var defineProperty = function () {\n // IE 8 only supports `Object.defineProperty` on DOM elements\n try {\n var object = {};\n var $defineProperty = Object.defineProperty;\n var result = $defineProperty(object, object, object) && $defineProperty;\n } catch (error) {}\n\n return result;\n }();\n\n var toString = {}.toString;\n\n var startsWith = function startsWith(search) {\n if (this == null) {\n throw new TypeError();\n }\n\n var string = String(this);\n\n if (search && toString.call(search) == '[object RegExp]') {\n throw new TypeError();\n }\n\n var stringLength = string.length;\n var searchString = String(search);\n var searchLength = searchString.length;\n var position = arguments.length > 1 ? arguments[1] : undefined; // `ToInteger`\n\n var pos = position ? Number(position) : 0;\n\n if (pos != pos) {\n // better `isNaN`\n pos = 0;\n }\n\n var start = Math.min(Math.max(pos, 0), stringLength); // Avoid the `indexOf` call if no match is possible\n\n if (searchLength + start > stringLength) {\n return false;\n }\n\n var index = -1;\n\n while (++index < searchLength) {\n if (string.charCodeAt(start + index) != searchString.charCodeAt(index)) {\n return false;\n }\n }\n\n return true;\n };\n\n if (defineProperty) {\n defineProperty(String.prototype, 'startsWith', {\n 'value': startsWith,\n 'configurable': true,\n 'writable': true\n });\n } else {\n String.prototype.startsWith = startsWith;\n }\n })();\n }\n\n if (!Object.keys) {\n Object.keys = function (o, // object\n k, // key\n r // result array\n ) {\n // initialize object and result\n r = []; // iterate over object keys\n\n for (k in o) {\n // fill result array with non-prototypical keys\n r.hasOwnProperty.call(o, k) && r.push(k);\n } // return result\n\n\n return r;\n };\n }\n\n if (HTMLSelectElement && !HTMLSelectElement.prototype.hasOwnProperty('selectedOptions')) {\n Object.defineProperty(HTMLSelectElement.prototype, 'selectedOptions', {\n get: function get() {\n return this.querySelectorAll(':checked');\n }\n });\n }\n\n function getSelectedOptions(select, ignoreDisabled) {\n var selectedOptions = select.selectedOptions,\n options = [],\n opt;\n\n if (ignoreDisabled) {\n for (var i = 0, len = selectedOptions.length; i < len; i++) {\n opt = selectedOptions[i];\n\n if (!(opt.disabled || opt.parentNode.tagName === 'OPTGROUP' && opt.parentNode.disabled)) {\n options.push(opt);\n }\n }\n\n return options;\n }\n\n return selectedOptions;\n } // much faster than $.val()\n\n\n function getSelectValues(select, selectedOptions) {\n var value = [],\n options = selectedOptions || select.selectedOptions,\n opt;\n\n for (var i = 0, len = options.length; i < len; i++) {\n opt = options[i];\n\n if (!(opt.disabled || opt.parentNode.tagName === 'OPTGROUP' && opt.parentNode.disabled)) {\n value.push(opt.value);\n }\n }\n\n if (!select.multiple) {\n return !value.length ? null : value[0];\n }\n\n return value;\n } // set data-selected on select element if the value has been programmatically selected\n // prior to initialization of bootstrap-select\n // * consider removing or replacing an alternative method *\n\n\n var valHooks = {\n useDefault: false,\n _set: $.valHooks.select.set\n };\n\n $.valHooks.select.set = function (elem, value) {\n if (value && !valHooks.useDefault) $(elem).data('selected', true);\n return valHooks._set.apply(this, arguments);\n };\n\n var changedArguments = null;\n\n var EventIsSupported = function () {\n try {\n new Event('change');\n return true;\n } catch (e) {\n return false;\n }\n }();\n\n $.fn.triggerNative = function (eventName) {\n var el = this[0],\n event;\n\n if (el.dispatchEvent) {\n // for modern browsers & IE9+\n if (EventIsSupported) {\n // For modern browsers\n event = new Event(eventName, {\n bubbles: true\n });\n } else {\n // For IE since it doesn't support Event constructor\n event = document.createEvent('Event');\n event.initEvent(eventName, true, false);\n }\n\n el.dispatchEvent(event);\n } else if (el.fireEvent) {\n // for IE8\n event = document.createEventObject();\n event.eventType = eventName;\n el.fireEvent('on' + eventName, event);\n } else {\n // fall back to jQuery.trigger\n this.trigger(eventName);\n }\n }; // </editor-fold>\n\n\n function stringSearch(li, searchString, method, normalize) {\n var stringTypes = ['display', 'subtext', 'tokens'],\n searchSuccess = false;\n\n for (var i = 0; i < stringTypes.length; i++) {\n var stringType = stringTypes[i],\n string = li[stringType];\n\n if (string) {\n string = string.toString(); // Strip HTML tags. This isn't perfect, but it's much faster than any other method\n\n if (stringType === 'display') {\n string = string.replace(/<[^>]+>/g, '');\n }\n\n if (normalize) string = normalizeToBase(string);\n string = string.toUpperCase();\n\n if (method === 'contains') {\n searchSuccess = string.indexOf(searchString) >= 0;\n } else {\n searchSuccess = string.startsWith(searchString);\n }\n\n if (searchSuccess) break;\n }\n }\n\n return searchSuccess;\n }\n\n function toInteger(value) {\n return parseInt(value, 10) || 0;\n } // Borrowed from Lodash (_.deburr)\n\n /** Used to map Latin Unicode letters to basic Latin letters. */\n\n\n var deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A',\n '\\xc1': 'A',\n '\\xc2': 'A',\n '\\xc3': 'A',\n '\\xc4': 'A',\n '\\xc5': 'A',\n '\\xe0': 'a',\n '\\xe1': 'a',\n '\\xe2': 'a',\n '\\xe3': 'a',\n '\\xe4': 'a',\n '\\xe5': 'a',\n '\\xc7': 'C',\n '\\xe7': 'c',\n '\\xd0': 'D',\n '\\xf0': 'd',\n '\\xc8': 'E',\n '\\xc9': 'E',\n '\\xca': 'E',\n '\\xcb': 'E',\n '\\xe8': 'e',\n '\\xe9': 'e',\n '\\xea': 'e',\n '\\xeb': 'e',\n '\\xcc': 'I',\n '\\xcd': 'I',\n '\\xce': 'I',\n '\\xcf': 'I',\n '\\xec': 'i',\n '\\xed': 'i',\n '\\xee': 'i',\n '\\xef': 'i',\n '\\xd1': 'N',\n '\\xf1': 'n',\n '\\xd2': 'O',\n '\\xd3': 'O',\n '\\xd4': 'O',\n '\\xd5': 'O',\n '\\xd6': 'O',\n '\\xd8': 'O',\n '\\xf2': 'o',\n '\\xf3': 'o',\n '\\xf4': 'o',\n '\\xf5': 'o',\n '\\xf6': 'o',\n '\\xf8': 'o',\n '\\xd9': 'U',\n '\\xda': 'U',\n '\\xdb': 'U',\n '\\xdc': 'U',\n '\\xf9': 'u',\n '\\xfa': 'u',\n '\\xfb': 'u',\n '\\xfc': 'u',\n '\\xdd': 'Y',\n '\\xfd': 'y',\n '\\xff': 'y',\n '\\xc6': 'Ae',\n '\\xe6': 'ae',\n '\\xde': 'Th',\n '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n \"\\u0100\": 'A',\n \"\\u0102\": 'A',\n \"\\u0104\": 'A',\n \"\\u0101\": 'a',\n \"\\u0103\": 'a',\n \"\\u0105\": 'a',\n \"\\u0106\": 'C',\n \"\\u0108\": 'C',\n \"\\u010A\": 'C',\n \"\\u010C\": 'C',\n \"\\u0107\": 'c',\n \"\\u0109\": 'c',\n \"\\u010B\": 'c',\n \"\\u010D\": 'c',\n \"\\u010E\": 'D',\n \"\\u0110\": 'D',\n \"\\u010F\": 'd',\n \"\\u0111\": 'd',\n \"\\u0112\": 'E',\n \"\\u0114\": 'E',\n \"\\u0116\": 'E',\n \"\\u0118\": 'E',\n \"\\u011A\": 'E',\n \"\\u0113\": 'e',\n \"\\u0115\": 'e',\n \"\\u0117\": 'e',\n \"\\u0119\": 'e',\n \"\\u011B\": 'e',\n \"\\u011C\": 'G',\n \"\\u011E\": 'G',\n \"\\u0120\": 'G',\n \"\\u0122\": 'G',\n \"\\u011D\": 'g',\n \"\\u011F\": 'g',\n \"\\u0121\": 'g',\n \"\\u0123\": 'g',\n \"\\u0124\": 'H',\n \"\\u0126\": 'H',\n \"\\u0125\": 'h',\n \"\\u0127\": 'h',\n \"\\u0128\": 'I',\n \"\\u012A\": 'I',\n \"\\u012C\": 'I',\n \"\\u012E\": 'I',\n \"\\u0130\": 'I',\n \"\\u0129\": 'i',\n \"\\u012B\": 'i',\n \"\\u012D\": 'i',\n \"\\u012F\": 'i',\n \"\\u0131\": 'i',\n \"\\u0134\": 'J',\n \"\\u0135\": 'j',\n \"\\u0136\": 'K',\n \"\\u0137\": 'k',\n \"\\u0138\": 'k',\n \"\\u0139\": 'L',\n \"\\u013B\": 'L',\n \"\\u013D\": 'L',\n \"\\u013F\": 'L',\n \"\\u0141\": 'L',\n \"\\u013A\": 'l',\n \"\\u013C\": 'l',\n \"\\u013E\": 'l',\n \"\\u0140\": 'l',\n \"\\u0142\": 'l',\n \"\\u0143\": 'N',\n \"\\u0145\": 'N',\n \"\\u0147\": 'N',\n \"\\u014A\": 'N',\n \"\\u0144\": 'n',\n \"\\u0146\": 'n',\n \"\\u0148\": 'n',\n \"\\u014B\": 'n',\n \"\\u014C\": 'O',\n \"\\u014E\": 'O',\n \"\\u0150\": 'O',\n \"\\u014D\": 'o',\n \"\\u014F\": 'o',\n \"\\u0151\": 'o',\n \"\\u0154\": 'R',\n \"\\u0156\": 'R',\n \"\\u0158\": 'R',\n \"\\u0155\": 'r',\n \"\\u0157\": 'r',\n \"\\u0159\": 'r',\n \"\\u015A\": 'S',\n \"\\u015C\": 'S',\n \"\\u015E\": 'S',\n \"\\u0160\": 'S',\n \"\\u015B\": 's',\n \"\\u015D\": 's',\n \"\\u015F\": 's',\n \"\\u0161\": 's',\n \"\\u0162\": 'T',\n \"\\u0164\": 'T',\n \"\\u0166\": 'T',\n \"\\u0163\": 't',\n \"\\u0165\": 't',\n \"\\u0167\": 't',\n \"\\u0168\": 'U',\n \"\\u016A\": 'U',\n \"\\u016C\": 'U',\n \"\\u016E\": 'U',\n \"\\u0170\": 'U',\n \"\\u0172\": 'U',\n \"\\u0169\": 'u',\n \"\\u016B\": 'u',\n \"\\u016D\": 'u',\n \"\\u016F\": 'u',\n \"\\u0171\": 'u',\n \"\\u0173\": 'u',\n \"\\u0174\": 'W',\n \"\\u0175\": 'w',\n \"\\u0176\": 'Y',\n \"\\u0177\": 'y',\n \"\\u0178\": 'Y',\n \"\\u0179\": 'Z',\n \"\\u017B\": 'Z',\n \"\\u017D\": 'Z',\n \"\\u017A\": 'z',\n \"\\u017C\": 'z',\n \"\\u017E\": 'z',\n \"\\u0132\": 'IJ',\n \"\\u0133\": 'ij',\n \"\\u0152\": 'Oe',\n \"\\u0153\": 'oe',\n \"\\u0149\": \"'n\",\n \"\\u017F\": 's'\n };\n /** Used to match Latin Unicode letters (excluding mathematical operators). */\n\n var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n /** Used to compose unicode character classes. */\n\n var rsComboMarksRange = \"\\\\u0300-\\\\u036f\",\n reComboHalfMarksRange = \"\\\\ufe20-\\\\ufe2f\",\n rsComboSymbolsRange = \"\\\\u20d0-\\\\u20ff\",\n rsComboMarksExtendedRange = \"\\\\u1ab0-\\\\u1aff\",\n rsComboMarksSupplementRange = \"\\\\u1dc0-\\\\u1dff\",\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange + rsComboMarksExtendedRange + rsComboMarksSupplementRange;\n /** Used to compose unicode capture groups. */\n\n var rsCombo = '[' + rsComboRange + ']';\n /**\r\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\r\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\r\n */\n\n var reComboMark = RegExp(rsCombo, 'g');\n\n function deburrLetter(key) {\n return deburredLetters[key];\n }\n\n ;\n\n function normalizeToBase(string) {\n string = string.toString();\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n } // List of HTML entities for escaping.\n\n\n var escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`'\n }; // Functions for escaping and unescaping strings to/from HTML interpolation.\n\n var createEscaper = function createEscaper(map) {\n var escaper = function escaper(match) {\n return map[match];\n }; // Regexes for identifying a key that needs to be escaped.\n\n\n var source = '(?:' + Object.keys(map).join('|') + ')';\n var testRegexp = RegExp(source);\n var replaceRegexp = RegExp(source, 'g');\n return function (string) {\n string = string == null ? '' : '' + string;\n return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n };\n };\n\n var htmlEscape = createEscaper(escapeMap);\n /**\r\n * ------------------------------------------------------------------------\r\n * Constants\r\n * ------------------------------------------------------------------------\r\n */\n\n var keyCodeMap = {\n 32: ' ',\n 48: '0',\n 49: '1',\n 50: '2',\n 51: '3',\n 52: '4',\n 53: '5',\n 54: '6',\n 55: '7',\n 56: '8',\n 57: '9',\n 59: ';',\n 65: 'A',\n 66: 'B',\n 67: 'C',\n 68: 'D',\n 69: 'E',\n 70: 'F',\n 71: 'G',\n 72: 'H',\n 73: 'I',\n 74: 'J',\n 75: 'K',\n 76: 'L',\n 77: 'M',\n 78: 'N',\n 79: 'O',\n 80: 'P',\n 81: 'Q',\n 82: 'R',\n 83: 'S',\n 84: 'T',\n 85: 'U',\n 86: 'V',\n 87: 'W',\n 88: 'X',\n 89: 'Y',\n 90: 'Z',\n 96: '0',\n 97: '1',\n 98: '2',\n 99: '3',\n 100: '4',\n 101: '5',\n 102: '6',\n 103: '7',\n 104: '8',\n 105: '9'\n };\n var keyCodes = {\n ESCAPE: 27,\n // KeyboardEvent.which value for Escape (Esc) key\n ENTER: 13,\n // KeyboardEvent.which value for Enter key\n SPACE: 32,\n // KeyboardEvent.which value for space key\n TAB: 9,\n // KeyboardEvent.which value for tab key\n ARROW_UP: 38,\n // KeyboardEvent.which value for up arrow key\n ARROW_DOWN: 40 // KeyboardEvent.which value for down arrow key\n\n };\n var version = {\n success: false,\n major: '3'\n };\n\n try {\n version.full = ($.fn.dropdown.Constructor.VERSION || '').split(' ')[0].split('.');\n version.major = version.full[0];\n version.success = true;\n } catch (err) {// do nothing\n }\n\n var selectId = 0;\n var EVENT_KEY = '.bs.select';\n var classNames = {\n DISABLED: 'disabled',\n DIVIDER: 'divider',\n SHOW: 'open',\n DROPUP: 'dropup',\n MENU: 'dropdown-menu',\n MENURIGHT: 'dropdown-menu-right',\n MENULEFT: 'dropdown-menu-left',\n // to-do: replace with more advanced template/customization options\n BUTTONCLASS: 'btn-default',\n POPOVERHEADER: 'popover-title',\n ICONBASE: 'glyphicon',\n TICKICON: 'glyphicon-ok'\n };\n var Selector = {\n MENU: '.' + classNames.MENU\n };\n var elementTemplates = {\n div: document.createElement('div'),\n span: document.createElement('span'),\n i: document.createElement('i'),\n subtext: document.createElement('small'),\n a: document.createElement('a'),\n li: document.createElement('li'),\n whitespace: document.createTextNode(\"\\xA0\"),\n fragment: document.createDocumentFragment()\n };\n elementTemplates.noResults = elementTemplates.li.cloneNode(false);\n elementTemplates.noResults.className = 'no-results';\n elementTemplates.a.setAttribute('role', 'option');\n elementTemplates.a.className = 'dropdown-item';\n elementTemplates.subtext.className = 'text-muted';\n elementTemplates.text = elementTemplates.span.cloneNode(false);\n elementTemplates.text.className = 'text';\n elementTemplates.checkMark = elementTemplates.span.cloneNode(false);\n var REGEXP_ARROW = new RegExp(keyCodes.ARROW_UP + '|' + keyCodes.ARROW_DOWN);\n var REGEXP_TAB_OR_ESCAPE = new RegExp('^' + keyCodes.TAB + '$|' + keyCodes.ESCAPE);\n var generateOption = {\n li: function li(content, classes, optgroup) {\n var li = elementTemplates.li.cloneNode(false);\n\n if (content) {\n if (content.nodeType === 1 || content.nodeType === 11) {\n li.appendChild(content);\n } else {\n li.innerHTML = content;\n }\n }\n\n if (typeof classes !== 'undefined' && classes !== '') li.className = classes;\n if (typeof optgroup !== 'undefined' && optgroup !== null) li.classList.add('optgroup-' + optgroup);\n return li;\n },\n a: function a(text, classes, inline) {\n var a = elementTemplates.a.cloneNode(true);\n\n if (text) {\n if (text.nodeType === 11) {\n a.appendChild(text);\n } else {\n a.insertAdjacentHTML('beforeend', text);\n }\n }\n\n if (typeof classes !== 'undefined' && classes !== '') a.classList.add.apply(a.classList, classes.split(/\\s+/));\n if (inline) a.setAttribute('style', inline);\n return a;\n },\n text: function text(options, useFragment) {\n var textElement = elementTemplates.text.cloneNode(false),\n subtextElement,\n iconElement;\n\n if (options.content) {\n textElement.innerHTML = options.content;\n } else {\n textElement.textContent = options.text;\n\n if (options.icon) {\n var whitespace = elementTemplates.whitespace.cloneNode(false); // need to use <i> for icons in the button to prevent a breaking change\n // note: switch to span in next major release\n\n iconElement = (useFragment === true ? elementTemplates.i : elementTemplates.span).cloneNode(false);\n iconElement.className = this.options.iconBase + ' ' + options.icon;\n elementTemplates.fragment.appendChild(iconElement);\n elementTemplates.fragment.appendChild(whitespace);\n }\n\n if (options.subtext) {\n subtextElement = elementTemplates.subtext.cloneNode(false);\n subtextElement.textContent = options.subtext;\n textElement.appendChild(subtextElement);\n }\n }\n\n if (useFragment === true) {\n while (textElement.childNodes.length > 0) {\n elementTemplates.fragment.appendChild(textElement.childNodes[0]);\n }\n } else {\n elementTemplates.fragment.appendChild(textElement);\n }\n\n return elementTemplates.fragment;\n },\n label: function label(options) {\n var textElement = elementTemplates.text.cloneNode(false),\n subtextElement,\n iconElement;\n textElement.innerHTML = options.display;\n\n if (options.icon) {\n var whitespace = elementTemplates.whitespace.cloneNode(false);\n iconElement = elementTemplates.span.cloneNode(false);\n iconElement.className = this.options.iconBase + ' ' + options.icon;\n elementTemplates.fragment.appendChild(iconElement);\n elementTemplates.fragment.appendChild(whitespace);\n }\n\n if (options.subtext) {\n subtextElement = elementTemplates.subtext.cloneNode(false);\n subtextElement.textContent = options.subtext;\n textElement.appendChild(subtextElement);\n }\n\n elementTemplates.fragment.appendChild(textElement);\n return elementTemplates.fragment;\n }\n };\n\n function showNoResults(searchMatch, searchValue) {\n if (!searchMatch.length) {\n elementTemplates.noResults.innerHTML = this.options.noneResultsText.replace('{0}', '\"' + htmlEscape(searchValue) + '\"');\n this.$menuInner[0].firstChild.appendChild(elementTemplates.noResults);\n }\n }\n\n var Selectpicker = function Selectpicker(element, options) {\n var that = this; // bootstrap-select has been initialized - revert valHooks.select.set back to its original function\n\n if (!valHooks.useDefault) {\n $.valHooks.select.set = valHooks._set;\n valHooks.useDefault = true;\n }\n\n this.$element = $(element);\n this.$newElement = null;\n this.$button = null;\n this.$menu = null;\n this.options = options;\n this.selectpicker = {\n main: {},\n search: {},\n current: {},\n // current changes if a search is in progress\n view: {},\n isSearching: false,\n keydown: {\n keyHistory: '',\n resetKeyHistory: {\n start: function start() {\n return setTimeout(function () {\n that.selectpicker.keydown.keyHistory = '';\n }, 800);\n }\n }\n }\n };\n this.sizeInfo = {}; // If we have no title yet, try to pull it from the html title attribute (jQuery doesnt' pick it up as it's not a\n // data-attribute)\n\n if (this.options.title === null) {\n this.options.title = this.$element.attr('title');\n } // Format window padding\n\n\n var winPad = this.options.windowPadding;\n\n if (typeof winPad === 'number') {\n this.options.windowPadding = [winPad, winPad, winPad, winPad];\n } // Expose public methods\n\n\n this.val = Selectpicker.prototype.val;\n this.render = Selectpicker.prototype.render;\n this.refresh = Selectpicker.prototype.refresh;\n this.setStyle = Selectpicker.prototype.setStyle;\n this.selectAll = Selectpicker.prototype.selectAll;\n this.deselectAll = Selectpicker.prototype.deselectAll;\n this.destroy = Selectpicker.prototype.destroy;\n this.remove = Selectpicker.prototype.remove;\n this.show = Selectpicker.prototype.show;\n this.hide = Selectpicker.prototype.hide;\n this.init();\n };\n\n Selectpicker.VERSION = '1.13.18'; // part of this is duplicated in i18n/defaults-en_US.js. Make sure to update both.\n\n Selectpicker.DEFAULTS = {\n noneSelectedText: 'Nothing selected',\n noneResultsText: 'No results matched {0}',\n countSelectedText: function countSelectedText(numSelected, numTotal) {\n return numSelected == 1 ? '{0} item selected' : '{0} items selected';\n },\n maxOptionsText: function maxOptionsText(numAll, numGroup) {\n return [numAll == 1 ? 'Limit reached ({n} item max)' : 'Limit reached ({n} items max)', numGroup == 1 ? 'Group limit reached ({n} item max)' : 'Group limit reached ({n} items max)'];\n },\n selectAllText: 'Select All',\n deselectAllText: 'Deselect All',\n doneButton: false,\n doneButtonText: 'Close',\n multipleSeparator: ', ',\n styleBase: 'btn',\n style: classNames.BUTTONCLASS,\n size: 'auto',\n title: null,\n selectedTextFormat: 'values',\n width: false,\n container: false,\n hideDisabled: false,\n showSubtext: false,\n showIcon: true,\n showContent: true,\n dropupAuto: true,\n header: false,\n liveSearch: false,\n liveSearchPlaceholder: null,\n liveSearchNormalize: false,\n liveSearchStyle: 'contains',\n actionsBox: false,\n iconBase: classNames.ICONBASE,\n tickIcon: classNames.TICKICON,\n showTick: false,\n template: {\n caret: '<span class=\"caret\"></span>'\n },\n maxOptions: false,\n mobile: false,\n selectOnTab: false,\n dropdownAlignRight: false,\n windowPadding: 0,\n virtualScroll: 600,\n display: false,\n sanitize: true,\n sanitizeFn: null,\n whiteList: DefaultWhitelist\n };\n Selectpicker.prototype = {\n constructor: Selectpicker,\n init: function init() {\n var that = this,\n id = this.$element.attr('id'),\n element = this.$element[0],\n form = element.form;\n selectId++;\n this.selectId = 'bs-select-' + selectId;\n element.classList.add('bs-select-hidden');\n this.multiple = this.$element.prop('multiple');\n this.autofocus = this.$element.prop('autofocus');\n\n if (element.classList.contains('show-tick')) {\n this.options.showTick = true;\n }\n\n this.$newElement = this.createDropdown();\n this.buildData();\n this.$element.after(this.$newElement).prependTo(this.$newElement); // ensure select is associated with form element if it got unlinked after moving it inside newElement\n\n if (form && element.form === null) {\n if (!form.id) form.id = 'form-' + this.selectId;\n element.setAttribute('form', form.id);\n }\n\n this.$button = this.$newElement.children('button');\n this.$menu = this.$newElement.children(Selector.MENU);\n this.$menuInner = this.$menu.children('.inner');\n this.$searchbox = this.$menu.find('input');\n element.classList.remove('bs-select-hidden');\n if (this.options.dropdownAlignRight === true) this.$menu[0].classList.add(classNames.MENURIGHT);\n\n if (typeof id !== 'undefined') {\n this.$button.attr('data-id', id);\n }\n\n this.checkDisabled();\n this.clickListener();\n\n if (this.options.liveSearch) {\n this.liveSearchListener();\n this.focusedParent = this.$searchbox[0];\n } else {\n this.focusedParent = this.$menuInner[0];\n }\n\n this.setStyle();\n this.render();\n this.setWidth();\n\n if (this.options.container) {\n this.selectPosition();\n } else {\n this.$element.on('hide' + EVENT_KEY, function () {\n if (that.isVirtual()) {\n // empty menu on close\n var menuInner = that.$menuInner[0],\n emptyMenu = menuInner.firstChild.cloneNode(false); // replace the existing UL with an empty one - this is faster than $.empty() or innerHTML = ''\n\n menuInner.replaceChild(emptyMenu, menuInner.firstChild);\n menuInner.scrollTop = 0;\n }\n });\n }\n\n this.$menu.data('this', this);\n this.$newElement.data('this', this);\n if (this.options.mobile) this.mobile();\n this.$newElement.on({\n 'hide.bs.dropdown': function hideBsDropdown(e) {\n that.$element.trigger('hide' + EVENT_KEY, e);\n },\n 'hidden.bs.dropdown': function hiddenBsDropdown(e) {\n that.$element.trigger('hidden' + EVENT_KEY, e);\n },\n 'show.bs.dropdown': function showBsDropdown(e) {\n that.$element.trigger('show' + EVENT_KEY, e);\n },\n 'shown.bs.dropdown': function shownBsDropdown(e) {\n that.$element.trigger('shown' + EVENT_KEY, e);\n }\n });\n\n if (element.hasAttribute('required')) {\n this.$element.on('invalid' + EVENT_KEY, function () {\n that.$button[0].classList.add('bs-invalid');\n that.$element.on('shown' + EVENT_KEY + '.invalid', function () {\n that.$element.val(that.$element.val()) // set the value to hide the validation message in Chrome when menu is opened\n .off('shown' + EVENT_KEY + '.invalid');\n }).on('rendered' + EVENT_KEY, function () {\n // if select is no longer invalid, remove the bs-invalid class\n if (this.validity.valid) that.$button[0].classList.remove('bs-invalid');\n that.$element.off('rendered' + EVENT_KEY);\n });\n that.$button.on('blur' + EVENT_KEY, function () {\n that.$element.trigger('focus').trigger('blur');\n that.$button.off('blur' + EVENT_KEY);\n });\n });\n }\n\n setTimeout(function () {\n that.buildList();\n that.$element.trigger('loaded' + EVENT_KEY);\n });\n },\n createDropdown: function createDropdown() {\n // Options\n // If we are multiple or showTick option is set, then add the show-tick class\n var showTick = this.multiple || this.options.showTick ? ' show-tick' : '',\n multiselectable = this.multiple ? ' aria-multiselectable=\"true\"' : '',\n inputGroup = '',\n autofocus = this.autofocus ? ' autofocus' : '';\n\n if (version.major < 4 && this.$element.parent().hasClass('input-group')) {\n inputGroup = ' input-group-btn';\n } // Elements\n\n\n var drop,\n header = '',\n searchbox = '',\n actionsbox = '',\n donebutton = '';\n\n if (this.options.header) {\n header = '<div class=\"' + classNames.POPOVERHEADER + '\">' + '<button type=\"button\" class=\"close\" aria-hidden=\"true\">×</button>' + this.options.header + '</div>';\n }\n\n if (this.options.liveSearch) {\n searchbox = '<div class=\"bs-searchbox\">' + '<input type=\"search\" class=\"form-control\" autocomplete=\"off\"' + (this.options.liveSearchPlaceholder === null ? '' : ' placeholder=\"' + htmlEscape(this.options.liveSearchPlaceholder) + '\"') + ' role=\"combobox\" aria-label=\"Search\" aria-controls=\"' + this.selectId + '\" aria-autocomplete=\"list\">' + '</div>';\n }\n\n if (this.multiple && this.options.actionsBox) {\n actionsbox = '<div class=\"bs-actionsbox\">' + '<div class=\"btn-group btn-group-sm btn-block\">' + '<button type=\"button\" class=\"actions-btn bs-select-all btn ' + classNames.BUTTONCLASS + '\">' + this.options.selectAllText + '</button>' + '<button type=\"button\" class=\"actions-btn bs-deselect-all btn ' + classNames.BUTTONCLASS + '\">' + this.options.deselectAllText + '</button>' + '</div>' + '</div>';\n }\n\n if (this.multiple && this.options.doneButton) {\n donebutton = '<div class=\"bs-donebutton\">' + '<div class=\"btn-group btn-block\">' + '<button type=\"button\" class=\"btn btn-sm ' + classNames.BUTTONCLASS + '\">' + this.options.doneButtonText + '</button>' + '</div>' + '</div>';\n }\n\n drop = '<div class=\"dropdown bootstrap-select' + showTick + inputGroup + '\">' + '<button type=\"button\" tabindex=\"-1\" class=\"' + this.options.styleBase + ' dropdown-toggle\" ' + (this.options.display === 'static' ? 'data-display=\"static\"' : '') + 'data-toggle=\"dropdown\"' + autofocus + ' role=\"combobox\" aria-owns=\"' + this.selectId + '\" aria-haspopup=\"listbox\" aria-expanded=\"false\">' + '<div class=\"filter-option\">' + '<div class=\"filter-option-inner\">' + '<div class=\"filter-option-inner-inner\"></div>' + '</div> ' + '</div>' + (version.major === '4' ? '' : '<span class=\"bs-caret\">' + this.options.template.caret + '</span>') + '</button>' + '<div class=\"' + classNames.MENU + ' ' + (version.major === '4' ? '' : classNames.SHOW) + '\">' + header + searchbox + actionsbox + '<div class=\"inner ' + classNames.SHOW + '\" role=\"listbox\" id=\"' + this.selectId + '\" tabindex=\"-1\" ' + multiselectable + '>' + '<ul class=\"' + classNames.MENU + ' inner ' + (version.major === '4' ? classNames.SHOW : '') + '\" role=\"presentation\">' + '</ul>' + '</div>' + donebutton + '</div>' + '</div>';\n return $(drop);\n },\n setPositionData: function setPositionData() {\n this.selectpicker.view.canHighlight = [];\n this.selectpicker.view.size = 0;\n this.selectpicker.view.firstHighlightIndex = false;\n\n for (var i = 0; i < this.selectpicker.current.data.length; i++) {\n var li = this.selectpicker.current.data[i],\n canHighlight = true;\n\n if (li.type === 'divider') {\n canHighlight = false;\n li.height = this.sizeInfo.dividerHeight;\n } else if (li.type === 'optgroup-label') {\n canHighlight = false;\n li.height = this.sizeInfo.dropdownHeaderHeight;\n } else {\n li.height = this.sizeInfo.liHeight;\n }\n\n if (li.disabled) canHighlight = false;\n this.selectpicker.view.canHighlight.push(canHighlight);\n\n if (canHighlight) {\n this.selectpicker.view.size++;\n li.posinset = this.selectpicker.view.size;\n if (this.selectpicker.view.firstHighlightIndex === false) this.selectpicker.view.firstHighlightIndex = i;\n }\n\n li.position = (i === 0 ? 0 : this.selectpicker.current.data[i - 1].position) + li.height;\n }\n },\n isVirtual: function isVirtual() {\n return this.options.virtualScroll !== false && this.selectpicker.main.elements.length >= this.options.virtualScroll || this.options.virtualScroll === true;\n },\n createView: function createView(isSearching, setSize, refresh) {\n var that = this,\n scrollTop = 0,\n active = [],\n selected,\n prevActive;\n this.selectpicker.isSearching = isSearching;\n this.selectpicker.current = isSearching ? this.selectpicker.search : this.selectpicker.main;\n this.setPositionData();\n\n if (setSize) {\n if (refresh) {\n scrollTop = this.$menuInner[0].scrollTop;\n } else if (!that.multiple) {\n var element = that.$element[0],\n selectedIndex = (element.options[element.selectedIndex] || {}).liIndex;\n\n if (typeof selectedIndex === 'number' && that.options.size !== false) {\n var selectedData = that.selectpicker.main.data[selectedIndex],\n position = selectedData && selectedData.position;\n\n if (position) {\n scrollTop = position - (that.sizeInfo.menuInnerHeight + that.sizeInfo.liHeight) / 2;\n }\n }\n }\n }\n\n scroll(scrollTop, true);\n this.$menuInner.off('scroll.createView').on('scroll.createView', function (e, updateValue) {\n if (!that.noScroll) scroll(this.scrollTop, updateValue);\n that.noScroll = false;\n });\n\n function scroll(scrollTop, init) {\n var size = that.selectpicker.current.elements.length,\n chunks = [],\n chunkSize,\n chunkCount,\n firstChunk,\n lastChunk,\n currentChunk,\n prevPositions,\n positionIsDifferent,\n previousElements,\n menuIsDifferent = true,\n isVirtual = that.isVirtual();\n that.selectpicker.view.scrollTop = scrollTop;\n chunkSize = Math.ceil(that.sizeInfo.menuInnerHeight / that.sizeInfo.liHeight * 1.5); // number of options in a chunk\n\n chunkCount = Math.round(size / chunkSize) || 1; // number of chunks\n\n for (var i = 0; i < chunkCount; i++) {\n var endOfChunk = (i + 1) * chunkSize;\n\n if (i === chunkCount - 1) {\n endOfChunk = size;\n }\n\n chunks[i] = [i * chunkSize + (!i ? 0 : 1), endOfChunk];\n if (!size) break;\n\n if (currentChunk === undefined && scrollTop - 1 <= that.selectpicker.current.data[endOfChunk - 1].position - that.sizeInfo.menuInnerHeight) {\n currentChunk = i;\n }\n }\n\n if (currentChunk === undefined) currentChunk = 0;\n prevPositions = [that.selectpicker.view.position0, that.selectpicker.view.position1]; // always display previous, current, and next chunks\n\n firstChunk = Math.max(0, currentChunk - 1);\n lastChunk = Math.min(chunkCount - 1, currentChunk + 1);\n that.selectpicker.view.position0 = isVirtual === false ? 0 : Math.max(0, chunks[firstChunk][0]) || 0;\n that.selectpicker.view.position1 = isVirtual === false ? size : Math.min(size, chunks[lastChunk][1]) || 0;\n positionIsDifferent = prevPositions[0] !== that.selectpicker.view.position0 || prevPositions[1] !== that.selectpicker.view.position1;\n\n if (that.activeIndex !== undefined) {\n prevActive = that.selectpicker.main.elements[that.prevActiveIndex];\n active = that.selectpicker.main.elements[that.activeIndex];\n selected = that.selectpicker.main.elements[that.selectedIndex];\n\n if (init) {\n if (that.activeIndex !== that.selectedIndex) {\n that.defocusItem(active);\n }\n\n that.activeIndex = undefined;\n }\n\n if (that.activeIndex && that.activeIndex !== that.selectedIndex) {\n that.defocusItem(selected);\n }\n }\n\n if (that.prevActiveIndex !== undefined && that.prevActiveIndex !== that.activeIndex && that.prevActiveIndex !== that.selectedIndex) {\n that.defocusItem(prevActive);\n }\n\n if (init || positionIsDifferent) {\n previousElements = that.selectpicker.view.visibleElements ? that.selectpicker.view.visibleElements.slice() : [];\n\n if (isVirtual === false) {\n that.selectpicker.view.visibleElements = that.selectpicker.current.elements;\n } else {\n that.selectpicker.view.visibleElements = that.selectpicker.current.elements.slice(that.selectpicker.view.position0, that.selectpicker.view.position1);\n }\n\n that.setOptionStatus(); // if searching, check to make sure the list has actually been updated before updating DOM\n // this prevents unnecessary repaints\n\n if (isSearching || isVirtual === false && init) menuIsDifferent = !isEqual(previousElements, that.selectpicker.view.visibleElements); // if virtual scroll is disabled and not searching,\n // menu should never need to be updated more than once\n\n if ((init || isVirtual === true) && menuIsDifferent) {\n var menuInner = that.$menuInner[0],\n menuFragment = document.createDocumentFragment(),\n emptyMenu = menuInner.firstChild.cloneNode(false),\n marginTop,\n marginBottom,\n elements = that.selectpicker.view.visibleElements,\n toSanitize = []; // replace the existing UL with an empty one - this is faster than $.empty()\n\n menuInner.replaceChild(emptyMenu, menuInner.firstChild);\n\n for (var i = 0, visibleElementsLen = elements.length; i < visibleElementsLen; i++) {\n var element = elements[i],\n elText,\n elementData;\n\n if (that.options.sanitize) {\n elText = element.lastChild;\n\n if (elText) {\n elementData = that.selectpicker.current.data[i + that.selectpicker.view.position0];\n\n if (elementData && elementData.content && !elementData.sanitized) {\n toSanitize.push(elText);\n elementData.sanitized = true;\n }\n }\n }\n\n menuFragment.appendChild(element);\n }\n\n if (that.options.sanitize && toSanitize.length) {\n sanitizeHtml(toSanitize, that.options.whiteList, that.options.sanitizeFn);\n }\n\n if (isVirtual === true) {\n marginTop = that.selectpicker.view.position0 === 0 ? 0 : that.selectpicker.current.data[that.selectpicker.view.position0 - 1].position;\n marginBottom = that.selectpicker.view.position1 > size - 1 ? 0 : that.selectpicker.current.data[size - 1].position - that.selectpicker.current.data[that.selectpicker.view.position1 - 1].position;\n menuInner.firstChild.style.marginTop = marginTop + 'px';\n menuInner.firstChild.style.marginBottom = marginBottom + 'px';\n } else {\n menuInner.firstChild.style.marginTop = 0;\n menuInner.firstChild.style.marginBottom = 0;\n }\n\n menuInner.firstChild.appendChild(menuFragment); // if an option is encountered that is wider than the current menu width, update the menu width accordingly\n // switch to ResizeObserver with increased browser support\n\n if (isVirtual === true && that.sizeInfo.hasScrollBar) {\n var menuInnerInnerWidth = menuInner.firstChild.offsetWidth;\n\n if (init && menuInnerInnerWidth < that.sizeInfo.menuInnerInnerWidth && that.sizeInfo.totalMenuWidth > that.sizeInfo.selectWidth) {\n menuInner.firstChild.style.minWidth = that.sizeInfo.menuInnerInnerWidth + 'px';\n } else if (menuInnerInnerWidth > that.sizeInfo.menuInnerInnerWidth) {\n // set to 0 to get actual width of menu\n that.$menu[0].style.minWidth = 0;\n var actualMenuWidth = menuInner.firstChild.offsetWidth;\n\n if (actualMenuWidth > that.sizeInfo.menuInnerInnerWidth) {\n that.sizeInfo.menuInnerInnerWidth = actualMenuWidth;\n menuInner.firstChild.style.minWidth = that.sizeInfo.menuInnerInnerWidth + 'px';\n } // reset to default CSS styling\n\n\n that.$menu[0].style.minWidth = '';\n }\n }\n }\n }\n\n that.prevActiveIndex = that.activeIndex;\n\n if (!that.options.liveSearch) {\n that.$menuInner.trigger('focus');\n } else if (isSearching && init) {\n var index = 0,\n newActive;\n\n if (!that.selectpicker.view.canHighlight[index]) {\n index = 1 + that.selectpicker.view.canHighlight.slice(1).indexOf(true);\n }\n\n newActive = that.selectpicker.view.visibleElements[index];\n that.defocusItem(that.selectpicker.view.currentActive);\n that.activeIndex = (that.selectpicker.current.data[index] || {}).index;\n that.focusItem(newActive);\n }\n }\n\n $(window).off('resize' + EVENT_KEY + '.' + this.selectId + '.createView').on('resize' + EVENT_KEY + '.' + this.selectId + '.createView', function () {\n var isActive = that.$newElement.hasClass(classNames.SHOW);\n if (isActive) scroll(that.$menuInner[0].scrollTop);\n });\n },\n focusItem: function focusItem(li, liData, noStyle) {\n if (li) {\n liData = liData || this.selectpicker.main.data[this.activeIndex];\n var a = li.firstChild;\n\n if (a) {\n a.setAttribute('aria-setsize', this.selectpicker.view.size);\n a.setAttribute('aria-posinset', liData.posinset);\n\n if (noStyle !== true) {\n this.focusedParent.setAttribute('aria-activedescendant', a.id);\n li.classList.add('active');\n a.classList.add('active');\n }\n }\n }\n },\n defocusItem: function defocusItem(li) {\n if (li) {\n li.classList.remove('active');\n if (li.firstChild) li.firstChild.classList.remove('active');\n }\n },\n setPlaceholder: function setPlaceholder() {\n var that = this,\n updateIndex = false;\n\n if (this.options.title && !this.multiple) {\n if (!this.selectpicker.view.titleOption) this.selectpicker.view.titleOption = document.createElement('option'); // this option doesn't create a new <li> element, but does add a new option at the start,\n // so startIndex should increase to prevent having to check every option for the bs-title-option class\n\n updateIndex = true;\n var element = this.$element[0],\n selectTitleOption = false,\n titleNotAppended = !this.selectpicker.view.titleOption.parentNode,\n selectedIndex = element.selectedIndex,\n selectedOption = element.options[selectedIndex],\n navigation = window.performance && window.performance.getEntriesByType('navigation'),\n // Safari doesn't support getEntriesByType('navigation') - fall back to performance.navigation\n isNotBackForward = navigation && navigation.length ? navigation[0].type !== 'back_forward' : window.performance.navigation.type !== 2;\n\n if (titleNotAppended) {\n // Use native JS to prepend option (faster)\n this.selectpicker.view.titleOption.className = 'bs-title-option';\n this.selectpicker.view.titleOption.value = ''; // Check if selected or data-selected attribute is already set on an option. If not, select the titleOption option.\n // the selected item may have been changed by user or programmatically before the bootstrap select plugin runs,\n // if so, the select will have the data-selected attribute\n\n selectTitleOption = !selectedOption || selectedIndex === 0 && selectedOption.defaultSelected === false && this.$element.data('selected') === undefined;\n }\n\n if (titleNotAppended || this.selectpicker.view.titleOption.index !== 0) {\n element.insertBefore(this.selectpicker.view.titleOption, element.firstChild);\n } // Set selected *after* appending to select,\n // otherwise the option doesn't get selected in IE\n // set using selectedIndex, as setting the selected attr to true here doesn't work in IE11\n\n\n if (selectTitleOption && isNotBackForward) {\n element.selectedIndex = 0;\n } else if (document.readyState !== 'complete') {\n // if navigation type is back_forward, there's a chance the select will have its value set by BFCache\n // wait for that value to be set, then run render again\n window.addEventListener('pageshow', function () {\n if (that.selectpicker.view.displayedValue !== element.value) that.render();\n });\n }\n }\n\n return updateIndex;\n },\n buildData: function buildData() {\n var optionSelector = ':not([hidden]):not([data-hidden=\"true\"])',\n mainData = [],\n optID = 0,\n startIndex = this.setPlaceholder() ? 1 : 0; // append the titleOption if necessary and skip the first option in the loop\n\n if (this.options.hideDisabled) optionSelector += ':not(:disabled)';\n var selectOptions = this.$element[0].querySelectorAll('select > *' + optionSelector);\n\n function addDivider(config) {\n var previousData = mainData[mainData.length - 1]; // ensure optgroup doesn't create back-to-back dividers\n\n if (previousData && previousData.type === 'divider' && (previousData.optID || config.optID)) {\n return;\n }\n\n config = config || {};\n config.type = 'divider';\n mainData.push(config);\n }\n\n function addOption(option, config) {\n config = config || {};\n config.divider = option.getAttribute('data-divider') === 'true';\n\n if (config.divider) {\n addDivider({\n optID: config.optID\n });\n } else {\n var liIndex = mainData.length,\n cssText = option.style.cssText,\n inlineStyle = cssText ? htmlEscape(cssText) : '',\n optionClass = (option.className || '') + (config.optgroupClass || '');\n if (config.optID) optionClass = 'opt ' + optionClass;\n config.optionClass = optionClass.trim();\n config.inlineStyle = inlineStyle;\n config.text = option.textContent;\n config.content = option.getAttribute('data-content');\n config.tokens = option.getAttribute('data-tokens');\n config.subtext = option.getAttribute('data-subtext');\n config.icon = option.getAttribute('data-icon');\n option.liIndex = liIndex;\n config.display = config.content || config.text;\n config.type = 'option';\n config.index = liIndex;\n config.option = option;\n config.selected = !!option.selected;\n config.disabled = config.disabled || !!option.disabled;\n mainData.push(config);\n }\n }\n\n function addOptgroup(index, selectOptions) {\n var optgroup = selectOptions[index],\n // skip placeholder option\n previous = index - 1 < startIndex ? false : selectOptions[index - 1],\n next = selectOptions[index + 1],\n options = optgroup.querySelectorAll('option' + optionSelector);\n if (!options.length) return;\n var config = {\n display: htmlEscape(optgroup.label),\n subtext: optgroup.getAttribute('data-subtext'),\n icon: optgroup.getAttribute('data-icon'),\n type: 'optgroup-label',\n optgroupClass: ' ' + (optgroup.className || '')\n },\n headerIndex,\n lastIndex;\n optID++;\n\n if (previous) {\n addDivider({\n optID: optID\n });\n }\n\n config.optID = optID;\n mainData.push(config);\n\n for (var j = 0, len = options.length; j < len; j++) {\n var option = options[j];\n\n if (j === 0) {\n headerIndex = mainData.length - 1;\n lastIndex = headerIndex + len;\n }\n\n addOption(option, {\n headerIndex: headerIndex,\n lastIndex: lastIndex,\n optID: config.optID,\n optgroupClass: config.optgroupClass,\n disabled: optgroup.disabled\n });\n }\n\n if (next) {\n addDivider({\n optID: optID\n });\n }\n }\n\n for (var len = selectOptions.length, i = startIndex; i < len; i++) {\n var item = selectOptions[i];\n\n if (item.tagName !== 'OPTGROUP') {\n addOption(item, {});\n } else {\n addOptgroup(i, selectOptions);\n }\n }\n\n this.selectpicker.main.data = this.selectpicker.current.data = mainData;\n },\n buildList: function buildList() {\n var that = this,\n selectData = this.selectpicker.main.data,\n mainElements = [],\n widestOptionLength = 0;\n\n if ((that.options.showTick || that.multiple) && !elementTemplates.checkMark.parentNode) {\n elementTemplates.checkMark.className = this.options.iconBase + ' ' + that.options.tickIcon + ' check-mark';\n elementTemplates.a.appendChild(elementTemplates.checkMark);\n }\n\n function buildElement(item) {\n var liElement,\n combinedLength = 0;\n\n switch (item.type) {\n case 'divider':\n liElement = generateOption.li(false, classNames.DIVIDER, item.optID ? item.optID + 'div' : undefined);\n break;\n\n case 'option':\n liElement = generateOption.li(generateOption.a(generateOption.text.call(that, item), item.optionClass, item.inlineStyle), '', item.optID);\n\n if (liElement.firstChild) {\n liElement.firstChild.id = that.selectId + '-' + item.index;\n }\n\n break;\n\n case 'optgroup-label':\n liElement = generateOption.li(generateOption.label.call(that, item), 'dropdown-header' + item.optgroupClass, item.optID);\n break;\n }\n\n item.element = liElement;\n mainElements.push(liElement); // count the number of characters in the option - not perfect, but should work in most cases\n\n if (item.display) combinedLength += item.display.length;\n if (item.subtext) combinedLength += item.subtext.length; // if there is an icon, ensure this option's width is checked\n\n if (item.icon) combinedLength += 1;\n\n if (combinedLength > widestOptionLength) {\n widestOptionLength = combinedLength; // guess which option is the widest\n // use this when calculating menu width\n // not perfect, but it's fast, and the width will be updating accordingly when scrolling\n\n that.selectpicker.view.widestOption = mainElements[mainElements.length - 1];\n }\n }\n\n for (var len = selectData.length, i = 0; i < len; i++) {\n var item = selectData[i];\n buildElement(item);\n }\n\n this.selectpicker.main.elements = this.selectpicker.current.elements = mainElements;\n },\n findLis: function findLis() {\n return this.$menuInner.find('.inner > li');\n },\n render: function render() {\n var that = this,\n element = this.$element[0],\n // ensure titleOption is appended and selected (if necessary) before getting selectedOptions\n placeholderSelected = this.setPlaceholder() && element.selectedIndex === 0,\n selectedOptions = getSelectedOptions(element, this.options.hideDisabled),\n selectedCount = selectedOptions.length,\n button = this.$button[0],\n buttonInner = button.querySelector('.filter-option-inner-inner'),\n multipleSeparator = document.createTextNode(this.options.multipleSeparator),\n titleFragment = elementTemplates.fragment.cloneNode(false),\n showCount,\n countMax,\n hasContent = false;\n button.classList.toggle('bs-placeholder', that.multiple ? !selectedCount : !getSelectValues(element, selectedOptions));\n\n if (!that.multiple && selectedOptions.length === 1) {\n that.selectpicker.view.displayedValue = getSelectValues(element, selectedOptions);\n }\n\n if (this.options.selectedTextFormat === 'static') {\n titleFragment = generateOption.text.call(this, {\n text: this.options.title\n }, true);\n } else {\n showCount = this.multiple && this.options.selectedTextFormat.indexOf('count') !== -1 && selectedCount > 1; // determine if the number of selected options will be shown (showCount === true)\n\n if (showCount) {\n countMax = this.options.selectedTextFormat.split('>');\n showCount = countMax.length > 1 && selectedCount > countMax[1] || countMax.length === 1 && selectedCount >= 2;\n } // only loop through all selected options if the count won't be shown\n\n\n if (showCount === false) {\n if (!placeholderSelected) {\n for (var selectedIndex = 0; selectedIndex < selectedCount; selectedIndex++) {\n if (selectedIndex < 50) {\n var option = selectedOptions[selectedIndex],\n thisData = this.selectpicker.main.data[option.liIndex],\n titleOptions = {};\n\n if (this.multiple && selectedIndex > 0) {\n titleFragment.appendChild(multipleSeparator.cloneNode(false));\n }\n\n if (option.title) {\n titleOptions.text = option.title;\n } else if (thisData) {\n if (thisData.content && that.options.showContent) {\n titleOptions.content = thisData.content.toString();\n hasContent = true;\n } else {\n if (that.options.showIcon) {\n titleOptions.icon = thisData.icon;\n }\n\n if (that.options.showSubtext && !that.multiple && thisData.subtext) titleOptions.subtext = ' ' + thisData.subtext;\n titleOptions.text = option.textContent.trim();\n }\n }\n\n titleFragment.appendChild(generateOption.text.call(this, titleOptions, true));\n } else {\n break;\n }\n } // add ellipsis\n\n\n if (selectedCount > 49) {\n titleFragment.appendChild(document.createTextNode('...'));\n }\n }\n } else {\n var optionSelector = ':not([hidden]):not([data-hidden=\"true\"]):not([data-divider=\"true\"])';\n if (this.options.hideDisabled) optionSelector += ':not(:disabled)'; // If this is a multiselect, and selectedTextFormat is count, then show 1 of 2 selected, etc.\n\n var totalCount = this.$element[0].querySelectorAll('select > option' + optionSelector + ', optgroup' + optionSelector + ' option' + optionSelector).length,\n tr8nText = typeof this.options.countSelectedText === 'function' ? this.options.countSelectedText(selectedCount, totalCount) : this.options.countSelectedText;\n titleFragment = generateOption.text.call(this, {\n text: tr8nText.replace('{0}', selectedCount.toString()).replace('{1}', totalCount.toString())\n }, true);\n }\n }\n\n if (this.options.title == undefined) {\n // use .attr to ensure undefined is returned if title attribute is not set\n this.options.title = this.$element.attr('title');\n } // If the select doesn't have a title, then use the default, or if nothing is set at all, use noneSelectedText\n\n\n if (!titleFragment.childNodes.length) {\n titleFragment = generateOption.text.call(this, {\n text: typeof this.options.title !== 'undefined' ? this.options.title : this.options.noneSelectedText\n }, true);\n } // strip all HTML tags and trim the result, then unescape any escaped tags\n\n\n button.title = titleFragment.textContent.replace(/<[^>]*>?/g, '').trim();\n\n if (this.options.sanitize && hasContent) {\n sanitizeHtml([titleFragment], that.options.whiteList, that.options.sanitizeFn);\n }\n\n buttonInner.innerHTML = '';\n buttonInner.appendChild(titleFragment);\n\n if (version.major < 4 && this.$newElement[0].classList.contains('bs3-has-addon')) {\n var filterExpand = button.querySelector('.filter-expand'),\n clone = buttonInner.cloneNode(true);\n clone.className = 'filter-expand';\n\n if (filterExpand) {\n button.replaceChild(clone, filterExpand);\n } else {\n button.appendChild(clone);\n }\n }\n\n this.$element.trigger('rendered' + EVENT_KEY);\n },\n\n /**\r\n * @param [style]\r\n * @param [status]\r\n */\n setStyle: function setStyle(newStyle, status) {\n var button = this.$button[0],\n newElement = this.$newElement[0],\n style = this.options.style.trim(),\n buttonClass;\n\n if (this.$element.attr('class')) {\n this.$newElement.addClass(this.$element.attr('class').replace(/selectpicker|mobile-device|bs-select-hidden|validate\\[.*\\]/gi, ''));\n }\n\n if (version.major < 4) {\n newElement.classList.add('bs3');\n\n if (newElement.parentNode.classList && newElement.parentNode.classList.contains('input-group') && (newElement.previousElementSibling || newElement.nextElementSibling) && (newElement.previousElementSibling || newElement.nextElementSibling).classList.contains('input-group-addon')) {\n newElement.classList.add('bs3-has-addon');\n }\n }\n\n if (newStyle) {\n buttonClass = newStyle.trim();\n } else {\n buttonClass = style;\n }\n\n if (status == 'add') {\n if (buttonClass) button.classList.add.apply(button.classList, buttonClass.split(' '));\n } else if (status == 'remove') {\n if (buttonClass) button.classList.remove.apply(button.classList, buttonClass.split(' '));\n } else {\n if (style) button.classList.remove.apply(button.classList, style.split(' '));\n if (buttonClass) button.classList.add.apply(button.classList, buttonClass.split(' '));\n }\n },\n liHeight: function liHeight(refresh) {\n if (!refresh && (this.options.size === false || Object.keys(this.sizeInfo).length)) return;\n var newElement = elementTemplates.div.cloneNode(false),\n menu = elementTemplates.div.cloneNode(false),\n menuInner = elementTemplates.div.cloneNode(false),\n menuInnerInner = document.createElement('ul'),\n divider = elementTemplates.li.cloneNode(false),\n dropdownHeader = elementTemplates.li.cloneNode(false),\n li,\n a = elementTemplates.a.cloneNode(false),\n text = elementTemplates.span.cloneNode(false),\n header = this.options.header && this.$menu.find('.' + classNames.POPOVERHEADER).length > 0 ? this.$menu.find('.' + classNames.POPOVERHEADER)[0].cloneNode(true) : null,\n search = this.options.liveSearch ? elementTemplates.div.cloneNode(false) : null,\n actions = this.options.actionsBox && this.multiple && this.$menu.find('.bs-actionsbox').length > 0 ? this.$menu.find('.bs-actionsbox')[0].cloneNode(true) : null,\n doneButton = this.options.doneButton && this.multiple && this.$menu.find('.bs-donebutton').length > 0 ? this.$menu.find('.bs-donebutton')[0].cloneNode(true) : null,\n firstOption = this.$element.find('option')[0];\n this.sizeInfo.selectWidth = this.$newElement[0].offsetWidth;\n text.className = 'text';\n a.className = 'dropdown-item ' + (firstOption ? firstOption.className : '');\n newElement.className = this.$menu[0].parentNode.className + ' ' + classNames.SHOW;\n newElement.style.width = 0; // ensure button width doesn't affect natural width of menu when calculating\n\n if (this.options.width === 'auto') menu.style.minWidth = 0;\n menu.className = classNames.MENU + ' ' + classNames.SHOW;\n menuInner.className = 'inner ' + classNames.SHOW;\n menuInnerInner.className = classNames.MENU + ' inner ' + (version.major === '4' ? classNames.SHOW : '');\n divider.className = classNames.DIVIDER;\n dropdownHeader.className = 'dropdown-header';\n text.appendChild(document.createTextNode(\"\\u200B\"));\n\n if (this.selectpicker.current.data.length) {\n for (var i = 0; i < this.selectpicker.current.data.length; i++) {\n var data = this.selectpicker.current.data[i];\n\n if (data.type === 'option') {\n li = data.element;\n break;\n }\n }\n } else {\n li = elementTemplates.li.cloneNode(false);\n a.appendChild(text);\n li.appendChild(a);\n }\n\n dropdownHeader.appendChild(text.cloneNode(true));\n\n if (this.selectpicker.view.widestOption) {\n menuInnerInner.appendChild(this.selectpicker.view.widestOption.cloneNode(true));\n }\n\n menuInnerInner.appendChild(li);\n menuInnerInner.appendChild(divider);\n menuInnerInner.appendChild(dropdownHeader);\n if (header) menu.appendChild(header);\n\n if (search) {\n var input = document.createElement('input');\n search.className = 'bs-searchbox';\n input.className = 'form-control';\n search.appendChild(input);\n menu.appendChild(search);\n }\n\n if (actions) menu.appendChild(actions);\n menuInner.appendChild(menuInnerInner);\n menu.appendChild(menuInner);\n if (doneButton) menu.appendChild(doneButton);\n newElement.appendChild(menu);\n document.body.appendChild(newElement);\n var liHeight = li.offsetHeight,\n dropdownHeaderHeight = dropdownHeader ? dropdownHeader.offsetHeight : 0,\n headerHeight = header ? header.offsetHeight : 0,\n searchHeight = search ? search.offsetHeight : 0,\n actionsHeight = actions ? actions.offsetHeight : 0,\n doneButtonHeight = doneButton ? doneButton.offsetHeight : 0,\n dividerHeight = $(divider).outerHeight(true),\n // fall back to jQuery if getComputedStyle is not supported\n menuStyle = window.getComputedStyle ? window.getComputedStyle(menu) : false,\n menuWidth = menu.offsetWidth,\n $menu = menuStyle ? null : $(menu),\n menuPadding = {\n vert: toInteger(menuStyle ? menuStyle.paddingTop : $menu.css('paddingTop')) + toInteger(menuStyle ? menuStyle.paddingBottom : $menu.css('paddingBottom')) + toInteger(menuStyle ? menuStyle.borderTopWidth : $menu.css('borderTopWidth')) + toInteger(menuStyle ? menuStyle.borderBottomWidth : $menu.css('borderBottomWidth')),\n horiz: toInteger(menuStyle ? menuStyle.paddingLeft : $menu.css('paddingLeft')) + toInteger(menuStyle ? menuStyle.paddingRight : $menu.css('paddingRight')) + toInteger(menuStyle ? menuStyle.borderLeftWidth : $menu.css('borderLeftWidth')) + toInteger(menuStyle ? menuStyle.borderRightWidth : $menu.css('borderRightWidth'))\n },\n menuExtras = {\n vert: menuPadding.vert + toInteger(menuStyle ? menuStyle.marginTop : $menu.css('marginTop')) + toInteger(menuStyle ? menuStyle.marginBottom : $menu.css('marginBottom')) + 2,\n horiz: menuPadding.horiz + toInteger(menuStyle ? menuStyle.marginLeft : $menu.css('marginLeft')) + toInteger(menuStyle ? menuStyle.marginRight : $menu.css('marginRight')) + 2\n },\n scrollBarWidth;\n menuInner.style.overflowY = 'scroll';\n scrollBarWidth = menu.offsetWidth - menuWidth;\n document.body.removeChild(newElement);\n this.sizeInfo.liHeight = liHeight;\n this.sizeInfo.dropdownHeaderHeight = dropdownHeaderHeight;\n this.sizeInfo.headerHeight = headerHeight;\n this.sizeInfo.searchHeight = searchHeight;\n this.sizeInfo.actionsHeight = actionsHeight;\n this.sizeInfo.doneButtonHeight = doneButtonHeight;\n this.sizeInfo.dividerHeight = dividerHeight;\n this.sizeInfo.menuPadding = menuPadding;\n this.sizeInfo.menuExtras = menuExtras;\n this.sizeInfo.menuWidth = menuWidth;\n this.sizeInfo.menuInnerInnerWidth = menuWidth - menuPadding.horiz;\n this.sizeInfo.totalMenuWidth = this.sizeInfo.menuWidth;\n this.sizeInfo.scrollBarWidth = scrollBarWidth;\n this.sizeInfo.selectHeight = this.$newElement[0].offsetHeight;\n this.setPositionData();\n },\n getSelectPosition: function getSelectPosition() {\n var that = this,\n $window = $(window),\n pos = that.$newElement.offset(),\n $container = $(that.options.container),\n containerPos;\n\n if (that.options.container && $container.length && !$container.is('body')) {\n containerPos = $container.offset();\n containerPos.top += parseInt($container.css('borderTopWidth'));\n containerPos.left += parseInt($container.css('borderLeftWidth'));\n } else {\n containerPos = {\n top: 0,\n left: 0\n };\n }\n\n var winPad = that.options.windowPadding;\n this.sizeInfo.selectOffsetTop = pos.top - containerPos.top - $window.scrollTop();\n this.sizeInfo.selectOffsetBot = $window.height() - this.sizeInfo.selectOffsetTop - this.sizeInfo.selectHeight - containerPos.top - winPad[2];\n this.sizeInfo.selectOffsetLeft = pos.left - containerPos.left - $window.scrollLeft();\n this.sizeInfo.selectOffsetRight = $window.width() - this.sizeInfo.selectOffsetLeft - this.sizeInfo.selectWidth - containerPos.left - winPad[1];\n this.sizeInfo.selectOffsetTop -= winPad[0];\n this.sizeInfo.selectOffsetLeft -= winPad[3];\n },\n setMenuSize: function setMenuSize(isAuto) {\n this.getSelectPosition();\n\n var selectWidth = this.sizeInfo.selectWidth,\n liHeight = this.sizeInfo.liHeight,\n headerHeight = this.sizeInfo.headerHeight,\n searchHeight = this.sizeInfo.searchHeight,\n actionsHeight = this.sizeInfo.actionsHeight,\n doneButtonHeight = this.sizeInfo.doneButtonHeight,\n divHeight = this.sizeInfo.dividerHeight,\n menuPadding = this.sizeInfo.menuPadding,\n menuInnerHeight,\n menuHeight,\n divLength = 0,\n minHeight,\n _minHeight,\n maxHeight,\n menuInnerMinHeight,\n estimate,\n isDropup;\n\n if (this.options.dropupAuto) {\n // Get the estimated height of the menu without scrollbars.\n // This is useful for smaller menus, where there might be plenty of room\n // below the button without setting dropup, but we can't know\n // the exact height of the menu until createView is called later\n estimate = liHeight * this.selectpicker.current.elements.length + menuPadding.vert;\n isDropup = this.sizeInfo.selectOffsetTop - this.sizeInfo.selectOffsetBot > this.sizeInfo.menuExtras.vert && estimate + this.sizeInfo.menuExtras.vert + 50 > this.sizeInfo.selectOffsetBot; // ensure dropup doesn't change while searching (so menu doesn't bounce back and forth)\n\n if (this.selectpicker.isSearching === true) {\n isDropup = this.selectpicker.dropup;\n }\n\n this.$newElement.toggleClass(classNames.DROPUP, isDropup);\n this.selectpicker.dropup = isDropup;\n }\n\n if (this.options.size === 'auto') {\n _minHeight = this.selectpicker.current.elements.length > 3 ? this.sizeInfo.liHeight * 3 + this.sizeInfo.menuExtras.vert - 2 : 0;\n menuHeight = this.sizeInfo.selectOffsetBot - this.sizeInfo.menuExtras.vert;\n minHeight = _minHeight + headerHeight + searchHeight + actionsHeight + doneButtonHeight;\n menuInnerMinHeight = Math.max(_minHeight - menuPadding.vert, 0);\n\n if (this.$newElement.hasClass(classNames.DROPUP)) {\n menuHeight = this.sizeInfo.selectOffsetTop - this.sizeInfo.menuExtras.vert;\n }\n\n maxHeight = menuHeight;\n menuInnerHeight = menuHeight - headerHeight - searchHeight - actionsHeight - doneButtonHeight - menuPadding.vert;\n } else if (this.options.size && this.options.size != 'auto' && this.selectpicker.current.elements.length > this.options.size) {\n for (var i = 0; i < this.options.size; i++) {\n if (this.selectpicker.current.data[i].type === 'divider') divLength++;\n }\n\n menuHeight = liHeight * this.options.size + divLength * divHeight + menuPadding.vert;\n menuInnerHeight = menuHeight - menuPadding.vert;\n maxHeight = menuHeight + headerHeight + searchHeight + actionsHeight + doneButtonHeight;\n minHeight = menuInnerMinHeight = '';\n }\n\n this.$menu.css({\n 'max-height': maxHeight + 'px',\n 'overflow': 'hidden',\n 'min-height': minHeight + 'px'\n });\n this.$menuInner.css({\n 'max-height': menuInnerHeight + 'px',\n 'overflow-y': 'auto',\n 'min-height': menuInnerMinHeight + 'px'\n }); // ensure menuInnerHeight is always a positive number to prevent issues calculating chunkSize in createView\n\n this.sizeInfo.menuInnerHeight = Math.max(menuInnerHeight, 1);\n\n if (this.selectpicker.current.data.length && this.selectpicker.current.data[this.selectpicker.current.data.length - 1].position > this.sizeInfo.menuInnerHeight) {\n this.sizeInfo.hasScrollBar = true;\n this.sizeInfo.totalMenuWidth = this.sizeInfo.menuWidth + this.sizeInfo.scrollBarWidth;\n }\n\n if (this.options.dropdownAlignRight === 'auto') {\n this.$menu.toggleClass(classNames.MENURIGHT, this.sizeInfo.selectOffsetLeft > this.sizeInfo.selectOffsetRight && this.sizeInfo.selectOffsetRight < this.sizeInfo.totalMenuWidth - selectWidth);\n }\n\n if (this.dropdown && this.dropdown._popper) this.dropdown._popper.update();\n },\n setSize: function setSize(refresh) {\n this.liHeight(refresh);\n if (this.options.header) this.$menu.css('padding-top', 0);\n\n if (this.options.size !== false) {\n var that = this,\n $window = $(window);\n this.setMenuSize();\n\n if (this.options.liveSearch) {\n this.$searchbox.off('input.setMenuSize propertychange.setMenuSize').on('input.setMenuSize propertychange.setMenuSize', function () {\n return that.setMenuSize();\n });\n }\n\n if (this.options.size === 'auto') {\n $window.off('resize' + EVENT_KEY + '.' + this.selectId + '.setMenuSize' + ' scroll' + EVENT_KEY + '.' + this.selectId + '.setMenuSize').on('resize' + EVENT_KEY + '.' + this.selectId + '.setMenuSize' + ' scroll' + EVENT_KEY + '.' + this.selectId + '.setMenuSize', function () {\n return that.setMenuSize();\n });\n } else if (this.options.size && this.options.size != 'auto' && this.selectpicker.current.elements.length > this.options.size) {\n $window.off('resize' + EVENT_KEY + '.' + this.selectId + '.setMenuSize' + ' scroll' + EVENT_KEY + '.' + this.selectId + '.setMenuSize');\n }\n }\n\n this.createView(false, true, refresh);\n },\n setWidth: function setWidth() {\n var that = this;\n\n if (this.options.width === 'auto') {\n requestAnimationFrame(function () {\n that.$menu.css('min-width', '0');\n that.$element.on('loaded' + EVENT_KEY, function () {\n that.liHeight();\n that.setMenuSize(); // Get correct width if element is hidden\n\n var $selectClone = that.$newElement.clone().appendTo('body'),\n btnWidth = $selectClone.css('width', 'auto').children('button').outerWidth();\n $selectClone.remove(); // Set width to whatever's larger, button title or longest option\n\n that.sizeInfo.selectWidth = Math.max(that.sizeInfo.totalMenuWidth, btnWidth);\n that.$newElement.css('width', that.sizeInfo.selectWidth + 'px');\n });\n });\n } else if (this.options.width === 'fit') {\n // Remove inline min-width so width can be changed from 'auto'\n this.$menu.css('min-width', '');\n this.$newElement.css('width', '').addClass('fit-width');\n } else if (this.options.width) {\n // Remove inline min-width so width can be changed from 'auto'\n this.$menu.css('min-width', '');\n this.$newElement.css('width', this.options.width);\n } else {\n // Remove inline min-width/width so width can be changed\n this.$menu.css('min-width', '');\n this.$newElement.css('width', '');\n } // Remove fit-width class if width is changed programmatically\n\n\n if (this.$newElement.hasClass('fit-width') && this.options.width !== 'fit') {\n this.$newElement[0].classList.remove('fit-width');\n }\n },\n selectPosition: function selectPosition() {\n this.$bsContainer = $('<div class=\"bs-container\" />');\n\n var that = this,\n $container = $(this.options.container),\n pos,\n containerPos,\n actualHeight,\n getPlacement = function getPlacement($element) {\n var containerPosition = {},\n // fall back to dropdown's default display setting if display is not manually set\n display = that.options.display || ( // Bootstrap 3 doesn't have $.fn.dropdown.Constructor.Default\n $.fn.dropdown.Constructor.Default ? $.fn.dropdown.Constructor.Default.display : false);\n that.$bsContainer.addClass($element.attr('class').replace(/form-control|fit-width/gi, '')).toggleClass(classNames.DROPUP, $element.hasClass(classNames.DROPUP));\n pos = $element.offset();\n\n if (!$container.is('body')) {\n containerPos = $container.offset();\n containerPos.top += parseInt($container.css('borderTopWidth')) - $container.scrollTop();\n containerPos.left += parseInt($container.css('borderLeftWidth')) - $container.scrollLeft();\n } else {\n containerPos = {\n top: 0,\n left: 0\n };\n }\n\n actualHeight = $element.hasClass(classNames.DROPUP) ? 0 : $element[0].offsetHeight; // Bootstrap 4+ uses Popper for menu positioning\n\n if (version.major < 4 || display === 'static') {\n containerPosition.top = pos.top - containerPos.top + actualHeight;\n containerPosition.left = pos.left - containerPos.left;\n }\n\n containerPosition.width = $element[0].offsetWidth;\n that.$bsContainer.css(containerPosition);\n };\n\n this.$button.on('click.bs.dropdown.data-api', function () {\n if (that.isDisabled()) {\n return;\n }\n\n getPlacement(that.$newElement);\n that.$bsContainer.appendTo(that.options.container).toggleClass(classNames.SHOW, !that.$button.hasClass(classNames.SHOW)).append(that.$menu);\n });\n $(window).off('resize' + EVENT_KEY + '.' + this.selectId + ' scroll' + EVENT_KEY + '.' + this.selectId).on('resize' + EVENT_KEY + '.' + this.selectId + ' scroll' + EVENT_KEY + '.' + this.selectId, function () {\n var isActive = that.$newElement.hasClass(classNames.SHOW);\n if (isActive) getPlacement(that.$newElement);\n });\n this.$element.on('hide' + EVENT_KEY, function () {\n that.$menu.data('height', that.$menu.height());\n that.$bsContainer.detach();\n });\n },\n setOptionStatus: function setOptionStatus(selectedOnly) {\n var that = this;\n that.noScroll = false;\n\n if (that.selectpicker.view.visibleElements && that.selectpicker.view.visibleElements.length) {\n for (var i = 0; i < that.selectpicker.view.visibleElements.length; i++) {\n var liData = that.selectpicker.current.data[i + that.selectpicker.view.position0],\n option = liData.option;\n\n if (option) {\n if (selectedOnly !== true) {\n that.setDisabled(liData.index, liData.disabled);\n }\n\n that.setSelected(liData.index, option.selected);\n }\n }\n }\n },\n\n /**\r\n * @param {number} index - the index of the option that is being changed\r\n * @param {boolean} selected - true if the option is being selected, false if being deselected\r\n */\n setSelected: function setSelected(index, selected) {\n var li = this.selectpicker.main.elements[index],\n liData = this.selectpicker.main.data[index],\n activeIndexIsSet = this.activeIndex !== undefined,\n thisIsActive = this.activeIndex === index,\n prevActive,\n a,\n // if current option is already active\n // OR\n // if the current option is being selected, it's NOT multiple, and\n // activeIndex is undefined:\n // - when the menu is first being opened, OR\n // - after a search has been performed, OR\n // - when retainActive is false when selecting a new option (i.e. index of the newly selected option is not the same as the current activeIndex)\n keepActive = thisIsActive || selected && !this.multiple && !activeIndexIsSet;\n liData.selected = selected;\n a = li.firstChild;\n\n if (selected) {\n this.selectedIndex = index;\n }\n\n li.classList.toggle('selected', selected);\n\n if (keepActive) {\n this.focusItem(li, liData);\n this.selectpicker.view.currentActive = li;\n this.activeIndex = index;\n } else {\n this.defocusItem(li);\n }\n\n if (a) {\n a.classList.toggle('selected', selected);\n\n if (selected) {\n a.setAttribute('aria-selected', true);\n } else {\n if (this.multiple) {\n a.setAttribute('aria-selected', false);\n } else {\n a.removeAttribute('aria-selected');\n }\n }\n }\n\n if (!keepActive && !activeIndexIsSet && selected && this.prevActiveIndex !== undefined) {\n prevActive = this.selectpicker.main.elements[this.prevActiveIndex];\n this.defocusItem(prevActive);\n }\n },\n\n /**\r\n * @param {number} index - the index of the option that is being disabled\r\n * @param {boolean} disabled - true if the option is being disabled, false if being enabled\r\n */\n setDisabled: function setDisabled(index, disabled) {\n var li = this.selectpicker.main.elements[index],\n a;\n this.selectpicker.main.data[index].disabled = disabled;\n a = li.firstChild;\n li.classList.toggle(classNames.DISABLED, disabled);\n\n if (a) {\n if (version.major === '4') a.classList.toggle(classNames.DISABLED, disabled);\n\n if (disabled) {\n a.setAttribute('aria-disabled', disabled);\n a.setAttribute('tabindex', -1);\n } else {\n a.removeAttribute('aria-disabled');\n a.setAttribute('tabindex', 0);\n }\n }\n },\n isDisabled: function isDisabled() {\n return this.$element[0].disabled;\n },\n checkDisabled: function checkDisabled() {\n if (this.isDisabled()) {\n this.$newElement[0].classList.add(classNames.DISABLED);\n this.$button.addClass(classNames.DISABLED).attr('aria-disabled', true);\n } else {\n if (this.$button[0].classList.contains(classNames.DISABLED)) {\n this.$newElement[0].classList.remove(classNames.DISABLED);\n this.$button.removeClass(classNames.DISABLED).attr('aria-disabled', false);\n }\n }\n },\n clickListener: function clickListener() {\n var that = this,\n $document = $(document);\n $document.data('spaceSelect', false);\n this.$button.on('keyup', function (e) {\n if (/(32)/.test(e.keyCode.toString(10)) && $document.data('spaceSelect')) {\n e.preventDefault();\n $document.data('spaceSelect', false);\n }\n });\n this.$newElement.on('show.bs.dropdown', function () {\n if (version.major > 3 && !that.dropdown) {\n that.dropdown = that.$button.data('bs.dropdown');\n that.dropdown._menu = that.$menu[0];\n }\n });\n this.$button.on('click.bs.dropdown.data-api', function () {\n if (!that.$newElement.hasClass(classNames.SHOW)) {\n that.setSize();\n }\n });\n\n function setFocus() {\n if (that.options.liveSearch) {\n that.$searchbox.trigger('focus');\n } else {\n that.$menuInner.trigger('focus');\n }\n }\n\n function checkPopperExists() {\n if (that.dropdown && that.dropdown._popper && that.dropdown._popper.state.isCreated) {\n setFocus();\n } else {\n requestAnimationFrame(checkPopperExists);\n }\n }\n\n this.$element.on('shown' + EVENT_KEY, function () {\n if (that.$menuInner[0].scrollTop !== that.selectpicker.view.scrollTop) {\n that.$menuInner[0].scrollTop = that.selectpicker.view.scrollTop;\n }\n\n if (version.major > 3) {\n requestAnimationFrame(checkPopperExists);\n } else {\n setFocus();\n }\n }); // ensure posinset and setsize are correct before selecting an option via a click\n\n this.$menuInner.on('mouseenter', 'li a', function (e) {\n var hoverLi = this.parentElement,\n position0 = that.isVirtual() ? that.selectpicker.view.position0 : 0,\n index = Array.prototype.indexOf.call(hoverLi.parentElement.children, hoverLi),\n hoverData = that.selectpicker.current.data[index + position0];\n that.focusItem(hoverLi, hoverData, true);\n });\n this.$menuInner.on('click', 'li a', function (e, retainActive) {\n var $this = $(this),\n element = that.$element[0],\n position0 = that.isVirtual() ? that.selectpicker.view.position0 : 0,\n clickedData = that.selectpicker.current.data[$this.parent().index() + position0],\n clickedIndex = clickedData.index,\n prevValue = getSelectValues(element),\n prevIndex = element.selectedIndex,\n prevOption = element.options[prevIndex],\n triggerChange = true; // Don't close on multi choice menu\n\n if (that.multiple && that.options.maxOptions !== 1) {\n e.stopPropagation();\n }\n\n e.preventDefault(); // Don't run if the select is disabled\n\n if (!that.isDisabled() && !$this.parent().hasClass(classNames.DISABLED)) {\n var option = clickedData.option,\n $option = $(option),\n state = option.selected,\n $optgroup = $option.parent('optgroup'),\n $optgroupOptions = $optgroup.find('option'),\n maxOptions = that.options.maxOptions,\n maxOptionsGrp = $optgroup.data('maxOptions') || false;\n if (clickedIndex === that.activeIndex) retainActive = true;\n\n if (!retainActive) {\n that.prevActiveIndex = that.activeIndex;\n that.activeIndex = undefined;\n }\n\n if (!that.multiple) {\n // Deselect all others if not multi select box\n if (prevOption) prevOption.selected = false;\n option.selected = true;\n that.setSelected(clickedIndex, true);\n } else {\n // Toggle the one we have chosen if we are multi select.\n option.selected = !state;\n that.setSelected(clickedIndex, !state);\n that.focusedParent.focus();\n\n if (maxOptions !== false || maxOptionsGrp !== false) {\n var maxReached = maxOptions < getSelectedOptions(element).length,\n maxReachedGrp = maxOptionsGrp < $optgroup.find('option:selected').length;\n\n if (maxOptions && maxReached || maxOptionsGrp && maxReachedGrp) {\n if (maxOptions && maxOptions == 1) {\n element.selectedIndex = -1;\n option.selected = true;\n that.setOptionStatus(true);\n } else if (maxOptionsGrp && maxOptionsGrp == 1) {\n for (var i = 0; i < $optgroupOptions.length; i++) {\n var _option = $optgroupOptions[i];\n _option.selected = false;\n that.setSelected(_option.liIndex, false);\n }\n\n option.selected = true;\n that.setSelected(clickedIndex, true);\n } else {\n var maxOptionsText = typeof that.options.maxOptionsText === 'string' ? [that.options.maxOptionsText, that.options.maxOptionsText] : that.options.maxOptionsText,\n maxOptionsArr = typeof maxOptionsText === 'function' ? maxOptionsText(maxOptions, maxOptionsGrp) : maxOptionsText,\n maxTxt = maxOptionsArr[0].replace('{n}', maxOptions),\n maxTxtGrp = maxOptionsArr[1].replace('{n}', maxOptionsGrp),\n $notify = $('<div class=\"notify\"></div>'); // If {var} is set in array, replace it\n\n /** @deprecated */\n\n if (maxOptionsArr[2]) {\n maxTxt = maxTxt.replace('{var}', maxOptionsArr[2][maxOptions > 1 ? 0 : 1]);\n maxTxtGrp = maxTxtGrp.replace('{var}', maxOptionsArr[2][maxOptionsGrp > 1 ? 0 : 1]);\n }\n\n option.selected = false;\n that.$menu.append($notify);\n\n if (maxOptions && maxReached) {\n $notify.append($('<div>' + maxTxt + '</div>'));\n triggerChange = false;\n that.$element.trigger('maxReached' + EVENT_KEY);\n }\n\n if (maxOptionsGrp && maxReachedGrp) {\n $notify.append($('<div>' + maxTxtGrp + '</div>'));\n triggerChange = false;\n that.$element.trigger('maxReachedGrp' + EVENT_KEY);\n }\n\n setTimeout(function () {\n that.setSelected(clickedIndex, false);\n }, 10);\n $notify[0].classList.add('fadeOut');\n setTimeout(function () {\n $notify.remove();\n }, 1050);\n }\n }\n }\n }\n\n if (!that.multiple || that.multiple && that.options.maxOptions === 1) {\n that.$button.trigger('focus');\n } else if (that.options.liveSearch) {\n that.$searchbox.trigger('focus');\n } // Trigger select 'change'\n\n\n if (triggerChange) {\n if (that.multiple || prevIndex !== element.selectedIndex) {\n // $option.prop('selected') is current option state (selected/unselected). prevValue is the value of the select prior to being changed.\n changedArguments = [option.index, $option.prop('selected'), prevValue];\n that.$element.triggerNative('change');\n }\n }\n }\n });\n this.$menu.on('click', 'li.' + classNames.DISABLED + ' a, .' + classNames.POPOVERHEADER + ', .' + classNames.POPOVERHEADER + ' :not(.close)', function (e) {\n if (e.currentTarget == this) {\n e.preventDefault();\n e.stopPropagation();\n\n if (that.options.liveSearch && !$(e.target).hasClass('close')) {\n that.$searchbox.trigger('focus');\n } else {\n that.$button.trigger('focus');\n }\n }\n });\n this.$menuInner.on('click', '.divider, .dropdown-header', function (e) {\n e.preventDefault();\n e.stopPropagation();\n\n if (that.options.liveSearch) {\n that.$searchbox.trigger('focus');\n } else {\n that.$button.trigger('focus');\n }\n });\n this.$menu.on('click', '.' + classNames.POPOVERHEADER + ' .close', function () {\n that.$button.trigger('click');\n });\n this.$searchbox.on('click', function (e) {\n e.stopPropagation();\n });\n this.$menu.on('click', '.actions-btn', function (e) {\n if (that.options.liveSearch) {\n that.$searchbox.trigger('focus');\n } else {\n that.$button.trigger('focus');\n }\n\n e.preventDefault();\n e.stopPropagation();\n\n if ($(this).hasClass('bs-select-all')) {\n that.selectAll();\n } else {\n that.deselectAll();\n }\n });\n this.$button.on('focus' + EVENT_KEY, function (e) {\n var tabindex = that.$element[0].getAttribute('tabindex'); // only change when button is actually focused\n\n if (tabindex !== undefined && e.originalEvent && e.originalEvent.isTrusted) {\n // apply select element's tabindex to ensure correct order is followed when tabbing to the next element\n this.setAttribute('tabindex', tabindex); // set element's tabindex to -1 to allow for reverse tabbing\n\n that.$element[0].setAttribute('tabindex', -1);\n that.selectpicker.view.tabindex = tabindex;\n }\n }).on('blur' + EVENT_KEY, function (e) {\n // revert everything to original tabindex\n if (that.selectpicker.view.tabindex !== undefined && e.originalEvent && e.originalEvent.isTrusted) {\n that.$element[0].setAttribute('tabindex', that.selectpicker.view.tabindex);\n this.setAttribute('tabindex', -1);\n that.selectpicker.view.tabindex = undefined;\n }\n });\n this.$element.on('change' + EVENT_KEY, function () {\n that.render();\n that.$element.trigger('changed' + EVENT_KEY, changedArguments);\n changedArguments = null;\n }).on('focus' + EVENT_KEY, function () {\n if (!that.options.mobile) that.$button[0].focus();\n });\n },\n liveSearchListener: function liveSearchListener() {\n var that = this;\n this.$button.on('click.bs.dropdown.data-api', function () {\n if (!!that.$searchbox.val()) {\n that.$searchbox.val('');\n that.selectpicker.search.previousValue = undefined;\n }\n });\n this.$searchbox.on('click.bs.dropdown.data-api focus.bs.dropdown.data-api touchend.bs.dropdown.data-api', function (e) {\n e.stopPropagation();\n });\n this.$searchbox.on('input propertychange', function () {\n var searchValue = that.$searchbox[0].value;\n that.selectpicker.search.elements = [];\n that.selectpicker.search.data = [];\n\n if (searchValue) {\n var i,\n searchMatch = [],\n q = searchValue.toUpperCase(),\n cache = {},\n cacheArr = [],\n searchStyle = that._searchStyle(),\n normalizeSearch = that.options.liveSearchNormalize;\n\n if (normalizeSearch) q = normalizeToBase(q);\n\n for (var i = 0; i < that.selectpicker.main.data.length; i++) {\n var li = that.selectpicker.main.data[i];\n\n if (!cache[i]) {\n cache[i] = stringSearch(li, q, searchStyle, normalizeSearch);\n }\n\n if (cache[i] && li.headerIndex !== undefined && cacheArr.indexOf(li.headerIndex) === -1) {\n if (li.headerIndex > 0) {\n cache[li.headerIndex - 1] = true;\n cacheArr.push(li.headerIndex - 1);\n }\n\n cache[li.headerIndex] = true;\n cacheArr.push(li.headerIndex);\n cache[li.lastIndex + 1] = true;\n }\n\n if (cache[i] && li.type !== 'optgroup-label') cacheArr.push(i);\n }\n\n for (var i = 0, cacheLen = cacheArr.length; i < cacheLen; i++) {\n var index = cacheArr[i],\n prevIndex = cacheArr[i - 1],\n li = that.selectpicker.main.data[index],\n liPrev = that.selectpicker.main.data[prevIndex];\n\n if (li.type !== 'divider' || li.type === 'divider' && liPrev && liPrev.type !== 'divider' && cacheLen - 1 !== i) {\n that.selectpicker.search.data.push(li);\n searchMatch.push(that.selectpicker.main.elements[index]);\n }\n }\n\n that.activeIndex = undefined;\n that.noScroll = true;\n that.$menuInner.scrollTop(0);\n that.selectpicker.search.elements = searchMatch;\n that.createView(true);\n showNoResults.call(that, searchMatch, searchValue);\n } else if (that.selectpicker.search.previousValue) {\n // for IE11 (#2402)\n that.$menuInner.scrollTop(0);\n that.createView(false);\n }\n\n that.selectpicker.search.previousValue = searchValue;\n });\n },\n _searchStyle: function _searchStyle() {\n return this.options.liveSearchStyle || 'contains';\n },\n val: function val(value) {\n var element = this.$element[0];\n\n if (typeof value !== 'undefined') {\n var prevValue = getSelectValues(element);\n changedArguments = [null, null, prevValue];\n this.$element.val(value).trigger('changed' + EVENT_KEY, changedArguments);\n\n if (this.$newElement.hasClass(classNames.SHOW)) {\n if (this.multiple) {\n this.setOptionStatus(true);\n } else {\n var liSelectedIndex = (element.options[element.selectedIndex] || {}).liIndex;\n\n if (typeof liSelectedIndex === 'number') {\n this.setSelected(this.selectedIndex, false);\n this.setSelected(liSelectedIndex, true);\n }\n }\n }\n\n this.render();\n changedArguments = null;\n return this.$element;\n } else {\n return this.$element.val();\n }\n },\n changeAll: function changeAll(status) {\n if (!this.multiple) return;\n if (typeof status === 'undefined') status = true;\n var element = this.$element[0],\n previousSelected = 0,\n currentSelected = 0,\n prevValue = getSelectValues(element);\n element.classList.add('bs-select-hidden');\n\n for (var i = 0, data = this.selectpicker.current.data, len = data.length; i < len; i++) {\n var liData = data[i],\n option = liData.option;\n\n if (option && !liData.disabled && liData.type !== 'divider') {\n if (liData.selected) previousSelected++;\n option.selected = status;\n if (status === true) currentSelected++;\n }\n }\n\n element.classList.remove('bs-select-hidden');\n if (previousSelected === currentSelected) return;\n this.setOptionStatus();\n changedArguments = [null, null, prevValue];\n this.$element.triggerNative('change');\n },\n selectAll: function selectAll() {\n return this.changeAll(true);\n },\n deselectAll: function deselectAll() {\n return this.changeAll(false);\n },\n toggle: function toggle(e) {\n e = e || window.event;\n if (e) e.stopPropagation();\n this.$button.trigger('click.bs.dropdown.data-api');\n },\n keydown: function keydown(e) {\n var $this = $(this),\n isToggle = $this.hasClass('dropdown-toggle'),\n $parent = isToggle ? $this.closest('.dropdown') : $this.closest(Selector.MENU),\n that = $parent.data('this'),\n $items = that.findLis(),\n index,\n isActive,\n liActive,\n activeLi,\n offset,\n updateScroll = false,\n downOnTab = e.which === keyCodes.TAB && !isToggle && !that.options.selectOnTab,\n isArrowKey = REGEXP_ARROW.test(e.which) || downOnTab,\n scrollTop = that.$menuInner[0].scrollTop,\n isVirtual = that.isVirtual(),\n position0 = isVirtual === true ? that.selectpicker.view.position0 : 0; // do nothing if a function key is pressed\n\n if (e.which >= 112 && e.which <= 123) return;\n isActive = that.$newElement.hasClass(classNames.SHOW);\n\n if (!isActive && (isArrowKey || e.which >= 48 && e.which <= 57 || e.which >= 96 && e.which <= 105 || e.which >= 65 && e.which <= 90)) {\n that.$button.trigger('click.bs.dropdown.data-api');\n\n if (that.options.liveSearch) {\n that.$searchbox.trigger('focus');\n return;\n }\n }\n\n if (e.which === keyCodes.ESCAPE && isActive) {\n e.preventDefault();\n that.$button.trigger('click.bs.dropdown.data-api').trigger('focus');\n }\n\n if (isArrowKey) {\n // if up or down\n if (!$items.length) return;\n liActive = that.selectpicker.main.elements[that.activeIndex];\n index = liActive ? Array.prototype.indexOf.call(liActive.parentElement.children, liActive) : -1;\n\n if (index !== -1) {\n that.defocusItem(liActive);\n }\n\n if (e.which === keyCodes.ARROW_UP) {\n // up\n if (index !== -1) index--;\n if (index + position0 < 0) index += $items.length;\n\n if (!that.selectpicker.view.canHighlight[index + position0]) {\n index = that.selectpicker.view.canHighlight.slice(0, index + position0).lastIndexOf(true) - position0;\n if (index === -1) index = $items.length - 1;\n }\n } else if (e.which === keyCodes.ARROW_DOWN || downOnTab) {\n // down\n index++;\n if (index + position0 >= that.selectpicker.view.canHighlight.length) index = that.selectpicker.view.firstHighlightIndex;\n\n if (!that.selectpicker.view.canHighlight[index + position0]) {\n index = index + 1 + that.selectpicker.view.canHighlight.slice(index + position0 + 1).indexOf(true);\n }\n }\n\n e.preventDefault();\n var liActiveIndex = position0 + index;\n\n if (e.which === keyCodes.ARROW_UP) {\n // up\n // scroll to bottom and highlight last option\n if (position0 === 0 && index === $items.length - 1) {\n that.$menuInner[0].scrollTop = that.$menuInner[0].scrollHeight;\n liActiveIndex = that.selectpicker.current.elements.length - 1;\n } else {\n activeLi = that.selectpicker.current.data[liActiveIndex];\n offset = activeLi.position - activeLi.height;\n updateScroll = offset < scrollTop;\n }\n } else if (e.which === keyCodes.ARROW_DOWN || downOnTab) {\n // down\n // scroll to top and highlight first option\n if (index === that.selectpicker.view.firstHighlightIndex) {\n that.$menuInner[0].scrollTop = 0;\n liActiveIndex = that.selectpicker.view.firstHighlightIndex;\n } else {\n activeLi = that.selectpicker.current.data[liActiveIndex];\n offset = activeLi.position - that.sizeInfo.menuInnerHeight;\n updateScroll = offset > scrollTop;\n }\n }\n\n liActive = that.selectpicker.current.elements[liActiveIndex];\n that.activeIndex = that.selectpicker.current.data[liActiveIndex].index;\n that.focusItem(liActive);\n that.selectpicker.view.currentActive = liActive;\n if (updateScroll) that.$menuInner[0].scrollTop = offset;\n\n if (that.options.liveSearch) {\n that.$searchbox.trigger('focus');\n } else {\n $this.trigger('focus');\n }\n } else if (!$this.is('input') && !REGEXP_TAB_OR_ESCAPE.test(e.which) || e.which === keyCodes.SPACE && that.selectpicker.keydown.keyHistory) {\n var searchMatch,\n matches = [],\n keyHistory;\n e.preventDefault();\n that.selectpicker.keydown.keyHistory += keyCodeMap[e.which];\n if (that.selectpicker.keydown.resetKeyHistory.cancel) clearTimeout(that.selectpicker.keydown.resetKeyHistory.cancel);\n that.selectpicker.keydown.resetKeyHistory.cancel = that.selectpicker.keydown.resetKeyHistory.start();\n keyHistory = that.selectpicker.keydown.keyHistory; // if all letters are the same, set keyHistory to just the first character when searching\n\n if (/^(.)\\1+$/.test(keyHistory)) {\n keyHistory = keyHistory.charAt(0);\n } // find matches\n\n\n for (var i = 0; i < that.selectpicker.current.data.length; i++) {\n var li = that.selectpicker.current.data[i],\n hasMatch;\n hasMatch = stringSearch(li, keyHistory, 'startsWith', true);\n\n if (hasMatch && that.selectpicker.view.canHighlight[i]) {\n matches.push(li.index);\n }\n }\n\n if (matches.length) {\n var matchIndex = 0;\n $items.removeClass('active').find('a').removeClass('active'); // either only one key has been pressed or they are all the same key\n\n if (keyHistory.length === 1) {\n matchIndex = matches.indexOf(that.activeIndex);\n\n if (matchIndex === -1 || matchIndex === matches.length - 1) {\n matchIndex = 0;\n } else {\n matchIndex++;\n }\n }\n\n searchMatch = matches[matchIndex];\n activeLi = that.selectpicker.main.data[searchMatch];\n\n if (scrollTop - activeLi.position > 0) {\n offset = activeLi.position - activeLi.height;\n updateScroll = true;\n } else {\n offset = activeLi.position - that.sizeInfo.menuInnerHeight; // if the option is already visible at the current scroll position, just keep it the same\n\n updateScroll = activeLi.position > scrollTop + that.sizeInfo.menuInnerHeight;\n }\n\n liActive = that.selectpicker.main.elements[searchMatch];\n that.activeIndex = matches[matchIndex];\n that.focusItem(liActive);\n if (liActive) liActive.firstChild.focus();\n if (updateScroll) that.$menuInner[0].scrollTop = offset;\n $this.trigger('focus');\n }\n } // Select focused option if \"Enter\", \"Spacebar\" or \"Tab\" (when selectOnTab is true) are pressed inside the menu.\n\n\n if (isActive && (e.which === keyCodes.SPACE && !that.selectpicker.keydown.keyHistory || e.which === keyCodes.ENTER || e.which === keyCodes.TAB && that.options.selectOnTab)) {\n if (e.which !== keyCodes.SPACE) e.preventDefault();\n\n if (!that.options.liveSearch || e.which !== keyCodes.SPACE) {\n that.$menuInner.find('.active a').trigger('click', true); // retain active class\n\n $this.trigger('focus');\n\n if (!that.options.liveSearch) {\n // Prevent screen from scrolling if the user hits the spacebar\n e.preventDefault(); // Fixes spacebar selection of dropdown items in FF & IE\n\n $(document).data('spaceSelect', true);\n }\n }\n }\n },\n mobile: function mobile() {\n // ensure mobile is set to true if mobile function is called after init\n this.options.mobile = true;\n this.$element[0].classList.add('mobile-device');\n },\n refresh: function refresh() {\n // update options if data attributes have been changed\n var config = $.extend({}, this.options, this.$element.data());\n this.options = config;\n this.checkDisabled();\n this.buildData();\n this.setStyle();\n this.render();\n this.buildList();\n this.setWidth();\n this.setSize(true);\n this.$element.trigger('refreshed' + EVENT_KEY);\n },\n hide: function hide() {\n this.$newElement.hide();\n },\n show: function show() {\n this.$newElement.show();\n },\n remove: function remove() {\n this.$newElement.remove();\n this.$element.remove();\n },\n destroy: function destroy() {\n this.$newElement.before(this.$element).remove();\n\n if (this.$bsContainer) {\n this.$bsContainer.remove();\n } else {\n this.$menu.remove();\n }\n\n if (this.selectpicker.view.titleOption && this.selectpicker.view.titleOption.parentNode) {\n this.selectpicker.view.titleOption.parentNode.removeChild(this.selectpicker.view.titleOption);\n }\n\n this.$element.off(EVENT_KEY).removeData('selectpicker').removeClass('bs-select-hidden selectpicker');\n $(window).off(EVENT_KEY + '.' + this.selectId);\n }\n }; // SELECTPICKER PLUGIN DEFINITION\n // ==============================\n\n function Plugin(option) {\n // get the args of the outer function..\n var args = arguments; // The arguments of the function are explicitly re-defined from the argument list, because the shift causes them\n // to get lost/corrupted in android 2.3 and IE9 #715 #775\n\n var _option = option;\n [].shift.apply(args); // if the version was not set successfully\n\n if (!version.success) {\n // try to retreive it again\n try {\n version.full = ($.fn.dropdown.Constructor.VERSION || '').split(' ')[0].split('.');\n } catch (err) {\n // fall back to use BootstrapVersion if set\n if (Selectpicker.BootstrapVersion) {\n version.full = Selectpicker.BootstrapVersion.split(' ')[0].split('.');\n } else {\n version.full = [version.major, '0', '0'];\n console.warn('There was an issue retrieving Bootstrap\\'s version. ' + 'Ensure Bootstrap is being loaded before bootstrap-select and there is no namespace collision. ' + 'If loading Bootstrap asynchronously, the version may need to be manually specified via $.fn.selectpicker.Constructor.BootstrapVersion.', err);\n }\n }\n\n version.major = version.full[0];\n version.success = true;\n }\n\n if (version.major === '4') {\n // some defaults need to be changed if using Bootstrap 4\n // check to see if they have already been manually changed before forcing them to update\n var toUpdate = [];\n if (Selectpicker.DEFAULTS.style === classNames.BUTTONCLASS) toUpdate.push({\n name: 'style',\n className: 'BUTTONCLASS'\n });\n if (Selectpicker.DEFAULTS.iconBase === classNames.ICONBASE) toUpdate.push({\n name: 'iconBase',\n className: 'ICONBASE'\n });\n if (Selectpicker.DEFAULTS.tickIcon === classNames.TICKICON) toUpdate.push({\n name: 'tickIcon',\n className: 'TICKICON'\n });\n classNames.DIVIDER = 'dropdown-divider';\n classNames.SHOW = 'show';\n classNames.BUTTONCLASS = 'btn-light';\n classNames.POPOVERHEADER = 'popover-header';\n classNames.ICONBASE = '';\n classNames.TICKICON = 'bs-ok-default';\n\n for (var i = 0; i < toUpdate.length; i++) {\n var option = toUpdate[i];\n Selectpicker.DEFAULTS[option.name] = classNames[option.className];\n }\n }\n\n var value;\n var chain = this.each(function () {\n var $this = $(this);\n\n if ($this.is('select')) {\n var data = $this.data('selectpicker'),\n options = _typeof(_option) == 'object' && _option;\n\n if (!data) {\n var dataAttributes = $this.data();\n\n for (var dataAttr in dataAttributes) {\n if (Object.prototype.hasOwnProperty.call(dataAttributes, dataAttr) && $.inArray(dataAttr, DISALLOWED_ATTRIBUTES) !== -1) {\n delete dataAttributes[dataAttr];\n }\n }\n\n var config = $.extend({}, Selectpicker.DEFAULTS, $.fn.selectpicker.defaults || {}, dataAttributes, options);\n config.template = $.extend({}, Selectpicker.DEFAULTS.template, $.fn.selectpicker.defaults ? $.fn.selectpicker.defaults.template : {}, dataAttributes.template, options.template);\n $this.data('selectpicker', data = new Selectpicker(this, config));\n } else if (options) {\n for (var i in options) {\n if (Object.prototype.hasOwnProperty.call(options, i)) {\n data.options[i] = options[i];\n }\n }\n }\n\n if (typeof _option == 'string') {\n if (data[_option] instanceof Function) {\n value = data[_option].apply(data, args);\n } else {\n value = data.options[_option];\n }\n }\n }\n });\n\n if (typeof value !== 'undefined') {\n // noinspection JSUnusedAssignment\n return value;\n } else {\n return chain;\n }\n }\n\n var old = $.fn.selectpicker;\n $.fn.selectpicker = Plugin;\n $.fn.selectpicker.Constructor = Selectpicker; // SELECTPICKER NO CONFLICT\n // ========================\n\n $.fn.selectpicker.noConflict = function () {\n $.fn.selectpicker = old;\n return this;\n }; // get Bootstrap's keydown event handler for either Bootstrap 4 or Bootstrap 3\n\n\n function keydownHandler() {\n if ($.fn.dropdown) {\n // wait to define until function is called in case Bootstrap isn't loaded yet\n var bootstrapKeydown = $.fn.dropdown.Constructor._dataApiKeydownHandler || $.fn.dropdown.Constructor.prototype.keydown;\n return bootstrapKeydown.apply(this, arguments);\n }\n }\n\n $(document).off('keydown.bs.dropdown.data-api').on('keydown.bs.dropdown.data-api', ':not(.bootstrap-select) > [data-toggle=\"dropdown\"]', keydownHandler).on('keydown.bs.dropdown.data-api', ':not(.bootstrap-select) > .dropdown-menu', keydownHandler).on('keydown' + EVENT_KEY, '.bootstrap-select [data-toggle=\"dropdown\"], .bootstrap-select [role=\"listbox\"], .bootstrap-select .bs-searchbox input', Selectpicker.prototype.keydown).on('focusin.modal', '.bootstrap-select [data-toggle=\"dropdown\"], .bootstrap-select [role=\"listbox\"], .bootstrap-select .bs-searchbox input', function (e) {\n e.stopPropagation();\n }); // SELECTPICKER DATA-API\n // =====================\n\n $(window).on('load' + EVENT_KEY + '.data-api', function () {\n $('.selectpicker').each(function () {\n var $selectpicker = $(this);\n Plugin.call($selectpicker, $selectpicker.data());\n });\n });\n })(jQuery);\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*!\n * typeahead.js 1.3.1\n * https://github.com/corejavascript/typeahead.js\n * Copyright 2013-2020 Twitter, Inc. and other contributors; Licensed MIT\n */\n(function (root, factory) {\n if (typeof define === \"function\" && define.amd) {\n define([\"jquery\"], function (a0) {\n return factory(a0);\n });\n } else if ((typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) === \"object\" && module.exports) {\n module.exports = factory(require(\"jquery\"));\n } else {\n factory(root[\"jQuery\"]);\n }\n})(this, function ($) {\n var _ = function () {\n \"use strict\";\n\n return {\n isMsie: function isMsie() {\n return /(msie|trident)/i.test(navigator.userAgent) ? navigator.userAgent.match(/(msie |rv:)(\\d+(.\\d+)?)/i)[2] : false;\n },\n isBlankString: function isBlankString(str) {\n return !str || /^\\s*$/.test(str);\n },\n escapeRegExChars: function escapeRegExChars(str) {\n return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\");\n },\n isString: function isString(obj) {\n return typeof obj === \"string\";\n },\n isNumber: function isNumber(obj) {\n return typeof obj === \"number\";\n },\n isArray: $.isArray,\n isFunction: $.isFunction,\n isObject: $.isPlainObject,\n isUndefined: function isUndefined(obj) {\n return typeof obj === \"undefined\";\n },\n isElement: function isElement(obj) {\n return !!(obj && obj.nodeType === 1);\n },\n isJQuery: function isJQuery(obj) {\n return obj instanceof $;\n },\n toStr: function toStr(s) {\n return _.isUndefined(s) || s === null ? \"\" : s + \"\";\n },\n bind: $.proxy,\n each: function each(collection, cb) {\n $.each(collection, reverseArgs);\n\n function reverseArgs(index, value) {\n return cb(value, index);\n }\n },\n map: $.map,\n filter: $.grep,\n every: function every(obj, test) {\n var result = true;\n\n if (!obj) {\n return result;\n }\n\n $.each(obj, function (key, val) {\n if (!(result = test.call(null, val, key, obj))) {\n return false;\n }\n });\n return !!result;\n },\n some: function some(obj, test) {\n var result = false;\n\n if (!obj) {\n return result;\n }\n\n $.each(obj, function (key, val) {\n if (result = test.call(null, val, key, obj)) {\n return false;\n }\n });\n return !!result;\n },\n mixin: $.extend,\n identity: function identity(x) {\n return x;\n },\n clone: function clone(obj) {\n return $.extend(true, {}, obj);\n },\n getIdGenerator: function getIdGenerator() {\n var counter = 0;\n return function () {\n return counter++;\n };\n },\n templatify: function templatify(obj) {\n return $.isFunction(obj) ? obj : template;\n\n function template() {\n return String(obj);\n }\n },\n defer: function defer(fn) {\n setTimeout(fn, 0);\n },\n debounce: function debounce(func, wait, immediate) {\n var timeout, result;\n return function () {\n var context = this,\n args = arguments,\n later,\n callNow;\n\n later = function later() {\n timeout = null;\n\n if (!immediate) {\n result = func.apply(context, args);\n }\n };\n\n callNow = immediate && !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n\n if (callNow) {\n result = func.apply(context, args);\n }\n\n return result;\n };\n },\n throttle: function throttle(func, wait) {\n var context, args, timeout, result, previous, later;\n previous = 0;\n\n later = function later() {\n previous = new Date();\n timeout = null;\n result = func.apply(context, args);\n };\n\n return function () {\n var now = new Date(),\n remaining = wait - (now - previous);\n context = this;\n args = arguments;\n\n if (remaining <= 0) {\n clearTimeout(timeout);\n timeout = null;\n previous = now;\n result = func.apply(context, args);\n } else if (!timeout) {\n timeout = setTimeout(later, remaining);\n }\n\n return result;\n };\n },\n stringify: function stringify(val) {\n return _.isString(val) ? val : JSON.stringify(val);\n },\n guid: function guid() {\n function _p8(s) {\n var p = (Math.random().toString(16) + \"000000000\").substr(2, 8);\n return s ? \"-\" + p.substr(0, 4) + \"-\" + p.substr(4, 4) : p;\n }\n\n return \"tt-\" + _p8() + _p8(true) + _p8(true) + _p8();\n },\n noop: function noop() {}\n };\n }();\n\n var WWW = function () {\n \"use strict\";\n\n var defaultClassNames = {\n wrapper: \"twitter-typeahead\",\n input: \"tt-input\",\n hint: \"tt-hint\",\n menu: \"tt-menu\",\n dataset: \"tt-dataset\",\n suggestion: \"tt-suggestion\",\n selectable: \"tt-selectable\",\n empty: \"tt-empty\",\n open: \"tt-open\",\n cursor: \"tt-cursor\",\n highlight: \"tt-highlight\"\n };\n return build;\n\n function build(o) {\n var www, classes;\n classes = _.mixin({}, defaultClassNames, o);\n www = {\n css: buildCss(),\n classes: classes,\n html: buildHtml(classes),\n selectors: buildSelectors(classes)\n };\n return {\n css: www.css,\n html: www.html,\n classes: www.classes,\n selectors: www.selectors,\n mixin: function mixin(o) {\n _.mixin(o, www);\n }\n };\n }\n\n function buildHtml(c) {\n return {\n wrapper: '<span class=\"' + c.wrapper + '\"></span>',\n menu: '<div role=\"listbox\" class=\"' + c.menu + '\"></div>'\n };\n }\n\n function buildSelectors(classes) {\n var selectors = {};\n\n _.each(classes, function (v, k) {\n selectors[k] = \".\" + v;\n });\n\n return selectors;\n }\n\n function buildCss() {\n var css = {\n wrapper: {\n position: \"relative\",\n display: \"inline-block\"\n },\n hint: {\n position: \"absolute\",\n top: \"0\",\n left: \"0\",\n borderColor: \"transparent\",\n boxShadow: \"none\",\n opacity: \"1\"\n },\n input: {\n position: \"relative\",\n verticalAlign: \"top\",\n backgroundColor: \"transparent\"\n },\n inputWithNoHint: {\n position: \"relative\",\n verticalAlign: \"top\"\n },\n menu: {\n position: \"absolute\",\n top: \"100%\",\n left: \"0\",\n zIndex: \"100\",\n display: \"none\"\n },\n ltr: {\n left: \"0\",\n right: \"auto\"\n },\n rtl: {\n left: \"auto\",\n right: \" 0\"\n }\n };\n\n if (_.isMsie()) {\n _.mixin(css.input, {\n backgroundImage: \"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)\"\n });\n }\n\n return css;\n }\n }();\n\n var EventBus = function () {\n \"use strict\";\n\n var namespace, deprecationMap;\n namespace = \"typeahead:\";\n deprecationMap = {\n render: \"rendered\",\n cursorchange: \"cursorchanged\",\n select: \"selected\",\n autocomplete: \"autocompleted\"\n };\n\n function EventBus(o) {\n if (!o || !o.el) {\n $.error(\"EventBus initialized without el\");\n }\n\n this.$el = $(o.el);\n }\n\n _.mixin(EventBus.prototype, {\n _trigger: function _trigger(type, args) {\n var $e = $.Event(namespace + type);\n this.$el.trigger.call(this.$el, $e, args || []);\n return $e;\n },\n before: function before(type) {\n var args, $e;\n args = [].slice.call(arguments, 1);\n $e = this._trigger(\"before\" + type, args);\n return $e.isDefaultPrevented();\n },\n trigger: function trigger(type) {\n var deprecatedType;\n\n this._trigger(type, [].slice.call(arguments, 1));\n\n if (deprecatedType = deprecationMap[type]) {\n this._trigger(deprecatedType, [].slice.call(arguments, 1));\n }\n }\n });\n\n return EventBus;\n }();\n\n var EventEmitter = function () {\n \"use strict\";\n\n var splitter = /\\s+/,\n nextTick = getNextTick();\n return {\n onSync: onSync,\n onAsync: onAsync,\n off: off,\n trigger: trigger\n };\n\n function on(method, types, cb, context) {\n var type;\n\n if (!cb) {\n return this;\n }\n\n types = types.split(splitter);\n cb = context ? bindContext(cb, context) : cb;\n this._callbacks = this._callbacks || {};\n\n while (type = types.shift()) {\n this._callbacks[type] = this._callbacks[type] || {\n sync: [],\n async: []\n };\n\n this._callbacks[type][method].push(cb);\n }\n\n return this;\n }\n\n function onAsync(types, cb, context) {\n return on.call(this, \"async\", types, cb, context);\n }\n\n function onSync(types, cb, context) {\n return on.call(this, \"sync\", types, cb, context);\n }\n\n function off(types) {\n var type;\n\n if (!this._callbacks) {\n return this;\n }\n\n types = types.split(splitter);\n\n while (type = types.shift()) {\n delete this._callbacks[type];\n }\n\n return this;\n }\n\n function trigger(types) {\n var type, callbacks, args, syncFlush, asyncFlush;\n\n if (!this._callbacks) {\n return this;\n }\n\n types = types.split(splitter);\n args = [].slice.call(arguments, 1);\n\n while ((type = types.shift()) && (callbacks = this._callbacks[type])) {\n syncFlush = getFlush(callbacks.sync, this, [type].concat(args));\n asyncFlush = getFlush(callbacks.async, this, [type].concat(args));\n syncFlush() && nextTick(asyncFlush);\n }\n\n return this;\n }\n\n function getFlush(callbacks, context, args) {\n return flush;\n\n function flush() {\n var cancelled;\n\n for (var i = 0, len = callbacks.length; !cancelled && i < len; i += 1) {\n cancelled = callbacks[i].apply(context, args) === false;\n }\n\n return !cancelled;\n }\n }\n\n function getNextTick() {\n var nextTickFn;\n\n if (window.setImmediate) {\n nextTickFn = function nextTickSetImmediate(fn) {\n setImmediate(function () {\n fn();\n });\n };\n } else {\n nextTickFn = function nextTickSetTimeout(fn) {\n setTimeout(function () {\n fn();\n }, 0);\n };\n }\n\n return nextTickFn;\n }\n\n function bindContext(fn, context) {\n return fn.bind ? fn.bind(context) : function () {\n fn.apply(context, [].slice.call(arguments, 0));\n };\n }\n }();\n\n var highlight = function (doc) {\n \"use strict\";\n\n var defaults = {\n node: null,\n pattern: null,\n tagName: \"strong\",\n className: null,\n wordsOnly: false,\n caseSensitive: false,\n diacriticInsensitive: false\n };\n var accented = {\n A: \"[AaªÀ-Ã…Ã -åĀ-Ä…ÇÇŽÈ€-ȃȦȧᴬᵃḀá¸áºšáº -ảâ‚â„€â„℻⒜Ⓐâ“ã±-ã´ãŽ€-㎄㎈㎉㎩-㎯ã‚ãŠãŸã¿ï¼¡ï½]\",\n B: \"[BbᴮᵇḂ-ḇℬâ’â’·â“‘ã´ãŽ…-㎇ãƒãˆã”ãBb]\",\n C: \"[CcÇçĆ-Äᶜ℀ℂ℃℅℆â„â…ⅽ⒞Ⓒⓒã¶ãŽˆãŽ‰ãŽãŽ ㎤ã„-ã‡ï¼£ï½ƒ]\",\n D: \"[DdÄŽÄÇ„-džDZ-dzᴰᵈḊ-ḓⅅⅆⅮⅾ⒟Ⓓⓓã‹ã²ã·-ã¹ãŽ—ãŽ-㎯ã…ãˆï¼¤ï½„]\",\n E: \"[EeÈ-Ëè-ëĒ-ěȄ-ȇȨȩᴱᵉḘ-ḛẸ-ẽₑ℡ℯℰⅇ⒠Ⓔⓔã‰ã‹ã‹Žï¼¥ï½…]\",\n F: \"[FfᶠḞḟ℉ℱ℻⒡Ⓕⓕ㎊-㎌㎙ff-fflFf]\",\n G: \"[GgÄœ-ģǦǧǴǵᴳáµá¸ ḡℊ⒢Ⓖⓖ㋌ã‹ãŽ‡ãŽ-ãŽãŽ“㎬ã†ã‰ã’ã¿ï¼§ï½‡]\",\n H: \"[HhĤĥȞȟʰᴴḢ-ḫẖℋ-ℎ⒣Ⓗⓗ㋌ã±ãŽ-㎔ãŠã‹ã—Hh]\",\n I: \"[IiÃŒ-Ãì-ïĨ-İIJijÇÇȈ-ȋᴵᵢḬá¸á»ˆ-ịâ±â„â„‘â„¹â…ˆâ… -ⅣⅥ-ⅨⅪⅫⅰ-ⅳⅵ-ⅸⅺⅻ⒤ⒾⓘãºãŒã•ï¬ï¬ƒï¼©ï½‰]\",\n J: \"[JjIJ-ĵLJ-njǰʲᴶⅉ⒥ⒿⓙⱼJj]\",\n K: \"[KkĶķǨǩᴷáµá¸°-ḵK⒦Ⓚⓚ㎄㎅㎉ãŽãŽ‘㎘㎞㎢㎦㎪㎸㎾ã€ã†ã-ãKk]\",\n L: \"[LlĹ-ŀLJ-ljˡᴸḶḷḺ-ḽℒℓ℡Ⅼⅼ⒧â“â“›ã‹ãŽˆãŽ‰ã-ã“ã•ã–ã¿ï¬‚fflLl]\",\n M: \"[Mmá´¹áµá¸¾-ṃ℠™ℳⅯⅿ⒨Ⓜⓜã·-ã¹ãŽƒãŽ†ãŽŽãŽ’㎖㎙-㎨㎫㎳㎷㎹㎽㎿ãã‚ãŽãã”-ã–ã˜ã™ãžãŸï¼ï½]\",\n N: \"[NnÑñŃ-ʼnNJ-njǸǹᴺṄ-ṋâ¿â„•â„–⒩Ⓝâ“ãŽãŽ‹ãŽšãŽ±ãŽµãŽ»ãŒã‘Nn]\",\n O: \"[OoºÒ-Öò-öŌ-Å‘Æ Æ¡Ç‘Ç’ÇªÇ«ÈŒ-ÈȮȯᴼᵒỌ-á»â‚’℅№ℴ⒪Ⓞⓞãµã‡ã’ã–Oï½]\",\n P: \"[PpᴾᵖṔ-ṗℙ⒫Ⓟⓟã‰ã±ã¶ãŽ€ãŽŠãŽ©-㎬㎰㎴㎺ã‹ã—-ãšï¼°ï½]\",\n Q: \"[Qqℚ⒬Ⓠⓠãƒï¼±ï½‘]\",\n R: \"[RrÅ”-Å™È-ȓʳᴿᵣṘ-ṛṞṟ₨ℛ-â„â’Ⓡⓡã‹ã´ãŽ-㎯ãšã›ï¼²ï½’]\",\n S: \"[SsÅš-šſȘșˢṠ-ṣ₨â„℠⒮Ⓢⓢ㎧㎨㎮-㎳ã›ãœï¬†ï¼³ï½“]\",\n T: \"[TtÅ¢-ťȚțᵀᵗṪ-ṱẗ℡™⒯Ⓣⓣã‰ã‹ãŽ”ãſtstTt]\",\n U: \"[UuÙ-Üù-üŨ-ųƯưǓǔȔ-È—áµáµ˜áµ¤á¹²-ṷỤ-ủ℆⒰Ⓤⓤã³ãºï¼µï½•]\",\n V: \"[VvᵛᵥṼ-ṿⅣ-Ⅷⅳ-ⅷ⒱Ⓥⓥⱽ㋎ãµãŽ´-㎹ãœãžï¼¶ï½–]\",\n W: \"[WwŴŵʷᵂẀ-ẉẘ⒲Ⓦⓦ㎺-㎿ãï¼·ï½—]\",\n X: \"[XxˣẊ-áºâ‚“℻Ⅸ-â…«â…¸-ⅻ⒳â“ⓧã“Xx]\",\n Y: \"[YyÃýÿŶ-ŸȲȳʸẎáºáº™á»²-ỹ⒴Ⓨⓨã‰ï¼¹ï½™]\",\n Z: \"[ZzŹ-žDZ-dzᶻáº-ẕℤℨ⒵â“â“©ãŽ-㎔Zz]\"\n };\n return function hightlight(o) {\n var regex;\n o = _.mixin({}, defaults, o);\n\n if (!o.node || !o.pattern) {\n return;\n }\n\n o.pattern = _.isArray(o.pattern) ? o.pattern : [o.pattern];\n regex = getRegex(o.pattern, o.caseSensitive, o.wordsOnly, o.diacriticInsensitive);\n traverse(o.node, hightlightTextNode);\n\n function hightlightTextNode(textNode) {\n var match, patternNode, wrapperNode;\n\n if (match = regex.exec(textNode.data)) {\n wrapperNode = doc.createElement(o.tagName);\n o.className && (wrapperNode.className = o.className);\n patternNode = textNode.splitText(match.index);\n patternNode.splitText(match[0].length);\n wrapperNode.appendChild(patternNode.cloneNode(true));\n textNode.parentNode.replaceChild(wrapperNode, patternNode);\n }\n\n return !!match;\n }\n\n function traverse(el, hightlightTextNode) {\n var childNode,\n TEXT_NODE_TYPE = 3;\n\n for (var i = 0; i < el.childNodes.length; i++) {\n childNode = el.childNodes[i];\n\n if (childNode.nodeType === TEXT_NODE_TYPE) {\n i += hightlightTextNode(childNode) ? 1 : 0;\n } else {\n traverse(childNode, hightlightTextNode);\n }\n }\n }\n };\n\n function accent_replacer(chr) {\n return accented[chr.toUpperCase()] || chr;\n }\n\n function getRegex(patterns, caseSensitive, wordsOnly, diacriticInsensitive) {\n var escapedPatterns = [],\n regexStr;\n\n for (var i = 0, len = patterns.length; i < len; i++) {\n var escapedWord = _.escapeRegExChars(patterns[i]);\n\n if (diacriticInsensitive) {\n escapedWord = escapedWord.replace(/\\S/g, accent_replacer);\n }\n\n escapedPatterns.push(escapedWord);\n }\n\n regexStr = wordsOnly ? \"\\\\b(\" + escapedPatterns.join(\"|\") + \")\\\\b\" : \"(\" + escapedPatterns.join(\"|\") + \")\";\n return caseSensitive ? new RegExp(regexStr) : new RegExp(regexStr, \"i\");\n }\n }(window.document);\n\n var Input = function () {\n \"use strict\";\n\n var specialKeyCodeMap;\n specialKeyCodeMap = {\n 9: \"tab\",\n 27: \"esc\",\n 37: \"left\",\n 39: \"right\",\n 13: \"enter\",\n 38: \"up\",\n 40: \"down\"\n };\n\n function Input(o, www) {\n var id;\n o = o || {};\n\n if (!o.input) {\n $.error(\"input is missing\");\n }\n\n www.mixin(this);\n this.$hint = $(o.hint);\n this.$input = $(o.input);\n this.$menu = $(o.menu);\n id = this.$input.attr(\"id\") || _.guid();\n this.$menu.attr(\"id\", id + \"_listbox\");\n this.$hint.attr({\n \"aria-hidden\": true\n });\n this.$input.attr({\n \"aria-owns\": id + \"_listbox\",\n role: \"combobox\",\n \"aria-autocomplete\": \"list\",\n \"aria-expanded\": false\n });\n this.query = this.$input.val();\n this.queryWhenFocused = this.hasFocus() ? this.query : null;\n this.$overflowHelper = buildOverflowHelper(this.$input);\n\n this._checkLanguageDirection();\n\n if (this.$hint.length === 0) {\n this.setHint = this.getHint = this.clearHint = this.clearHintIfInvalid = _.noop;\n }\n\n this.onSync(\"cursorchange\", this._updateDescendent);\n }\n\n Input.normalizeQuery = function (str) {\n return _.toStr(str).replace(/^\\s*/g, \"\").replace(/\\s{2,}/g, \" \");\n };\n\n _.mixin(Input.prototype, EventEmitter, {\n _onBlur: function onBlur() {\n this.resetInputValue();\n this.trigger(\"blurred\");\n },\n _onFocus: function onFocus() {\n this.queryWhenFocused = this.query;\n this.trigger(\"focused\");\n },\n _onKeydown: function onKeydown($e) {\n var keyName = specialKeyCodeMap[$e.which || $e.keyCode];\n\n this._managePreventDefault(keyName, $e);\n\n if (keyName && this._shouldTrigger(keyName, $e)) {\n this.trigger(keyName + \"Keyed\", $e);\n }\n },\n _onInput: function onInput() {\n this._setQuery(this.getInputValue());\n\n this.clearHintIfInvalid();\n\n this._checkLanguageDirection();\n },\n _managePreventDefault: function managePreventDefault(keyName, $e) {\n var preventDefault;\n\n switch (keyName) {\n case \"up\":\n case \"down\":\n preventDefault = !withModifier($e);\n break;\n\n default:\n preventDefault = false;\n }\n\n preventDefault && $e.preventDefault();\n },\n _shouldTrigger: function shouldTrigger(keyName, $e) {\n var trigger;\n\n switch (keyName) {\n case \"tab\":\n trigger = !withModifier($e);\n break;\n\n default:\n trigger = true;\n }\n\n return trigger;\n },\n _checkLanguageDirection: function checkLanguageDirection() {\n var dir = (this.$input.css(\"direction\") || \"ltr\").toLowerCase();\n\n if (this.dir !== dir) {\n this.dir = dir;\n this.$hint.attr(\"dir\", dir);\n this.trigger(\"langDirChanged\", dir);\n }\n },\n _setQuery: function setQuery(val, silent) {\n var areEquivalent, hasDifferentWhitespace;\n areEquivalent = areQueriesEquivalent(val, this.query);\n hasDifferentWhitespace = areEquivalent ? this.query.length !== val.length : false;\n this.query = val;\n\n if (!silent && !areEquivalent) {\n this.trigger(\"queryChanged\", this.query);\n } else if (!silent && hasDifferentWhitespace) {\n this.trigger(\"whitespaceChanged\", this.query);\n }\n },\n _updateDescendent: function updateDescendent(event, id) {\n this.$input.attr(\"aria-activedescendant\", id);\n },\n bind: function bind() {\n var that = this,\n onBlur,\n onFocus,\n onKeydown,\n onInput;\n onBlur = _.bind(this._onBlur, this);\n onFocus = _.bind(this._onFocus, this);\n onKeydown = _.bind(this._onKeydown, this);\n onInput = _.bind(this._onInput, this);\n this.$input.on(\"blur.tt\", onBlur).on(\"focus.tt\", onFocus).on(\"keydown.tt\", onKeydown);\n\n if (!_.isMsie() || _.isMsie() > 9) {\n this.$input.on(\"input.tt\", onInput);\n } else {\n this.$input.on(\"keydown.tt keypress.tt cut.tt paste.tt\", function ($e) {\n if (specialKeyCodeMap[$e.which || $e.keyCode]) {\n return;\n }\n\n _.defer(_.bind(that._onInput, that, $e));\n });\n }\n\n return this;\n },\n focus: function focus() {\n this.$input.focus();\n },\n blur: function blur() {\n this.$input.blur();\n },\n getLangDir: function getLangDir() {\n return this.dir;\n },\n getQuery: function getQuery() {\n return this.query || \"\";\n },\n setQuery: function setQuery(val, silent) {\n this.setInputValue(val);\n\n this._setQuery(val, silent);\n },\n hasQueryChangedSinceLastFocus: function hasQueryChangedSinceLastFocus() {\n return this.query !== this.queryWhenFocused;\n },\n getInputValue: function getInputValue() {\n return this.$input.val();\n },\n setInputValue: function setInputValue(value) {\n this.$input.val(value);\n this.clearHintIfInvalid();\n\n this._checkLanguageDirection();\n },\n resetInputValue: function resetInputValue() {\n this.setInputValue(this.query);\n },\n getHint: function getHint() {\n return this.$hint.val();\n },\n setHint: function setHint(value) {\n this.$hint.val(value);\n },\n clearHint: function clearHint() {\n this.setHint(\"\");\n },\n clearHintIfInvalid: function clearHintIfInvalid() {\n var val, hint, valIsPrefixOfHint, isValid;\n val = this.getInputValue();\n hint = this.getHint();\n valIsPrefixOfHint = val !== hint && hint.indexOf(val) === 0;\n isValid = val !== \"\" && valIsPrefixOfHint && !this.hasOverflow();\n !isValid && this.clearHint();\n },\n hasFocus: function hasFocus() {\n return this.$input.is(\":focus\");\n },\n hasOverflow: function hasOverflow() {\n var constraint = this.$input.width() - 2;\n this.$overflowHelper.text(this.getInputValue());\n return this.$overflowHelper.width() >= constraint;\n },\n isCursorAtEnd: function isCursorAtEnd() {\n var valueLength, selectionStart, range;\n valueLength = this.$input.val().length;\n selectionStart = this.$input[0].selectionStart;\n\n if (_.isNumber(selectionStart)) {\n return selectionStart === valueLength;\n } else if (document.selection) {\n range = document.selection.createRange();\n range.moveStart(\"character\", -valueLength);\n return valueLength === range.text.length;\n }\n\n return true;\n },\n destroy: function destroy() {\n this.$hint.off(\".tt\");\n this.$input.off(\".tt\");\n this.$overflowHelper.remove();\n this.$hint = this.$input = this.$overflowHelper = $(\"<div>\");\n },\n setAriaExpanded: function setAriaExpanded(value) {\n this.$input.attr(\"aria-expanded\", value);\n }\n });\n\n return Input;\n\n function buildOverflowHelper($input) {\n return $('<pre aria-hidden=\"true\"></pre>').css({\n position: \"absolute\",\n visibility: \"hidden\",\n whiteSpace: \"pre\",\n fontFamily: $input.css(\"font-family\"),\n fontSize: $input.css(\"font-size\"),\n fontStyle: $input.css(\"font-style\"),\n fontVariant: $input.css(\"font-variant\"),\n fontWeight: $input.css(\"font-weight\"),\n wordSpacing: $input.css(\"word-spacing\"),\n letterSpacing: $input.css(\"letter-spacing\"),\n textIndent: $input.css(\"text-indent\"),\n textRendering: $input.css(\"text-rendering\"),\n textTransform: $input.css(\"text-transform\")\n }).insertAfter($input);\n }\n\n function areQueriesEquivalent(a, b) {\n return Input.normalizeQuery(a) === Input.normalizeQuery(b);\n }\n\n function withModifier($e) {\n return $e.altKey || $e.ctrlKey || $e.metaKey || $e.shiftKey;\n }\n }();\n\n var Dataset = function () {\n \"use strict\";\n\n var keys, nameGenerator;\n keys = {\n dataset: \"tt-selectable-dataset\",\n val: \"tt-selectable-display\",\n obj: \"tt-selectable-object\"\n };\n nameGenerator = _.getIdGenerator();\n\n function Dataset(o, www) {\n o = o || {};\n o.templates = o.templates || {};\n o.templates.notFound = o.templates.notFound || o.templates.empty;\n\n if (!o.source) {\n $.error(\"missing source\");\n }\n\n if (!o.node) {\n $.error(\"missing node\");\n }\n\n if (o.name && !isValidName(o.name)) {\n $.error(\"invalid dataset name: \" + o.name);\n }\n\n www.mixin(this);\n this.highlight = !!o.highlight;\n this.name = _.toStr(o.name || nameGenerator());\n this.limit = o.limit || 5;\n this.displayFn = getDisplayFn(o.display || o.displayKey);\n this.templates = getTemplates(o.templates, this.displayFn);\n this.source = o.source.__ttAdapter ? o.source.__ttAdapter() : o.source;\n this.async = _.isUndefined(o.async) ? this.source.length > 2 : !!o.async;\n\n this._resetLastSuggestion();\n\n this.$el = $(o.node).attr(\"role\", \"presentation\").addClass(this.classes.dataset).addClass(this.classes.dataset + \"-\" + this.name);\n }\n\n Dataset.extractData = function extractData(el) {\n var $el = $(el);\n\n if ($el.data(keys.obj)) {\n return {\n dataset: $el.data(keys.dataset) || \"\",\n val: $el.data(keys.val) || \"\",\n obj: $el.data(keys.obj) || null\n };\n }\n\n return null;\n };\n\n _.mixin(Dataset.prototype, EventEmitter, {\n _overwrite: function overwrite(query, suggestions) {\n suggestions = suggestions || [];\n\n if (suggestions.length) {\n this._renderSuggestions(query, suggestions);\n } else if (this.async && this.templates.pending) {\n this._renderPending(query);\n } else if (!this.async && this.templates.notFound) {\n this._renderNotFound(query);\n } else {\n this._empty();\n }\n\n this.trigger(\"rendered\", suggestions, false, this.name);\n },\n _append: function append(query, suggestions) {\n suggestions = suggestions || [];\n\n if (suggestions.length && this.$lastSuggestion.length) {\n this._appendSuggestions(query, suggestions);\n } else if (suggestions.length) {\n this._renderSuggestions(query, suggestions);\n } else if (!this.$lastSuggestion.length && this.templates.notFound) {\n this._renderNotFound(query);\n }\n\n this.trigger(\"rendered\", suggestions, true, this.name);\n },\n _renderSuggestions: function renderSuggestions(query, suggestions) {\n var $fragment;\n $fragment = this._getSuggestionsFragment(query, suggestions);\n this.$lastSuggestion = $fragment.children().last();\n this.$el.html($fragment).prepend(this._getHeader(query, suggestions)).append(this._getFooter(query, suggestions));\n },\n _appendSuggestions: function appendSuggestions(query, suggestions) {\n var $fragment, $lastSuggestion;\n $fragment = this._getSuggestionsFragment(query, suggestions);\n $lastSuggestion = $fragment.children().last();\n this.$lastSuggestion.after($fragment);\n this.$lastSuggestion = $lastSuggestion;\n },\n _renderPending: function renderPending(query) {\n var template = this.templates.pending;\n\n this._resetLastSuggestion();\n\n template && this.$el.html(template({\n query: query,\n dataset: this.name\n }));\n },\n _renderNotFound: function renderNotFound(query) {\n var template = this.templates.notFound;\n\n this._resetLastSuggestion();\n\n template && this.$el.html(template({\n query: query,\n dataset: this.name\n }));\n },\n _empty: function empty() {\n this.$el.empty();\n\n this._resetLastSuggestion();\n },\n _getSuggestionsFragment: function getSuggestionsFragment(query, suggestions) {\n var that = this,\n fragment;\n fragment = document.createDocumentFragment();\n\n _.each(suggestions, function getSuggestionNode(suggestion) {\n var $el, context;\n context = that._injectQuery(query, suggestion);\n $el = $(that.templates.suggestion(context)).data(keys.dataset, that.name).data(keys.obj, suggestion).data(keys.val, that.displayFn(suggestion)).addClass(that.classes.suggestion + \" \" + that.classes.selectable);\n fragment.appendChild($el[0]);\n });\n\n this.highlight && highlight({\n className: this.classes.highlight,\n node: fragment,\n pattern: query\n });\n return $(fragment);\n },\n _getFooter: function getFooter(query, suggestions) {\n return this.templates.footer ? this.templates.footer({\n query: query,\n suggestions: suggestions,\n dataset: this.name\n }) : null;\n },\n _getHeader: function getHeader(query, suggestions) {\n return this.templates.header ? this.templates.header({\n query: query,\n suggestions: suggestions,\n dataset: this.name\n }) : null;\n },\n _resetLastSuggestion: function resetLastSuggestion() {\n this.$lastSuggestion = $();\n },\n _injectQuery: function injectQuery(query, obj) {\n return _.isObject(obj) ? _.mixin({\n _query: query\n }, obj) : obj;\n },\n update: function update(query) {\n var that = this,\n canceled = false,\n syncCalled = false,\n rendered = 0;\n this.cancel();\n\n this.cancel = function cancel() {\n canceled = true;\n that.cancel = $.noop;\n that.async && that.trigger(\"asyncCanceled\", query, that.name);\n };\n\n this.source(query, sync, async);\n !syncCalled && sync([]);\n\n function sync(suggestions) {\n if (syncCalled) {\n return;\n }\n\n syncCalled = true;\n suggestions = (suggestions || []).slice(0, that.limit);\n rendered = suggestions.length;\n\n that._overwrite(query, suggestions);\n\n if (rendered < that.limit && that.async) {\n that.trigger(\"asyncRequested\", query, that.name);\n }\n }\n\n function async(suggestions) {\n suggestions = suggestions || [];\n\n if (!canceled && rendered < that.limit) {\n that.cancel = $.noop;\n var idx = Math.abs(rendered - that.limit);\n rendered += idx;\n\n that._append(query, suggestions.slice(0, idx));\n\n that.async && that.trigger(\"asyncReceived\", query, that.name);\n }\n }\n },\n cancel: $.noop,\n clear: function clear() {\n this._empty();\n\n this.cancel();\n this.trigger(\"cleared\");\n },\n isEmpty: function isEmpty() {\n return this.$el.is(\":empty\");\n },\n destroy: function destroy() {\n this.$el = $(\"<div>\");\n }\n });\n\n return Dataset;\n\n function getDisplayFn(display) {\n display = display || _.stringify;\n return _.isFunction(display) ? display : displayFn;\n\n function displayFn(obj) {\n return obj[display];\n }\n }\n\n function getTemplates(templates, displayFn) {\n return {\n notFound: templates.notFound && _.templatify(templates.notFound),\n pending: templates.pending && _.templatify(templates.pending),\n header: templates.header && _.templatify(templates.header),\n footer: templates.footer && _.templatify(templates.footer),\n suggestion: templates.suggestion ? userSuggestionTemplate : suggestionTemplate\n };\n\n function userSuggestionTemplate(context) {\n var template = templates.suggestion;\n return $(template(context)).attr(\"id\", _.guid());\n }\n\n function suggestionTemplate(context) {\n return $('<div role=\"option\">').attr(\"id\", _.guid()).text(displayFn(context));\n }\n }\n\n function isValidName(str) {\n return /^[_a-zA-Z0-9-]+$/.test(str);\n }\n }();\n\n var Menu = function () {\n \"use strict\";\n\n function Menu(o, www) {\n var that = this;\n o = o || {};\n\n if (!o.node) {\n $.error(\"node is required\");\n }\n\n www.mixin(this);\n this.$node = $(o.node);\n this.query = null;\n this.datasets = _.map(o.datasets, initializeDataset);\n\n function initializeDataset(oDataset) {\n var node = that.$node.find(oDataset.node).first();\n oDataset.node = node.length ? node : $(\"<div>\").appendTo(that.$node);\n return new Dataset(oDataset, www);\n }\n }\n\n _.mixin(Menu.prototype, EventEmitter, {\n _onSelectableClick: function onSelectableClick($e) {\n this.trigger(\"selectableClicked\", $($e.currentTarget));\n },\n _onRendered: function onRendered(type, dataset, suggestions, async) {\n this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty());\n this.trigger(\"datasetRendered\", dataset, suggestions, async);\n },\n _onCleared: function onCleared() {\n this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty());\n this.trigger(\"datasetCleared\");\n },\n _propagate: function propagate() {\n this.trigger.apply(this, arguments);\n },\n _allDatasetsEmpty: function allDatasetsEmpty() {\n return _.every(this.datasets, _.bind(function isDatasetEmpty(dataset) {\n var isEmpty = dataset.isEmpty();\n this.$node.attr(\"aria-expanded\", !isEmpty);\n return isEmpty;\n }, this));\n },\n _getSelectables: function getSelectables() {\n return this.$node.find(this.selectors.selectable);\n },\n _removeCursor: function _removeCursor() {\n var $selectable = this.getActiveSelectable();\n $selectable && $selectable.removeClass(this.classes.cursor);\n },\n _ensureVisible: function ensureVisible($el) {\n var elTop, elBottom, nodeScrollTop, nodeHeight;\n elTop = $el.position().top;\n elBottom = elTop + $el.outerHeight(true);\n nodeScrollTop = this.$node.scrollTop();\n nodeHeight = this.$node.height() + parseInt(this.$node.css(\"paddingTop\"), 10) + parseInt(this.$node.css(\"paddingBottom\"), 10);\n\n if (elTop < 0) {\n this.$node.scrollTop(nodeScrollTop + elTop);\n } else if (nodeHeight < elBottom) {\n this.$node.scrollTop(nodeScrollTop + (elBottom - nodeHeight));\n }\n },\n bind: function bind() {\n var that = this,\n onSelectableClick;\n onSelectableClick = _.bind(this._onSelectableClick, this);\n this.$node.on(\"click.tt\", this.selectors.selectable, onSelectableClick);\n this.$node.on(\"mouseover\", this.selectors.selectable, function () {\n that.setCursor($(this));\n });\n this.$node.on(\"mouseleave\", function () {\n that._removeCursor();\n });\n\n _.each(this.datasets, function (dataset) {\n dataset.onSync(\"asyncRequested\", that._propagate, that).onSync(\"asyncCanceled\", that._propagate, that).onSync(\"asyncReceived\", that._propagate, that).onSync(\"rendered\", that._onRendered, that).onSync(\"cleared\", that._onCleared, that);\n });\n\n return this;\n },\n isOpen: function isOpen() {\n return this.$node.hasClass(this.classes.open);\n },\n open: function open() {\n this.$node.scrollTop(0);\n this.$node.addClass(this.classes.open);\n },\n close: function close() {\n this.$node.attr(\"aria-expanded\", false);\n this.$node.removeClass(this.classes.open);\n\n this._removeCursor();\n },\n setLanguageDirection: function setLanguageDirection(dir) {\n this.$node.attr(\"dir\", dir);\n },\n selectableRelativeToCursor: function selectableRelativeToCursor(delta) {\n var $selectables, $oldCursor, oldIndex, newIndex;\n $oldCursor = this.getActiveSelectable();\n $selectables = this._getSelectables();\n oldIndex = $oldCursor ? $selectables.index($oldCursor) : -1;\n newIndex = oldIndex + delta;\n newIndex = (newIndex + 1) % ($selectables.length + 1) - 1;\n newIndex = newIndex < -1 ? $selectables.length - 1 : newIndex;\n return newIndex === -1 ? null : $selectables.eq(newIndex);\n },\n setCursor: function setCursor($selectable) {\n this._removeCursor();\n\n if ($selectable = $selectable && $selectable.first()) {\n $selectable.addClass(this.classes.cursor);\n\n this._ensureVisible($selectable);\n }\n },\n getSelectableData: function getSelectableData($el) {\n return $el && $el.length ? Dataset.extractData($el) : null;\n },\n getActiveSelectable: function getActiveSelectable() {\n var $selectable = this._getSelectables().filter(this.selectors.cursor).first();\n\n return $selectable.length ? $selectable : null;\n },\n getTopSelectable: function getTopSelectable() {\n var $selectable = this._getSelectables().first();\n\n return $selectable.length ? $selectable : null;\n },\n update: function update(query) {\n var isValidUpdate = query !== this.query;\n\n if (isValidUpdate) {\n this.query = query;\n\n _.each(this.datasets, updateDataset);\n }\n\n return isValidUpdate;\n\n function updateDataset(dataset) {\n dataset.update(query);\n }\n },\n empty: function empty() {\n _.each(this.datasets, clearDataset);\n\n this.query = null;\n this.$node.addClass(this.classes.empty);\n\n function clearDataset(dataset) {\n dataset.clear();\n }\n },\n destroy: function destroy() {\n this.$node.off(\".tt\");\n this.$node = $(\"<div>\");\n\n _.each(this.datasets, destroyDataset);\n\n function destroyDataset(dataset) {\n dataset.destroy();\n }\n }\n });\n\n return Menu;\n }();\n\n var Status = function () {\n \"use strict\";\n\n function Status(options) {\n this.$el = $(\"<span></span>\", {\n role: \"status\",\n \"aria-live\": \"polite\"\n }).css({\n position: \"absolute\",\n padding: \"0\",\n border: \"0\",\n height: \"1px\",\n width: \"1px\",\n \"margin-bottom\": \"-1px\",\n \"margin-right\": \"-1px\",\n overflow: \"hidden\",\n clip: \"rect(0 0 0 0)\",\n \"white-space\": \"nowrap\"\n });\n options.$input.after(this.$el);\n\n _.each(options.menu.datasets, _.bind(function (dataset) {\n if (dataset.onSync) {\n dataset.onSync(\"rendered\", _.bind(this.update, this));\n dataset.onSync(\"cleared\", _.bind(this.cleared, this));\n }\n }, this));\n }\n\n _.mixin(Status.prototype, {\n update: function update(event, suggestions) {\n var length = suggestions.length;\n var words;\n\n if (length === 1) {\n words = {\n result: \"result\",\n is: \"is\"\n };\n } else {\n words = {\n result: \"results\",\n is: \"are\"\n };\n }\n\n this.$el.text(length + \" \" + words.result + \" \" + words.is + \" available, use up and down arrow keys to navigate.\");\n },\n cleared: function cleared() {\n this.$el.text(\"\");\n }\n });\n\n return Status;\n }();\n\n var DefaultMenu = function () {\n \"use strict\";\n\n var s = Menu.prototype;\n\n function DefaultMenu() {\n Menu.apply(this, [].slice.call(arguments, 0));\n }\n\n _.mixin(DefaultMenu.prototype, Menu.prototype, {\n open: function open() {\n !this._allDatasetsEmpty() && this._show();\n return s.open.apply(this, [].slice.call(arguments, 0));\n },\n close: function close() {\n this._hide();\n\n return s.close.apply(this, [].slice.call(arguments, 0));\n },\n _onRendered: function onRendered() {\n if (this._allDatasetsEmpty()) {\n this._hide();\n } else {\n this.isOpen() && this._show();\n }\n\n return s._onRendered.apply(this, [].slice.call(arguments, 0));\n },\n _onCleared: function onCleared() {\n if (this._allDatasetsEmpty()) {\n this._hide();\n } else {\n this.isOpen() && this._show();\n }\n\n return s._onCleared.apply(this, [].slice.call(arguments, 0));\n },\n setLanguageDirection: function setLanguageDirection(dir) {\n this.$node.css(dir === \"ltr\" ? this.css.ltr : this.css.rtl);\n return s.setLanguageDirection.apply(this, [].slice.call(arguments, 0));\n },\n _hide: function hide() {\n this.$node.hide();\n },\n _show: function show() {\n this.$node.css(\"display\", \"block\");\n }\n });\n\n return DefaultMenu;\n }();\n\n var Typeahead = function () {\n \"use strict\";\n\n function Typeahead(o, www) {\n var onFocused, onBlurred, onEnterKeyed, onTabKeyed, onEscKeyed, onUpKeyed, onDownKeyed, onLeftKeyed, onRightKeyed, onQueryChanged, onWhitespaceChanged;\n o = o || {};\n\n if (!o.input) {\n $.error(\"missing input\");\n }\n\n if (!o.menu) {\n $.error(\"missing menu\");\n }\n\n if (!o.eventBus) {\n $.error(\"missing event bus\");\n }\n\n www.mixin(this);\n this.eventBus = o.eventBus;\n this.minLength = _.isNumber(o.minLength) ? o.minLength : 1;\n this.input = o.input;\n this.menu = o.menu;\n this.enabled = true;\n this.autoselect = !!o.autoselect;\n this.active = false;\n this.input.hasFocus() && this.activate();\n this.dir = this.input.getLangDir();\n\n this._hacks();\n\n this.menu.bind().onSync(\"selectableClicked\", this._onSelectableClicked, this).onSync(\"asyncRequested\", this._onAsyncRequested, this).onSync(\"asyncCanceled\", this._onAsyncCanceled, this).onSync(\"asyncReceived\", this._onAsyncReceived, this).onSync(\"datasetRendered\", this._onDatasetRendered, this).onSync(\"datasetCleared\", this._onDatasetCleared, this);\n onFocused = c(this, \"activate\", \"open\", \"_onFocused\");\n onBlurred = c(this, \"deactivate\", \"_onBlurred\");\n onEnterKeyed = c(this, \"isActive\", \"isOpen\", \"_onEnterKeyed\");\n onTabKeyed = c(this, \"isActive\", \"isOpen\", \"_onTabKeyed\");\n onEscKeyed = c(this, \"isActive\", \"_onEscKeyed\");\n onUpKeyed = c(this, \"isActive\", \"open\", \"_onUpKeyed\");\n onDownKeyed = c(this, \"isActive\", \"open\", \"_onDownKeyed\");\n onLeftKeyed = c(this, \"isActive\", \"isOpen\", \"_onLeftKeyed\");\n onRightKeyed = c(this, \"isActive\", \"isOpen\", \"_onRightKeyed\");\n onQueryChanged = c(this, \"_openIfActive\", \"_onQueryChanged\");\n onWhitespaceChanged = c(this, \"_openIfActive\", \"_onWhitespaceChanged\");\n this.input.bind().onSync(\"focused\", onFocused, this).onSync(\"blurred\", onBlurred, this).onSync(\"enterKeyed\", onEnterKeyed, this).onSync(\"tabKeyed\", onTabKeyed, this).onSync(\"escKeyed\", onEscKeyed, this).onSync(\"upKeyed\", onUpKeyed, this).onSync(\"downKeyed\", onDownKeyed, this).onSync(\"leftKeyed\", onLeftKeyed, this).onSync(\"rightKeyed\", onRightKeyed, this).onSync(\"queryChanged\", onQueryChanged, this).onSync(\"whitespaceChanged\", onWhitespaceChanged, this).onSync(\"langDirChanged\", this._onLangDirChanged, this);\n }\n\n _.mixin(Typeahead.prototype, {\n _hacks: function hacks() {\n var $input, $menu;\n $input = this.input.$input || $(\"<div>\");\n $menu = this.menu.$node || $(\"<div>\");\n $input.on(\"blur.tt\", function ($e) {\n var active, isActive, hasActive;\n active = document.activeElement;\n isActive = $menu.is(active);\n hasActive = $menu.has(active).length > 0;\n\n if (_.isMsie() && (isActive || hasActive)) {\n $e.preventDefault();\n $e.stopImmediatePropagation();\n\n _.defer(function () {\n $input.focus();\n });\n }\n });\n $menu.on(\"mousedown.tt\", function ($e) {\n $e.preventDefault();\n });\n },\n _onSelectableClicked: function onSelectableClicked(type, $el) {\n this.select($el);\n },\n _onDatasetCleared: function onDatasetCleared() {\n this._updateHint();\n },\n _onDatasetRendered: function onDatasetRendered(type, suggestions, async, dataset) {\n this._updateHint();\n\n if (this.autoselect) {\n var cursorClass = this.selectors.cursor.substr(1);\n this.menu.$node.find(this.selectors.suggestion).first().addClass(cursorClass);\n }\n\n this.eventBus.trigger(\"render\", suggestions, async, dataset);\n },\n _onAsyncRequested: function onAsyncRequested(type, dataset, query) {\n this.eventBus.trigger(\"asyncrequest\", query, dataset);\n },\n _onAsyncCanceled: function onAsyncCanceled(type, dataset, query) {\n this.eventBus.trigger(\"asynccancel\", query, dataset);\n },\n _onAsyncReceived: function onAsyncReceived(type, dataset, query) {\n this.eventBus.trigger(\"asyncreceive\", query, dataset);\n },\n _onFocused: function onFocused() {\n this._minLengthMet() && this.menu.update(this.input.getQuery());\n },\n _onBlurred: function onBlurred() {\n if (this.input.hasQueryChangedSinceLastFocus()) {\n this.eventBus.trigger(\"change\", this.input.getQuery());\n }\n },\n _onEnterKeyed: function onEnterKeyed(type, $e) {\n var $selectable;\n\n if ($selectable = this.menu.getActiveSelectable()) {\n if (this.select($selectable)) {\n $e.preventDefault();\n $e.stopPropagation();\n }\n } else if (this.autoselect) {\n if (this.select(this.menu.getTopSelectable())) {\n $e.preventDefault();\n $e.stopPropagation();\n }\n }\n },\n _onTabKeyed: function onTabKeyed(type, $e) {\n var $selectable;\n\n if ($selectable = this.menu.getActiveSelectable()) {\n this.select($selectable) && $e.preventDefault();\n } else if (this.autoselect) {\n if ($selectable = this.menu.getTopSelectable()) {\n this.autocomplete($selectable) && $e.preventDefault();\n }\n }\n },\n _onEscKeyed: function onEscKeyed() {\n this.close();\n },\n _onUpKeyed: function onUpKeyed() {\n this.moveCursor(-1);\n },\n _onDownKeyed: function onDownKeyed() {\n this.moveCursor(+1);\n },\n _onLeftKeyed: function onLeftKeyed() {\n if (this.dir === \"rtl\" && this.input.isCursorAtEnd()) {\n this.autocomplete(this.menu.getActiveSelectable() || this.menu.getTopSelectable());\n }\n },\n _onRightKeyed: function onRightKeyed() {\n if (this.dir === \"ltr\" && this.input.isCursorAtEnd()) {\n this.autocomplete(this.menu.getActiveSelectable() || this.menu.getTopSelectable());\n }\n },\n _onQueryChanged: function onQueryChanged(e, query) {\n this._minLengthMet(query) ? this.menu.update(query) : this.menu.empty();\n },\n _onWhitespaceChanged: function onWhitespaceChanged() {\n this._updateHint();\n },\n _onLangDirChanged: function onLangDirChanged(e, dir) {\n if (this.dir !== dir) {\n this.dir = dir;\n this.menu.setLanguageDirection(dir);\n }\n },\n _openIfActive: function openIfActive() {\n this.isActive() && this.open();\n },\n _minLengthMet: function minLengthMet(query) {\n query = _.isString(query) ? query : this.input.getQuery() || \"\";\n return query.length >= this.minLength;\n },\n _updateHint: function updateHint() {\n var $selectable, data, val, query, escapedQuery, frontMatchRegEx, match;\n $selectable = this.menu.getTopSelectable();\n data = this.menu.getSelectableData($selectable);\n val = this.input.getInputValue();\n\n if (data && !_.isBlankString(val) && !this.input.hasOverflow()) {\n query = Input.normalizeQuery(val);\n escapedQuery = _.escapeRegExChars(query);\n frontMatchRegEx = new RegExp(\"^(?:\" + escapedQuery + \")(.+$)\", \"i\");\n match = frontMatchRegEx.exec(data.val);\n match && this.input.setHint(val + match[1]);\n } else {\n this.input.clearHint();\n }\n },\n isEnabled: function isEnabled() {\n return this.enabled;\n },\n enable: function enable() {\n this.enabled = true;\n },\n disable: function disable() {\n this.enabled = false;\n },\n isActive: function isActive() {\n return this.active;\n },\n activate: function activate() {\n if (this.isActive()) {\n return true;\n } else if (!this.isEnabled() || this.eventBus.before(\"active\")) {\n return false;\n } else {\n this.active = true;\n this.eventBus.trigger(\"active\");\n return true;\n }\n },\n deactivate: function deactivate() {\n if (!this.isActive()) {\n return true;\n } else if (this.eventBus.before(\"idle\")) {\n return false;\n } else {\n this.active = false;\n this.close();\n this.eventBus.trigger(\"idle\");\n return true;\n }\n },\n isOpen: function isOpen() {\n return this.menu.isOpen();\n },\n open: function open() {\n if (!this.isOpen() && !this.eventBus.before(\"open\")) {\n this.input.setAriaExpanded(true);\n this.menu.open();\n\n this._updateHint();\n\n this.eventBus.trigger(\"open\");\n }\n\n return this.isOpen();\n },\n close: function close() {\n if (this.isOpen() && !this.eventBus.before(\"close\")) {\n this.input.setAriaExpanded(false);\n this.menu.close();\n this.input.clearHint();\n this.input.resetInputValue();\n this.eventBus.trigger(\"close\");\n }\n\n return !this.isOpen();\n },\n setVal: function setVal(val) {\n this.input.setQuery(_.toStr(val));\n },\n getVal: function getVal() {\n return this.input.getQuery();\n },\n select: function select($selectable) {\n var data = this.menu.getSelectableData($selectable);\n\n if (data && !this.eventBus.before(\"select\", data.obj, data.dataset)) {\n this.input.setQuery(data.val, true);\n this.eventBus.trigger(\"select\", data.obj, data.dataset);\n this.close();\n return true;\n }\n\n return false;\n },\n autocomplete: function autocomplete($selectable) {\n var query, data, isValid;\n query = this.input.getQuery();\n data = this.menu.getSelectableData($selectable);\n isValid = data && query !== data.val;\n\n if (isValid && !this.eventBus.before(\"autocomplete\", data.obj, data.dataset)) {\n this.input.setQuery(data.val);\n this.eventBus.trigger(\"autocomplete\", data.obj, data.dataset);\n return true;\n }\n\n return false;\n },\n moveCursor: function moveCursor(delta) {\n var query, $candidate, data, suggestion, datasetName, cancelMove, id;\n query = this.input.getQuery();\n $candidate = this.menu.selectableRelativeToCursor(delta);\n data = this.menu.getSelectableData($candidate);\n suggestion = data ? data.obj : null;\n datasetName = data ? data.dataset : null;\n id = $candidate ? $candidate.attr(\"id\") : null;\n this.input.trigger(\"cursorchange\", id);\n cancelMove = this._minLengthMet() && this.menu.update(query);\n\n if (!cancelMove && !this.eventBus.before(\"cursorchange\", suggestion, datasetName)) {\n this.menu.setCursor($candidate);\n\n if (data) {\n if (typeof data.val === \"string\") {\n this.input.setInputValue(data.val);\n }\n } else {\n this.input.resetInputValue();\n\n this._updateHint();\n }\n\n this.eventBus.trigger(\"cursorchange\", suggestion, datasetName);\n return true;\n }\n\n return false;\n },\n destroy: function destroy() {\n this.input.destroy();\n this.menu.destroy();\n }\n });\n\n return Typeahead;\n\n function c(ctx) {\n var methods = [].slice.call(arguments, 1);\n return function () {\n var args = [].slice.call(arguments);\n\n _.each(methods, function (method) {\n return ctx[method].apply(ctx, args);\n });\n };\n }\n }();\n\n (function () {\n \"use strict\";\n\n var old, keys, methods;\n old = $.fn.typeahead;\n keys = {\n www: \"tt-www\",\n attrs: \"tt-attrs\",\n typeahead: \"tt-typeahead\"\n };\n methods = {\n initialize: function initialize(o, datasets) {\n var www;\n datasets = _.isArray(datasets) ? datasets : [].slice.call(arguments, 1);\n o = o || {};\n www = WWW(o.classNames);\n return this.each(attach);\n\n function attach() {\n var $input, $wrapper, $hint, $menu, defaultHint, defaultMenu, eventBus, input, menu, status, typeahead, MenuConstructor;\n\n _.each(datasets, function (d) {\n d.highlight = !!o.highlight;\n });\n\n $input = $(this);\n $wrapper = $(www.html.wrapper);\n $hint = $elOrNull(o.hint);\n $menu = $elOrNull(o.menu);\n defaultHint = o.hint !== false && !$hint;\n defaultMenu = o.menu !== false && !$menu;\n defaultHint && ($hint = buildHintFromInput($input, www));\n defaultMenu && ($menu = $(www.html.menu).css(www.css.menu));\n $hint && $hint.val(\"\");\n $input = prepInput($input, www);\n\n if (defaultHint || defaultMenu) {\n $wrapper.css(www.css.wrapper);\n $input.css(defaultHint ? www.css.input : www.css.inputWithNoHint);\n $input.wrap($wrapper).parent().prepend(defaultHint ? $hint : null).append(defaultMenu ? $menu : null);\n }\n\n MenuConstructor = defaultMenu ? DefaultMenu : Menu;\n eventBus = new EventBus({\n el: $input\n });\n input = new Input({\n hint: $hint,\n input: $input,\n menu: $menu\n }, www);\n menu = new MenuConstructor({\n node: $menu,\n datasets: datasets\n }, www);\n status = new Status({\n $input: $input,\n menu: menu\n });\n typeahead = new Typeahead({\n input: input,\n menu: menu,\n eventBus: eventBus,\n minLength: o.minLength,\n autoselect: o.autoselect\n }, www);\n $input.data(keys.www, www);\n $input.data(keys.typeahead, typeahead);\n }\n },\n isEnabled: function isEnabled() {\n var enabled;\n ttEach(this.first(), function (t) {\n enabled = t.isEnabled();\n });\n return enabled;\n },\n enable: function enable() {\n ttEach(this, function (t) {\n t.enable();\n });\n return this;\n },\n disable: function disable() {\n ttEach(this, function (t) {\n t.disable();\n });\n return this;\n },\n isActive: function isActive() {\n var active;\n ttEach(this.first(), function (t) {\n active = t.isActive();\n });\n return active;\n },\n activate: function activate() {\n ttEach(this, function (t) {\n t.activate();\n });\n return this;\n },\n deactivate: function deactivate() {\n ttEach(this, function (t) {\n t.deactivate();\n });\n return this;\n },\n isOpen: function isOpen() {\n var open;\n ttEach(this.first(), function (t) {\n open = t.isOpen();\n });\n return open;\n },\n open: function open() {\n ttEach(this, function (t) {\n t.open();\n });\n return this;\n },\n close: function close() {\n ttEach(this, function (t) {\n t.close();\n });\n return this;\n },\n select: function select(el) {\n var success = false,\n $el = $(el);\n ttEach(this.first(), function (t) {\n success = t.select($el);\n });\n return success;\n },\n autocomplete: function autocomplete(el) {\n var success = false,\n $el = $(el);\n ttEach(this.first(), function (t) {\n success = t.autocomplete($el);\n });\n return success;\n },\n moveCursor: function moveCursoe(delta) {\n var success = false;\n ttEach(this.first(), function (t) {\n success = t.moveCursor(delta);\n });\n return success;\n },\n val: function val(newVal) {\n var query;\n\n if (!arguments.length) {\n ttEach(this.first(), function (t) {\n query = t.getVal();\n });\n return query;\n } else {\n ttEach(this, function (t) {\n t.setVal(_.toStr(newVal));\n });\n return this;\n }\n },\n destroy: function destroy() {\n ttEach(this, function (typeahead, $input) {\n revert($input);\n typeahead.destroy();\n });\n return this;\n }\n };\n\n $.fn.typeahead = function (method) {\n if (methods[method]) {\n return methods[method].apply(this, [].slice.call(arguments, 1));\n } else {\n return methods.initialize.apply(this, arguments);\n }\n };\n\n $.fn.typeahead.noConflict = function noConflict() {\n $.fn.typeahead = old;\n return this;\n };\n\n function ttEach($els, fn) {\n $els.each(function () {\n var $input = $(this),\n typeahead;\n (typeahead = $input.data(keys.typeahead)) && fn(typeahead, $input);\n });\n }\n\n function buildHintFromInput($input, www) {\n return $input.clone().addClass(www.classes.hint).removeData().css(www.css.hint).css(getBackgroundStyles($input)).prop({\n readonly: true,\n required: false\n }).removeAttr(\"id name placeholder\").removeClass(\"required\").attr({\n spellcheck: \"false\",\n tabindex: -1\n });\n }\n\n function prepInput($input, www) {\n $input.data(keys.attrs, {\n dir: $input.attr(\"dir\"),\n autocomplete: $input.attr(\"autocomplete\"),\n spellcheck: $input.attr(\"spellcheck\"),\n style: $input.attr(\"style\")\n });\n $input.addClass(www.classes.input).attr({\n spellcheck: false\n });\n\n try {\n !$input.attr(\"dir\") && $input.attr(\"dir\", \"auto\");\n } catch (e) {}\n\n return $input;\n }\n\n function getBackgroundStyles($el) {\n return {\n backgroundAttachment: $el.css(\"background-attachment\"),\n backgroundClip: $el.css(\"background-clip\"),\n backgroundColor: $el.css(\"background-color\"),\n backgroundImage: $el.css(\"background-image\"),\n backgroundOrigin: $el.css(\"background-origin\"),\n backgroundPosition: $el.css(\"background-position\"),\n backgroundRepeat: $el.css(\"background-repeat\"),\n backgroundSize: $el.css(\"background-size\")\n };\n }\n\n function revert($input) {\n var www, $wrapper;\n www = $input.data(keys.www);\n $wrapper = $input.parent().filter(www.selectors.wrapper);\n\n _.each($input.data(keys.attrs), function (val, key) {\n _.isUndefined(val) ? $input.removeAttr(key) : $input.attr(key, val);\n });\n\n $input.removeData(keys.typeahead).removeData(keys.www).removeData(keys.attr).removeClass(www.classes.input);\n\n if ($wrapper.length) {\n $input.detach().insertAfter($wrapper);\n $wrapper.remove();\n }\n }\n\n function $elOrNull(obj) {\n var isValid, $el;\n isValid = _.isJQuery(obj) || _.isElement(obj);\n $el = isValid ? $(obj).first() : [];\n return $el.length ? $el : null;\n }\n })();\n});","var scope = typeof global !== \"undefined\" && global || typeof self !== \"undefined\" && self || window;\nvar apply = Function.prototype.apply; // DOM APIs, for completeness\n\nexports.setTimeout = function () {\n return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);\n};\n\nexports.setInterval = function () {\n return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);\n};\n\nexports.clearTimeout = exports.clearInterval = function (timeout) {\n if (timeout) {\n timeout.close();\n }\n};\n\nfunction Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n}\n\nTimeout.prototype.unref = Timeout.prototype.ref = function () {};\n\nTimeout.prototype.close = function () {\n this._clearFn.call(scope, this._id);\n}; // Does not start the time, just sets up the members needed.\n\n\nexports.enroll = function (item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n};\n\nexports.unenroll = function (item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function (item) {\n clearTimeout(item._idleTimeoutId);\n var msecs = item._idleTimeout;\n\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout) item._onTimeout();\n }, msecs);\n }\n}; // setimmediate attaches itself to the global object\n\n\nrequire(\"setimmediate\"); // On some exotic environments, it's not clear which object `setimmediate` was\n// able to install onto. Search each possibility in the same order as the\n// `setimmediate` library.\n\n\nexports.setImmediate = typeof self !== \"undefined\" && self.setImmediate || typeof global !== \"undefined\" && global.setImmediate || this && this.setImmediate;\nexports.clearImmediate = typeof self !== \"undefined\" && self.clearImmediate || typeof global !== \"undefined\" && global.clearImmediate || this && this.clearImmediate;","(function (global, undefined) {\n \"use strict\";\n\n if (global.setImmediate) {\n return;\n }\n\n var nextHandle = 1; // Spec says greater than zero\n\n var tasksByHandle = {};\n var currentlyRunningATask = false;\n var doc = global.document;\n var registerImmediate;\n\n function setImmediate(callback) {\n // Callback can either be a function or a string\n if (typeof callback !== \"function\") {\n callback = new Function(\"\" + callback);\n } // Copy function arguments\n\n\n var args = new Array(arguments.length - 1);\n\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i + 1];\n } // Store and register the task\n\n\n var task = {\n callback: callback,\n args: args\n };\n tasksByHandle[nextHandle] = task;\n registerImmediate(nextHandle);\n return nextHandle++;\n }\n\n function clearImmediate(handle) {\n delete tasksByHandle[handle];\n }\n\n function run(task) {\n var callback = task.callback;\n var args = task.args;\n\n switch (args.length) {\n case 0:\n callback();\n break;\n\n case 1:\n callback(args[0]);\n break;\n\n case 2:\n callback(args[0], args[1]);\n break;\n\n case 3:\n callback(args[0], args[1], args[2]);\n break;\n\n default:\n callback.apply(undefined, args);\n break;\n }\n }\n\n function runIfPresent(handle) {\n // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n // So if we're currently running a task, we'll need to delay this invocation.\n if (currentlyRunningATask) {\n // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n // \"too much recursion\" error.\n setTimeout(runIfPresent, 0, handle);\n } else {\n var task = tasksByHandle[handle];\n\n if (task) {\n currentlyRunningATask = true;\n\n try {\n run(task);\n } finally {\n clearImmediate(handle);\n currentlyRunningATask = false;\n }\n }\n }\n }\n\n function installNextTickImplementation() {\n registerImmediate = function registerImmediate(handle) {\n process.nextTick(function () {\n runIfPresent(handle);\n });\n };\n }\n\n function canUsePostMessage() {\n // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n // where `global.postMessage` means something completely different and can't be used for this purpose.\n if (global.postMessage && !global.importScripts) {\n var postMessageIsAsynchronous = true;\n var oldOnMessage = global.onmessage;\n\n global.onmessage = function () {\n postMessageIsAsynchronous = false;\n };\n\n global.postMessage(\"\", \"*\");\n global.onmessage = oldOnMessage;\n return postMessageIsAsynchronous;\n }\n }\n\n function installPostMessageImplementation() {\n // Installs an event handler on `global` for the `message` event: see\n // * https://developer.mozilla.org/en/DOM/window.postMessage\n // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n\n var onGlobalMessage = function onGlobalMessage(event) {\n if (event.source === global && typeof event.data === \"string\" && event.data.indexOf(messagePrefix) === 0) {\n runIfPresent(+event.data.slice(messagePrefix.length));\n }\n };\n\n if (global.addEventListener) {\n global.addEventListener(\"message\", onGlobalMessage, false);\n } else {\n global.attachEvent(\"onmessage\", onGlobalMessage);\n }\n\n registerImmediate = function registerImmediate(handle) {\n global.postMessage(messagePrefix + handle, \"*\");\n };\n }\n\n function installMessageChannelImplementation() {\n var channel = new MessageChannel();\n\n channel.port1.onmessage = function (event) {\n var handle = event.data;\n runIfPresent(handle);\n };\n\n registerImmediate = function registerImmediate(handle) {\n channel.port2.postMessage(handle);\n };\n }\n\n function installReadyStateChangeImplementation() {\n var html = doc.documentElement;\n\n registerImmediate = function registerImmediate(handle) {\n // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n var script = doc.createElement(\"script\");\n\n script.onreadystatechange = function () {\n runIfPresent(handle);\n script.onreadystatechange = null;\n html.removeChild(script);\n script = null;\n };\n\n html.appendChild(script);\n };\n }\n\n function installSetTimeoutImplementation() {\n registerImmediate = function registerImmediate(handle) {\n setTimeout(runIfPresent, 0, handle);\n };\n } // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.\n\n\n var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);\n attachTo = attachTo && attachTo.setTimeout ? attachTo : global; // Don't get fooled by e.g. browserify environments.\n\n if ({}.toString.call(global.process) === \"[object process]\") {\n // For Node.js before 0.9\n installNextTickImplementation();\n } else if (canUsePostMessage()) {\n // For non-IE10 modern browsers\n installPostMessageImplementation();\n } else if (global.MessageChannel) {\n // For web workers, where supported\n installMessageChannelImplementation();\n } else if (doc && \"onreadystatechange\" in doc.createElement(\"script\")) {\n // For IE 6–8\n installReadyStateChangeImplementation();\n } else {\n // For older browsers\n installSetTimeoutImplementation();\n }\n\n attachTo.setImmediate = setImmediate;\n attachTo.clearImmediate = clearImmediate;\n})(typeof self === \"undefined\" ? typeof global === \"undefined\" ? this : global : self);","// shim for using process in browser\nvar process = module.exports = {}; // cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\n\nfunction defaultClearTimeout() {\n throw new Error('clearTimeout has not been defined');\n}\n\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n})();\n\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n } // if setTimeout wasn't available but was latter defined\n\n\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch (e) {\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch (e) {\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n}\n\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n } // if clearTimeout wasn't available but was latter defined\n\n\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e) {\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e) {\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n}\n\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n\n draining = false;\n\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n var len = queue.length;\n\n while (len) {\n currentQueue = queue;\n queue = [];\n\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n\n queueIndex = -1;\n len = queue.length;\n }\n\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n\n queue.push(new Item(fun, args));\n\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n}; // v8 likes predictible objects\n\n\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\n\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\n\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\n\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) {\n return [];\n};\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () {\n return '/';\n};\n\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\n\nprocess.umask = function () {\n return 0;\n};","class Typeahead {\n constructor($typeahead, $idInput, url, predicate, displayKey, options) {\n this.$typeahead = $typeahead;\n this.$idInput = $idInput;\n this.url = url;\n this.predicate = predicate;\n this.displayKey = displayKey;\n this.options = options;\n\n this.createTypeahead();\n }\n\n onKeyUp() {\n this.$idInput.val('');\n }\n\n createTypeahead() {\n this.$typeahead.typeahead({ highlight: true, autoselect: true }, {\n source: this.onTypeaheadRequest.bind(this),\n displayKey: this.displayKey,\n });\n\n this.$typeahead.on('typeahead:select', this.onTypeaheadSelect.bind(this));\n this.$typeahead.on('typeahead:open', this.onTypeaheadOpen.bind(this));\n }\n\n onTypeaheadOpen() {\n this.$idInput.val('');\n }\n\n onTypeaheadSelect(event, entity, datasetName) {\n this.$idInput.val(entity.id);\n if (this.options.success) { this.options.success(entity, this.options); }\n }\n\n onTypeaheadRequest(query, _, onAsyncResult) {\n // Build a search query, i.e. :q => {:name_cont => #{query}}\n let search = {};\n search[this.predicate] = query;\n\n if (this.options.additionalParameters) {\n var extra = (typeof this.options.additionalParameters == 'function') ?\n this.options.additionalParameters() : this.options.additionalParameters\n search = jQuery.extend(search, extra);\n }\n\n $.get(this.url, { q: search }, onAsyncResult);\n }\n}\n\n$.fn.remoteTypeahead = function({idSelector = '', url = '', predicate = '', displayKey = '', ...options} = {}) {\n // Should something happen if we don't pass options here?\n this.each(function() {\n let $this = $(this);\n _idSelector = idSelector || $this.data('idselector');\n _url = url || $this.data('url');\n _predicate = predicate || $this.data('predicate');\n _displayKey = displayKey || $this.data('displaykey') || 'name';\n\n let typeahead = new Typeahead($this, $(_idSelector), _url, _predicate, _displayKey, options);\n });\n};\n","import Site from './scripts/site';\nimport TripFormView from '../../src/trips/scripts/trip_form_view';\nimport TripView from '../../src/trips/scripts/trip_view';\nimport TripAttachmentFormView from '../../src/trip_attachments/scripts/trip_attachment_form_view'\nimport TripEntryFormView from '../../src/trip_entries/scripts/trip_entry_form_view';\nimport TripQuickOpenView from '../../src/trips/scripts/trip_quick_open_view';\nimport UserFormView from '../../src/users/scripts/user_form_view';\n\nimport './styles/site.sass';\n\n$(function() {\n window.jQuery = window.$ = jQuery\n window.site = new Site();\n\n if ($('form.trip').length) { new TripFormView; }\n if ($('#trip').length) { new TripView; }\n if ($('#trip_attachments').length) { new TripAttachmentFormView; }\n if ($('#trip_entries').length) { new TripEntryFormView; }\n if ($('#trip_quickopen').length) { new TripQuickOpenView; }\n if ($('.user_form').length) { new UserFormView; }\n});\n"],"sourceRoot":""}