{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/popper.js/dist/umd/popper.js","webpack:///./node_modules/jquery-colorbox/jquery.colorbox.js","webpack:///./node_modules/unipointer/unipointer.js","webpack:///./node_modules/unidragger/unidragger.js","webpack:///./assets/scripts/components/selectric.js","webpack:///./node_modules/popper.js/dist/esm/popper.js","webpack:///./node_modules/jquery-bridget/node_modules/jquery/dist/jquery.js","webpack:///./assets/scripts/components/colorbox.js","webpack:///./node_modules/flickity/js/animate.js","webpack:///./node_modules/flickity/js/page-dots.js","webpack:///./node_modules/ev-emitter/ev-emitter.js","webpack:///./assets/scripts/blocks/accordion.js","webpack:///./node_modules/flickity/js/flickity.js","webpack:///./node_modules/jquery/dist/jquery.js","webpack:///./node_modules/outlayer/outlayer.js","webpack:///./node_modules/flickity/js/index.js","webpack:///./node_modules/outlayer/item.js","webpack:///./assets/scripts/blocks/tabs.js","webpack:///./node_modules/get-size/get-size.js","webpack:///./assets/scripts/blocks/newsletter.js","webpack:///./node_modules/flickity/js/drag.js","webpack:///./node_modules/bootstrap/dist/js/bootstrap.js","webpack:///./assets/scripts/app.js","webpack:///./node_modules/countup.js/dist/countUp.min.js","webpack:///./assets/scripts/blocks/stats.js","webpack:///./assets/scripts/blocks/portfolio-grid.js","webpack:///./node_modules/fizzy-ui-utils/utils.js","webpack:///./node_modules/jquery-bridget/jquery-bridget.js","webpack:///./assets/scripts/bootstrap.js","webpack:///./assets/scripts/blocks/team-slider.js","webpack:///./assets/scripts/components/utilities.js","webpack:///./node_modules/flickity/js/slide.js","webpack:///./node_modules/masonry-layout/masonry.js","webpack:///./node_modules/flickity/js/lazyload.js","webpack:///./assets/scripts/blocks/news-slider.js","webpack:///./assets/scripts/components/post.js","webpack:///./node_modules/flickity/js/player.js","webpack:///./node_modules/flickity/js/add-remove-cell.js","webpack:///./node_modules/desandro-matches-selector/matches-selector.js","webpack:///./assets/scripts/components/disclaimer.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/flickity/js/cell.js","webpack:///./node_modules/flickity/js/prev-next-button.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","factory","isBrowser","window","document","navigator","timeoutDuration","longerTimeoutBrowsers","length","userAgent","indexOf","debounce","Promise","fn","called","resolve","then","scheduled","setTimeout","isFunction","functionToCheck","toString","getStyleComputedProperty","element","nodeType","css","ownerDocument","defaultView","getComputedStyle","getParentNode","nodeName","parentNode","host","getScrollParent","body","_getStyleComputedProp","overflow","overflowX","overflowY","test","getReferenceNode","reference","referenceNode","isIE11","MSInputMethodContext","documentMode","isIE10","isIE","version","getOffsetParent","documentElement","noOffsetParent","offsetParent","nextElementSibling","getRoot","node","findCommonOffsetParent","element1","element2","order","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","start","end","range","createRange","setStart","setEnd","commonAncestorContainer","contains","firstElementChild","element1root","getScroll","side","arguments","undefined","upperSide","html","scrollingElement","includeScroll","rect","subtract","scrollTop","scrollLeft","modifier","top","bottom","left","right","getBordersSize","styles","axis","sideA","sideB","parseFloat","getSize","computedStyle","Math","max","parseInt","getWindowSizes","height","width","classCallCheck","instance","Constructor","TypeError","createClass","defineProperties","target","props","descriptor","configurable","writable","protoProps","staticProps","obj","_extends","assign","source","getClientRect","offsets","getBoundingClientRect","e","result","sizes","clientWidth","clientHeight","horizScrollbar","offsetWidth","vertScrollbar","offsetHeight","getOffsetRectRelativeToArbitraryNode","children","parent","fixedPosition","isHTML","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","marginTop","marginLeft","getViewportOffsetRectRelativeToArtbitraryNode","excludeScroll","relativeOffset","innerWidth","innerHeight","offset","isFixed","getFixedPositionOffsetParent","parentElement","el","getBoundaries","popper","padding","boundariesElement","boundaries","boundariesNode","_getWindowSizes","isPaddingNumber","getArea","_ref","computeAutoPlacement","placement","refRect","rects","sortedAreas","keys","map","area","sort","a","b","filteredAreas","filter","_ref2","computedPlacement","variation","split","getReferenceOffsets","state","commonOffsetParent","getOuterSizes","x","marginBottom","y","marginRight","getOppositePlacement","hash","replace","matched","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","find","arr","check","Array","runModifiers","modifiers","data","ends","slice","prop","findIndex","cur","match","forEach","console","warn","enabled","update","this","isDestroyed","arrowStyles","attributes","flipped","options","positionFixed","flip","originalPlacement","position","isCreated","onUpdate","onCreate","isModifierEnabled","modifierName","some","getSupportedPropertyName","prefixes","upperProp","charAt","toUpperCase","prefix","toCheck","style","destroy","removeAttribute","willChange","disableEventListeners","removeOnDestroy","removeChild","getWindow","setupEventListeners","updateBound","addEventListener","passive","scrollElement","attachToScrollParents","event","callback","scrollParents","isBody","push","eventsEnabled","enableEventListeners","scheduleUpdate","cancelAnimationFrame","removeEventListener","isNumeric","isNaN","isFinite","setStyles","unit","isFirefox","isModifierRequired","requestingName","requestedName","requesting","isRequired","_requesting","requested","placements","validPlacements","clockwise","counter","index","concat","reverse","BEHAVIORS","parseOffset","basePlacement","useHeight","fragments","frag","trim","divider","search","splitRegex","ops","op","mergeWithPrevious","reduce","str","toValue","index2","Defaults","shift","shiftvariation","_data$offsets","isVertical","shiftOffsets","preventOverflow","transformProp","popperStyles","transform","priority","primary","escapeWithReference","secondary","min","keepTogether","floor","opSide","arrow","_data$offsets$arrow","arrowElement","querySelector","len","sideCapitalized","toLowerCase","altSide","arrowElementSize","center","popperMarginSide","popperBorderSide","sideValue","round","placementOpposite","flipOrder","behavior","step","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariationByRef","flipVariations","flippedVariationByContent","flipVariationsByContent","flippedVariation","getOppositeVariation","inner","subtractLength","hide","bound","computeStyle","legacyGpuAccelerationOption","gpuAcceleration","offsetParentRect","shouldRound","noRound","v","referenceWidth","popperWidth","isVariation","horizontalToInteger","verticalToInteger","getRoundedOffsets","devicePixelRatio","prefixedProperty","invertTop","invertLeft","applyStyle","setAttribute","onLoad","modifierOptions","Popper","_this","requestAnimationFrame","jquery","Utils","global","PopperUtils","$","$overlay","$box","$wrap","$content","$topBorder","$leftBorder","$rightBorder","$bottomBorder","$related","$window","$loaded","$loadingBay","$loadingOverlay","$title","$current","$slideshow","$next","$prev","$close","$groupControls","settings","interfaceHeight","interfaceWidth","loadedHeight","loadedWidth","photo","open","active","closing","loadingTimer","publicMethod","init","defaults","iframe","inline","transition","speed","fadeOut","initialWidth","maxWidth","initialHeight","maxHeight","scalePhotos","scrolling","opacity","preloading","className","overlayClose","escKey","arrowKey","fixed","closeButton","fastIframe","reposition","loop","slideshow","slideshowAuto","slideshowSpeed","slideshowStart","slideshowStop","photoRegex","retinaImage","retinaUrl","retinaSuffix","current","previous","next","close","xhrError","imgError","returnFocus","trapFocus","onOpen","onComplete","onCleanup","onClosed","rel","href","attr","title","createImg","img","Image","attrs","each","val","createIframe","createElement","frameBorder","allowTransparency","Date","getTime","allowFullscreen","colorbox","$events","div","requests","previousCSS","$tag","tag","id","cssText","winheight","Settings","cache","dataAttr","getIndex","increment","newIndex","setSize","size","dimension","isImage","url","stopPropagation","focus","setClass","add","removeClass","addClass","trigger","triggerHandler","timeOut","click","clear","clearTimeout","set","unbind","one","stop","reset","show","launch","visibility","display","append","outerHeight","outerWidth","w","h","cursor","appendTo","setResize","$inline","prep","request","mw","mh","$target","eq","insertBefore","replaceWith","percent","src","load","status","contents","appendHTML","support","role","tabindex","addBindings","clickHandler","which","shiftKey","altKey","metaKey","ctrlKey","preventDefault","prev","keyCode","on","live","$obj","old","extend","loadedCallback","modalDimensions","tempSpeed","dequeue","animate","duration","complete","resize","scrolltop","remove","prependTo","total","removeFilter","fadeTo","removeData","jQuery","EvEmitter","Unipointer","proto","bindStartEvent","elem","_bindStartEvent","unbindStartEvent","isAdd","bindMethod","startEvent","PointerEvent","handleEvent","method","type","getTouch","touches","touch","identifier","pointerIdentifier","onmousedown","button","_pointerDown","ontouchstart","changedTouches","onpointerdown","pointer","isPointerDown","pointerId","pointerDown","_bindPostStartEvents","emitEvent","postStartEvents","mousedown","touchstart","pointerdown","events","eventName","_boundPointerEvents","_unbindPostStartEvents","onmousemove","_pointerMove","onpointermove","ontouchmove","pointerMove","onmouseup","_pointerUp","onpointerup","ontouchend","_pointerDone","pointerUp","_pointerReset","pointerDone","onpointercancel","_pointerCancel","ontouchcancel","pointerCancel","getPointerPoint","pageX","pageY","Unidragger","bindHandles","_bindHandles","unbindHandles","touchAction","_touchActionValue","handles","handle","okayPointerDown","pointerDownPointer","pointerDownBlur","cursorNodes","TEXTAREA","INPUT","SELECT","OPTION","clickTypes","radio","checkbox","submit","image","file","isCursorNode","isClickType","isOkay","focused","activeElement","blur","moveVector","_dragPointerMove","_dragMove","isDragging","hasDragStarted","_dragStart","abs","_dragPointerUp","_dragEnd","_staticClick","isPreventingClicks","dragStart","dragMove","dragEnd","onclick","isIgnoringMouseUp","staticClick","define","$doc","$win","chars","diacritics","Selectric","opts","$element","multiple","opened","currValue","selectedIdx","highlightedIdx","eventTriggers","refresh","utils","isMobile","escapeRegExp","replaceDiacritics","k","format","f","nextEnabledItem","selectItems","selected","disabled","previousEnabledItem","toDash","triggerCallback","scope","elm","func","args","apply","pluginName","arrayToClassname","newArr","grep","item","join","disableOnMobile","classes","getClassNames","input","items","itemsScroll","scroll","wrapper","arrowButtonMarkup","label","outerWrapper","wrap","prepend","hideSelectWrapper","hideselect","elements","nativeOnMobile","originalTabindex","populate","activate","hiddenChildren","closest","tempshow","originalWidth","responsive","inheritOriginalWidth","unbindEvents","$li","removeAttr","bindEvents","customClass","classesObj","currClass","camelCase","setLabel","labelBuilder","currentValues","isArray","labelMarkup","lookupItems","maxLabelEntries","text","separator","currItem","$options","$justOptions","$selected","selectedIndex","currIndex","emptyValue","$elm","is","optionsGroup","groupDisabled","getItemData","getItemsMarkup","isDisabled","slug","alt","markup","listBuilder","group","grouplabel","getItemMarkup","itemData","itemBuilder","optionsItemBuilder","filteredItemData","off","toggleClass","hover","openOnHover","closeTimer","proxy","hoverIntentTimeout","handleKeys","openOnFocus","searchRegExp","RegExp","resetStr","keySearchTimeout","highlight","altItems","ai","select","isPrevKey","inArray","isNextKey","isSelectKey","isOpenKey","idx","isFirstOrLastItem","goToItem","allowWrap","keepMenuOpen","setOptionsDimensions","itemsWidth","wrapperWidth","expandToItemText","finalWidth","isInViewport","forceRenderAbove","above","forceRenderBelow","below","winHeight","uiPosX","fitsDown","itemsHeight","fitsAbove","renderAbove","renderBelow","detectItemVisibility","$filteredLi","liHeight","liTop","offsetTop","itemsScrollTop","scrollT","itemsInnerHeight","preventWindowScroll","orgEvent","originalEvent","deltaY","detail","wheelDelta","wheelDeltaY","scrollHeight","change","hasSelectedIndex","splice","preserveData","unwrap","onChange","Error","noGlobal","getProto","getPrototypeOf","flat","array","class2type","hasOwn","fnToString","ObjectFunctionString","isWindow","preservedScriptAttributes","nonce","noModule","DOMEval","code","doc","script","getAttribute","head","appendChild","toType","selector","context","isArrayLike","constructor","toArray","num","pushStack","elems","ret","merge","prevObject","first","last","even","_elem","odd","j","copy","copyIsArray","clone","deep","isPlainObject","expando","random","isReady","error","msg","noop","Ctor","isEmptyObject","globalEval","makeArray","results","second","invert","matches","callbackExpect","arg","guid","iterator","_i","Sizzle","Expr","getText","isXML","tokenize","compile","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","preferredDoc","dirruns","done","classCache","createCache","tokenCache","compilerCache","nonnativeSelectorCache","sortOrder","pop","pushNative","list","booleans","whitespace","pseudos","rwhitespace","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","dir","childNodes","els","seed","nid","groups","newSelector","newContext","exec","getElementById","getElementsByTagName","getElementsByClassName","qsa","testContext","toSelector","cssSupportsSelector","CSS","supports","querySelectorAll","qsaError","cacheLength","markFunction","assert","addHandle","handler","attrHandle","siblingCheck","diff","sourceIndex","nextSibling","createInputPseudo","createButtonPseudo","createDisabledPseudo","createPositionalPseudo","argument","matchIndexes","namespace","namespaceURI","hasCompare","subWindow","attachEvent","createComment","getById","getElementsByName","attrId","getAttributeNode","tmp","innerHTML","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","adown","bup","compare","sortDetached","aup","ap","bp","unshift","expr","specified","sel","uniqueSort","duplicates","detectDuplicates","sortStable","textContent","firstChild","nodeValue","selectors","createPseudo","relative","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","what","_argument","simple","forward","ofType","_context","xml","uniqueCache","outerCache","nodeIndex","useCache","lastChild","uniqueID","pseudo","setFilters","matcher","unmatched","lang","elemLang","location","hasFocus","tabIndex","checked","_matchIndexes","password","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","until","truncate","siblings","rneedsContext","needsContext","rsingleTag","winnow","qualifier","not","self","rootjQuery","root","parseHTML","ready","rparentsprev","guaranteedUnique","sibling","has","targets","prevAll","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","contentDocument","content","rnothtmlwhite","Identity","Thrower","ex","adoptValue","reject","noValue","promise","fail","Callbacks","_","flag","createOptions","firing","memory","fired","locked","queue","firingIndex","fire","once","stopOnFalse","empty","disable","lock","fireWith","Deferred","tuples","always","deferred","pipe","fns","newDefer","tuple","returned","progress","notify","onFulfilled","onRejected","onProgress","maxDepth","depth","special","that","mightThrow","notifyWith","resolveWith","process","exceptionHook","stackTrace","rejectWith","getStackHook","stateString","when","singleValue","remaining","resolveContexts","resolveValues","updateFunc","rerrorNames","stack","message","readyException","readyList","completed","catch","readyWait","wait","readyState","doScroll","access","chainable","emptyGet","raw","bulk","_key","rmsPrefix","rdashAlpha","fcamelCase","_all","letter","string","acceptData","owner","Data","uid","hasData","dataPriv","dataUser","rbrace","rmultiDash","JSON","parse","getData","_data","_removeData","startLength","hooks","_queueHooks","setter","clearQueue","count","defer","pnum","rcssNum","cssExpand","isAttached","composed","getRootNode","isHiddenWithinTree","adjustCSS","valueParts","tween","adjusted","scale","maxIterations","currentValue","initial","cssNumber","initialInUnit","defaultDisplayMap","getDefaultDisplay","showHide","values","toggle","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","attached","fragment","nodes","htmlPrefilter","createTextNode","rtypenamespace","returnTrue","returnFalse","expectSync","err","safeActiveElement","types","origFn","leverageNative","notAsync","saved","isTrigger","delegateType","stopImmediatePropagation","Event","handleObjIn","eventHandle","handleObj","handlers","namespaces","origType","elemData","triggered","dispatch","bindType","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","nativeEvent","handlerQueue","fix","delegateTarget","preDispatch","isPropagationStopped","currentTarget","isImmediatePropagationStopped","rnamespace","postDispatch","matchedHandlers","matchedSelectors","addProp","hook","noBubble","beforeunload","returnValue","isDefaultPrevented","defaultPrevented","relatedTarget","timeStamp","now","isSimulated","bubbles","cancelable","eventPhase","view","charCode","buttons","clientX","clientY","offsetX","offsetY","pointerType","screenX","screenY","targetTouches","toElement","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","dest","udataOld","udataCur","fixInput","domManip","collection","hasScripts","iNoClone","valueIsFunction","_evalUrl","keepData","cleanData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","detach","before","after","replaceChild","insertAfter","replaceAll","original","insert","rnumnonpx","rcustomProp","getStyles","opener","swap","rboxStyle","rtrimCSS","curCSS","computed","minWidth","isCustomProp","getPropertyValue","pixelBoxStyles","addGetHookIf","conditionFn","hookFn","computeStyleTests","container","divStyle","pixelPositionVal","reliableMarginLeftVal","roundPixelMeasures","pixelBoxStylesVal","boxSizingReliableVal","scrollboxSizeVal","measure","reliableTrDimensionsVal","backgroundClip","clearCloneStyle","boxSizingReliable","pixelPosition","reliableMarginLeft","scrollboxSize","reliableTrDimensions","table","trChild","trStyle","borderBottomWidth","cssPrefixes","emptyStyle","vendorProps","finalPropName","final","cssProps","capName","vendorPropName","rdisplayswap","cssShow","cssNormalTransform","letterSpacing","fontWeight","setPositiveNumber","boxModelAdjustment","box","isBorderBox","computedVal","extra","delta","ceil","getWidthOrHeight","valueIsBorderBox","offsetProp","getClientRects","Tween","easing","cssHooks","origName","setProperty","scrollboxSizeBuggy","margin","border","suffix","expand","expanded","parts","propHooks","run","eased","pos","fx","linear","swing","cos","PI","fxNow","inProgress","rfxtypes","rrun","schedule","hidden","interval","tick","createFxNow","genFx","includeWidth","createTween","animation","Animation","tweeners","properties","stopped","prefilters","currentTime","startTime","tweens","specialEasing","originalProperties","originalOptions","gotoEnd","propFilter","timer","anim","tweener","oldfire","propTween","restoreDisplay","isBox","dataShow","unqueued","prefilter","opt","speeds","to","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeToggle","slow","fast","delay","time","timeout","checkOn","optSelected","radioValue","boolHook","nType","attrHooks","bool","attrNames","lowercaseName","rfocusable","rclickable","stripAndCollapse","getClass","classesToArray","removeProp","propFix","classNames","curValue","finalValue","stateVal","isValidValue","hasClass","rreturn","valHooks","optionSet","focusin","rfocusMorph","stopPropagationCallback","onlyHandlers","bubbleType","ontype","lastElement","eventPath","parentWindow","simulate","attaches","rquery","parseXML","parserErrorElem","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","lastModified","etag","isLocal","protocol","processData","async","contentType","accepts","json","responseFields","converters","ajaxSetup","ajaxPrefilter","ajaxTransport","ajax","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","urlAnchor","fireGlobals","uncached","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getResponseHeader","getAllResponseHeaders","setRequestHeader","overrideMimeType","mimeType","abort","statusText","finalText","crossDomain","hasContent","ifModified","headers","beforeSend","success","send","nativeStatusText","responses","isSuccess","response","modified","ct","finalDataType","firstDataType","ajaxHandleResponses","conv2","conv","dataFilter","throws","ajaxConvert","getJSON","getScript","wrapAll","wrapInner","htmlIsFunction","visible","xhr","XMLHttpRequest","xhrSuccessStatus","0","1223","xhrSupported","cors","errorCallback","username","xhrFields","onload","onerror","onabort","ontimeout","onreadystatechange","responseType","responseText","binary","scriptAttrs","charset","scriptCharset","evt","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","createHTMLDocument","implementation","keepScripts","parsed","params","animated","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","curElem","using","win","pageYOffset","pageXOffset","parentOffset","scrollTo","Height","Width","defaultExtra","funcName","delegate","undelegate","fnOver","fnOut","holdReady","hold","parseJSON","_jQuery","_$","noConflict","require","jQueryBridget","videoID","ID","isAnimating","restingFrames","applyDragForce","applySelectedAttraction","previousX","integratePhysics","positionSlider","settle","wrapAround","cells","modulo","slideableWidth","shiftWrapCells","setTranslateX","dispatchScrollEvent","is3d","cursorPosition","rightToLeft","translateX","getPositionValue","slider","firstSlide","slides","positionX","slidesWidth","dispatchEvent","selectedSlide","velocity","percentPosition","isFreeScrolling","beforeGap","_shiftCells","beforeShiftCells","afterGap","afterShiftCells","gap","cell","cellShift","wrapShift","getFrictionFactor","force","isDraggable","dragForce","dragX","applyForce","selectedAttraction","Flickity","PageDots","_create","holder","dots","handleClick","onClick","childUIPointerDown","setDots","deactivate","addDots","removeDots","newDots","dot","updateSelected","selectedDot","onTap","uiChange","allOff","pageDots","createMethods","_createPageDots","activatePageDots","updateSelectedPageDots","updatePageDots","deactivatePageDots","listener","_events","listeners","onceEvents","_onceEvents","onceListeners","Cell","Slide","animatePrototype","moveElements","toElem","GUID","instances","queryElement","getQueryElement","flickityGUID","accessibility","cellAlign","freeScrollFriction","friction","namespaceJQueryEvents","setGallerySize","originSide","viewport","_createSlider","watchCSS","isActive","classList","_filterFindCellElements","reloadCells","selectInitialIndex","isInitActivated","filterFindElements","cellSelector","_makeCells","positionCells","_getWrapShiftCells","cellElem","getLastCell","getLastSlide","_sizeCells","_positionCells","maxCellHeight","cellX","startCell","setPosition","updateSlides","_containSlides","slide","nextMargin","canCellFit","_getCanCellFit","slideWidth","firstMargin","updateTarget","addCell","updateSelectedSlide","groupCells","number","percentMatch","_init","positionSliderAtSelected","setCellAlign","cellAlignShorthands","shorthand","adaptiveHeight","_unshiftCells","gapX","cellIndex","_getGapCells","contain","isRightToLeft","beginMargin","endMargin","contentWidth","isContentSmaller","beginBound","endBound","emitArgs","$event","jQEvent","isWrap","isInstant","_wrapSelect","prevIndex","startAnimation","wrapIndex","backWrapDelta","forewardWrapDelta","isDragSelect","unselectSelectedSlide","selectedCells","selectedElements","getCellElements","selectedCell","selectedElement","unselect","initialIndex","queryCell","selectCell","getCellSlideIndex","getCell","getCells","getParentCell","getParent","getAdjacentCellElements","adjCount","cellElems","slideIndex","onresize","debounceMethod","onkeydown","isNotFocused","keyboardHandlers","37","leftMethod","39","rightMethod","prevScrollY","preventScroll","htmlInit","bridget","setJQuery","jq","deletedIds","all","realStringObj","ownFirst","execScript","push_native","rattributeQuotes","rescape","escaped","escapedWhitespace","nidselect","innerText","div1","risSimple","contentWindow","rnotwhite","detachEvent","subordinate","progressValues","progressContexts","frameElement","doScrollCheck","inlineBlockNeedsLayout","zoom","deleteExpando","shrinkWrapBlocksVal","noData","isEmptyDataObject","internalData","pvt","thisCache","internalKey","isNode","toJSON","internalRemoveData","shrinkWrapBlocks","isHidden","rleadingWhitespace","nodeNames","createSafeFragment","safeFrag","leadingWhitespace","htmlSerialize","html5Clone","outerHTML","appendChecked","noCloneEvent","legend","found","rtbody","fixDefaultChecked","defaultChecked","safe","rformElems","rkeyEvent","rmouseEvent","fixHook","fixHooks","mouseHooks","keyHooks","srcElement","eventDoc","fromElement","clientLeft","clientTop","cancelBubble","form","_submitBubble","propertyName","_justChanged","rinlinejQuery","rnoshimcache","rxhtmlTag","rscriptTypeMasked","fragmentDiv","oldData","curData","fixCloneNodeIssues","defaultSelected","forceAcceptData","elemdisplay","HTML","BODY","actualDisplay","defaultDisplay","write","rmargin","pixelMarginRightVal","reliableHiddenOffsetsVal","reliableMarginRightVal","borderCollapse","cssFloat","boxSizing","MozBoxSizing","WebkitBoxSizing","reliableHiddenOffsets","pixelMarginRight","reliableMarginRight","rposition","currentStyle","rs","rsLeft","runtimeStyle","pixelLeft","ralpha","ropacity","rnumsplit","augmentWidthOrHeight","$1","timerId","setInterval","clearInterval","getSetAttribute","hrefNormalized","enctype","optDisabled","rspaces","nodeHook","ruseDefault","getSetInput","propName","setAttributeNode","createAttribute","coords","contenteditable","rclass","clazz","rvalidtokens","requireNonComma","comma","Function","ActiveXObject","loadXML","rts","rurl","ajaxLocation","ajaxLocParts","getDisplay","lname","filterHidden","createActiveXHR","createStandardXHR","xhrId","xhrCallbacks","isAbort","_load","andSelf","Item","Outlayer","outlayerGUID","_getOption","layout","containerStyle","initLayout","originLeft","originTop","resizeContainer","transitionDuration","hiddenStyle","visibleStyle","subclass","Parent","SubClass","oldOption","compatOptions","horizontal","layoutInstant","reloadItems","stamps","stamp","bindResize","_itemize","itemElems","_filterFindItemElements","itemSelector","getItemElements","_resetLayout","_manageStamps","_isLayoutInited","layoutItems","_getMeasurement","HTMLElement","_getItemsForLayout","_layoutItems","_postLayout","isIgnored","_emitCompleteOnItems","_getItemLayoutPosition","isLayoutInstant","_processLayoutQueue","updateStagger","_positionItem","stagger","msUnits","getMilliseconds","goTo","moveTo","_getContainerSize","_setContainerMeasure","isWidth","elemSize","paddingLeft","paddingRight","borderRightWidth","paddingBottom","paddingTop","doneCount","ignore","getItem","unignore","_find","unstamp","removeFrom","_getBoundingRect","_manageStamp","boundingRect","_boundingRect","_getElementOffset","thisRect","isResizeBound","unbindResize","needsResizeLayout","addItems","appended","reveal","prepended","previousItems","revealItemElements","getItems","hideItemElements","removeItems","Layout","ms","docElemStyle","transitionProperty","transformProperty","transitionEndEvent","WebkitTransition","vendorProperties","transitionDelay","_transn","ingProperties","clean","onEnd","elemStyle","getPosition","isOriginLeft","isOriginTop","xValue","yValue","layoutSize","layoutPosition","xPadding","xProperty","xResetProperty","getXValue","yPadding","yProperty","yResetProperty","getYValue","isHorizontal","_transitionTo","curX","curY","didNotMove","isTransitioning","transX","transY","transitionStyle","getTranslate","onTransitionEnd","isCleaning","_nonTransition","_removeStyles","_transition","from","enableTransition","transitionProps","staggerDelay","onwebkitTransitionEnd","ontransitionend","onotransitionend","dashedVendorProperties","isEmptyObj","disableTransition","removeTransitionStyles","cleanStyle","cleanTransitionStyle","removeElem","getHideRevealTransitionEndProperty","onRevealTransitionEnd","styleProperty","optionStyle","onHideTransitionEnd","getStyleSize","logError","measurements","measurementsLength","getStyle","isBoxSizeOuter","isSetup","borderStyle","borderWidth","getZeroSize","paddingWidth","paddingHeight","marginWidth","marginHeight","borderHeight","isBorderBoxSizeOuter","styleWidth","styleHeight","subform","$input","hasValue","draggable","dragThreshold","_createDrag","onActivateDrag","_uiChangeDrag","onDeactivateDrag","updateDraggable","bindDrag","unbindDrag","_pointerDownPreventDefault","pointerDownFocus","pointerDownScroll","getScrollPosition","_pointerDownDefault","focusNodes","isTouchStart","isTouchPointer","isFocusNode","isTouchScrolling","dragStartPosition","previousDragX","direction","originBound","dragMoveTime","freeScroll","dragEndRestingSelect","restingX","getRestingPosition","dragEndBoostSelect","distance","getSlideDistance","positiveResting","_getClosestResting","negativeResting","minDistance","Infinity","condition","dist","minDist","isWrapAround","clickedCell","onscroll","scrollMoveX","scrollMoveY","_interopDefaultLegacy","$__default","Popper__default","_defineProperties","_createClass","_setPrototypeOf","setPrototypeOf","__proto__","transitionEndEmulator","Util","TRANSITION_END","triggerTransitionEnd","getUID","getSelectorFromElement","hrefAttr","getTransitionDurationFromElement","floatTransitionDuration","floatTransitionDelay","reflow","supportsTransitionEnd","Boolean","isElement","typeCheckConfig","componentName","config","configTypes","expectedTypes","valueType","findShadowRoot","attachShadow","ShadowRoot","jQueryDetection","emulateTransitionEnd","JQUERY_NO_CONFLICT$a","Alert","_element","_proto","rootElement","_getRootElement","_triggerCloseEvent","_removeElement","dispose","closeEvent","_destroyElement","_jQueryInterface","_handleDismiss","alertInstance","JQUERY_NO_CONFLICT$9","Button","shouldAvoidTriggerChange","triggerChangeEvent","addAriaPressed","hasAttribute","avoidTriggerChange","initialButton","inputBtn","tagName","_len","_button","NAME$8","EVENT_KEY$8","JQUERY_NO_CONFLICT$8","Default$7","keyboard","pause","DefaultType$7","PointerType","TOUCH","PEN","Carousel","_items","_interval","_activeElement","_isPaused","_isSliding","touchTimeout","touchStartX","touchDeltaX","_config","_getConfig","_indicatorsElement","_touchSupported","maxTouchPoints","_pointerEvent","MSPointerEvent","_addEventListeners","_slide","nextWhenVisible","cycle","_updateInterval","visibilityState","activeIndex","_getItemIndex","_handleSwipe","absDeltax","_this2","_keydown","_addTouchEventListeners","_this3","move","_getItemByDirection","isNextDirection","isPrevDirection","lastItemIndex","itemIndex","_triggerSlideEvent","eventDirectionName","targetIndex","fromIndex","slideEvent","_setActiveIndicatorElement","indicators","nextIndicator","elementInterval","defaultInterval","directionalClassName","orderClassName","_this4","activeElementIndex","nextElement","nextElementIndex","isCycling","slidEvent","CLASS_NAME_ACTIVE$2","action","ride","_dataApiClickHandler","carousels","$carousel","NAME$7","JQUERY_NO_CONFLICT$7","Default$6","DefaultType$6","Collapse","_isTransitioning","_triggerArray","toggleList","filterElement","foundElem","_selector","_parent","_getParent","_addAriaAndCollapsedClass","actives","activesData","_getDimension","setTransitioning","scrollSize","CLASS_NAME_COLLAPSE","triggerArrayLength","_getTargetFromElement","triggerArray","isOpen","$trigger","NAME$6","JQUERY_NO_CONFLICT$6","REGEXP_KEYDOWN","ARROW_UP_KEYCODE","Default$5","boundary","popperConfig","DefaultType$5","Dropdown","_popper","_menu","_getMenuElement","_inNavbar","_detectNavbar","_clearMenus","usePopper","showEvent","_getParentFromElement","referenceElement","_getPopperConfig","hideEvent","Default","DefaultType","_getPlacement","$parentDropdown","_getOffset","toggles","clickEvent","dropdownMenu","_dataApiKeydownHandler","EVENT_CLICK_DATA_API$2","JQUERY_NO_CONFLICT$5","Default$4","backdrop","DefaultType$4","Modal","_dialog","_backdrop","_isShown","_isBodyOverflowing","_ignoreBackdropClick","_scrollbarWidth","_checkScrollbar","_setScrollbar","_adjustDialog","_setEscapeEvent","_setResizeEvent","_showBackdrop","_showElement","_hideModal","htmlElement","handleUpdate","_triggerBackdropTransition","hideEventPrevented","isModalOverflowing","modalTransitionDuration","modalBody","ELEMENT_NODE","_enforceFocus","shownEvent","transitionComplete","_this5","_this6","_this7","_this8","_resetAdjustments","_resetScrollbar","_removeBackdrop","_this9","backdropTransitionDuration","callbackRemove","_backdropTransitionDuration","_getScrollbarWidth","_this10","fixedContent","stickyContent","actualPadding","calculatedPadding","actualMargin","calculatedMargin","scrollDiv","scrollbarWidth","_this11","uriAttrs","DefaultWhitelist","br","em","hr","h1","h2","h3","h4","h5","h6","li","ol","pre","small","span","sub","sup","strong","u","ul","SAFE_URL_PATTERN","DATA_URL_PATTERN","sanitizeHtml","unsafeHtml","whiteList","sanitizeFn","createdDocument","whitelistKeys","_loop","elName","attributeList","whitelistedAttributes","allowedAttributeList","attrName","regExp","attrRegex","allowedAttribute","NAME$4","JQUERY_NO_CONFLICT$4","BSCLS_PREFIX_REGEX$1","DISALLOWED_ATTRIBUTES","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","Default$3","template","fallbackPlacement","sanitize","DefaultType$3","Event$1","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","NAME","setContent","attachment","_getAttachment","addAttachmentClass","_getContainer","_fixTransition","prevHoverState","_cleanTipClass","getTitle","CLASS_PREFIX$1","setElementContent","CLASS_NAME_FADE$3","_handlePopperPlacementChange","eventIn","eventOut","_fixTitle","titleType","dataAttributes","$tip","tabClass","popperData","initConfigAnimation","NAME$3","JQUERY_NO_CONFLICT$3","BSCLS_PREFIX_REGEX","Default$2","DefaultType$2","Popover","_Tooltip","subClass","superClass","_getContent","CLASS_PREFIX","CLASS_NAME_FADE$2","NAME$2","JQUERY_NO_CONFLICT$2","Default$1","DefaultType$1","ScrollSpy","_scrollElement","_offsets","_targets","_activeTarget","_scrollHeight","_process","autoMethod","offsetMethod","offsetBase","_getScrollTop","_getScrollHeight","targetSelector","targetBCR","_getOffsetHeight","maxScroll","_activate","_clear","queries","$link","SELECTOR_NAV_LINKS","scrollSpys","$spy","JQUERY_NO_CONFLICT$1","Tab","listElement","hiddenEvent","_transitionComplete","dropdownChild","dropdownElement","dropdownToggleList","$this","JQUERY_NO_CONFLICT","autohide","Toast","_clearTimeout","_close","Scrollspy","__assign","CountUp","endVal","startVal","decimalPlaces","useEasing","useGrouping","smartEasingThreshold","smartEasingAmount","decimal","enableScrollSpy","scrollSpyDelay","scrollSpyOnce","finalEndVal","countDown","paused","frameVal","easingFn","Number","toFixed","printValue","rAF","formatNumber","numerals","easeOutExpo","pow","formattingFn","validateValue","resetDuration","onScrollFns","handleScroll","scrollY","determineDirectionAndSmartEasing","pauseResume","ensureNumber","numbersAnimation","numbers","docViewTop","docViewBottom","elemTop","hasDecimals","log","gridOffset","banner","dataStatus","ajaxQuery","filterValues","localized_object","ajax_url","posts","arraySlice","ary","ffElems","childElems","_class","methodName","threshold","timeoutName","docReady","toDashed","$2","WidgetClass","dashedNamespace","dataAttrElems","jsDashElems","dataOptionsAttr","PluginClass","methodCall","$elems","pluginMethodStr","plainCall","arg0","updateJQuery","Masonry","flickity","exists","serializeObject","winWidth","prevNextButtons","nextOffsetTop","elID","anchorEl","ElOffset","navScrolled","nav","inView","lastCell","lastMargin","fitWidth","measureColumns","colYs","cols","maxY","horizontalColIndex","getContainerWidth","columnWidth","firstItem","firstItemElem","containerWidth","gutter","remainder","colSpan","colPosition","horizontalOrder","setHeight","setMax","_getTopColPosition","colGroup","_getTopColGroup","minimumY","groupCount","_getColGroupY","groupColYs","_getHorizontalColPosition","hasSize","stampSize","firstX","lastX","firstCol","lastCol","stampMaxY","_getContainerFitWidth","unusedCols","previousWidth","LazyLoader","_createLazyload","lazyLoad","lazyImages","lazyCellImages","lazyloadAttr","srcAttr","srcsetAttr","imgs","getCellLazyImages","srcset","cellSizeChange","paged","updatePostsResults","grid","news","displaying","newPosts","cur_page","max_count","max_pages","Player","onVisibilityChange","visibilityChange","onVisibilityPlay","visibilityPlay","play","autoPlay","unpause","pauseAutoPlayOnHover","_createPlayer","player","activatePlayer","stopPlayer","deactivatePlayer","playPlayer","pausePlayer","unpausePlayer","onmouseenter","onmouseleave","getCellsFragment","isAppend","insertCellElement","endCells","cellChange","minCellIndex","changedCellIndex","isPositioningSlider","prevSelectedElem","matchesMethod","ElemProto","Element","cookie","date","setTime","g","renderPosition","setDefaultTarget","marginProperty","sideOffset","adjustedX","svgURI","PrevNextButton","isEnabled","isPrevious","leftDirection","isLeft","svg","createSVG","createElementNS","shape","path","pathMovements","arrowShape","x0","x1","y1","x2","y2","x3","lastIndex","boundIndex","_createPrevNextButtons","prevButton","nextButton","activatePrevNextButtons","deactivatePrevNextButtons"],"mappings":"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","file":"/scripts/app.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\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 */\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.Popper = factory());\n}(this, (function () { 'use strict';\n\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && typeof navigator !== 'undefined';\n\nvar timeoutDuration = function () {\n var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\n for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n return 1;\n }\n }\n return 0;\n}();\n\nfunction microtaskDebounce(fn) {\n var called = false;\n return function () {\n if (called) {\n return;\n }\n called = true;\n window.Promise.resolve().then(function () {\n called = false;\n fn();\n });\n };\n}\n\nfunction taskDebounce(fn) {\n var scheduled = false;\n return function () {\n if (!scheduled) {\n scheduled = true;\n setTimeout(function () {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nvar supportsMicroTasks = isBrowser && window.Promise;\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nvar debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nfunction isFunction(functionToCheck) {\n var getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\n/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nfunction getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n var window = element.ownerDocument.defaultView;\n var css = window.getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n\n/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nfunction getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nfunction getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body;\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body;\n case '#document':\n return element.body;\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n\n var _getStyleComputedProp = getStyleComputedProperty(element),\n overflow = _getStyleComputedProp.overflow,\n overflowX = _getStyleComputedProp.overflowX,\n overflowY = _getStyleComputedProp.overflowY;\n\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n\n/**\n * Returns the reference node of the reference object, or the reference object itself.\n * @method\n * @memberof Popper.Utils\n * @param {Element|Object} reference - the reference element (the popper will be relative to this)\n * @returns {Element} parent\n */\nfunction getReferenceNode(reference) {\n return reference && reference.referenceNode ? reference.referenceNode : reference;\n}\n\nvar isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nvar isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nfunction isIE(version) {\n if (version === 11) {\n return isIE11;\n }\n if (version === 10) {\n return isIE10;\n }\n return isIE11 || isIE10;\n}\n\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nfunction getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n var noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n var offsetParent = element.offsetParent || null;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n var nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TH, TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n\nfunction isOffsetContainer(element) {\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY') {\n return false;\n }\n return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n}\n\n/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nfunction getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nfunction findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n var start = order ? element1 : element2;\n var end = order ? element2 : element1;\n\n // Get common ancestor container\n var range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n var commonAncestorContainer = range.commonAncestorContainer;\n\n // Both nodes are inside #document\n\n if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n var element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n\n/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nfunction getScroll(element) {\n var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n var html = element.ownerDocument.documentElement;\n var scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nfunction includeScroll(rect, element) {\n var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n var modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n\n/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nfunction getBordersSize(styles, axis) {\n var sideA = axis === 'x' ? 'Left' : 'Top';\n var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return parseFloat(styles['border' + sideA + 'Width']) + 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\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle)\n };\n}\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\nvar defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\n/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nfunction getClientRect(offsets) {\n return _extends({}, offsets, {\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height\n });\n}\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nfunction getBoundingClientRect(element) {\n var rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n } else {\n rect = element.getBoundingClientRect();\n }\n } catch (e) {}\n\n var result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n\n // subtract scrollbar size from sizes\n var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n var width = sizes.width || element.clientWidth || result.width;\n var height = sizes.height || element.clientHeight || result.height;\n\n var horizScrollbar = element.offsetWidth - width;\n var vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n var styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n\nfunction getOffsetRectRelativeToArbitraryNode(children, parent) {\n var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var isIE10 = isIE(10);\n var isHTML = parent.nodeName === 'HTML';\n var childrenRect = getBoundingClientRect(children);\n var parentRect = getBoundingClientRect(parent);\n var scrollParent = getScrollParent(children);\n\n var styles = getStyleComputedProperty(parent);\n var borderTopWidth = parseFloat(styles.borderTopWidth);\n var borderLeftWidth = parseFloat(styles.borderLeftWidth);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if (fixedPosition && isHTML) {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n var offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n var marginTop = parseFloat(styles.marginTop);\n var marginLeft = parseFloat(styles.marginLeft);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element) {\n var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var html = element.ownerDocument.documentElement;\n var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n var width = Math.max(html.clientWidth, window.innerWidth || 0);\n var height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n var scrollTop = !excludeScroll ? getScroll(html) : 0;\n var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n var offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width: width,\n height: height\n };\n\n return getClientRect(offset);\n}\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nfunction isFixed(element) {\n var nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n var parentNode = getParentNode(element);\n if (!parentNode) {\n return false;\n }\n return isFixed(parentNode);\n}\n\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nfunction getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n var el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n}\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n // NOTE: 1 DOM access here\n\n var boundaries = { top: 0, left: 0 };\n var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n\n // Handle viewport case\n if (boundariesElement === 'viewport') {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n } else {\n // Handle other cases based on DOM element used as boundaries\n var boundariesNode = void 0;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n var _getWindowSizes = getWindowSizes(popper.ownerDocument),\n height = _getWindowSizes.height,\n width = _getWindowSizes.width;\n\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n padding = padding || 0;\n var isPaddingNumber = typeof padding === 'number';\n boundaries.left += isPaddingNumber ? padding : padding.left || 0;\n boundaries.top += isPaddingNumber ? padding : padding.top || 0;\n boundaries.right -= isPaddingNumber ? padding : padding.right || 0;\n boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;\n\n return boundaries;\n}\n\nfunction getArea(_ref) {\n var width = _ref.width,\n height = _ref.height;\n\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n\n var rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height\n }\n };\n\n var sortedAreas = Object.keys(rects).map(function (key) {\n return _extends({\n key: key\n }, rects[key], {\n area: getArea(rects[key])\n });\n }).sort(function (a, b) {\n return b.area - a.area;\n });\n\n var filteredAreas = sortedAreas.filter(function (_ref2) {\n var width = _ref2.width,\n height = _ref2.height;\n return width >= popper.clientWidth && height >= popper.clientHeight;\n });\n\n var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n\n var variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? '-' + variation : '');\n}\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nfunction getReferenceOffsets(state, popper, reference) {\n var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n\n/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nfunction getOuterSizes(element) {\n var window = element.ownerDocument.defaultView;\n var styles = window.getComputedStyle(element);\n var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\n var result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x\n };\n return result;\n}\n\n/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nfunction getOppositePlacement(placement) {\n var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nfunction getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n var popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n var popperOffsets = {\n width: popperRect.width,\n height: popperRect.height\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n var mainSide = isHoriz ? 'top' : 'left';\n var secondarySide = isHoriz ? 'left' : 'top';\n var measurement = isHoriz ? 'height' : 'width';\n var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n\n/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(function (cur) {\n return cur[prop] === value;\n });\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n var match = find(arr, function (obj) {\n return obj[prop] === value;\n });\n return arr.indexOf(match);\n}\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nfunction runModifiers(modifiers, data, ends) {\n var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(function (modifier) {\n if (modifier['function']) {\n // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.<br />\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nfunction update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n var data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {}\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n\n data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n\n/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nfunction isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(function (_ref) {\n var name = _ref.name,\n enabled = _ref.enabled;\n return enabled && name === modifierName;\n });\n}\n\n/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nfunction getSupportedPropertyName(property) {\n var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (var i = 0; i < prefixes.length; i++) {\n var prefix = prefixes[i];\n var toCheck = prefix ? '' + prefix + upperProp : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n\n/**\n * Destroys the popper.\n * @method\n * @memberof Popper\n */\nfunction destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicitly asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n\n/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nfunction getWindow(element) {\n var ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n var isBody = scrollParent.nodeName === 'BODY';\n var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction setupEventListeners(reference, options, state, updateBound) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n var scrollElement = getScrollParent(reference);\n attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nfunction enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n }\n}\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(function (target) {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nfunction disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n\n/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nfunction isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setStyles(element, styles) {\n Object.keys(styles).forEach(function (prop) {\n var unit = '';\n // add unit if the value is numeric and is one of the following\n if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n\n/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function (prop) {\n var value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nfunction applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nfunction applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n // compute reference element offsets\n var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n\n/**\n * @function\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Boolean} shouldRound - If the offsets should be rounded at all\n * @returns {Object} The popper's position offsets rounded\n *\n * The tale of pixel-perfect positioning. It's still not 100% perfect, but as\n * good as it can be within reason.\n * Discussion here: https://github.com/FezVrasta/popper.js/pull/715\n *\n * Low DPI screens cause a popper to be blurry if not using full pixels (Safari\n * as well on High DPI screens).\n *\n * Firefox prefers no rounding for positioning and does not have blurriness on\n * high DPI screens.\n *\n * Only horizontal placement and left/right values need to be considered.\n */\nfunction getRoundedOffsets(data, shouldRound) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n var round = Math.round,\n floor = Math.floor;\n\n var noRound = function noRound(v) {\n return v;\n };\n\n var referenceWidth = round(reference.width);\n var popperWidth = round(popper.width);\n\n var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n var isVariation = data.placement.indexOf('-') !== -1;\n var sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n\n var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;\n var verticalToInteger = !shouldRound ? noRound : round;\n\n return {\n left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),\n top: verticalToInteger(popper.top),\n bottom: verticalToInteger(popper.bottom),\n right: horizontalToInteger(popper.right)\n };\n}\n\nvar isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeStyle(data, options) {\n var x = options.x,\n y = options.y;\n var popper = data.offsets.popper;\n\n // Remove this legacy support in Popper.js v2\n\n var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'applyStyle';\n }).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n }\n var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n\n var offsetParent = getOffsetParent(data.instance.popper);\n var offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n var styles = {\n position: popper.position\n };\n\n var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox);\n\n var sideA = x === 'bottom' ? 'top' : 'bottom';\n var sideB = y === 'right' ? 'left' : 'right';\n\n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n var prefixedProperty = getSupportedPropertyName('transform');\n\n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n var left = void 0,\n top = void 0;\n if (sideA === 'bottom') {\n // when offsetParent is <html> the positioning is relative to the bottom of the screen (excluding the scrollbar)\n // and not the bottom of the html element\n if (offsetParent.nodeName === 'HTML') {\n top = -offsetParent.clientHeight + offsets.bottom;\n } else {\n top = -offsetParentRect.height + offsets.bottom;\n }\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n if (offsetParent.nodeName === 'HTML') {\n left = -offsetParent.clientWidth + offsets.right;\n } else {\n left = -offsetParentRect.width + offsets.right;\n }\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n var invertTop = sideA === 'bottom' ? -1 : 1;\n var invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = sideA + ', ' + sideB;\n }\n\n // Attributes\n var attributes = {\n 'x-placement': data.placement\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = _extends({}, attributes, data.attributes);\n data.styles = _extends({}, styles, data.styles);\n data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n\n return data;\n}\n\n/**\n * Helper used to know if the given modifier depends from another one.<br />\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n var requesting = find(modifiers, function (_ref) {\n var name = _ref.name;\n return name === requestingName;\n });\n\n var isRequired = !!requesting && modifiers.some(function (modifier) {\n return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n });\n\n if (!isRequired) {\n var _requesting = '`' + requestingName + '`';\n var requested = '`' + requestedName + '`';\n console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n }\n return isRequired;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction arrow(data, options) {\n var _data$offsets$arrow;\n\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n var arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn('WARNING: `arrow.element` must be child of its popper element!');\n return data;\n }\n }\n\n var placement = data.placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n var len = isVertical ? 'height' : 'width';\n var sideCapitalized = isVertical ? 'Top' : 'Left';\n var side = sideCapitalized.toLowerCase();\n var altSide = isVertical ? 'left' : 'top';\n var opSide = isVertical ? 'bottom' : 'right';\n var arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjunction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n var css = getStyleComputedProperty(data.instance.popper);\n var popperMarginSide = parseFloat(css['margin' + sideCapitalized]);\n var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width']);\n var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n\n return data;\n}\n\n/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nfunction getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n\n/**\n * List of accepted placements to use as values of the `placement` option.<br />\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.<br />\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-end` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nvar placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\n\n// Get rid of `auto` `auto-start` and `auto-end`\nvar validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nfunction clockwise(placement) {\n var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var index = validPlacements.indexOf(placement);\n var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n\nvar BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise'\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\n\n var placement = data.placement.split('-')[0];\n var placementOpposite = getOppositePlacement(placement);\n var variation = data.placement.split('-')[1] || '';\n\n var flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach(function (step, index) {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n var popperOffsets = data.offsets.popper;\n var refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n var floor = Math.floor;\n var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n\n var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n // flip the variation if required\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n\n // flips variation if reference element overflows boundaries\n var flippedVariationByRef = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n // flips variation if popper content overflows boundaries\n var flippedVariationByContent = !!options.flipVariationsByContent && (isVertical && variation === 'start' && overflowsRight || isVertical && variation === 'end' && overflowsLeft || !isVertical && variation === 'start' && overflowsBottom || !isVertical && variation === 'end' && overflowsTop);\n\n var flippedVariation = flippedVariationByRef || flippedVariationByContent;\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction keepTogether(data) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var placement = data.placement.split('-')[0];\n var floor = Math.floor;\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var side = isVertical ? 'right' : 'bottom';\n var opSide = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nfunction toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n var value = +split[1];\n var unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n var element = void 0;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n var rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n var size = void 0;\n if (unit === 'vh') {\n size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n } else {\n size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nfunction parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n var offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n return frag.trim();\n });\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n var divider = fragments.indexOf(find(fragments, function (frag) {\n return frag.search(/,|\\s/) !== -1;\n }));\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n var splitRegex = /\\s*,\\s*|\\s+/;\n var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map(function (op, index) {\n // Most of the units rely on the orientation of the popper\n var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n var mergeWithPrevious = false;\n return op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce(function (a, b) {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(function (str) {\n return toValue(str, measurement, popperOffsets, referenceOffsets);\n });\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach(function (op, index) {\n op.forEach(function (frag, index2) {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nfunction offset(data, _ref) {\n var offset = _ref.offset;\n var placement = data.placement,\n _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var basePlacement = placement.split('-')[0];\n\n var offsets = void 0;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction preventOverflow(data, options) {\n var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\n // NOTE: DOM access here\n // resets the popper's position so that the document size can be calculated excluding\n // the size of the popper element itself\n var transformProp = getSupportedPropertyName('transform');\n var popperStyles = data.instance.popper.style; // assignment to help minification\n var top = popperStyles.top,\n left = popperStyles.left,\n transform = popperStyles[transformProp];\n\n popperStyles.top = '';\n popperStyles.left = '';\n popperStyles[transformProp] = '';\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);\n\n // NOTE: DOM access here\n // restores the original style properties after the offsets have been computed\n popperStyles.top = top;\n popperStyles.left = left;\n popperStyles[transformProp] = transform;\n\n options.boundaries = boundaries;\n\n var order = options.priority;\n var popper = data.offsets.popper;\n\n var check = {\n primary: function primary(placement) {\n var value = popper[placement];\n if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return defineProperty({}, placement, value);\n },\n secondary: function secondary(placement) {\n var mainSide = placement === 'right' ? 'left' : 'top';\n var value = popper[mainSide];\n if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n }\n return defineProperty({}, mainSide, value);\n }\n };\n\n order.forEach(function (placement) {\n var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = _extends({}, popper, check[side](placement));\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction shift(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n var _data$offsets = data.offsets,\n reference = _data$offsets.reference,\n popper = _data$offsets.popper;\n\n var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n var side = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n var shiftOffsets = {\n start: defineProperty({}, side, reference[side]),\n end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n };\n\n data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n var refRect = data.offsets.reference;\n var bound = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'preventOverflow';\n }).boundaries;\n\n if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction inner(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.<br />\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.<br />\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nvar modifiers = {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.<br />\n * It will read the variation of the `placement` property.<br />\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unit-less, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.<br />\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the `height`.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.<br />\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.<br />\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * A scenario exists where the reference itself is not within the boundaries.<br />\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".<br />\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper. This makes sure the popper always has a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent'\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near each other\n * without leaving any gap between the two. Especially useful when the arrow is\n * enabled and you want to ensure that it points to its reference element.\n * It cares only about the first axis. You can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjunction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]'\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations)\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position.\n * The popper will never be placed outside of the defined boundaries\n * (except if `keepTogether` is enabled)\n */\n boundariesElement: 'viewport',\n /**\n * @prop {Boolean} flipVariations=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the reference element overlaps its boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariations: false,\n /**\n * @prop {Boolean} flipVariationsByContent=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the popper element overlaps its reference boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariationsByContent: false\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right'\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define your own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: undefined\n }\n};\n\n/**\n * The `dataObject` is an object containing all the information used by Popper.js.\n * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.<br />\n * These can be overridden using the `options` argument of Popper.js.<br />\n * To override an option, simply pass an object with the same\n * structure of the `options` object, as the 3rd argument. For example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nvar Defaults = {\n /**\n * Popper's placement.\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled.\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.<br />\n * By default, it is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: function onCreate() {},\n\n /**\n * Callback called when the popper is updated. This callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.<br />\n * By default, it is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: function onUpdate() {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js.\n * @prop {modifiers}\n */\n modifiers: modifiers\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n\n// Utils\n// Methods\nvar Popper = function () {\n /**\n * Creates a new Popper.js instance.\n * @class Popper\n * @param {Element|referenceObject} reference - The reference element used to position the popper\n * @param {Element} popper - The HTML / XML element used as the popper\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n function Popper(reference, popper) {\n var _this = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n classCallCheck(this, Popper);\n\n this.scheduleUpdate = function () {\n return requestAnimationFrame(_this.update);\n };\n\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = _extends({}, Popper.Defaults, options);\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: []\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n return _extends({\n name: name\n }, _this.options.modifiers[name]);\n })\n // sort the modifiers by order\n .sort(function (a, b) {\n return a.order - b.order;\n });\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(function (modifierOptions) {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n var eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n\n\n createClass(Popper, [{\n key: 'update',\n value: function update$$1() {\n return update.call(this);\n }\n }, {\n key: 'destroy',\n value: function destroy$$1() {\n return destroy.call(this);\n }\n }, {\n key: 'enableEventListeners',\n value: function enableEventListeners$$1() {\n return enableEventListeners.call(this);\n }\n }, {\n key: 'disableEventListeners',\n value: function disableEventListeners$$1() {\n return disableEventListeners.call(this);\n }\n\n /**\n * Schedules an update. It will run on the next UI update available.\n * @method scheduleUpdate\n * @memberof Popper\n */\n\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n\n }]);\n return Popper;\n}();\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.<br />\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10.\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n\n\nPopper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\nPopper.placements = placements;\nPopper.Defaults = Defaults;\n\nreturn Popper;\n\n})));\n//# sourceMappingURL=popper.js.map\n","/*!\n\tColorbox 1.6.4\n\tlicense: MIT\n\thttp://www.jacklmoore.com/colorbox\n*/\n(function ($, document, window) {\n\tvar\n\t// Default settings object.\n\t// See http://jacklmoore.com/colorbox for details.\n\tdefaults = {\n\t\t// data sources\n\t\thtml: false,\n\t\tphoto: false,\n\t\tiframe: false,\n\t\tinline: false,\n\n\t\t// behavior and appearance\n\t\ttransition: \"elastic\",\n\t\tspeed: 300,\n\t\tfadeOut: 300,\n\t\twidth: false,\n\t\tinitialWidth: \"600\",\n\t\tinnerWidth: false,\n\t\tmaxWidth: false,\n\t\theight: false,\n\t\tinitialHeight: \"450\",\n\t\tinnerHeight: false,\n\t\tmaxHeight: false,\n\t\tscalePhotos: true,\n\t\tscrolling: true,\n\t\topacity: 0.9,\n\t\tpreloading: true,\n\t\tclassName: false,\n\t\toverlayClose: true,\n\t\tescKey: true,\n\t\tarrowKey: true,\n\t\ttop: false,\n\t\tbottom: false,\n\t\tleft: false,\n\t\tright: false,\n\t\tfixed: false,\n\t\tdata: undefined,\n\t\tcloseButton: true,\n\t\tfastIframe: true,\n\t\topen: false,\n\t\treposition: true,\n\t\tloop: true,\n\t\tslideshow: false,\n\t\tslideshowAuto: true,\n\t\tslideshowSpeed: 2500,\n\t\tslideshowStart: \"start slideshow\",\n\t\tslideshowStop: \"stop slideshow\",\n\t\tphotoRegex: /\\.(gif|png|jp(e|g|eg)|bmp|ico|webp|jxr|svg)((#|\\?).*)?$/i,\n\n\t\t// alternate image paths for high-res displays\n\t\tretinaImage: false,\n\t\tretinaUrl: false,\n\t\tretinaSuffix: '@2x.$1',\n\n\t\t// internationalization\n\t\tcurrent: \"image {current} of {total}\",\n\t\tprevious: \"previous\",\n\t\tnext: \"next\",\n\t\tclose: \"close\",\n\t\txhrError: \"This content failed to load.\",\n\t\timgError: \"This image failed to load.\",\n\n\t\t// accessbility\n\t\treturnFocus: true,\n\t\ttrapFocus: true,\n\n\t\t// callbacks\n\t\tonOpen: false,\n\t\tonLoad: false,\n\t\tonComplete: false,\n\t\tonCleanup: false,\n\t\tonClosed: false,\n\n\t\trel: function() {\n\t\t\treturn this.rel;\n\t\t},\n\t\thref: function() {\n\t\t\t// using this.href would give the absolute url, when the href may have been inteded as a selector (e.g. '#container')\n\t\t\treturn $(this).attr('href');\n\t\t},\n\t\ttitle: function() {\n\t\t\treturn this.title;\n\t\t},\n\t\tcreateImg: function() {\n\t\t\tvar img = new Image();\n\t\t\tvar attrs = $(this).data('cbox-img-attrs');\n\n\t\t\tif (typeof attrs === 'object') {\n\t\t\t\t$.each(attrs, function(key, val){\n\t\t\t\t\timg[key] = val;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn img;\n\t\t},\n\t\tcreateIframe: function() {\n\t\t\tvar iframe = document.createElement('iframe');\n\t\t\tvar attrs = $(this).data('cbox-iframe-attrs');\n\n\t\t\tif (typeof attrs === 'object') {\n\t\t\t\t$.each(attrs, function(key, val){\n\t\t\t\t\tiframe[key] = val;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif ('frameBorder' in iframe) {\n\t\t\t\tiframe.frameBorder = 0;\n\t\t\t}\n\t\t\tif ('allowTransparency' in iframe) {\n\t\t\t\tiframe.allowTransparency = \"true\";\n\t\t\t}\n\t\t\tiframe.name = (new Date()).getTime(); // give the iframe a unique name to prevent caching\n\t\t\tiframe.allowFullscreen = true;\n\n\t\t\treturn iframe;\n\t\t}\n\t},\n\n\t// Abstracting the HTML and event identifiers for easy rebranding\n\tcolorbox = 'colorbox',\n\tprefix = 'cbox',\n\tboxElement = prefix + 'Element',\n\n\t// Events\n\tevent_open = prefix + '_open',\n\tevent_load = prefix + '_load',\n\tevent_complete = prefix + '_complete',\n\tevent_cleanup = prefix + '_cleanup',\n\tevent_closed = prefix + '_closed',\n\tevent_purge = prefix + '_purge',\n\n\t// Cached jQuery Object Variables\n\t$overlay,\n\t$box,\n\t$wrap,\n\t$content,\n\t$topBorder,\n\t$leftBorder,\n\t$rightBorder,\n\t$bottomBorder,\n\t$related,\n\t$window,\n\t$loaded,\n\t$loadingBay,\n\t$loadingOverlay,\n\t$title,\n\t$current,\n\t$slideshow,\n\t$next,\n\t$prev,\n\t$close,\n\t$groupControls,\n\t$events = $('<a/>'), // $({}) would be prefered, but there is an issue with jQuery 1.4.2\n\n\t// Variables for cached values or use across multiple functions\n\tsettings,\n\tinterfaceHeight,\n\tinterfaceWidth,\n\tloadedHeight,\n\tloadedWidth,\n\tindex,\n\tphoto,\n\topen,\n\tactive,\n\tclosing,\n\tloadingTimer,\n\tpublicMethod,\n\tdiv = \"div\",\n\trequests = 0,\n\tpreviousCSS = {},\n\tinit;\n\n\t// ****************\n\t// HELPER FUNCTIONS\n\t// ****************\n\n\t// Convenience function for creating new jQuery objects\n\tfunction $tag(tag, id, css) {\n\t\tvar element = document.createElement(tag);\n\n\t\tif (id) {\n\t\t\telement.id = prefix + id;\n\t\t}\n\n\t\tif (css) {\n\t\t\telement.style.cssText = css;\n\t\t}\n\n\t\treturn $(element);\n\t}\n\n\t// Get the window height using innerHeight when available to avoid an issue with iOS\n\t// http://bugs.jquery.com/ticket/6724\n\tfunction winheight() {\n\t\treturn window.innerHeight ? window.innerHeight : $(window).height();\n\t}\n\n\tfunction Settings(element, options) {\n\t\tif (options !== Object(options)) {\n\t\t\toptions = {};\n\t\t}\n\n\t\tthis.cache = {};\n\t\tthis.el = element;\n\n\t\tthis.value = function(key) {\n\t\t\tvar dataAttr;\n\n\t\t\tif (this.cache[key] === undefined) {\n\t\t\t\tdataAttr = $(this.el).attr('data-cbox-'+key);\n\n\t\t\t\tif (dataAttr !== undefined) {\n\t\t\t\t\tthis.cache[key] = dataAttr;\n\t\t\t\t} else if (options[key] !== undefined) {\n\t\t\t\t\tthis.cache[key] = options[key];\n\t\t\t\t} else if (defaults[key] !== undefined) {\n\t\t\t\t\tthis.cache[key] = defaults[key];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.cache[key];\n\t\t};\n\n\t\tthis.get = function(key) {\n\t\t\tvar value = this.value(key);\n\t\t\treturn $.isFunction(value) ? value.call(this.el, this) : value;\n\t\t};\n\t}\n\n\t// Determine the next and previous members in a group.\n\tfunction getIndex(increment) {\n\t\tvar\n\t\tmax = $related.length,\n\t\tnewIndex = (index + increment) % max;\n\n\t\treturn (newIndex < 0) ? max + newIndex : newIndex;\n\t}\n\n\t// Convert '%' and 'px' values to integers\n\tfunction setSize(size, dimension) {\n\t\treturn Math.round((/%/.test(size) ? ((dimension === 'x' ? $window.width() : winheight()) / 100) : 1) * parseInt(size, 10));\n\t}\n\n\t// Checks an href to see if it is a photo.\n\t// There is a force photo option (photo: true) for hrefs that cannot be matched by the regex.\n\tfunction isImage(settings, url) {\n\t\treturn settings.get('photo') || settings.get('photoRegex').test(url);\n\t}\n\n\tfunction retinaUrl(settings, url) {\n\t\treturn settings.get('retinaUrl') && window.devicePixelRatio > 1 ? url.replace(settings.get('photoRegex'), settings.get('retinaSuffix')) : url;\n\t}\n\n\tfunction trapFocus(e) {\n\t\tif ('contains' in $box[0] && !$box[0].contains(e.target) && e.target !== $overlay[0]) {\n\t\t\te.stopPropagation();\n\t\t\t$box.focus();\n\t\t}\n\t}\n\n\tfunction setClass(str) {\n\t\tif (setClass.str !== str) {\n\t\t\t$box.add($overlay).removeClass(setClass.str).addClass(str);\n\t\t\tsetClass.str = str;\n\t\t}\n\t}\n\n\tfunction getRelated(rel) {\n\t\tindex = 0;\n\n\t\tif (rel && rel !== false && rel !== 'nofollow') {\n\t\t\t$related = $('.' + boxElement).filter(function () {\n\t\t\t\tvar options = $.data(this, colorbox);\n\t\t\t\tvar settings = new Settings(this, options);\n\t\t\t\treturn (settings.get('rel') === rel);\n\t\t\t});\n\t\t\tindex = $related.index(settings.el);\n\n\t\t\t// Check direct calls to Colorbox.\n\t\t\tif (index === -1) {\n\t\t\t\t$related = $related.add(settings.el);\n\t\t\t\tindex = $related.length - 1;\n\t\t\t}\n\t\t} else {\n\t\t\t$related = $(settings.el);\n\t\t}\n\t}\n\n\tfunction trigger(event) {\n\t\t// for external use\n\t\t$(document).trigger(event);\n\t\t// for internal use\n\t\t$events.triggerHandler(event);\n\t}\n\n\tvar slideshow = (function(){\n\t\tvar active,\n\t\t\tclassName = prefix + \"Slideshow_\",\n\t\t\tclick = \"click.\" + prefix,\n\t\t\ttimeOut;\n\n\t\tfunction clear () {\n\t\t\tclearTimeout(timeOut);\n\t\t}\n\n\t\tfunction set() {\n\t\t\tif (settings.get('loop') || $related[index + 1]) {\n\t\t\t\tclear();\n\t\t\t\ttimeOut = setTimeout(publicMethod.next, settings.get('slideshowSpeed'));\n\t\t\t}\n\t\t}\n\n\t\tfunction start() {\n\t\t\t$slideshow\n\t\t\t\t.html(settings.get('slideshowStop'))\n\t\t\t\t.unbind(click)\n\t\t\t\t.one(click, stop);\n\n\t\t\t$events\n\t\t\t\t.bind(event_complete, set)\n\t\t\t\t.bind(event_load, clear);\n\n\t\t\t$box.removeClass(className + \"off\").addClass(className + \"on\");\n\t\t}\n\n\t\tfunction stop() {\n\t\t\tclear();\n\n\t\t\t$events\n\t\t\t\t.unbind(event_complete, set)\n\t\t\t\t.unbind(event_load, clear);\n\n\t\t\t$slideshow\n\t\t\t\t.html(settings.get('slideshowStart'))\n\t\t\t\t.unbind(click)\n\t\t\t\t.one(click, function () {\n\t\t\t\t\tpublicMethod.next();\n\t\t\t\t\tstart();\n\t\t\t\t});\n\n\t\t\t$box.removeClass(className + \"on\").addClass(className + \"off\");\n\t\t}\n\n\t\tfunction reset() {\n\t\t\tactive = false;\n\t\t\t$slideshow.hide();\n\t\t\tclear();\n\t\t\t$events\n\t\t\t\t.unbind(event_complete, set)\n\t\t\t\t.unbind(event_load, clear);\n\t\t\t$box.removeClass(className + \"off \" + className + \"on\");\n\t\t}\n\n\t\treturn function(){\n\t\t\tif (active) {\n\t\t\t\tif (!settings.get('slideshow')) {\n\t\t\t\t\t$events.unbind(event_cleanup, reset);\n\t\t\t\t\treset();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (settings.get('slideshow') && $related[1]) {\n\t\t\t\t\tactive = true;\n\t\t\t\t\t$events.one(event_cleanup, reset);\n\t\t\t\t\tif (settings.get('slideshowAuto')) {\n\t\t\t\t\t\tstart();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstop();\n\t\t\t\t\t}\n\t\t\t\t\t$slideshow.show();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t}());\n\n\n\tfunction launch(element) {\n\t\tvar options;\n\n\t\tif (!closing) {\n\n\t\t\toptions = $(element).data(colorbox);\n\n\t\t\tsettings = new Settings(element, options);\n\n\t\t\tgetRelated(settings.get('rel'));\n\n\t\t\tif (!open) {\n\t\t\t\topen = active = true; // Prevents the page-change action from queuing up if the visitor holds down the left or right keys.\n\n\t\t\t\tsetClass(settings.get('className'));\n\n\t\t\t\t// Show colorbox so the sizes can be calculated in older versions of jQuery\n\t\t\t\t$box.css({visibility:'hidden', display:'block', opacity:''});\n\n\t\t\t\t$loaded = $tag(div, 'LoadedContent', 'width:0; height:0; overflow:hidden; visibility:hidden');\n\t\t\t\t$content.css({width:'', height:''}).append($loaded);\n\n\t\t\t\t// Cache values needed for size calculations\n\t\t\t\tinterfaceHeight = $topBorder.height() + $bottomBorder.height() + $content.outerHeight(true) - $content.height();\n\t\t\t\tinterfaceWidth = $leftBorder.width() + $rightBorder.width() + $content.outerWidth(true) - $content.width();\n\t\t\t\tloadedHeight = $loaded.outerHeight(true);\n\t\t\t\tloadedWidth = $loaded.outerWidth(true);\n\n\t\t\t\t// Opens inital empty Colorbox prior to content being loaded.\n\t\t\t\tvar initialWidth = setSize(settings.get('initialWidth'), 'x');\n\t\t\t\tvar initialHeight = setSize(settings.get('initialHeight'), 'y');\n\t\t\t\tvar maxWidth = settings.get('maxWidth');\n\t\t\t\tvar maxHeight = settings.get('maxHeight');\n\n\t\t\t\tsettings.w = Math.max((maxWidth !== false ? Math.min(initialWidth, setSize(maxWidth, 'x')) : initialWidth) - loadedWidth - interfaceWidth, 0);\n\t\t\t\tsettings.h = Math.max((maxHeight !== false ? Math.min(initialHeight, setSize(maxHeight, 'y')) : initialHeight) - loadedHeight - interfaceHeight, 0);\n\n\t\t\t\t$loaded.css({width:'', height:settings.h});\n\t\t\t\tpublicMethod.position();\n\n\t\t\t\ttrigger(event_open);\n\t\t\t\tsettings.get('onOpen');\n\n\t\t\t\t$groupControls.add($title).hide();\n\n\t\t\t\t$box.focus();\n\n\t\t\t\tif (settings.get('trapFocus')) {\n\t\t\t\t\t// Confine focus to the modal\n\t\t\t\t\t// Uses event capturing that is not supported in IE8-\n\t\t\t\t\tif (document.addEventListener) {\n\n\t\t\t\t\t\tdocument.addEventListener('focus', trapFocus, true);\n\n\t\t\t\t\t\t$events.one(event_closed, function () {\n\t\t\t\t\t\t\tdocument.removeEventListener('focus', trapFocus, true);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Return focus on closing\n\t\t\t\tif (settings.get('returnFocus')) {\n\t\t\t\t\t$events.one(event_closed, function () {\n\t\t\t\t\t\t$(settings.el).focus();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar opacity = parseFloat(settings.get('opacity'));\n\t\t\t$overlay.css({\n\t\t\t\topacity: opacity === opacity ? opacity : '',\n\t\t\t\tcursor: settings.get('overlayClose') ? 'pointer' : '',\n\t\t\t\tvisibility: 'visible'\n\t\t\t}).show();\n\n\t\t\tif (settings.get('closeButton')) {\n\t\t\t\t$close.html(settings.get('close')).appendTo($content);\n\t\t\t} else {\n\t\t\t\t$close.appendTo('<div/>'); // replace with .detach() when dropping jQuery < 1.4\n\t\t\t}\n\n\t\t\tload();\n\t\t}\n\t}\n\n\t// Colorbox's markup needs to be added to the DOM prior to being called\n\t// so that the browser will go ahead and load the CSS background images.\n\tfunction appendHTML() {\n\t\tif (!$box) {\n\t\t\tinit = false;\n\t\t\t$window = $(window);\n\t\t\t$box = $tag(div).attr({\n\t\t\t\tid: colorbox,\n\t\t\t\t'class': $.support.opacity === false ? prefix + 'IE' : '', // class for optional IE8 & lower targeted CSS.\n\t\t\t\trole: 'dialog',\n\t\t\t\ttabindex: '-1'\n\t\t\t}).hide();\n\t\t\t$overlay = $tag(div, \"Overlay\").hide();\n\t\t\t$loadingOverlay = $([$tag(div, \"LoadingOverlay\")[0],$tag(div, \"LoadingGraphic\")[0]]);\n\t\t\t$wrap = $tag(div, \"Wrapper\");\n\t\t\t$content = $tag(div, \"Content\").append(\n\t\t\t\t$title = $tag(div, \"Title\"),\n\t\t\t\t$current = $tag(div, \"Current\"),\n\t\t\t\t$prev = $('<button type=\"button\"/>').attr({id:prefix+'Previous'}),\n\t\t\t\t$next = $('<button type=\"button\"/>').attr({id:prefix+'Next'}),\n\t\t\t\t$slideshow = $('<button type=\"button\"/>').attr({id:prefix+'Slideshow'}),\n\t\t\t\t$loadingOverlay\n\t\t\t);\n\n\t\t\t$close = $('<button type=\"button\"/>').attr({id:prefix+'Close'});\n\n\t\t\t$wrap.append( // The 3x3 Grid that makes up Colorbox\n\t\t\t\t$tag(div).append(\n\t\t\t\t\t$tag(div, \"TopLeft\"),\n\t\t\t\t\t$topBorder = $tag(div, \"TopCenter\"),\n\t\t\t\t\t$tag(div, \"TopRight\")\n\t\t\t\t),\n\t\t\t\t$tag(div, false, 'clear:left').append(\n\t\t\t\t\t$leftBorder = $tag(div, \"MiddleLeft\"),\n\t\t\t\t\t$content,\n\t\t\t\t\t$rightBorder = $tag(div, \"MiddleRight\")\n\t\t\t\t),\n\t\t\t\t$tag(div, false, 'clear:left').append(\n\t\t\t\t\t$tag(div, \"BottomLeft\"),\n\t\t\t\t\t$bottomBorder = $tag(div, \"BottomCenter\"),\n\t\t\t\t\t$tag(div, \"BottomRight\")\n\t\t\t\t)\n\t\t\t).find('div div').css({'float': 'left'});\n\n\t\t\t$loadingBay = $tag(div, false, 'position:absolute; width:9999px; visibility:hidden; display:none; max-width:none;');\n\n\t\t\t$groupControls = $next.add($prev).add($current).add($slideshow);\n\t\t}\n\t\tif (document.body && !$box.parent().length) {\n\t\t\t$(document.body).append($overlay, $box.append($wrap, $loadingBay));\n\t\t}\n\t}\n\n\t// Add Colorbox's event bindings\n\tfunction addBindings() {\n\t\tfunction clickHandler(e) {\n\t\t\t// ignore non-left-mouse-clicks and clicks modified with ctrl / command, shift, or alt.\n\t\t\t// See: http://jacklmoore.com/notes/click-events/\n\t\t\tif (!(e.which > 1 || e.shiftKey || e.altKey || e.metaKey || e.ctrlKey)) {\n\t\t\t\te.preventDefault();\n\t\t\t\tlaunch(this);\n\t\t\t}\n\t\t}\n\n\t\tif ($box) {\n\t\t\tif (!init) {\n\t\t\t\tinit = true;\n\n\t\t\t\t// Anonymous functions here keep the public method from being cached, thereby allowing them to be redefined on the fly.\n\t\t\t\t$next.click(function () {\n\t\t\t\t\tpublicMethod.next();\n\t\t\t\t});\n\t\t\t\t$prev.click(function () {\n\t\t\t\t\tpublicMethod.prev();\n\t\t\t\t});\n\t\t\t\t$close.click(function () {\n\t\t\t\t\tpublicMethod.close();\n\t\t\t\t});\n\t\t\t\t$overlay.click(function () {\n\t\t\t\t\tif (settings.get('overlayClose')) {\n\t\t\t\t\t\tpublicMethod.close();\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t// Key Bindings\n\t\t\t\t$(document).bind('keydown.' + prefix, function (e) {\n\t\t\t\t\tvar key = e.keyCode;\n\t\t\t\t\tif (open && settings.get('escKey') && key === 27) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tpublicMethod.close();\n\t\t\t\t\t}\n\t\t\t\t\tif (open && settings.get('arrowKey') && $related[1] && !e.altKey) {\n\t\t\t\t\t\tif (key === 37) {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t$prev.click();\n\t\t\t\t\t\t} else if (key === 39) {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t$next.click();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif ($.isFunction($.fn.on)) {\n\t\t\t\t\t// For jQuery 1.7+\n\t\t\t\t\t$(document).on('click.'+prefix, '.'+boxElement, clickHandler);\n\t\t\t\t} else {\n\t\t\t\t\t// For jQuery 1.3.x -> 1.6.x\n\t\t\t\t\t// This code is never reached in jQuery 1.9, so do not contact me about 'live' being removed.\n\t\t\t\t\t// This is not here for jQuery 1.9, it's here for legacy users.\n\t\t\t\t\t$('.'+boxElement).live('click.'+prefix, clickHandler);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t// Don't do anything if Colorbox already exists.\n\tif ($[colorbox]) {\n\t\treturn;\n\t}\n\n\t// Append the HTML when the DOM loads\n\t$(appendHTML);\n\n\n\t// ****************\n\t// PUBLIC FUNCTIONS\n\t// Usage format: $.colorbox.close();\n\t// Usage from within an iframe: parent.jQuery.colorbox.close();\n\t// ****************\n\n\tpublicMethod = $.fn[colorbox] = $[colorbox] = function (options, callback) {\n\t\tvar settings;\n\t\tvar $obj = this;\n\n\t\toptions = options || {};\n\n\t\tif ($.isFunction($obj)) { // assume a call to $.colorbox\n\t\t\t$obj = $('<a/>');\n\t\t\toptions.open = true;\n\t\t}\n\n\t\tif (!$obj[0]) { // colorbox being applied to empty collection\n\t\t\treturn $obj;\n\t\t}\n\n\t\tappendHTML();\n\n\t\tif (addBindings()) {\n\n\t\t\tif (callback) {\n\t\t\t\toptions.onComplete = callback;\n\t\t\t}\n\n\t\t\t$obj.each(function () {\n\t\t\t\tvar old = $.data(this, colorbox) || {};\n\t\t\t\t$.data(this, colorbox, $.extend(old, options));\n\t\t\t}).addClass(boxElement);\n\n\t\t\tsettings = new Settings($obj[0], options);\n\n\t\t\tif (settings.get('open')) {\n\t\t\t\tlaunch($obj[0]);\n\t\t\t}\n\t\t}\n\n\t\treturn $obj;\n\t};\n\n\tpublicMethod.position = function (speed, loadedCallback) {\n\t\tvar\n\t\tcss,\n\t\ttop = 0,\n\t\tleft = 0,\n\t\toffset = $box.offset(),\n\t\tscrollTop,\n\t\tscrollLeft;\n\n\t\t$window.unbind('resize.' + prefix);\n\n\t\t// remove the modal so that it doesn't influence the document width/height\n\t\t$box.css({top: -9e4, left: -9e4});\n\n\t\tscrollTop = $window.scrollTop();\n\t\tscrollLeft = $window.scrollLeft();\n\n\t\tif (settings.get('fixed')) {\n\t\t\toffset.top -= scrollTop;\n\t\t\toffset.left -= scrollLeft;\n\t\t\t$box.css({position: 'fixed'});\n\t\t} else {\n\t\t\ttop = scrollTop;\n\t\t\tleft = scrollLeft;\n\t\t\t$box.css({position: 'absolute'});\n\t\t}\n\n\t\t// keeps the top and left positions within the browser's viewport.\n\t\tif (settings.get('right') !== false) {\n\t\t\tleft += Math.max($window.width() - settings.w - loadedWidth - interfaceWidth - setSize(settings.get('right'), 'x'), 0);\n\t\t} else if (settings.get('left') !== false) {\n\t\t\tleft += setSize(settings.get('left'), 'x');\n\t\t} else {\n\t\t\tleft += Math.round(Math.max($window.width() - settings.w - loadedWidth - interfaceWidth, 0) / 2);\n\t\t}\n\n\t\tif (settings.get('bottom') !== false) {\n\t\t\ttop += Math.max(winheight() - settings.h - loadedHeight - interfaceHeight - setSize(settings.get('bottom'), 'y'), 0);\n\t\t} else if (settings.get('top') !== false) {\n\t\t\ttop += setSize(settings.get('top'), 'y');\n\t\t} else {\n\t\t\ttop += Math.round(Math.max(winheight() - settings.h - loadedHeight - interfaceHeight, 0) / 2);\n\t\t}\n\n\t\t$box.css({top: offset.top, left: offset.left, visibility:'visible'});\n\n\t\t// this gives the wrapper plenty of breathing room so it's floated contents can move around smoothly,\n\t\t// but it has to be shrank down around the size of div#colorbox when it's done. If not,\n\t\t// it can invoke an obscure IE bug when using iframes.\n\t\t$wrap[0].style.width = $wrap[0].style.height = \"9999px\";\n\n\t\tfunction modalDimensions() {\n\t\t\t$topBorder[0].style.width = $bottomBorder[0].style.width = $content[0].style.width = (parseInt($box[0].style.width,10) - interfaceWidth)+'px';\n\t\t\t$content[0].style.height = $leftBorder[0].style.height = $rightBorder[0].style.height = (parseInt($box[0].style.height,10) - interfaceHeight)+'px';\n\t\t}\n\n\t\tcss = {width: settings.w + loadedWidth + interfaceWidth, height: settings.h + loadedHeight + interfaceHeight, top: top, left: left};\n\n\t\t// setting the speed to 0 if the content hasn't changed size or position\n\t\tif (speed) {\n\t\t\tvar tempSpeed = 0;\n\t\t\t$.each(css, function(i){\n\t\t\t\tif (css[i] !== previousCSS[i]) {\n\t\t\t\t\ttempSpeed = speed;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t});\n\t\t\tspeed = tempSpeed;\n\t\t}\n\n\t\tpreviousCSS = css;\n\n\t\tif (!speed) {\n\t\t\t$box.css(css);\n\t\t}\n\n\t\t$box.dequeue().animate(css, {\n\t\t\tduration: speed || 0,\n\t\t\tcomplete: function () {\n\t\t\t\tmodalDimensions();\n\n\t\t\t\tactive = false;\n\n\t\t\t\t// shrink the wrapper down to exactly the size of colorbox to avoid a bug in IE's iframe implementation.\n\t\t\t\t$wrap[0].style.width = (settings.w + loadedWidth + interfaceWidth) + \"px\";\n\t\t\t\t$wrap[0].style.height = (settings.h + loadedHeight + interfaceHeight) + \"px\";\n\n\t\t\t\tif (settings.get('reposition')) {\n\t\t\t\t\tsetTimeout(function () { // small delay before binding onresize due to an IE8 bug.\n\t\t\t\t\t\t$window.bind('resize.' + prefix, publicMethod.position);\n\t\t\t\t\t}, 1);\n\t\t\t\t}\n\n\t\t\t\tif ($.isFunction(loadedCallback)) {\n\t\t\t\t\tloadedCallback();\n\t\t\t\t}\n\t\t\t},\n\t\t\tstep: modalDimensions\n\t\t});\n\t};\n\n\tpublicMethod.resize = function (options) {\n\t\tvar scrolltop;\n\n\t\tif (open) {\n\t\t\toptions = options || {};\n\n\t\t\tif (options.width) {\n\t\t\t\tsettings.w = setSize(options.width, 'x') - loadedWidth - interfaceWidth;\n\t\t\t}\n\n\t\t\tif (options.innerWidth) {\n\t\t\t\tsettings.w = setSize(options.innerWidth, 'x');\n\t\t\t}\n\n\t\t\t$loaded.css({width: settings.w});\n\n\t\t\tif (options.height) {\n\t\t\t\tsettings.h = setSize(options.height, 'y') - loadedHeight - interfaceHeight;\n\t\t\t}\n\n\t\t\tif (options.innerHeight) {\n\t\t\t\tsettings.h = setSize(options.innerHeight, 'y');\n\t\t\t}\n\n\t\t\tif (!options.innerHeight && !options.height) {\n\t\t\t\tscrolltop = $loaded.scrollTop();\n\t\t\t\t$loaded.css({height: \"auto\"});\n\t\t\t\tsettings.h = $loaded.height();\n\t\t\t}\n\n\t\t\t$loaded.css({height: settings.h});\n\n\t\t\tif(scrolltop) {\n\t\t\t\t$loaded.scrollTop(scrolltop);\n\t\t\t}\n\n\t\t\tpublicMethod.position(settings.get('transition') === \"none\" ? 0 : settings.get('speed'));\n\t\t}\n\t};\n\n\tpublicMethod.prep = function (object) {\n\t\tif (!open) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar callback, speed = settings.get('transition') === \"none\" ? 0 : settings.get('speed');\n\n\t\t$loaded.remove();\n\n\t\t$loaded = $tag(div, 'LoadedContent').append(object);\n\n\t\tfunction getWidth() {\n\t\t\tsettings.w = settings.w || $loaded.width();\n\t\t\tsettings.w = settings.mw && settings.mw < settings.w ? settings.mw : settings.w;\n\t\t\treturn settings.w;\n\t\t}\n\t\tfunction getHeight() {\n\t\t\tsettings.h = settings.h || $loaded.height();\n\t\t\tsettings.h = settings.mh && settings.mh < settings.h ? settings.mh : settings.h;\n\t\t\treturn settings.h;\n\t\t}\n\n\t\t$loaded.hide()\n\t\t.appendTo($loadingBay.show())// content has to be appended to the DOM for accurate size calculations.\n\t\t.css({width: getWidth(), overflow: settings.get('scrolling') ? 'auto' : 'hidden'})\n\t\t.css({height: getHeight()})// sets the height independently from the width in case the new width influences the value of height.\n\t\t.prependTo($content);\n\n\t\t$loadingBay.hide();\n\n\t\t// floating the IMG removes the bottom line-height and fixed a problem where IE miscalculates the width of the parent element as 100% of the document width.\n\n\t\t$(photo).css({'float': 'none'});\n\n\t\tsetClass(settings.get('className'));\n\n\t\tcallback = function () {\n\t\t\tvar total = $related.length,\n\t\t\t\tiframe,\n\t\t\t\tcomplete;\n\n\t\t\tif (!open) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfunction removeFilter() { // Needed for IE8 in versions of jQuery prior to 1.7.2\n\t\t\t\tif ($.support.opacity === false) {\n\t\t\t\t\t$box[0].style.removeAttribute('filter');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcomplete = function () {\n\t\t\t\tclearTimeout(loadingTimer);\n\t\t\t\t$loadingOverlay.hide();\n\t\t\t\ttrigger(event_complete);\n\t\t\t\tsettings.get('onComplete');\n\t\t\t};\n\n\n\t\t\t$title.html(settings.get('title')).show();\n\t\t\t$loaded.show();\n\n\t\t\tif (total > 1) { // handle grouping\n\t\t\t\tif (typeof settings.get('current') === \"string\") {\n\t\t\t\t\t$current.html(settings.get('current').replace('{current}', index + 1).replace('{total}', total)).show();\n\t\t\t\t}\n\n\t\t\t\t$next[(settings.get('loop') || index < total - 1) ? \"show\" : \"hide\"]().html(settings.get('next'));\n\t\t\t\t$prev[(settings.get('loop') || index) ? \"show\" : \"hide\"]().html(settings.get('previous'));\n\n\t\t\t\tslideshow();\n\n\t\t\t\t// Preloads images within a rel group\n\t\t\t\tif (settings.get('preloading')) {\n\t\t\t\t\t$.each([getIndex(-1), getIndex(1)], function(){\n\t\t\t\t\t\tvar img,\n\t\t\t\t\t\t\ti = $related[this],\n\t\t\t\t\t\t\tsettings = new Settings(i, $.data(i, colorbox)),\n\t\t\t\t\t\t\tsrc = settings.get('href');\n\n\t\t\t\t\t\tif (src && isImage(settings, src)) {\n\t\t\t\t\t\t\tsrc = retinaUrl(settings, src);\n\t\t\t\t\t\t\timg = document.createElement('img');\n\t\t\t\t\t\t\timg.src = src;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t$groupControls.hide();\n\t\t\t}\n\n\t\t\tif (settings.get('iframe')) {\n\n\t\t\t\tiframe = settings.get('createIframe');\n\n\t\t\t\tif (!settings.get('scrolling')) {\n\t\t\t\t\tiframe.scrolling = \"no\";\n\t\t\t\t}\n\n\t\t\t\t$(iframe)\n\t\t\t\t\t.attr({\n\t\t\t\t\t\tsrc: settings.get('href'),\n\t\t\t\t\t\t'class': prefix + 'Iframe'\n\t\t\t\t\t})\n\t\t\t\t\t.one('load', complete)\n\t\t\t\t\t.appendTo($loaded);\n\n\t\t\t\t$events.one(event_purge, function () {\n\t\t\t\t\tiframe.src = \"//about:blank\";\n\t\t\t\t});\n\n\t\t\t\tif (settings.get('fastIframe')) {\n\t\t\t\t\t$(iframe).trigger('load');\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcomplete();\n\t\t\t}\n\n\t\t\tif (settings.get('transition') === 'fade') {\n\t\t\t\t$box.fadeTo(speed, 1, removeFilter);\n\t\t\t} else {\n\t\t\t\tremoveFilter();\n\t\t\t}\n\t\t};\n\n\t\tif (settings.get('transition') === 'fade') {\n\t\t\t$box.fadeTo(speed, 0, function () {\n\t\t\t\tpublicMethod.position(0, callback);\n\t\t\t});\n\t\t} else {\n\t\t\tpublicMethod.position(speed, callback);\n\t\t}\n\t};\n\n\tfunction load () {\n\t\tvar href, setResize, prep = publicMethod.prep, $inline, request = ++requests;\n\n\t\tactive = true;\n\n\t\tphoto = false;\n\n\t\ttrigger(event_purge);\n\t\ttrigger(event_load);\n\t\tsettings.get('onLoad');\n\n\t\tsettings.h = settings.get('height') ?\n\t\t\t\tsetSize(settings.get('height'), 'y') - loadedHeight - interfaceHeight :\n\t\t\t\tsettings.get('innerHeight') && setSize(settings.get('innerHeight'), 'y');\n\n\t\tsettings.w = settings.get('width') ?\n\t\t\t\tsetSize(settings.get('width'), 'x') - loadedWidth - interfaceWidth :\n\t\t\t\tsettings.get('innerWidth') && setSize(settings.get('innerWidth'), 'x');\n\n\t\t// Sets the minimum dimensions for use in image scaling\n\t\tsettings.mw = settings.w;\n\t\tsettings.mh = settings.h;\n\n\t\t// Re-evaluate the minimum width and height based on maxWidth and maxHeight values.\n\t\t// If the width or height exceed the maxWidth or maxHeight, use the maximum values instead.\n\t\tif (settings.get('maxWidth')) {\n\t\t\tsettings.mw = setSize(settings.get('maxWidth'), 'x') - loadedWidth - interfaceWidth;\n\t\t\tsettings.mw = settings.w && settings.w < settings.mw ? settings.w : settings.mw;\n\t\t}\n\t\tif (settings.get('maxHeight')) {\n\t\t\tsettings.mh = setSize(settings.get('maxHeight'), 'y') - loadedHeight - interfaceHeight;\n\t\t\tsettings.mh = settings.h && settings.h < settings.mh ? settings.h : settings.mh;\n\t\t}\n\n\t\thref = settings.get('href');\n\n\t\tloadingTimer = setTimeout(function () {\n\t\t\t$loadingOverlay.show();\n\t\t}, 100);\n\n\t\tif (settings.get('inline')) {\n\t\t\tvar $target = $(href).eq(0);\n\t\t\t// Inserts an empty placeholder where inline content is being pulled from.\n\t\t\t// An event is bound to put inline content back when Colorbox closes or loads new content.\n\t\t\t$inline = $('<div>').hide().insertBefore($target);\n\n\t\t\t$events.one(event_purge, function () {\n\t\t\t\t$inline.replaceWith($target);\n\t\t\t});\n\n\t\t\tprep($target);\n\t\t} else if (settings.get('iframe')) {\n\t\t\t// IFrame element won't be added to the DOM until it is ready to be displayed,\n\t\t\t// to avoid problems with DOM-ready JS that might be trying to run in that iframe.\n\t\t\tprep(\" \");\n\t\t} else if (settings.get('html')) {\n\t\t\tprep(settings.get('html'));\n\t\t} else if (isImage(settings, href)) {\n\n\t\t\thref = retinaUrl(settings, href);\n\n\t\t\tphoto = settings.get('createImg');\n\n\t\t\t$(photo)\n\t\t\t.addClass(prefix + 'Photo')\n\t\t\t.bind('error.'+prefix,function () {\n\t\t\t\tprep($tag(div, 'Error').html(settings.get('imgError')));\n\t\t\t})\n\t\t\t.one('load', function () {\n\t\t\t\tif (request !== requests) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// A small pause because some browsers will occassionaly report a\n\t\t\t\t// img.width and img.height of zero immediately after the img.onload fires\n\t\t\t\tsetTimeout(function(){\n\t\t\t\t\tvar percent;\n\n\t\t\t\t\tif (settings.get('retinaImage') && window.devicePixelRatio > 1) {\n\t\t\t\t\t\tphoto.height = photo.height / window.devicePixelRatio;\n\t\t\t\t\t\tphoto.width = photo.width / window.devicePixelRatio;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (settings.get('scalePhotos')) {\n\t\t\t\t\t\tsetResize = function () {\n\t\t\t\t\t\t\tphoto.height -= photo.height * percent;\n\t\t\t\t\t\t\tphoto.width -= photo.width * percent;\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (settings.mw && photo.width > settings.mw) {\n\t\t\t\t\t\t\tpercent = (photo.width - settings.mw) / photo.width;\n\t\t\t\t\t\t\tsetResize();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (settings.mh && photo.height > settings.mh) {\n\t\t\t\t\t\t\tpercent = (photo.height - settings.mh) / photo.height;\n\t\t\t\t\t\t\tsetResize();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (settings.h) {\n\t\t\t\t\t\tphoto.style.marginTop = Math.max(settings.mh - photo.height, 0) / 2 + 'px';\n\t\t\t\t\t}\n\n\t\t\t\t\tif ($related[1] && (settings.get('loop') || $related[index + 1])) {\n\t\t\t\t\t\tphoto.style.cursor = 'pointer';\n\n\t\t\t\t\t\t$(photo).bind('click.'+prefix, function () {\n\t\t\t\t\t\t\tpublicMethod.next();\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tphoto.style.width = photo.width + 'px';\n\t\t\t\t\tphoto.style.height = photo.height + 'px';\n\t\t\t\t\tprep(photo);\n\t\t\t\t}, 1);\n\t\t\t});\n\n\t\t\tphoto.src = href;\n\n\t\t} else if (href) {\n\t\t\t$loadingBay.load(href, settings.get('data'), function (data, status) {\n\t\t\t\tif (request === requests) {\n\t\t\t\t\tprep(status === 'error' ? $tag(div, 'Error').html(settings.get('xhrError')) : $(this).contents());\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\t// Navigates to the next page/image in a set.\n\tpublicMethod.next = function () {\n\t\tif (!active && $related[1] && (settings.get('loop') || $related[index + 1])) {\n\t\t\tindex = getIndex(1);\n\t\t\tlaunch($related[index]);\n\t\t}\n\t};\n\n\tpublicMethod.prev = function () {\n\t\tif (!active && $related[1] && (settings.get('loop') || index)) {\n\t\t\tindex = getIndex(-1);\n\t\t\tlaunch($related[index]);\n\t\t}\n\t};\n\n\t// Note: to use this within an iframe use the following format: parent.jQuery.colorbox.close();\n\tpublicMethod.close = function () {\n\t\tif (open && !closing) {\n\n\t\t\tclosing = true;\n\t\t\topen = false;\n\t\t\ttrigger(event_cleanup);\n\t\t\tsettings.get('onCleanup');\n\t\t\t$window.unbind('.' + prefix);\n\t\t\t$overlay.fadeTo(settings.get('fadeOut') || 0, 0);\n\n\t\t\t$box.stop().fadeTo(settings.get('fadeOut') || 0, 0, function () {\n\t\t\t\t$box.hide();\n\t\t\t\t$overlay.hide();\n\t\t\t\ttrigger(event_purge);\n\t\t\t\t$loaded.remove();\n\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\tclosing = false;\n\t\t\t\t\ttrigger(event_closed);\n\t\t\t\t\tsettings.get('onClosed');\n\t\t\t\t}, 1);\n\t\t\t});\n\t\t}\n\t};\n\n\t// Removes changes Colorbox made to the document, but does not remove the plugin.\n\tpublicMethod.remove = function () {\n\t\tif (!$box) { return; }\n\n\t\t$box.stop();\n\t\t$[colorbox].close();\n\t\t$box.stop(false, true).remove();\n\t\t$overlay.remove();\n\t\tclosing = false;\n\t\t$box = null;\n\t\t$('.' + boxElement)\n\t\t\t.removeData(colorbox)\n\t\t\t.removeClass(boxElement);\n\n\t\t$(document).unbind('click.'+prefix).unbind('keydown.'+prefix);\n\t};\n\n\t// A method for fetching the current element Colorbox is referencing.\n\t// returns a jQuery object.\n\tpublicMethod.element = function () {\n\t\treturn $(settings.el);\n\t};\n\n\tpublicMethod.settings = defaults;\n\n}(jQuery, document, window));\n","/*!\n * Unipointer v2.4.0\n * base class for doing one thing with pointer event\n * MIT license\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true */\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */ /*global define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'ev-emitter/ev-emitter'\n ], function( EvEmitter ) {\n return factory( window, EvEmitter );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('ev-emitter')\n );\n } else {\n // browser global\n window.Unipointer = factory(\n window,\n window.EvEmitter\n );\n }\n\n}( window, function factory( window, EvEmitter ) {\n\n'use strict';\n\nfunction noop() {}\n\nfunction Unipointer() {}\n\n// inherit EvEmitter\nvar proto = Unipointer.prototype = Object.create( EvEmitter.prototype );\n\nproto.bindStartEvent = function( elem ) {\n this._bindStartEvent( elem, true );\n};\n\nproto.unbindStartEvent = function( elem ) {\n this._bindStartEvent( elem, false );\n};\n\n/**\n * Add or remove start event\n * @param {Boolean} isAdd - remove if falsey\n */\nproto._bindStartEvent = function( elem, isAdd ) {\n // munge isAdd, default to true\n isAdd = isAdd === undefined ? true : isAdd;\n var bindMethod = isAdd ? 'addEventListener' : 'removeEventListener';\n\n // default to mouse events\n var startEvent = 'mousedown';\n if ( 'ontouchstart' in window ) {\n // HACK prefer Touch Events as you can preventDefault on touchstart to\n // disable scroll in iOS & mobile Chrome metafizzy/flickity#1177\n startEvent = 'touchstart';\n } else if ( window.PointerEvent ) {\n // Pointer Events\n startEvent = 'pointerdown';\n }\n elem[ bindMethod ]( startEvent, this );\n};\n\n// trigger handler methods for events\nproto.handleEvent = function( event ) {\n var method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\n// returns the touch that we're keeping track of\nproto.getTouch = function( touches ) {\n for ( var i=0; i < touches.length; i++ ) {\n var touch = touches[i];\n if ( touch.identifier == this.pointerIdentifier ) {\n return touch;\n }\n }\n};\n\n// ----- start event ----- //\n\nproto.onmousedown = function( event ) {\n // dismiss clicks from right or middle buttons\n var button = event.button;\n if ( button && ( button !== 0 && button !== 1 ) ) {\n return;\n }\n this._pointerDown( event, event );\n};\n\nproto.ontouchstart = function( event ) {\n this._pointerDown( event, event.changedTouches[0] );\n};\n\nproto.onpointerdown = function( event ) {\n this._pointerDown( event, event );\n};\n\n/**\n * pointer start\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto._pointerDown = function( event, pointer ) {\n // dismiss right click and other pointers\n // button = 0 is okay, 1-4 not\n if ( event.button || this.isPointerDown ) {\n return;\n }\n\n this.isPointerDown = true;\n // save pointer identifier to match up touch events\n this.pointerIdentifier = pointer.pointerId !== undefined ?\n // pointerId for pointer events, touch.indentifier for touch events\n pointer.pointerId : pointer.identifier;\n\n this.pointerDown( event, pointer );\n};\n\nproto.pointerDown = function( event, pointer ) {\n this._bindPostStartEvents( event );\n this.emitEvent( 'pointerDown', [ event, pointer ] );\n};\n\n// hash of events to be bound after start event\nvar postStartEvents = {\n mousedown: [ 'mousemove', 'mouseup' ],\n touchstart: [ 'touchmove', 'touchend', 'touchcancel' ],\n pointerdown: [ 'pointermove', 'pointerup', 'pointercancel' ],\n};\n\nproto._bindPostStartEvents = function( event ) {\n if ( !event ) {\n return;\n }\n // get proper events to match start event\n var events = postStartEvents[ event.type ];\n // bind events to node\n events.forEach( function( eventName ) {\n window.addEventListener( eventName, this );\n }, this );\n // save these arguments\n this._boundPointerEvents = events;\n};\n\nproto._unbindPostStartEvents = function() {\n // check for _boundEvents, in case dragEnd triggered twice (old IE8 bug)\n if ( !this._boundPointerEvents ) {\n return;\n }\n this._boundPointerEvents.forEach( function( eventName ) {\n window.removeEventListener( eventName, this );\n }, this );\n\n delete this._boundPointerEvents;\n};\n\n// ----- move event ----- //\n\nproto.onmousemove = function( event ) {\n this._pointerMove( event, event );\n};\n\nproto.onpointermove = function( event ) {\n if ( event.pointerId == this.pointerIdentifier ) {\n this._pointerMove( event, event );\n }\n};\n\nproto.ontouchmove = function( event ) {\n var touch = this.getTouch( event.changedTouches );\n if ( touch ) {\n this._pointerMove( event, touch );\n }\n};\n\n/**\n * pointer move\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerMove = function( event, pointer ) {\n this.pointerMove( event, pointer );\n};\n\n// public\nproto.pointerMove = function( event, pointer ) {\n this.emitEvent( 'pointerMove', [ event, pointer ] );\n};\n\n// ----- end event ----- //\n\n\nproto.onmouseup = function( event ) {\n this._pointerUp( event, event );\n};\n\nproto.onpointerup = function( event ) {\n if ( event.pointerId == this.pointerIdentifier ) {\n this._pointerUp( event, event );\n }\n};\n\nproto.ontouchend = function( event ) {\n var touch = this.getTouch( event.changedTouches );\n if ( touch ) {\n this._pointerUp( event, touch );\n }\n};\n\n/**\n * pointer up\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerUp = function( event, pointer ) {\n this._pointerDone();\n this.pointerUp( event, pointer );\n};\n\n// public\nproto.pointerUp = function( event, pointer ) {\n this.emitEvent( 'pointerUp', [ event, pointer ] );\n};\n\n// ----- pointer done ----- //\n\n// triggered on pointer up & pointer cancel\nproto._pointerDone = function() {\n this._pointerReset();\n this._unbindPostStartEvents();\n this.pointerDone();\n};\n\nproto._pointerReset = function() {\n // reset properties\n this.isPointerDown = false;\n delete this.pointerIdentifier;\n};\n\nproto.pointerDone = noop;\n\n// ----- pointer cancel ----- //\n\nproto.onpointercancel = function( event ) {\n if ( event.pointerId == this.pointerIdentifier ) {\n this._pointerCancel( event, event );\n }\n};\n\nproto.ontouchcancel = function( event ) {\n var touch = this.getTouch( event.changedTouches );\n if ( touch ) {\n this._pointerCancel( event, touch );\n }\n};\n\n/**\n * pointer cancel\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerCancel = function( event, pointer ) {\n this._pointerDone();\n this.pointerCancel( event, pointer );\n};\n\n// public\nproto.pointerCancel = function( event, pointer ) {\n this.emitEvent( 'pointerCancel', [ event, pointer ] );\n};\n\n// ----- ----- //\n\n// utility function for getting x/y coords from event\nUnipointer.getPointerPoint = function( pointer ) {\n return {\n x: pointer.pageX,\n y: pointer.pageY\n };\n};\n\n// ----- ----- //\n\nreturn Unipointer;\n\n}));\n","/*!\n * Unidragger v2.4.0\n * Draggable base class\n * MIT license\n */\n\n/*jshint browser: true, unused: true, undef: true, strict: true */\n\n( function( window, factory ) {\n // universal module definition\n /*jshint strict: false */ /*globals define, module, require */\n\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'unipointer/unipointer'\n ], function( Unipointer ) {\n return factory( window, Unipointer );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('unipointer')\n );\n } else {\n // browser global\n window.Unidragger = factory(\n window,\n window.Unipointer\n );\n }\n\n}( window, function factory( window, Unipointer ) {\n\n'use strict';\n\n// -------------------------- Unidragger -------------------------- //\n\nfunction Unidragger() {}\n\n// inherit Unipointer & EvEmitter\nvar proto = Unidragger.prototype = Object.create( Unipointer.prototype );\n\n// ----- bind start ----- //\n\nproto.bindHandles = function() {\n this._bindHandles( true );\n};\n\nproto.unbindHandles = function() {\n this._bindHandles( false );\n};\n\n/**\n * Add or remove start event\n * @param {Boolean} isAdd\n */\nproto._bindHandles = function( isAdd ) {\n // munge isAdd, default to true\n isAdd = isAdd === undefined ? true : isAdd;\n // bind each handle\n var bindMethod = isAdd ? 'addEventListener' : 'removeEventListener';\n var touchAction = isAdd ? this._touchActionValue : '';\n for ( var i=0; i < this.handles.length; i++ ) {\n var handle = this.handles[i];\n this._bindStartEvent( handle, isAdd );\n handle[ bindMethod ]( 'click', this );\n // touch-action: none to override browser touch gestures. metafizzy/flickity#540\n if ( window.PointerEvent ) {\n handle.style.touchAction = touchAction;\n }\n }\n};\n\n// prototype so it can be overwriteable by Flickity\nproto._touchActionValue = 'none';\n\n// ----- start event ----- //\n\n/**\n * pointer start\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerDown = function( event, pointer ) {\n var isOkay = this.okayPointerDown( event );\n if ( !isOkay ) {\n return;\n }\n // track start event position\n // Safari 9 overrides pageX and pageY. These values needs to be copied. flickity#842\n this.pointerDownPointer = {\n pageX: pointer.pageX,\n pageY: pointer.pageY,\n };\n\n event.preventDefault();\n this.pointerDownBlur();\n // bind move and end events\n this._bindPostStartEvents( event );\n this.emitEvent( 'pointerDown', [ event, pointer ] );\n};\n\n// nodes that have text fields\nvar cursorNodes = {\n TEXTAREA: true,\n INPUT: true,\n SELECT: true,\n OPTION: true,\n};\n\n// input types that do not have text fields\nvar clickTypes = {\n radio: true,\n checkbox: true,\n button: true,\n submit: true,\n image: true,\n file: true,\n};\n\n// dismiss inputs with text fields. flickity#403, flickity#404\nproto.okayPointerDown = function( event ) {\n var isCursorNode = cursorNodes[ event.target.nodeName ];\n var isClickType = clickTypes[ event.target.type ];\n var isOkay = !isCursorNode || isClickType;\n if ( !isOkay ) {\n this._pointerReset();\n }\n return isOkay;\n};\n\n// kludge to blur previously focused input\nproto.pointerDownBlur = function() {\n var focused = document.activeElement;\n // do not blur body for IE10, metafizzy/flickity#117\n var canBlur = focused && focused.blur && focused != document.body;\n if ( canBlur ) {\n focused.blur();\n }\n};\n\n// ----- move event ----- //\n\n/**\n * drag move\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerMove = function( event, pointer ) {\n var moveVector = this._dragPointerMove( event, pointer );\n this.emitEvent( 'pointerMove', [ event, pointer, moveVector ] );\n this._dragMove( event, pointer, moveVector );\n};\n\n// base pointer move logic\nproto._dragPointerMove = function( event, pointer ) {\n var moveVector = {\n x: pointer.pageX - this.pointerDownPointer.pageX,\n y: pointer.pageY - this.pointerDownPointer.pageY\n };\n // start drag if pointer has moved far enough to start drag\n if ( !this.isDragging && this.hasDragStarted( moveVector ) ) {\n this._dragStart( event, pointer );\n }\n return moveVector;\n};\n\n// condition if pointer has moved far enough to start drag\nproto.hasDragStarted = function( moveVector ) {\n return Math.abs( moveVector.x ) > 3 || Math.abs( moveVector.y ) > 3;\n};\n\n// ----- end event ----- //\n\n/**\n * pointer up\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerUp = function( event, pointer ) {\n this.emitEvent( 'pointerUp', [ event, pointer ] );\n this._dragPointerUp( event, pointer );\n};\n\nproto._dragPointerUp = function( event, pointer ) {\n if ( this.isDragging ) {\n this._dragEnd( event, pointer );\n } else {\n // pointer didn't move enough for drag to start\n this._staticClick( event, pointer );\n }\n};\n\n// -------------------------- drag -------------------------- //\n\n// dragStart\nproto._dragStart = function( event, pointer ) {\n this.isDragging = true;\n // prevent clicks\n this.isPreventingClicks = true;\n this.dragStart( event, pointer );\n};\n\nproto.dragStart = function( event, pointer ) {\n this.emitEvent( 'dragStart', [ event, pointer ] );\n};\n\n// dragMove\nproto._dragMove = function( event, pointer, moveVector ) {\n // do not drag if not dragging yet\n if ( !this.isDragging ) {\n return;\n }\n\n this.dragMove( event, pointer, moveVector );\n};\n\nproto.dragMove = function( event, pointer, moveVector ) {\n event.preventDefault();\n this.emitEvent( 'dragMove', [ event, pointer, moveVector ] );\n};\n\n// dragEnd\nproto._dragEnd = function( event, pointer ) {\n // set flags\n this.isDragging = false;\n // re-enable clicking async\n setTimeout( function() {\n delete this.isPreventingClicks;\n }.bind( this ) );\n\n this.dragEnd( event, pointer );\n};\n\nproto.dragEnd = function( event, pointer ) {\n this.emitEvent( 'dragEnd', [ event, pointer ] );\n};\n\n// ----- onclick ----- //\n\n// handle all clicks and prevent clicks when dragging\nproto.onclick = function( event ) {\n if ( this.isPreventingClicks ) {\n event.preventDefault();\n }\n};\n\n// ----- staticClick ----- //\n\n// triggered after pointer down & up with no/tiny movement\nproto._staticClick = function( event, pointer ) {\n // ignore emulated mouse up clicks\n if ( this.isIgnoringMouseUp && event.type == 'mouseup' ) {\n return;\n }\n\n this.staticClick( event, pointer );\n\n // set flag for emulated clicks 300ms after touchend\n if ( event.type != 'mouseup' ) {\n this.isIgnoringMouseUp = true;\n // reset flag after 300ms\n setTimeout( function() {\n delete this.isIgnoringMouseUp;\n }.bind( this ), 400 );\n }\n};\n\nproto.staticClick = function( event, pointer ) {\n this.emitEvent( 'staticClick', [ event, pointer ] );\n};\n\n// ----- utils ----- //\n\nUnidragger.getPointerPoint = Unipointer.getPointerPoint;\n\n// ----- ----- //\n\nreturn Unidragger;\n\n}));\n","(function(factory) {\n /* global define */\n /* istanbul ignore next */\n if ( typeof define === 'function' && define.amd ) {\n define(['jquery'], factory);\n } else if ( typeof module === 'object' && module.exports ) {\n // Node/CommonJS\n module.exports = function( root, jQuery ) {\n if ( jQuery === undefined ) {\n if ( typeof window !== 'undefined' ) {\n jQuery = require('jquery');\n } else {\n jQuery = require('jquery')(root);\n }\n }\n factory(jQuery);\n return jQuery;\n };\n } else {\n // Browser globals\n factory(jQuery);\n }\n}(function($) {\n 'use strict';\n\n var $doc = $(document);\n var $win = $(window);\n\n var pluginName = 'selectric';\n var classList = 'Input Items Open Disabled TempShow HideSelect Wrapper Focus Hover Responsive Above Below Scroll Group GroupLabel';\n var eventNamespaceSuffix = '.sl';\n\n var chars = ['a', 'e', 'i', 'o', 'u', 'n', 'c', 'y'];\n var diacritics = [\n /[\\xE0-\\xE5]/g, // a\n /[\\xE8-\\xEB]/g, // e\n /[\\xEC-\\xEF]/g, // i\n /[\\xF2-\\xF6]/g, // o\n /[\\xF9-\\xFC]/g, // u\n /[\\xF1]/g, // n\n /[\\xE7]/g, // c\n /[\\xFD-\\xFF]/g // y\n ];\n\n /**\n * Create an instance of Selectric\n *\n * @constructor\n * @param {Node} element - The <select> element\n * @param {object} opts - Options\n */\n var Selectric = function(element, opts) {\n var _this = this;\n\n _this.element = element;\n _this.$element = $(element);\n\n _this.state = {\n multiple : !!_this.$element.attr('multiple'),\n enabled : false,\n opened : false,\n currValue : -1,\n selectedIdx : -1,\n highlightedIdx : -1\n };\n\n _this.eventTriggers = {\n open : _this.open,\n close : _this.close,\n destroy : _this.destroy,\n refresh : _this.refresh,\n init : _this.init\n };\n\n _this.init(opts);\n };\n\n Selectric.prototype = {\n utils: {\n /**\n * Detect mobile browser\n *\n * @return {boolean}\n */\n isMobile: function() {\n return /android|ip(hone|od|ad)/i.test(navigator.userAgent);\n },\n\n /**\n * Escape especial characters in string (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions)\n *\n * @param {string} str - The string to be escaped\n * @return {string} The string with the special characters escaped\n */\n escapeRegExp: function(str) {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'); // $& means the whole matched string\n },\n\n /**\n * Replace diacritics\n *\n * @param {string} str - The string to replace the diacritics\n * @return {string} The string with diacritics replaced with ascii characters\n */\n replaceDiacritics: function(str) {\n var k = diacritics.length;\n\n while (k--) {\n str = str.toLowerCase().replace(diacritics[k], chars[k]);\n }\n\n return str;\n },\n\n /**\n * Format string\n * https://gist.github.com/atesgoral/984375\n *\n * @param {string} f - String to be formated\n * @return {string} String formated\n */\n format: function(f) {\n var a = arguments; // store outer arguments\n return ('' + f) // force format specifier to String\n .replace( // replace tokens in format specifier\n /\\{(?:(\\d+)|(\\w+))\\}/g, // match {token} references\n function(\n s, // the matched string (ignored)\n i, // an argument index\n p // a property name\n ) {\n return p && a[1] // if property name and first argument exist\n ? a[1][p] // return property from first argument\n : a[i]; // assume argument index and return i-th argument\n });\n },\n\n /**\n * Get the next enabled item in the options list.\n *\n * @param {object} selectItems - The options object.\n * @param {number} selected - Index of the currently selected option.\n * @return {object} The next enabled item.\n */\n nextEnabledItem: function(selectItems, selected) {\n while ( selectItems[ selected = (selected + 1) % selectItems.length ].disabled ) {\n // empty\n }\n return selected;\n },\n\n /**\n * Get the previous enabled item in the options list.\n *\n * @param {object} selectItems - The options object.\n * @param {number} selected - Index of the currently selected option.\n * @return {object} The previous enabled item.\n */\n previousEnabledItem: function(selectItems, selected) {\n while ( selectItems[ selected = (selected > 0 ? selected : selectItems.length) - 1 ].disabled ) {\n // empty\n }\n return selected;\n },\n\n /**\n * Transform camelCase string to dash-case.\n *\n * @param {string} str - The camelCased string.\n * @return {string} The string transformed to dash-case.\n */\n toDash: function(str) {\n return str.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n },\n\n /**\n * Calls the events registered with function name.\n *\n * @param {string} fn - The name of the function.\n * @param {number} scope - Scope that should be set on the function.\n */\n triggerCallback: function(fn, scope) {\n var elm = scope.element;\n var func = scope.options['on' + fn];\n var args = [elm].concat([].slice.call(arguments).slice(1));\n\n if ( $.isFunction(func) ) {\n func.apply(elm, args);\n }\n\n $(elm).trigger(pluginName + '-' + this.toDash(fn), args);\n },\n\n /**\n * Transform array list to concatenated string and remove empty values\n * @param {array} arr - Class list\n * @return {string} Concatenated string\n */\n arrayToClassname: function(arr) {\n var newArr = $.grep(arr, function(item) {\n return !!item;\n });\n\n return $.trim(newArr.join(' '));\n }\n },\n\n /** Initializes */\n init: function(opts) {\n var _this = this;\n\n // Set options\n _this.options = $.extend(true, {}, $.fn[pluginName].defaults, _this.options, opts);\n\n _this.utils.triggerCallback('BeforeInit', _this);\n\n // Preserve data\n _this.destroy(true);\n\n // Disable on mobile browsers\n if ( _this.options.disableOnMobile && _this.utils.isMobile() ) {\n _this.disableOnMobile = true;\n return;\n }\n\n // Get classes\n _this.classes = _this.getClassNames();\n\n // Create elements\n var input = $('<input/>', { 'class': _this.classes.input, 'readonly': _this.utils.isMobile() });\n var items = $('<div/>', { 'class': _this.classes.items, 'tabindex': -1 });\n var itemsScroll = $('<div/>', { 'class': _this.classes.scroll });\n var wrapper = $('<div/>', { 'class': _this.classes.prefix, 'html': _this.options.arrowButtonMarkup });\n var label = $('<span/>', { 'class': 'label' });\n var outerWrapper = _this.$element.wrap('<div/>').parent().append(wrapper.prepend(label), items, input);\n var hideSelectWrapper = $('<div/>', { 'class': _this.classes.hideselect });\n\n _this.elements = {\n input : input,\n items : items,\n itemsScroll : itemsScroll,\n wrapper : wrapper,\n label : label,\n outerWrapper : outerWrapper\n };\n\n if ( _this.options.nativeOnMobile && _this.utils.isMobile() ) {\n _this.elements.input = undefined;\n hideSelectWrapper.addClass(_this.classes.prefix + '-is-native');\n\n _this.$element.on('change', function() {\n _this.refresh();\n });\n }\n\n _this.$element\n .on(_this.eventTriggers)\n .wrap(hideSelectWrapper);\n\n _this.originalTabindex = _this.$element.prop('tabindex');\n _this.$element.prop('tabindex', -1);\n\n _this.populate();\n _this.activate();\n\n _this.utils.triggerCallback('Init', _this);\n },\n\n /** Activates the plugin */\n activate: function() {\n var _this = this;\n var hiddenChildren = _this.elements.items.closest(':visible').children(':hidden').addClass(_this.classes.tempshow);\n var originalWidth = _this.$element.width();\n\n hiddenChildren.removeClass(_this.classes.tempshow);\n\n _this.utils.triggerCallback('BeforeActivate', _this);\n\n _this.elements.outerWrapper.prop('class',\n _this.utils.arrayToClassname([\n _this.classes.wrapper,\n _this.$element.prop('class').replace(/\\S+/g, _this.classes.prefix + '-$&'),\n _this.options.responsive ? _this.classes.responsive : ''\n ])\n );\n\n if ( _this.options.inheritOriginalWidth && originalWidth > 0 ) {\n _this.elements.outerWrapper.width(originalWidth);\n }\n\n _this.unbindEvents();\n\n if ( !_this.$element.prop('disabled') ) {\n _this.state.enabled = true;\n\n // Not disabled, so... Removing disabled class\n _this.elements.outerWrapper.removeClass(_this.classes.disabled);\n\n // Remove styles from items box\n // Fix incorrect height when refreshed is triggered with fewer options\n _this.$li = _this.elements.items.removeAttr('style').find('li');\n\n _this.bindEvents();\n } else {\n _this.elements.outerWrapper.addClass(_this.classes.disabled);\n\n if ( _this.elements.input ) {\n _this.elements.input.prop('disabled', true);\n }\n }\n\n _this.utils.triggerCallback('Activate', _this);\n },\n\n /**\n * Generate classNames for elements\n *\n * @return {object} Classes object\n */\n getClassNames: function() {\n var _this = this;\n var customClass = _this.options.customClass;\n var classesObj = {};\n\n $.each(classList.split(' '), function(i, currClass) {\n var c = customClass.prefix + currClass;\n classesObj[currClass.toLowerCase()] = customClass.camelCase ? c : _this.utils.toDash(c);\n });\n\n classesObj.prefix = customClass.prefix;\n\n return classesObj;\n },\n\n /** Set the label text */\n setLabel: function() {\n var _this = this;\n var labelBuilder = _this.options.labelBuilder;\n\n if ( _this.state.multiple ) {\n // Make sure currentValues is an array\n var currentValues = $.isArray(_this.state.currValue) ? _this.state.currValue : [_this.state.currValue];\n // I'm not happy with this, but currentValues can be an empty\n // array and we need to fallback to the default option.\n currentValues = currentValues.length === 0 ? [0] : currentValues;\n\n var labelMarkup = $.map(currentValues, function(value) {\n return $.grep(_this.lookupItems, function(item) {\n return item.index === value;\n })[0]; // we don't want nested arrays here\n });\n\n labelMarkup = $.grep(labelMarkup, function(item) {\n // Hide default (please choose) if more then one element were selected.\n // If no option value were given value is set to option text by default\n if ( labelMarkup.length > 1 || labelMarkup.length === 0 ) {\n return $.trim(item.value) !== '';\n }\n return item;\n });\n\n labelMarkup = $.map(labelMarkup, function(item) {\n return $.isFunction(labelBuilder)\n ? labelBuilder(item)\n : _this.utils.format(labelBuilder, item);\n });\n\n // Limit the amount of selected values shown in label\n if ( _this.options.multiple.maxLabelEntries ) {\n if ( labelMarkup.length >= _this.options.multiple.maxLabelEntries + 1 ) {\n labelMarkup = labelMarkup.slice(0, _this.options.multiple.maxLabelEntries);\n labelMarkup.push(\n $.isFunction(labelBuilder)\n ? labelBuilder({ text: '...' })\n : _this.utils.format(labelBuilder, { text: '...' }));\n } else {\n labelMarkup.slice(labelMarkup.length - 1);\n }\n }\n _this.elements.label.html(labelMarkup.join(_this.options.multiple.separator));\n\n } else {\n var currItem = _this.lookupItems[_this.state.currValue];\n\n _this.elements.label.html(\n $.isFunction(labelBuilder)\n ? labelBuilder(currItem)\n : _this.utils.format(labelBuilder, currItem)\n );\n }\n },\n\n /** Get and save the available options */\n populate: function() {\n var _this = this;\n var $options = _this.$element.children();\n var $justOptions = _this.$element.find('option');\n var $selected = $justOptions.filter(':selected');\n var selectedIndex = $justOptions.index($selected);\n var currIndex = 0;\n var emptyValue = (_this.state.multiple ? [] : 0);\n\n if ( $selected.length > 1 && _this.state.multiple ) {\n selectedIndex = [];\n $selected.each(function() {\n selectedIndex.push($(this).index());\n });\n }\n\n _this.state.currValue = (~selectedIndex ? selectedIndex : emptyValue);\n _this.state.selectedIdx = _this.state.currValue;\n _this.state.highlightedIdx = _this.state.currValue;\n _this.items = [];\n _this.lookupItems = [];\n\n if ( $options.length ) {\n // Build options markup\n $options.each(function(i) {\n var $elm = $(this);\n\n if ( $elm.is('optgroup') ) {\n\n var optionsGroup = {\n element : $elm,\n label : $elm.prop('label'),\n groupDisabled : $elm.prop('disabled'),\n items : []\n };\n\n $elm.children().each(function(i) {\n var $elm = $(this);\n\n optionsGroup.items[i] = _this.getItemData(currIndex, $elm, optionsGroup.groupDisabled || $elm.prop('disabled'));\n\n _this.lookupItems[currIndex] = optionsGroup.items[i];\n\n currIndex++;\n });\n\n _this.items[i] = optionsGroup;\n\n } else {\n\n _this.items[i] = _this.getItemData(currIndex, $elm, $elm.prop('disabled'));\n\n _this.lookupItems[currIndex] = _this.items[i];\n\n currIndex++;\n\n }\n });\n\n _this.setLabel();\n _this.elements.items.append( _this.elements.itemsScroll.html( _this.getItemsMarkup(_this.items) ) );\n }\n },\n\n /**\n * Generate items object data\n * @param {integer} index - Current item index\n * @param {node} $elm - Current element node\n * @param {boolean} isDisabled - Current element disabled state\n * @return {object} Item object\n */\n getItemData: function(index, $elm, isDisabled) {\n var _this = this;\n\n return {\n index : index,\n element : $elm,\n value : $elm.val(),\n className : $elm.prop('class'),\n text : $elm.html(),\n slug : $.trim(_this.utils.replaceDiacritics($elm.html())),\n alt : $elm.attr('data-alt'),\n selected : $elm.prop('selected'),\n disabled : isDisabled\n };\n },\n\n /**\n * Generate options markup\n *\n * @param {object} items - Object containing all available options\n * @return {string} HTML for the options box\n */\n getItemsMarkup: function(items) {\n var _this = this;\n var markup = '<ul>';\n\n if ( $.isFunction(_this.options.listBuilder) && _this.options.listBuilder ) {\n items = _this.options.listBuilder(items);\n }\n\n $.each(items, function(i, elm) {\n if ( elm.label !== undefined ) {\n\n markup += _this.utils.format('<ul class=\"{1}\"><li class=\"{2}\">{3}</li>',\n _this.utils.arrayToClassname([\n _this.classes.group,\n elm.groupDisabled ? 'disabled' : '',\n elm.element.prop('class')\n ]),\n _this.classes.grouplabel,\n elm.element.prop('label')\n );\n\n $.each(elm.items, function(i, elm) {\n markup += _this.getItemMarkup(elm.index, elm);\n });\n\n markup += '</ul>';\n\n } else {\n\n markup += _this.getItemMarkup(elm.index, elm);\n\n }\n });\n\n return markup + '</ul>';\n },\n\n /**\n * Generate every option markup\n *\n * @param {number} index - Index of current item\n * @param {object} itemData - Current item\n * @return {string} HTML for the option\n */\n getItemMarkup: function(index, itemData) {\n var _this = this;\n var itemBuilder = _this.options.optionsItemBuilder;\n // limit access to item data to provide a simple interface\n // to most relevant options.\n var filteredItemData = {\n value: itemData.value,\n text : itemData.text,\n slug : itemData.slug,\n index: itemData.index\n };\n\n return _this.utils.format('<li data-index=\"{1}\" class=\"{2}\">{3}</li>',\n index,\n _this.utils.arrayToClassname([\n itemData.className,\n index === _this.items.length - 1 ? 'last' : '',\n itemData.disabled ? 'disabled' : '',\n itemData.selected ? 'selected' : ''\n ]),\n $.isFunction(itemBuilder)\n ? _this.utils.format(itemBuilder(itemData, this.$element, index), itemData)\n : _this.utils.format(itemBuilder, filteredItemData)\n );\n },\n\n /** Remove events on the elements */\n unbindEvents: function() {\n var _this = this;\n\n _this.elements.wrapper\n .add(_this.$element)\n .add(_this.elements.outerWrapper)\n .add(_this.elements.input)\n .off(eventNamespaceSuffix);\n },\n\n /** Bind events on the elements */\n bindEvents: function() {\n var _this = this;\n\n _this.elements.outerWrapper.on('mouseenter' + eventNamespaceSuffix + ' mouseleave' + eventNamespaceSuffix, function(e) {\n $(this).toggleClass(_this.classes.hover, e.type === 'mouseenter');\n\n // Delay close effect when openOnHover is true\n if ( _this.options.openOnHover ) {\n clearTimeout(_this.closeTimer);\n\n if ( e.type === 'mouseleave' ) {\n _this.closeTimer = setTimeout($.proxy(_this.close, _this), _this.options.hoverIntentTimeout);\n } else {\n _this.open();\n }\n }\n });\n\n // Toggle open/close\n _this.elements.wrapper.on('click' + eventNamespaceSuffix, function(e) {\n _this.state.opened ? _this.close() : _this.open(e);\n });\n\n // Translate original element focus event to dummy input.\n // Disabled on mobile devices because the default option list isn't\n // shown due the fact that hidden input gets focused\n if ( !(_this.options.nativeOnMobile && _this.utils.isMobile()) ) {\n _this.$element.on('focus' + eventNamespaceSuffix, function() {\n _this.elements.input.focus();\n });\n\n _this.elements.input\n .prop({ tabindex: _this.originalTabindex, disabled: false })\n .on('keydown' + eventNamespaceSuffix, $.proxy(_this.handleKeys, _this))\n .on('focusin' + eventNamespaceSuffix, function(e) {\n _this.elements.outerWrapper.addClass(_this.classes.focus);\n\n // Prevent the flicker when focusing out and back again in the browser window\n _this.elements.input.one('blur', function() {\n _this.elements.input.blur();\n });\n\n if ( _this.options.openOnFocus && !_this.state.opened ) {\n _this.open(e);\n }\n })\n .on('focusout' + eventNamespaceSuffix, function() {\n _this.elements.outerWrapper.removeClass(_this.classes.focus);\n })\n .on('input propertychange', function() {\n var val = _this.elements.input.val();\n var searchRegExp = new RegExp('^' + _this.utils.escapeRegExp(val), 'i');\n\n // Clear search\n clearTimeout(_this.resetStr);\n _this.resetStr = setTimeout(function() {\n _this.elements.input.val('');\n }, _this.options.keySearchTimeout);\n\n if ( val.length ) {\n // Search in select options\n $.each(_this.items, function(i, elm) {\n if (elm.disabled) {\n return;\n }\n if (searchRegExp.test(elm.text) || searchRegExp.test(elm.slug)) {\n _this.highlight(i);\n return false;\n }\n if (!elm.alt) {\n return;\n }\n var altItems = elm.alt.split('|');\n for (var ai = 0; ai < altItems.length; ai++) {\n if (!altItems[ai]) {\n break;\n }\n if (searchRegExp.test(altItems[ai].trim())) {\n _this.highlight(i);\n return false;\n }\n }\n });\n }\n });\n }\n\n _this.$li.on({\n // Prevent <input> blur on Chrome\n mousedown: function(e) {\n e.preventDefault();\n e.stopPropagation();\n },\n click: function() {\n _this.select($(this).data('index'));\n\n // Chrome doesn't close options box if select is wrapped with a label\n // We need to 'return false' to avoid that\n return false;\n }\n });\n },\n\n /**\n * Behavior when keyboard keys is pressed\n *\n * @param {object} e - Event object\n */\n handleKeys: function(e) {\n var _this = this;\n var key = e.which;\n var keys = _this.options.keys;\n\n var isPrevKey = $.inArray(key, keys.previous) > -1;\n var isNextKey = $.inArray(key, keys.next) > -1;\n var isSelectKey = $.inArray(key, keys.select) > -1;\n var isOpenKey = $.inArray(key, keys.open) > -1;\n var idx = _this.state.highlightedIdx;\n var isFirstOrLastItem = (isPrevKey && idx === 0) || (isNextKey && (idx + 1) === _this.items.length);\n var goToItem = 0;\n\n // Enter / Space\n if ( key === 13 || key === 32 ) {\n e.preventDefault();\n }\n\n // If it's a directional key\n if ( isPrevKey || isNextKey ) {\n if ( !_this.options.allowWrap && isFirstOrLastItem ) {\n return;\n }\n\n if ( isPrevKey ) {\n goToItem = _this.utils.previousEnabledItem(_this.lookupItems, idx);\n }\n\n if ( isNextKey ) {\n goToItem = _this.utils.nextEnabledItem(_this.lookupItems, idx);\n }\n\n _this.highlight(goToItem);\n }\n\n // Tab / Enter / ESC\n if ( isSelectKey && _this.state.opened ) {\n _this.select(idx);\n\n if ( !_this.state.multiple || !_this.options.multiple.keepMenuOpen ) {\n _this.close();\n }\n\n return;\n }\n\n // Space / Enter / Left / Up / Right / Down\n if ( isOpenKey && !_this.state.opened ) {\n _this.open();\n }\n },\n\n /** Update the items object */\n refresh: function() {\n var _this = this;\n\n _this.populate();\n _this.activate();\n _this.utils.triggerCallback('Refresh', _this);\n },\n\n /** Set options box width/height */\n setOptionsDimensions: function() {\n var _this = this;\n\n // Calculate options box height\n // Set a temporary class on the hidden parent of the element\n var hiddenChildren = _this.elements.items.closest(':visible').children(':hidden').addClass(_this.classes.tempshow);\n var maxHeight = _this.options.maxHeight;\n var itemsWidth = _this.elements.items.outerWidth();\n var wrapperWidth = _this.elements.wrapper.outerWidth() - (itemsWidth - _this.elements.items.width());\n\n // Set the dimensions, minimum is wrapper width, expand for long items if option is true\n if ( !_this.options.expandToItemText || wrapperWidth > itemsWidth ) {\n _this.finalWidth = wrapperWidth;\n } else {\n // Make sure the scrollbar width is included\n _this.elements.items.css('overflow', 'scroll');\n\n // Set a really long width for _this.elements.outerWrapper\n _this.elements.outerWrapper.width(9e4);\n _this.finalWidth = _this.elements.items.width();\n // Set scroll bar to auto\n _this.elements.items.css('overflow', '');\n _this.elements.outerWrapper.width('');\n }\n\n _this.elements.items.width(_this.finalWidth).height() > maxHeight && _this.elements.items.height(maxHeight);\n\n // Remove the temporary class\n hiddenChildren.removeClass(_this.classes.tempshow);\n },\n\n /** Detect if the options box is inside the window */\n isInViewport: function() {\n var _this = this;\n\n if (_this.options.forceRenderAbove === true) {\n _this.elements.outerWrapper.addClass(_this.classes.above);\n } else if (_this.options.forceRenderBelow === true) {\n _this.elements.outerWrapper.addClass(_this.classes.below);\n } else {\n var scrollTop = $win.scrollTop();\n var winHeight = $win.height();\n var uiPosX = _this.elements.outerWrapper.offset().top;\n var uiHeight = _this.elements.outerWrapper.outerHeight();\n\n var fitsDown = (uiPosX + uiHeight + _this.itemsHeight) <= (scrollTop + winHeight);\n var fitsAbove = (uiPosX - _this.itemsHeight) > scrollTop;\n\n // If it does not fit below, only render it\n // above it fit's there.\n // It's acceptable that the user needs to\n // scroll the viewport to see the cut off UI\n var renderAbove = !fitsDown && fitsAbove;\n var renderBelow = !renderAbove;\n\n _this.elements.outerWrapper.toggleClass(_this.classes.above, renderAbove);\n _this.elements.outerWrapper.toggleClass(_this.classes.below, renderBelow);\n }\n },\n\n /**\n * Detect if currently selected option is visible and scroll the options box to show it\n *\n * @param {Number|Array} index - Index of the selected items\n */\n detectItemVisibility: function(index) {\n var _this = this;\n var $filteredLi = _this.$li.filter('[data-index]');\n\n if ( _this.state.multiple ) {\n // If index is an array, we can assume a multiple select and we\n // want to scroll to the uppermost selected item!\n // Math.min.apply(Math, index) returns the lowest entry in an Array.\n index = ($.isArray(index) && index.length === 0) ? 0 : index;\n index = $.isArray(index) ? Math.min.apply(Math, index) : index;\n }\n\n var liHeight = $filteredLi.eq(index).outerHeight();\n var liTop = $filteredLi[index].offsetTop;\n var itemsScrollTop = _this.elements.itemsScroll.scrollTop();\n var scrollT = liTop + liHeight * 2;\n\n _this.elements.itemsScroll.scrollTop(\n scrollT > itemsScrollTop + _this.itemsHeight ? scrollT - _this.itemsHeight :\n liTop - liHeight < itemsScrollTop ? liTop - liHeight :\n itemsScrollTop\n );\n },\n\n /**\n * Open the select options box\n *\n * @param {Event} e - Event\n */\n open: function(e) {\n var _this = this;\n\n if ( _this.options.nativeOnMobile && _this.utils.isMobile()) {\n return false;\n }\n\n _this.utils.triggerCallback('BeforeOpen', _this);\n\n if ( e ) {\n e.preventDefault();\n if (_this.options.stopPropagation) {\n e.stopPropagation();\n }\n }\n\n if ( _this.state.enabled ) {\n _this.setOptionsDimensions();\n\n // Find any other opened instances of select and close it\n $('.' + _this.classes.hideselect, '.' + _this.classes.open).children()[pluginName]('close');\n\n _this.state.opened = true;\n _this.itemsHeight = _this.elements.items.outerHeight();\n _this.itemsInnerHeight = _this.elements.items.height();\n\n // Toggle options box visibility\n _this.elements.outerWrapper.addClass(_this.classes.open);\n\n // Give dummy input focus\n _this.elements.input.val('');\n if ( e && e.type !== 'focusin' ) {\n _this.elements.input.focus();\n }\n\n // Delayed binds events on Document to make label clicks work\n setTimeout(function() {\n $doc\n .on('click' + eventNamespaceSuffix, $.proxy(_this.close, _this))\n .on('scroll' + eventNamespaceSuffix, $.proxy(_this.isInViewport, _this));\n }, 1);\n\n _this.isInViewport();\n\n // Prevent window scroll when using mouse wheel inside items box\n if ( _this.options.preventWindowScroll ) {\n /* istanbul ignore next */\n $doc.on('mousewheel' + eventNamespaceSuffix + ' DOMMouseScroll' + eventNamespaceSuffix, '.' + _this.classes.scroll, function(e) {\n var orgEvent = e.originalEvent;\n var scrollTop = $(this).scrollTop();\n var deltaY = 0;\n\n if ( 'detail' in orgEvent ) { deltaY = orgEvent.detail * -1; }\n if ( 'wheelDelta' in orgEvent ) { deltaY = orgEvent.wheelDelta; }\n if ( 'wheelDeltaY' in orgEvent ) { deltaY = orgEvent.wheelDeltaY; }\n if ( 'deltaY' in orgEvent ) { deltaY = orgEvent.deltaY * -1; }\n\n if ( scrollTop === (this.scrollHeight - _this.itemsInnerHeight) && deltaY < 0 || scrollTop === 0 && deltaY > 0 ) {\n e.preventDefault();\n }\n });\n }\n\n _this.detectItemVisibility(_this.state.selectedIdx);\n\n _this.highlight(_this.state.multiple ? -1 : _this.state.selectedIdx);\n\n _this.utils.triggerCallback('Open', _this);\n }\n },\n\n /** Close the select options box */\n close: function() {\n var _this = this;\n\n _this.utils.triggerCallback('BeforeClose', _this);\n\n // Remove custom events on document\n $doc.off(eventNamespaceSuffix);\n\n // Remove visible class to hide options box\n _this.elements.outerWrapper.removeClass(_this.classes.open);\n\n _this.state.opened = false;\n\n _this.utils.triggerCallback('Close', _this);\n },\n\n /** Select current option and change the label */\n change: function() {\n var _this = this;\n\n _this.utils.triggerCallback('BeforeChange', _this);\n\n if ( _this.state.multiple ) {\n // Reset old selected\n $.each(_this.lookupItems, function(idx) {\n _this.lookupItems[idx].selected = false;\n _this.$element.find('option').prop('selected', false);\n });\n\n // Set new selected\n $.each(_this.state.selectedIdx, function(idx, value) {\n _this.lookupItems[value].selected = true;\n _this.$element.find('option').eq(value).prop('selected', true);\n });\n\n _this.state.currValue = _this.state.selectedIdx;\n\n _this.setLabel();\n\n _this.utils.triggerCallback('Change', _this);\n } else if ( _this.state.currValue !== _this.state.selectedIdx ) {\n // Apply changed value to original select\n _this.$element\n .prop('selectedIndex', _this.state.currValue = _this.state.selectedIdx)\n .data('value', _this.lookupItems[_this.state.selectedIdx].text);\n\n // Change label text\n _this.setLabel();\n\n _this.utils.triggerCallback('Change', _this);\n }\n },\n\n /**\n * Highlight option\n * @param {number} index - Index of the options that will be highlighted\n */\n highlight: function(index) {\n var _this = this;\n var $filteredLi = _this.$li.filter('[data-index]').removeClass('highlighted');\n\n _this.utils.triggerCallback('BeforeHighlight', _this);\n\n // Parameter index is required and should not be a disabled item\n if ( index === undefined || index === -1 || _this.lookupItems[index].disabled ) {\n return;\n }\n\n $filteredLi\n .eq(_this.state.highlightedIdx = index)\n .addClass('highlighted');\n\n _this.detectItemVisibility(index);\n\n _this.utils.triggerCallback('Highlight', _this);\n },\n\n /**\n * Select option\n *\n * @param {number} index - Index of the option that will be selected\n */\n select: function(index) {\n var _this = this;\n var $filteredLi = _this.$li.filter('[data-index]');\n\n _this.utils.triggerCallback('BeforeSelect', _this, index);\n\n // Parameter index is required and should not be a disabled item\n if ( index === undefined || index === -1 || _this.lookupItems[index].disabled ) {\n return;\n }\n\n if ( _this.state.multiple ) {\n // Make sure selectedIdx is an array\n _this.state.selectedIdx = $.isArray(_this.state.selectedIdx) ? _this.state.selectedIdx : [_this.state.selectedIdx];\n\n var hasSelectedIndex = $.inArray(index, _this.state.selectedIdx);\n if ( hasSelectedIndex !== -1 ) {\n _this.state.selectedIdx.splice(hasSelectedIndex, 1);\n } else {\n _this.state.selectedIdx.push(index);\n }\n\n $filteredLi\n .removeClass('selected')\n .filter(function(index) {\n return $.inArray(index, _this.state.selectedIdx) !== -1;\n })\n .addClass('selected');\n } else {\n $filteredLi\n .removeClass('selected')\n .eq(_this.state.selectedIdx = index)\n .addClass('selected');\n }\n\n if ( !_this.state.multiple || !_this.options.multiple.keepMenuOpen ) {\n _this.close();\n }\n\n _this.change();\n\n _this.utils.triggerCallback('Select', _this, index);\n },\n\n /**\n * Unbind and remove\n *\n * @param {boolean} preserveData - Check if the data on the element should be removed too\n */\n destroy: function(preserveData) {\n var _this = this;\n\n if ( _this.state && _this.state.enabled ) {\n _this.elements.items.add(_this.elements.wrapper).add(_this.elements.input).remove();\n\n if ( !preserveData ) {\n _this.$element.removeData(pluginName).removeData('value');\n }\n\n _this.$element.prop('tabindex', _this.originalTabindex).off(eventNamespaceSuffix).off(_this.eventTriggers).unwrap().unwrap();\n\n _this.state.enabled = false;\n }\n }\n };\n\n // A really lightweight plugin wrapper around the constructor,\n // preventing against multiple instantiations\n $.fn[pluginName] = function(args) {\n return this.each(function() {\n var data = $.data(this, pluginName);\n\n if ( data && !data.disableOnMobile ) {\n (typeof args === 'string' && data[args]) ? data[args]() : data.init(args);\n } else {\n $.data(this, pluginName, new Selectric(this, args));\n }\n });\n };\n\n /**\n * Default plugin options\n *\n * @type {object}\n */\n $.fn[pluginName].defaults = {\n onChange : function(elm) { $(elm).change(); },\n maxHeight : 300,\n keySearchTimeout : 500,\n arrowButtonMarkup : '<b class=\"button\">▾</b>',\n disableOnMobile : false,\n nativeOnMobile : true,\n openOnFocus : true,\n openOnHover : false,\n hoverIntentTimeout : 500,\n expandToItemText : false,\n responsive : false,\n preventWindowScroll : true,\n inheritOriginalWidth : false,\n allowWrap : true,\n forceRenderAbove : false,\n forceRenderBelow : false,\n stopPropagation : true,\n optionsItemBuilder : '{text}', // function(itemData, element, index)\n labelBuilder : '{text}', // function(currItem)\n listBuilder : false, // function(items)\n keys : {\n previous : [37, 38], // Left / Up\n next : [39, 40], // Right / Down\n select : [9, 13, 27], // Tab / Enter / Escape\n open : [13, 32, 37, 38, 39, 40], // Enter / Space / Left / Up / Right / Down\n close : [9, 27] // Tab / Escape\n },\n customClass : {\n prefix: pluginName,\n camelCase: false\n },\n multiple : {\n separator: ', ',\n keepMenuOpen: true,\n maxLabelEntries: false\n }\n };\n}));\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 for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n return 1;\n }\n }\n return 0;\n}();\n\nfunction microtaskDebounce(fn) {\n var called = false;\n return function () {\n if (called) {\n return;\n }\n called = true;\n window.Promise.resolve().then(function () {\n called = false;\n fn();\n });\n };\n}\n\nfunction taskDebounce(fn) {\n var scheduled = false;\n return function () {\n if (!scheduled) {\n scheduled = true;\n setTimeout(function () {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nvar supportsMicroTasks = isBrowser && window.Promise;\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nvar debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nfunction isFunction(functionToCheck) {\n var getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\n/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nfunction getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n var window = element.ownerDocument.defaultView;\n var css = window.getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n\n/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nfunction getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nfunction getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body;\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body;\n case '#document':\n return element.body;\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n\n var _getStyleComputedProp = getStyleComputedProperty(element),\n overflow = _getStyleComputedProp.overflow,\n overflowX = _getStyleComputedProp.overflowX,\n overflowY = _getStyleComputedProp.overflowY;\n\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n\n/**\n * Returns the reference node of the reference object, or the reference object itself.\n * @method\n * @memberof Popper.Utils\n * @param {Element|Object} reference - the reference element (the popper will be relative to this)\n * @returns {Element} parent\n */\nfunction getReferenceNode(reference) {\n return reference && reference.referenceNode ? reference.referenceNode : reference;\n}\n\nvar isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nvar isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nfunction isIE(version) {\n if (version === 11) {\n return isIE11;\n }\n if (version === 10) {\n return isIE10;\n }\n return isIE11 || isIE10;\n}\n\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nfunction getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n var noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n var offsetParent = element.offsetParent || null;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n var nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TH, TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n\nfunction isOffsetContainer(element) {\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY') {\n return false;\n }\n return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n}\n\n/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nfunction getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nfunction findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n var start = order ? element1 : element2;\n var end = order ? element2 : element1;\n\n // Get common ancestor container\n var range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n var commonAncestorContainer = range.commonAncestorContainer;\n\n // Both nodes are inside #document\n\n if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n var element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n\n/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nfunction getScroll(element) {\n var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n var html = element.ownerDocument.documentElement;\n var scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nfunction includeScroll(rect, element) {\n var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n var modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n\n/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nfunction getBordersSize(styles, axis) {\n var sideA = axis === 'x' ? 'Left' : 'Top';\n var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return parseFloat(styles['border' + sideA + 'Width']) + 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\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle)\n };\n}\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\nvar defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\n/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nfunction getClientRect(offsets) {\n return _extends({}, offsets, {\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height\n });\n}\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nfunction getBoundingClientRect(element) {\n var rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n } else {\n rect = element.getBoundingClientRect();\n }\n } catch (e) {}\n\n var result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n\n // subtract scrollbar size from sizes\n var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n var width = sizes.width || element.clientWidth || result.width;\n var height = sizes.height || element.clientHeight || result.height;\n\n var horizScrollbar = element.offsetWidth - width;\n var vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n var styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n\nfunction getOffsetRectRelativeToArbitraryNode(children, parent) {\n var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var isIE10 = isIE(10);\n var isHTML = parent.nodeName === 'HTML';\n var childrenRect = getBoundingClientRect(children);\n var parentRect = getBoundingClientRect(parent);\n var scrollParent = getScrollParent(children);\n\n var styles = getStyleComputedProperty(parent);\n var borderTopWidth = parseFloat(styles.borderTopWidth);\n var borderLeftWidth = parseFloat(styles.borderLeftWidth);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if (fixedPosition && isHTML) {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n var offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n var marginTop = parseFloat(styles.marginTop);\n var marginLeft = parseFloat(styles.marginLeft);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element) {\n var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var html = element.ownerDocument.documentElement;\n var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n var width = Math.max(html.clientWidth, window.innerWidth || 0);\n var height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n var scrollTop = !excludeScroll ? getScroll(html) : 0;\n var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n var offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width: width,\n height: height\n };\n\n return getClientRect(offset);\n}\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nfunction isFixed(element) {\n var nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n var parentNode = getParentNode(element);\n if (!parentNode) {\n return false;\n }\n return isFixed(parentNode);\n}\n\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nfunction getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n var el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n}\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n // NOTE: 1 DOM access here\n\n var boundaries = { top: 0, left: 0 };\n var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n\n // Handle viewport case\n if (boundariesElement === 'viewport') {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n } else {\n // Handle other cases based on DOM element used as boundaries\n var boundariesNode = void 0;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n var _getWindowSizes = getWindowSizes(popper.ownerDocument),\n height = _getWindowSizes.height,\n width = _getWindowSizes.width;\n\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n padding = padding || 0;\n var isPaddingNumber = typeof padding === 'number';\n boundaries.left += isPaddingNumber ? padding : padding.left || 0;\n boundaries.top += isPaddingNumber ? padding : padding.top || 0;\n boundaries.right -= isPaddingNumber ? padding : padding.right || 0;\n boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;\n\n return boundaries;\n}\n\nfunction getArea(_ref) {\n var width = _ref.width,\n height = _ref.height;\n\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n\n var rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height\n }\n };\n\n var sortedAreas = Object.keys(rects).map(function (key) {\n return _extends({\n key: key\n }, rects[key], {\n area: getArea(rects[key])\n });\n }).sort(function (a, b) {\n return b.area - a.area;\n });\n\n var filteredAreas = sortedAreas.filter(function (_ref2) {\n var width = _ref2.width,\n height = _ref2.height;\n return width >= popper.clientWidth && height >= popper.clientHeight;\n });\n\n var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n\n var variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? '-' + variation : '');\n}\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nfunction getReferenceOffsets(state, popper, reference) {\n var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n\n/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nfunction getOuterSizes(element) {\n var window = element.ownerDocument.defaultView;\n var styles = window.getComputedStyle(element);\n var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\n var result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x\n };\n return result;\n}\n\n/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nfunction getOppositePlacement(placement) {\n var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nfunction getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n var popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n var popperOffsets = {\n width: popperRect.width,\n height: popperRect.height\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n var mainSide = isHoriz ? 'top' : 'left';\n var secondarySide = isHoriz ? 'left' : 'top';\n var measurement = isHoriz ? 'height' : 'width';\n var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n\n/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(function (cur) {\n return cur[prop] === value;\n });\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n var match = find(arr, function (obj) {\n return obj[prop] === value;\n });\n return arr.indexOf(match);\n}\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nfunction runModifiers(modifiers, data, ends) {\n var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(function (modifier) {\n if (modifier['function']) {\n // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.<br />\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nfunction update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n var data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {}\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n\n data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n\n/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nfunction isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(function (_ref) {\n var name = _ref.name,\n enabled = _ref.enabled;\n return enabled && name === modifierName;\n });\n}\n\n/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nfunction getSupportedPropertyName(property) {\n var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (var i = 0; i < prefixes.length; i++) {\n var prefix = prefixes[i];\n var toCheck = prefix ? '' + prefix + upperProp : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n\n/**\n * Destroys the popper.\n * @method\n * @memberof Popper\n */\nfunction destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicitly asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n\n/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nfunction getWindow(element) {\n var ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n var isBody = scrollParent.nodeName === 'BODY';\n var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction setupEventListeners(reference, options, state, updateBound) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n var scrollElement = getScrollParent(reference);\n attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nfunction enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n }\n}\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(function (target) {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nfunction disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n\n/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nfunction isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setStyles(element, styles) {\n Object.keys(styles).forEach(function (prop) {\n var unit = '';\n // add unit if the value is numeric and is one of the following\n if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n\n/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function (prop) {\n var value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nfunction applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nfunction applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n // compute reference element offsets\n var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n\n/**\n * @function\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Boolean} shouldRound - If the offsets should be rounded at all\n * @returns {Object} The popper's position offsets rounded\n *\n * The tale of pixel-perfect positioning. It's still not 100% perfect, but as\n * good as it can be within reason.\n * Discussion here: https://github.com/FezVrasta/popper.js/pull/715\n *\n * Low DPI screens cause a popper to be blurry if not using full pixels (Safari\n * as well on High DPI screens).\n *\n * Firefox prefers no rounding for positioning and does not have blurriness on\n * high DPI screens.\n *\n * Only horizontal placement and left/right values need to be considered.\n */\nfunction getRoundedOffsets(data, shouldRound) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n var round = Math.round,\n floor = Math.floor;\n\n var noRound = function noRound(v) {\n return v;\n };\n\n var referenceWidth = round(reference.width);\n var popperWidth = round(popper.width);\n\n var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n var isVariation = data.placement.indexOf('-') !== -1;\n var sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n\n var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;\n var verticalToInteger = !shouldRound ? noRound : round;\n\n return {\n left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),\n top: verticalToInteger(popper.top),\n bottom: verticalToInteger(popper.bottom),\n right: horizontalToInteger(popper.right)\n };\n}\n\nvar isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeStyle(data, options) {\n var x = options.x,\n y = options.y;\n var popper = data.offsets.popper;\n\n // Remove this legacy support in Popper.js v2\n\n var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'applyStyle';\n }).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n }\n var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n\n var offsetParent = getOffsetParent(data.instance.popper);\n var offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n var styles = {\n position: popper.position\n };\n\n var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox);\n\n var sideA = x === 'bottom' ? 'top' : 'bottom';\n var sideB = y === 'right' ? 'left' : 'right';\n\n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n var prefixedProperty = getSupportedPropertyName('transform');\n\n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n var left = void 0,\n top = void 0;\n if (sideA === 'bottom') {\n // when offsetParent is <html> the positioning is relative to the bottom of the screen (excluding the scrollbar)\n // and not the bottom of the html element\n if (offsetParent.nodeName === 'HTML') {\n top = -offsetParent.clientHeight + offsets.bottom;\n } else {\n top = -offsetParentRect.height + offsets.bottom;\n }\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n if (offsetParent.nodeName === 'HTML') {\n left = -offsetParent.clientWidth + offsets.right;\n } else {\n left = -offsetParentRect.width + offsets.right;\n }\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n var invertTop = sideA === 'bottom' ? -1 : 1;\n var invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = sideA + ', ' + sideB;\n }\n\n // Attributes\n var attributes = {\n 'x-placement': data.placement\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = _extends({}, attributes, data.attributes);\n data.styles = _extends({}, styles, data.styles);\n data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n\n return data;\n}\n\n/**\n * Helper used to know if the given modifier depends from another one.<br />\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n var requesting = find(modifiers, function (_ref) {\n var name = _ref.name;\n return name === requestingName;\n });\n\n var isRequired = !!requesting && modifiers.some(function (modifier) {\n return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n });\n\n if (!isRequired) {\n var _requesting = '`' + requestingName + '`';\n var requested = '`' + requestedName + '`';\n console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n }\n return isRequired;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction arrow(data, options) {\n var _data$offsets$arrow;\n\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n var arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn('WARNING: `arrow.element` must be child of its popper element!');\n return data;\n }\n }\n\n var placement = data.placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n var len = isVertical ? 'height' : 'width';\n var sideCapitalized = isVertical ? 'Top' : 'Left';\n var side = sideCapitalized.toLowerCase();\n var altSide = isVertical ? 'left' : 'top';\n var opSide = isVertical ? 'bottom' : 'right';\n var arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjunction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n var css = getStyleComputedProperty(data.instance.popper);\n var popperMarginSide = parseFloat(css['margin' + sideCapitalized]);\n var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width']);\n var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n\n return data;\n}\n\n/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nfunction getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n\n/**\n * List of accepted placements to use as values of the `placement` option.<br />\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.<br />\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-end` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nvar placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\n\n// Get rid of `auto` `auto-start` and `auto-end`\nvar validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nfunction clockwise(placement) {\n var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var index = validPlacements.indexOf(placement);\n var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n\nvar BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise'\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\n\n var placement = data.placement.split('-')[0];\n var placementOpposite = getOppositePlacement(placement);\n var variation = data.placement.split('-')[1] || '';\n\n var flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach(function (step, index) {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n var popperOffsets = data.offsets.popper;\n var refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n var floor = Math.floor;\n var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n\n var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n // flip the variation if required\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n\n // flips variation if reference element overflows boundaries\n var flippedVariationByRef = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n // flips variation if popper content overflows boundaries\n var flippedVariationByContent = !!options.flipVariationsByContent && (isVertical && variation === 'start' && overflowsRight || isVertical && variation === 'end' && overflowsLeft || !isVertical && variation === 'start' && overflowsBottom || !isVertical && variation === 'end' && overflowsTop);\n\n var flippedVariation = flippedVariationByRef || flippedVariationByContent;\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction keepTogether(data) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var placement = data.placement.split('-')[0];\n var floor = Math.floor;\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var side = isVertical ? 'right' : 'bottom';\n var opSide = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nfunction toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n var value = +split[1];\n var unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n var element = void 0;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n var rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n var size = void 0;\n if (unit === 'vh') {\n size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n } else {\n size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nfunction parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n var offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n return frag.trim();\n });\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n var divider = fragments.indexOf(find(fragments, function (frag) {\n return frag.search(/,|\\s/) !== -1;\n }));\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n var splitRegex = /\\s*,\\s*|\\s+/;\n var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map(function (op, index) {\n // Most of the units rely on the orientation of the popper\n var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n var mergeWithPrevious = false;\n return op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce(function (a, b) {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(function (str) {\n return toValue(str, measurement, popperOffsets, referenceOffsets);\n });\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach(function (op, index) {\n op.forEach(function (frag, index2) {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nfunction offset(data, _ref) {\n var offset = _ref.offset;\n var placement = data.placement,\n _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var basePlacement = placement.split('-')[0];\n\n var offsets = void 0;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction preventOverflow(data, options) {\n var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\n // NOTE: DOM access here\n // resets the popper's position so that the document size can be calculated excluding\n // the size of the popper element itself\n var transformProp = getSupportedPropertyName('transform');\n var popperStyles = data.instance.popper.style; // assignment to help minification\n var top = popperStyles.top,\n left = popperStyles.left,\n transform = popperStyles[transformProp];\n\n popperStyles.top = '';\n popperStyles.left = '';\n popperStyles[transformProp] = '';\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);\n\n // NOTE: DOM access here\n // restores the original style properties after the offsets have been computed\n popperStyles.top = top;\n popperStyles.left = left;\n popperStyles[transformProp] = transform;\n\n options.boundaries = boundaries;\n\n var order = options.priority;\n var popper = data.offsets.popper;\n\n var check = {\n primary: function primary(placement) {\n var value = popper[placement];\n if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return defineProperty({}, placement, value);\n },\n secondary: function secondary(placement) {\n var mainSide = placement === 'right' ? 'left' : 'top';\n var value = popper[mainSide];\n if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n }\n return defineProperty({}, mainSide, value);\n }\n };\n\n order.forEach(function (placement) {\n var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = _extends({}, popper, check[side](placement));\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction shift(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n var _data$offsets = data.offsets,\n reference = _data$offsets.reference,\n popper = _data$offsets.popper;\n\n var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n var side = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n var shiftOffsets = {\n start: defineProperty({}, side, reference[side]),\n end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n };\n\n data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n var refRect = data.offsets.reference;\n var bound = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'preventOverflow';\n }).boundaries;\n\n if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction inner(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.<br />\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.<br />\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nvar modifiers = {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.<br />\n * It will read the variation of the `placement` property.<br />\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unit-less, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.<br />\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the `height`.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.<br />\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.<br />\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * A scenario exists where the reference itself is not within the boundaries.<br />\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".<br />\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper. This makes sure the popper always has a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent'\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near each other\n * without leaving any gap between the two. Especially useful when the arrow is\n * enabled and you want to ensure that it points to its reference element.\n * It cares only about the first axis. You can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjunction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]'\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations)\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position.\n * The popper will never be placed outside of the defined boundaries\n * (except if `keepTogether` is enabled)\n */\n boundariesElement: 'viewport',\n /**\n * @prop {Boolean} flipVariations=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the reference element overlaps its boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariations: false,\n /**\n * @prop {Boolean} flipVariationsByContent=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the popper element overlaps its reference boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariationsByContent: false\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right'\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define your own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: undefined\n }\n};\n\n/**\n * The `dataObject` is an object containing all the information used by Popper.js.\n * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.<br />\n * These can be overridden using the `options` argument of Popper.js.<br />\n * To override an option, simply pass an object with the same\n * structure of the `options` object, as the 3rd argument. For example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nvar Defaults = {\n /**\n * Popper's placement.\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled.\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.<br />\n * By default, it is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: function onCreate() {},\n\n /**\n * Callback called when the popper is updated. This callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.<br />\n * By default, it is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: function onUpdate() {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js.\n * @prop {modifiers}\n */\n modifiers: modifiers\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n\n// Utils\n// Methods\nvar Popper = function () {\n /**\n * Creates a new Popper.js instance.\n * @class Popper\n * @param {Element|referenceObject} reference - The reference element used to position the popper\n * @param {Element} popper - The HTML / XML element used as the popper\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n function Popper(reference, popper) {\n var _this = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n classCallCheck(this, Popper);\n\n this.scheduleUpdate = function () {\n return requestAnimationFrame(_this.update);\n };\n\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = _extends({}, Popper.Defaults, options);\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: []\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n return _extends({\n name: name\n }, _this.options.modifiers[name]);\n })\n // sort the modifiers by order\n .sort(function (a, b) {\n return a.order - b.order;\n });\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(function (modifierOptions) {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n var eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n\n\n createClass(Popper, [{\n key: 'update',\n value: function update$$1() {\n return update.call(this);\n }\n }, {\n key: 'destroy',\n value: function destroy$$1() {\n return destroy.call(this);\n }\n }, {\n key: 'enableEventListeners',\n value: function enableEventListeners$$1() {\n return enableEventListeners.call(this);\n }\n }, {\n key: 'disableEventListeners',\n value: function disableEventListeners$$1() {\n return disableEventListeners.call(this);\n }\n\n /**\n * Schedules an update. It will run on the next UI update available.\n * @method scheduleUpdate\n * @memberof Popper\n */\n\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n\n }]);\n return Popper;\n}();\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.<br />\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10.\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n\n\nPopper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\nPopper.placements = placements;\nPopper.Defaults = Defaults;\n\nexport default Popper;\n//# sourceMappingURL=popper.js.map\n","/*!\n * jQuery JavaScript Library v3.6.3\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2022-12-20T21:28Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket trac-14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\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\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns \"function\" for HTML <object> elements\n\t\t// (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n\t\t// We don't want to classify *any* DOM node as a function.\n\t\t// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n\t\t// Plus for old WebKit, typeof returns \"function\" for HTML collections\n\t\t// (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n\t\treturn typeof obj === \"function\" && typeof obj.nodeType !== \"number\" &&\n\t\t\ttypeof obj.item !== \"function\";\n\t};\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\nvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, node, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[ i ] || node.getAttribute && node.getAttribute( i );\n\t\t\t\tif ( val ) {\n\t\t\t\t\tscript.setAttribute( i, val );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof 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\nvar\n\tversion = \"3.6.3\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.9\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: 2022-12-19\n */\n( function( window ) {\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ( {} ).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpushNative = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[ i ] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|\" +\n\t\t\"ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t// \"Attribute values must be CSS identifiers [capture 5]\n\t\t// or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\twhitespace + \"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" +\n\t\twhitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace +\n\t\t\"*\" ),\n\trdescend = new RegExp( whitespace + \"|>\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trhtml = /HTML$/i,\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace + \"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\treturn nonHex ?\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\tnonHex :\n\n\t\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t\t// Support: IE <=11+\n\t\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t\t// surrogate pair\n\t\t\thigh < 0 ?\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" +\n\t\t\t\tch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && elem.nodeName.toLowerCase() === \"fieldset\";\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t( arr = slice.call( preferredDoc.childNodes ) ),\n\t\tpreferredDoc.childNodes\n\t);\n\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\t// eslint-disable-next-line no-unused-expressions\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpushNative.apply( target, slice.call( els ) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( ( target[ j++ ] = els[ i++ ] ) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) &&\n\n\t\t\t\t// Support: IE 8 only\n\t\t\t\t// Exclude object elements\n\t\t\t\t( nodeType !== 1 || context.nodeName.toLowerCase() !== \"object\" ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rcombinators.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\tif ( newContext !== context || !support.scope ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// `qSA` may not throw for unrecognized parts using forgiving parsing:\n\t\t\t\t\t// https://drafts.csswg.org/selectors/#forgiving-selector\n\t\t\t\t\t// like the `:has()` pseudo-class:\n\t\t\t\t\t// https://drafts.csswg.org/selectors/#relational\n\t\t\t\t\t// `CSS.supports` is still expected to return `false` then:\n\t\t\t\t\t// https://drafts.csswg.org/css-conditional-4/#typedef-supports-selector-fn\n\t\t\t\t\t// https://drafts.csswg.org/css-conditional-4/#dfn-support-selector\n\t\t\t\t\tif ( support.cssSupportsSelector &&\n\n\t\t\t\t\t\t// eslint-disable-next-line no-undef\n\t\t\t\t\t\t!CSS.supports( \"selector(:is(\" + newSelector + \"))\" ) ) {\n\n\t\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t\t// Throw to get to the same code path as an error directly in qSA.\n\t\t\t\t\t\t// Note: once we only support browser supporting\n\t\t\t\t\t\t// `CSS.supports('selector(...)')`, we can most likely drop\n\t\t\t\t\t\t// the `try-catch`. IE doesn't implement the API.\n\t\t\t\t\t\tthrow new Error();\n\t\t\t\t\t}\n\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\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 */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement( \"fieldset\" );\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch ( e ) {\n\t\treturn false;\n\t} finally {\n\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\n\t\t// release memory in IE\n\t\tel = null;\n\t}\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 */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split( \"|\" ),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[ i ] ] = handler;\n\t}\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 */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( ( cur = cur.nextSibling ) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn ( name === \"input\" || name === \"button\" ) && elem.type === type;\n\t};\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 */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\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 */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\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 */\nisXML = Sizzle.isXML = function( elem ) {\n\tvar namespace = elem && elem.namespaceURI,\n\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t// Support: IE <=8\n\t// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes\n\t// https://bugs.jquery.com/ticket/4833\n\treturn !rhtml.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n};\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 */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( preferredDoc != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t// Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,\n\t// Safari 4 - 5 only, Opera <=11.6 - 12.x only\n\t// IE/Edge & older browsers don't support the :scope pseudo-class.\n\t// Support: Safari 6.0 only\n\t// Safari 6.0 supports :scope but it's an alias of :root there.\n\tsupport.scope = assert( function( el ) {\n\t\tdocElem.appendChild( el ).appendChild( document.createElement( \"div\" ) );\n\t\treturn typeof el.querySelectorAll !== \"undefined\" &&\n\t\t\t!el.querySelectorAll( \":scope fieldset div\" ).length;\n\t} );\n\n\t// Support: Chrome 105+, Firefox 104+, Safari 15.4+\n\t// Make sure forgiving mode is not used in `CSS.supports( \"selector(...)\" )`.\n\t//\n\t// `:is()` uses a forgiving selector list as an argument and is widely\n\t// implemented, so it's a good one to test against.\n\tsupport.cssSupportsSelector = assert( function() {\n\t\t/* eslint-disable no-undef */\n\n\t\treturn CSS.supports( \"selector(*)\" ) &&\n\n\t\t\t// Support: Firefox 78-81 only\n\t\t\t// In old Firefox, `:is()` didn't use forgiving parsing. In that case,\n\t\t\t// fail this test as there's no selector to test against that.\n\t\t\t// `CSS.supports` uses unforgiving parsing\n\t\t\tdocument.querySelectorAll( \":is(:jqfake)\" ) &&\n\n\t\t\t// `*` is needed as Safari & newer Chrome implemented something in between\n\t\t\t// for `:has()` - it throws in `qSA` if it only contains an unsupported\n\t\t\t// argument but multiple ones, one of which is supported, are fine.\n\t\t\t// We want to play safe in case `:is()` gets the same treatment.\n\t\t\t!CSS.supports( \"selector(:is(*,:jqfake))\" );\n\n\t\t/* eslint-enable */\n\t} );\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert( function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute( \"className\" );\n\t} );\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert( function( el ) {\n\t\tel.appendChild( document.createComment( \"\" ) );\n\t\treturn !el.getElementsByTagName( \"*\" ).length;\n\t} );\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert( function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t} );\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter[ \"ID\" ] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find[ \"ID\" ] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter[ \"ID\" ] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode( \"id\" );\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[ \"ID\" ] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( ( elem = elems[ i++ ] ) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[ \"TAG\" ] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[ \"CLASS\" ] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) {\n\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert( function( el ) {\n\n\t\t\tvar input;\n\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll( \"[msallowcapture^='']\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll( \"[selected]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"~=\" );\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t\t// Adding a temporary attribute to the document before the selection works\n\t\t\t// around the issue.\n\t\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\t\tinput = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"name\", \"\" );\n\t\t\tel.appendChild( input );\n\t\t\tif ( !el.querySelectorAll( \"[name='']\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll( \":checked\" ).length ) {\n\t\t\t\trbuggyQSA.push( \":checked\" );\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push( \".#.+[+~]\" );\n\t\t\t}\n\n\t\t\t// Support: Firefox <=3.6 - 5 only\n\t\t\t// Old Firefox doesn't throw on a badly-escaped identifier.\n\t\t\tel.querySelectorAll( \"\\\\\\f\" );\n\t\t\trbuggyQSA.push( \"[\\\\r\\\\n\\\\f]\" );\n\t\t} );\n\n\t\tassert( function( el ) {\n\t\t\tel.innerHTML = \"<a href='' disabled='disabled'></a>\" +\n\t\t\t\t\"<select disabled='disabled'><option/></select>\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll( \"[name=d]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll( \":enabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll( \":disabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: Opera 10 - 11 only\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll( \"*,:x\" );\n\t\t\trbuggyQSA.push( \",.*:\" );\n\t\t} );\n\t}\n\n\tif ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector ) ) ) ) {\n\n\t\tassert( function( el ) {\n\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t} );\n\t}\n\n\tif ( !support.cssSupportsSelector ) {\n\n\t\t// Support: Chrome 105+, Safari 15.4+\n\t\t// `:has()` uses a forgiving selector list as an argument so our regular\n\t\t// `try-catch` mechanism fails to catch `:has()` with arguments not supported\n\t\t// natively like `:has(:contains(\"Foo\"))`. Where supported & spec-compliant,\n\t\t// we now use `CSS.supports(\"selector(:is(SELECTOR_TO_BE_TESTED))\")`, but\n\t\t// outside that we mark `:has` as buggy.\n\t\trbuggyQSA.push( \":has\" );\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( \"|\" ) );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( \"|\" ) );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\n\t\t\t// Support: IE <9 only\n\t\t\t// IE doesn't have `contains` on `document` so we need to check for\n\t\t\t// `documentElement` presence.\n\t\t\t// We need to fall back to `a` when `documentElement` is missing\n\t\t\t// as `ownerDocument` of elements within `<template/>` may have\n\t\t\t// a null one - a default behavior of all modern browsers.\n\t\t\tvar adown = a.nodeType === 9 && a.documentElement || a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t) );\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( ( b = b.parentNode ) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( a == document || a.ownerDocument == preferredDoc &&\n\t\t\t\tcontains( preferredDoc, a ) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( b == document || b.ownerDocument == preferredDoc &&\n\t\t\t\tcontains( preferredDoc, b ) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t/* eslint-disable eqeqeq */\n\t\t\treturn a == document ? -1 :\n\t\t\t\tb == document ? 1 :\n\t\t\t\t/* eslint-enable eqeqeq */\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( ( cur = cur.parentNode ) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( ( cur = cur.parentNode ) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[ i ] === bp[ i ] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[ i ], bp[ i ] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t/* eslint-disable eqeqeq */\n\t\t\tap[ i ] == preferredDoc ? -1 :\n\t\t\tbp[ i ] == preferredDoc ? 1 :\n\t\t\t/* eslint-enable eqeqeq */\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\n\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t// fragment in IE 9\n\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( context.ownerDocument || context ) != document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( elem.ownerDocument || elem ) != document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t( val = elem.getAttributeNode( name ) ) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[ 1 ] = match[ 1 ].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[ 3 ] = ( match[ 3 ] || match[ 4 ] ||\n\t\t\t\tmatch[ 5 ] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\t\tSizzle.error( match[ 0 ] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" ) );\n\t\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[ 3 ] ) {\n\t\t\t\tSizzle.error( match[ 0 ] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\t\tif ( matchExpr[ \"CHILD\" ].test( match[ 0 ] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[ 3 ] ) {\n\t\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length ) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace +\n\t\t\t\t\t\")\" + className + \"(\" + whitespace + \"|$)\" ) ) && classCache(\n\t\t\t\t\t\tclassName, function( elem ) {\n\t\t\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\t/* eslint-disable max-len */\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t\t/* eslint-enable max-len */\n\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || ( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || ( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction( function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[ i ] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[ i ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} ) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\t\"has\": markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\t\"contains\": markFunction( function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement &&\n\t\t\t\t( !document.hasFocus || document.hasFocus() ) &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn ( nodeName === \"input\" && !!elem.checked ) ||\n\t\t\t\t( nodeName === \"option\" && !!elem.selected );\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[ \"empty\" ]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE <10 only\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( ( attr = elem.getAttribute( \"type\" ) ) == null ||\n\t\t\t\t\tattr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\t\"last\": createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\t\"eq\": createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\t\"even\": createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"odd\": createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"lt\": createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ?\n\t\t\t\targument + length :\n\t\t\t\targument > length ?\n\t\t\t\t\tlength :\n\t\t\t\t\targument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"gt\": createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\nExpr.pseudos[ \"nth\" ] = Expr.pseudos[ \"eq\" ];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rcombinators.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrim, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] ||\n\t\t\t\t\t\t\t( outerCache[ elem.uniqueID ] = {} );\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = uniqueCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts(\n\t\t\t\tselector || \"*\",\n\t\t\t\tcontext.nodeType ? [ context ] : context,\n\t\t\t\t[]\n\t\t\t),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\ttokens\n\t\t\t\t\t\t.slice( 0, i - 1 )\n\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[ \"TAG\" ]( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache(\n\t\t\tselector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers )\n\t\t);\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\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 */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( Expr.find[ \"ID\" ]( token.matches[ 0 ]\n\t\t\t\t.replace( runescape, funescape ), context ) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[ \"needsContext\" ].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = Expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\ttoken.matches[ 0 ].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split( \"\" ).sort( sortOrder ).join( \"\" ) === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert( function( el ) {\n\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement( \"fieldset\" ) ) & 1;\n} );\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert( function( el ) {\n\tel.innerHTML = \"<a href='#'></a>\";\n\treturn el.firstChild.getAttribute( \"href\" ) === \"#\";\n} ) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t} );\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert( function( el ) {\n\tel.innerHTML = \"<input/>\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n} ) ) {\n\taddHandle( \"value\", function( elem, _name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t} );\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert( function( el ) {\n\treturn el.getAttribute( \"disabled\" ) == null;\n} ) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t( val = elem.getAttributeNode( name ) ) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\t\tnull;\n\t\t}\n\t} );\n}\n\nreturn Sizzle;\n\n} )( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n\n\nfunction nodeName( elem, name ) {\n\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n}\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)\n\t// Strict HTML recognition (trac-11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\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 */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the primary Deferred\n\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tprimary.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( primary.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn primary.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\n\t\t}\n\n\t\treturn primary.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See trac-6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\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\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\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 (trac-9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see trac-8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\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\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif ( documentElement.getRootNode ) {\n\t\tisAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t\t};\n\t}\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached( elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (trac-11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (trac-14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n\n\t// Support: IE <=9 only\n\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t// the select element.\n\tdiv.innerHTML = \"<option></option>\";\n\tsupport.option = !!div.lastChild;\n} )();\n\n\n// We have to close these tags to support XHTML (trac-13200)\nvar wrapMap = {\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// Support: IE <=9 only\nif ( !support.option ) {\n\twrapMap.optgroup = wrapMap.option = [ 1, \"<select multiple='multiple'>\", \"</select>\" ];\n}\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\nvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\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).\nfunction expectSync( elem, type ) {\n\treturn ( elem === safeActiveElement() ) === ( type === \"focus\" );\n}\n\n// Support: IE <=9 only\n// Accessing document.activeElement can throw unexpectedly\n// https://bugs.jquery.com/ticket/13393\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\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 */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", returnTrue );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\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.\nfunction leverageNative( el, type, expectSync ) {\n\n\t// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !expectSync ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar notAsync, result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\t// Saved data should be false in such cases, but might be a leftover capture object\n\t\t\t\t// from an async native handler (gh-4350)\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t// focus() and blur() are asynchronous\n\t\t\t\t\tnotAsync = expectSync( this, type );\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tif ( saved !== result || notAsync ) {\n\t\t\t\t\t\tdataPriv.set( this, type, false );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = {};\n\t\t\t\t\t}\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t\t// In Chrome, if an element having a focusout handler is blurred by\n\t\t\t\t\t\t// clicking outside of it, it invokes the handler synchronously. If\n\t\t\t\t\t\t// that handler calls `.remove()` on the element, the data is cleared,\n\t\t\t\t\t\t// leaving `result` undefined. We need to guard against this.\n\t\t\t\t\t\treturn result && result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering the\n\t\t\t\t// native event and prevent that from happening again here.\n\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t// less bad than duplication.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\n\t\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t\t// Extend with the prototype to reset the above stopImmediatePropagation()\n\t\t\t\t\t\tjQuery.extend( saved[ 0 ], jQuery.Event.prototype ),\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event\n\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (trac-504, trac-13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\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\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\twhich: true\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, expectSync );\n\n\t\t\t// Return false to allow normal processing in the caller\n\t\t\treturn false;\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\t// Suppress native focus or blur if we're currently inside\n\t\t// a leveraged native-event stack\n\t\t_default: function( event ) {\n\t\t\treturn dataPriv.get( event.target, type );\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\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).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\n\trcleanScript = /^\\s*<!\\[CDATA\\[|\\]\\]>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.get( src );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdataPriv.remove( dest, \"handle events\" );\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase() !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute( \"nonce\" )\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Unwrap a CDATA section containing script contents. This shouldn't be\n\t\t\t\t\t\t\t// needed as in XML documents they're already not visible when\n\t\t\t\t\t\t\t// inspecting element contents and in HTML documents they have no\n\t\t\t\t\t\t\t// meaning but we're preserving that logic for backwards compatibility.\n\t\t\t\t\t\t\t// This will be removed completely in 4.0. See gh-4904.\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && isAttached( node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html;\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = isAttached( elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar rcustomProp = /^--/;\n\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar swap = function( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\nvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\n\nvar rtrimCSS = new RegExp(\n\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\"g\"\n);\n\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t// Support: Chrome <=64\n\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (trac-8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t},\n\n\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t// some versions of this test; make sure not to make it pass there!\n\t\t//\n\t\t// Support: Firefox 70+\n\t\t// Only Firefox includes border widths\n\t\t// in computed dimensions. (gh-4529)\n\t\treliableTrDimensions: function() {\n\t\t\tvar table, tr, trChild, trStyle;\n\t\t\tif ( reliableTrDimensionsVal == null ) {\n\t\t\t\ttable = document.createElement( \"table\" );\n\t\t\t\ttr = document.createElement( \"tr\" );\n\t\t\t\ttrChild = document.createElement( \"div\" );\n\n\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n\t\t\t\ttr.style.cssText = \"border:1px solid\";\n\n\t\t\t\t// Support: Chrome 86+\n\t\t\t\t// Height set through cssText does not get applied.\n\t\t\t\t// Computed height then comes back as 0.\n\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\t// Support: Android 8 Chrome 86+\n\t\t\t\t// In our bodyBackground.html iframe,\n\t\t\t\t// display for all div elements is set to \"inline\",\n\t\t\t\t// which causes a problem only in Android 8 Chrome 86.\n\t\t\t\t// Ensuring the div is display: block\n\t\t\t\t// gets around this issue.\n\t\t\t\ttrChild.style.display = \"block\";\n\n\t\t\t\tdocumentElement\n\t\t\t\t\t.appendChild( table )\n\t\t\t\t\t.appendChild( tr )\n\t\t\t\t\t.appendChild( trChild );\n\n\t\t\t\ttrStyle = window.getComputedStyle( tr );\n\t\t\t\treliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderTopWidth, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;\n\n\t\t\t\tdocumentElement.removeChild( table );\n\t\t\t}\n\t\t\treturn reliableTrDimensionsVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\t\tisCustomProp = rcustomProp.test( name ),\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t// .css('filter') (IE 9 only, trac-12537)\n\t// .css('--customProperty) (gh-3144)\n\tif ( computed ) {\n\n\t\t// Support: IE <=9 - 11+\n\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t// Normally, this would create difference in behavior: if\n\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( isCustomProp && ret ) {\n\n\t\t\t// Support: Firefox 105+, Chrome <=105+\n\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t// Firefox only trims leading whitespace. Chrome just collapses\n\t\t\t// both leading & trailing whitespace to a single space.\n\t\t\t//\n\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t// This collapses a missing definition with property defined\n\t\t\t// and set to an empty string but there's no standard API\n\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t//\n\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t// (which *is* CSS whitespace)\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\tret = ret.replace( rtrimCSS, \"$1\" ) || undefined;\n\t\t}\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style,\n\tvendorProps = {};\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\nfunction finalPropName( name ) {\n\tvar final = jQuery.cssProps[ name ] || vendorProps[ name ];\n\n\tif ( final ) {\n\t\treturn final;\n\t}\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorProps[ name ] = vendorPropName( name ) || name;\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\tif ( box === \"margin\" ) {\n\t\t\tdelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\t// Support: IE 9 - 11 only\n\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t// In those cases, the computed value can be trusted to be border-box.\n\tif ( ( !support.boxSizingReliable() && isBorderBox ||\n\n\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t!support.reliableTrDimensions() && nodeName( elem, \"tr\" ) ||\n\n\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\tval === \"auto\" ||\n\n\t\t// Support: Android <=4.1 - 4.3 only\n\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"gridArea\": true,\n\t\t\"gridColumn\": true,\n\t\t\"gridColumnEnd\": true,\n\t\t\"gridColumnStart\": true,\n\t\t\"gridRow\": true,\n\t\t\"gridRowEnd\": true,\n\t\t\"gridRowStart\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug trac-9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t// \"px\" to a few hardcoded values.\n\t\t\tif ( type === \"number\" && !isCustomProp ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && scrollboxSizeBuggy ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( _i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\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\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + className + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + className + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + className + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar classNames, className, i, self,\n\t\t\ttype = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\treturn this.each( function() {\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\tself = jQuery( this );\n\n\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (trac-2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || Object.create( null ) )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\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\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\n\t\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, parserErrorElem;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {}\n\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} ).filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} ).map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\noriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes trac-9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\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 */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket trac-12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce.guid++ ) +\n\t\t\t\t\tuncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// trac-1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\" ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain or forced-by-attrs requests\n\tif ( s.crossDomain || s.scriptAttrs ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" )\n\t\t\t\t\t.attr( s.scriptAttrs || {} )\n\t\t\t\t\t.prop( { charset: s.scriptCharset, src: s.url } )\n\t\t\t\t\t.on( \"load error\", callback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce.guid++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\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\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\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\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\n\t// offset() relates an element's border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element's margin box to its offset parent's padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\t( offsetParent === doc.body || offsetParent === doc.documentElement ) &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\n\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, \"borderLeftWidth\", true );\n\t\t\t}\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t// documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\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\njQuery.each( [ \"top\", \"left\" ], function( _i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( {\n\t\tpadding: \"inner\" + name,\n\t\tcontent: type,\n\t\t\"\": \"outer\" + name\n\t}, function( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( _i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t},\n\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\njQuery.each(\n\t( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( _i, name ) {\n\n\t\t// Handle event binding\n\t\tjQuery.fn[ name ] = function( data, fn ) {\n\t\t\treturn arguments.length > 0 ?\n\t\t\t\tthis.on( name, null, data, fn ) :\n\t\t\t\tthis.trigger( name );\n\t\t};\n\t}\n);\n\n\n\n\n// Support: Android <=4.0 only\n// Make sure we trim BOM and NBSP\n// Require that the \"whitespace run\" starts from a non-whitespace\n// to avoid O(N^2) behavior when the engine would try matching \"\\s+$\" at each space position.\nvar rtrim = /^[\\s\\uFEFF\\xA0]+|([^\\s\\uFEFF\\xA0])[\\s\\uFEFF\\xA0]+$/g;\n\n// 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\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === \"string\" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( !isFunction( fn ) ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\njQuery.isFunction = isFunction;\njQuery.isWindow = isWindow;\njQuery.camelCase = camelCase;\njQuery.type = toType;\n\njQuery.now = Date.now;\n\njQuery.isNumeric = function( obj ) {\n\n\t// As of jQuery 3.0, isNumeric is limited to\n\t// strings and numbers (primitives or objects)\n\t// that can be coerced to finite numbers (gh-2662)\n\tvar type = jQuery.type( obj );\n\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t!isNaN( obj - parseFloat( obj ) );\n};\n\njQuery.trim = function( text ) {\n\treturn text == null ?\n\t\t\"\" :\n\t\t( text + \"\" ).replace( rtrim, \"$1\" );\n};\n\n\n\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\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\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (trac-13566)\nif ( typeof noGlobal === \"undefined\" ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n","window.$ = window.jQuery = require('jquery');\nwindow.jQueryBridget = require('jquery-bridget');\nwindow.colorbox = require('jquery-colorbox');\n\nfunction youTubeGetID( url ) {\n\n var ID = '';\n url = url.replace(/(>|<)/gi,'').split(/(vi\\/|v=|\\/v\\/|youtu\\.be\\/|\\/embed\\/)/);\n if(url[2] !== undefined) {\n ID = url[2].split(/[^0-9a-z_-]/i);\n ID = ID[0];\n } else {\n ID = url;\n }\n return ID;\n\n}\n\nfunction vimeoGetID( url ) {\n\n var ID = '';\n\n url = url.split( '/' );\n\n if ( url[3] !== undefined ) {\n ID = url[3];\n }\n\n return ID;\n\n}\n\njQuery( document ).ready(function($) {\n\n $(\".wrap a[href*='youtu.be'],.wrap a[href*='youtube']\").each( function() {\n var videoID = youTubeGetID( $(this).attr( 'href' ) );\n $(this).addClass('video-link').attr( 'href', \"https://www.youtube.com/embed/\" + videoID + \"?rel=0&autoplay=1&wmode=transparent&modestbranding=1&showinfo=0\");\n });\n\n $(\".wrap a[href*='vimeo']\").each( function() {\n var videoID = vimeoGetID( $(this).attr( 'href' ) );\n $(this).addClass('video-link').attr( 'href', \"https://player.vimeo.com/video/\" + videoID + \"?autoplay=1&title=0&byline=0&portrait=0\");\n });\n\n // Video Player (include video URL in a tag href)\n $('.video-link').colorbox({\n iframe : true,\n transition : \"none\",\n width : \"100%\",\n height : \"100%\",\n innerWidth : \"100%\",\n innerHeight : \"100%\",\n onComplete : function( element ) {\n\n $('#colorbox').addClass('video-cbox');\n var caption = $(element.el).attr('title');\n\n if ( caption ) {\n $('#cboxTitle').html( caption );\n } else {\n $('#cboxTitle').addClass('video-caption-hidden');\n }\n\n },\n onClosed : function( element ) {\n $('#cboxTitle').html('');\n $('#colorbox').removeClass('video-cbox');\n $('#cboxTitle').removeClass('video-caption-hidden');\n }\n });\n\n});\n","// animate\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'fizzy-ui-utils/utils',\n ], function( utils ) {\n return factory( window, utils );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.animatePrototype = factory(\n window,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, utils ) {\n\n'use strict';\n\n// -------------------------- animate -------------------------- //\n\nvar proto = {};\n\nproto.startAnimation = function() {\n if ( this.isAnimating ) {\n return;\n }\n\n this.isAnimating = true;\n this.restingFrames = 0;\n this.animate();\n};\n\nproto.animate = function() {\n this.applyDragForce();\n this.applySelectedAttraction();\n\n var previousX = this.x;\n\n this.integratePhysics();\n this.positionSlider();\n this.settle( previousX );\n // animate next frame\n if ( this.isAnimating ) {\n var _this = this;\n requestAnimationFrame( function animateFrame() {\n _this.animate();\n } );\n }\n};\n\nproto.positionSlider = function() {\n var x = this.x;\n // wrap position around\n if ( this.options.wrapAround && this.cells.length > 1 ) {\n x = utils.modulo( x, this.slideableWidth );\n x -= this.slideableWidth;\n this.shiftWrapCells( x );\n }\n\n this.setTranslateX( x, this.isAnimating );\n this.dispatchScrollEvent();\n};\n\nproto.setTranslateX = function( x, is3d ) {\n x += this.cursorPosition;\n // reverse if right-to-left and using transform\n x = this.options.rightToLeft ? -x : x;\n var translateX = this.getPositionValue( x );\n // use 3D transforms for hardware acceleration on iOS\n // but use 2D when settled, for better font-rendering\n this.slider.style.transform = is3d ?\n 'translate3d(' + translateX + ',0,0)' : 'translateX(' + translateX + ')';\n};\n\nproto.dispatchScrollEvent = function() {\n var firstSlide = this.slides[0];\n if ( !firstSlide ) {\n return;\n }\n var positionX = -this.x - firstSlide.target;\n var progress = positionX / this.slidesWidth;\n this.dispatchEvent( 'scroll', null, [ progress, positionX ] );\n};\n\nproto.positionSliderAtSelected = function() {\n if ( !this.cells.length ) {\n return;\n }\n this.x = -this.selectedSlide.target;\n this.velocity = 0; // stop wobble\n this.positionSlider();\n};\n\nproto.getPositionValue = function( position ) {\n if ( this.options.percentPosition ) {\n // percent position, round to 2 digits, like 12.34%\n return ( Math.round( ( position / this.size.innerWidth ) * 10000 ) * 0.01 ) + '%';\n } else {\n // pixel positioning\n return Math.round( position ) + 'px';\n }\n};\n\nproto.settle = function( previousX ) {\n // keep track of frames where x hasn't moved\n var isResting = !this.isPointerDown &&\n Math.round( this.x * 100 ) == Math.round( previousX * 100 );\n if ( isResting ) {\n this.restingFrames++;\n }\n // stop animating if resting for 3 or more frames\n if ( this.restingFrames > 2 ) {\n this.isAnimating = false;\n delete this.isFreeScrolling;\n // render position with translateX when settled\n this.positionSlider();\n this.dispatchEvent( 'settle', null, [ this.selectedIndex ] );\n }\n};\n\nproto.shiftWrapCells = function( x ) {\n // shift before cells\n var beforeGap = this.cursorPosition + x;\n this._shiftCells( this.beforeShiftCells, beforeGap, -1 );\n // shift after cells\n var afterGap = this.size.innerWidth - ( x + this.slideableWidth + this.cursorPosition );\n this._shiftCells( this.afterShiftCells, afterGap, 1 );\n};\n\nproto._shiftCells = function( cells, gap, shift ) {\n for ( var i = 0; i < cells.length; i++ ) {\n var cell = cells[i];\n var cellShift = gap > 0 ? shift : 0;\n cell.wrapShift( cellShift );\n gap -= cell.size.outerWidth;\n }\n};\n\nproto._unshiftCells = function( cells ) {\n if ( !cells || !cells.length ) {\n return;\n }\n for ( var i = 0; i < cells.length; i++ ) {\n cells[i].wrapShift( 0 );\n }\n};\n\n// -------------------------- physics -------------------------- //\n\nproto.integratePhysics = function() {\n this.x += this.velocity;\n this.velocity *= this.getFrictionFactor();\n};\n\nproto.applyForce = function( force ) {\n this.velocity += force;\n};\n\nproto.getFrictionFactor = function() {\n return 1 - this.options[ this.isFreeScrolling ? 'freeScrollFriction' : 'friction' ];\n};\n\nproto.getRestingPosition = function() {\n // my thanks to Steven Wittens, who simplified this math greatly\n return this.x + this.velocity / ( 1 - this.getFrictionFactor() );\n};\n\nproto.applyDragForce = function() {\n if ( !this.isDraggable || !this.isPointerDown ) {\n return;\n }\n // change the position to drag position by applying force\n var dragVelocity = this.dragX - this.x;\n var dragForce = dragVelocity - this.velocity;\n this.applyForce( dragForce );\n};\n\nproto.applySelectedAttraction = function() {\n // do not attract if pointer down or no slides\n var dragDown = this.isDraggable && this.isPointerDown;\n if ( dragDown || this.isFreeScrolling || !this.slides.length ) {\n return;\n }\n var distance = this.selectedSlide.target * -1 - this.x;\n var force = distance * this.options.selectedAttraction;\n this.applyForce( force );\n};\n\nreturn proto;\n\n} ) );\n","// page dots\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'unipointer/unipointer',\n 'fizzy-ui-utils/utils',\n ], function( Flickity, Unipointer, utils ) {\n return factory( window, Flickity, Unipointer, utils );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('unipointer'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.Unipointer,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, Unipointer, utils ) {\n\n// -------------------------- PageDots -------------------------- //\n\n'use strict';\n\nfunction PageDots( parent ) {\n this.parent = parent;\n this._create();\n}\n\nPageDots.prototype = Object.create( Unipointer.prototype );\n\nPageDots.prototype._create = function() {\n // create holder element\n this.holder = document.createElement('ol');\n this.holder.className = 'flickity-page-dots';\n // create dots, array of elements\n this.dots = [];\n // events\n this.handleClick = this.onClick.bind( this );\n this.on( 'pointerDown', this.parent.childUIPointerDown.bind( this.parent ) );\n};\n\nPageDots.prototype.activate = function() {\n this.setDots();\n this.holder.addEventListener( 'click', this.handleClick );\n this.bindStartEvent( this.holder );\n // add to DOM\n this.parent.element.appendChild( this.holder );\n};\n\nPageDots.prototype.deactivate = function() {\n this.holder.removeEventListener( 'click', this.handleClick );\n this.unbindStartEvent( this.holder );\n // remove from DOM\n this.parent.element.removeChild( this.holder );\n};\n\nPageDots.prototype.setDots = function() {\n // get difference between number of slides and number of dots\n var delta = this.parent.slides.length - this.dots.length;\n if ( delta > 0 ) {\n this.addDots( delta );\n } else if ( delta < 0 ) {\n this.removeDots( -delta );\n }\n};\n\nPageDots.prototype.addDots = function( count ) {\n var fragment = document.createDocumentFragment();\n var newDots = [];\n var length = this.dots.length;\n var max = length + count;\n\n for ( var i = length; i < max; i++ ) {\n var dot = document.createElement('li');\n dot.className = 'dot';\n dot.setAttribute( 'aria-label', 'Page dot ' + ( i + 1 ) );\n fragment.appendChild( dot );\n newDots.push( dot );\n }\n\n this.holder.appendChild( fragment );\n this.dots = this.dots.concat( newDots );\n};\n\nPageDots.prototype.removeDots = function( count ) {\n // remove from this.dots collection\n var removeDots = this.dots.splice( this.dots.length - count, count );\n // remove from DOM\n removeDots.forEach( function( dot ) {\n this.holder.removeChild( dot );\n }, this );\n};\n\nPageDots.prototype.updateSelected = function() {\n // remove selected class on previous\n if ( this.selectedDot ) {\n this.selectedDot.className = 'dot';\n this.selectedDot.removeAttribute('aria-current');\n }\n // don't proceed if no dots\n if ( !this.dots.length ) {\n return;\n }\n this.selectedDot = this.dots[ this.parent.selectedIndex ];\n this.selectedDot.className = 'dot is-selected';\n this.selectedDot.setAttribute( 'aria-current', 'step' );\n};\n\nPageDots.prototype.onTap = // old method name, backwards-compatible\nPageDots.prototype.onClick = function( event ) {\n var target = event.target;\n // only care about dot clicks\n if ( target.nodeName != 'LI' ) {\n return;\n }\n\n this.parent.uiChange();\n var index = this.dots.indexOf( target );\n this.parent.select( index );\n};\n\nPageDots.prototype.destroy = function() {\n this.deactivate();\n this.allOff();\n};\n\nFlickity.PageDots = PageDots;\n\n// -------------------------- Flickity -------------------------- //\n\nutils.extend( Flickity.defaults, {\n pageDots: true,\n} );\n\nFlickity.createMethods.push('_createPageDots');\n\nvar proto = Flickity.prototype;\n\nproto._createPageDots = function() {\n if ( !this.options.pageDots ) {\n return;\n }\n this.pageDots = new PageDots( this );\n // events\n this.on( 'activate', this.activatePageDots );\n this.on( 'select', this.updateSelectedPageDots );\n this.on( 'cellChange', this.updatePageDots );\n this.on( 'resize', this.updatePageDots );\n this.on( 'deactivate', this.deactivatePageDots );\n};\n\nproto.activatePageDots = function() {\n this.pageDots.activate();\n};\n\nproto.updateSelectedPageDots = function() {\n this.pageDots.updateSelected();\n};\n\nproto.updatePageDots = function() {\n this.pageDots.setDots();\n};\n\nproto.deactivatePageDots = function() {\n this.pageDots.deactivate();\n};\n\n// ----- ----- //\n\nFlickity.PageDots = PageDots;\n\nreturn Flickity;\n\n} ) );\n","/**\n * EvEmitter v1.1.0\n * Lil' event emitter\n * MIT License\n */\n\n/* jshint unused: true, undef: true, strict: true */\n\n( function( global, factory ) {\n // universal module definition\n /* jshint strict: false */ /* globals define, module, window */\n if ( typeof define == 'function' && define.amd ) {\n // AMD - RequireJS\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS - Browserify, Webpack\n module.exports = factory();\n } else {\n // Browser globals\n global.EvEmitter = factory();\n }\n\n}( typeof window != 'undefined' ? window : this, function() {\n\n\"use strict\";\n\nfunction EvEmitter() {}\n\nvar proto = EvEmitter.prototype;\n\nproto.on = function( eventName, listener ) {\n if ( !eventName || !listener ) {\n return;\n }\n // set events hash\n var events = this._events = this._events || {};\n // set listeners array\n var listeners = events[ eventName ] = events[ eventName ] || [];\n // only add once\n if ( listeners.indexOf( listener ) == -1 ) {\n listeners.push( listener );\n }\n\n return this;\n};\n\nproto.once = function( eventName, listener ) {\n if ( !eventName || !listener ) {\n return;\n }\n // add event\n this.on( eventName, listener );\n // set once flag\n // set onceEvents hash\n var onceEvents = this._onceEvents = this._onceEvents || {};\n // set onceListeners object\n var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};\n // set flag\n onceListeners[ listener ] = true;\n\n return this;\n};\n\nproto.off = function( eventName, listener ) {\n var listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) {\n return;\n }\n var index = listeners.indexOf( listener );\n if ( index != -1 ) {\n listeners.splice( index, 1 );\n }\n\n return this;\n};\n\nproto.emitEvent = function( eventName, args ) {\n var listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) {\n return;\n }\n // copy over to avoid interference if .off() in listener\n listeners = listeners.slice(0);\n args = args || [];\n // once stuff\n var onceListeners = this._onceEvents && this._onceEvents[ eventName ];\n\n for ( var i=0; i < listeners.length; i++ ) {\n var listener = listeners[i]\n var isOnce = onceListeners && onceListeners[ listener ];\n if ( isOnce ) {\n // remove listener\n // remove before trigger to prevent recursion\n this.off( eventName, listener );\n // unset once flag\n delete onceListeners[ listener ];\n }\n // trigger listener\n listener.apply( this, args );\n }\n\n return this;\n};\n\nproto.allOff = function() {\n delete this._events;\n delete this._onceEvents;\n};\n\nreturn EvEmitter;\n\n}));\n","jQuery(document).ready(function($) {\n\n\t$('.accordion--title-link').on('click',function(e){\n\t\te.preventDefault();\n\t\t$( $(this).attr('href') ).toggleClass('is-collapsed');\n\t});\n\n});\n","// Flickity main\n/* eslint-disable max-params */\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'ev-emitter/ev-emitter',\n 'get-size/get-size',\n 'fizzy-ui-utils/utils',\n './cell',\n './slide',\n './animate',\n ], function( EvEmitter, getSize, utils, Cell, Slide, animatePrototype ) {\n return factory( window, EvEmitter, getSize, utils, Cell, Slide, animatePrototype );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('ev-emitter'),\n require('get-size'),\n require('fizzy-ui-utils'),\n require('./cell'),\n require('./slide'),\n require('./animate')\n );\n } else {\n // browser global\n var _Flickity = window.Flickity;\n\n window.Flickity = factory(\n window,\n window.EvEmitter,\n window.getSize,\n window.fizzyUIUtils,\n _Flickity.Cell,\n _Flickity.Slide,\n _Flickity.animatePrototype\n );\n }\n\n}( window, function factory( window, EvEmitter, getSize,\n utils, Cell, Slide, animatePrototype ) {\n\n/* eslint-enable max-params */\n'use strict';\n\n// vars\nvar jQuery = window.jQuery;\nvar getComputedStyle = window.getComputedStyle;\nvar console = window.console;\n\nfunction moveElements( elems, toElem ) {\n elems = utils.makeArray( elems );\n while ( elems.length ) {\n toElem.appendChild( elems.shift() );\n }\n}\n\n// -------------------------- Flickity -------------------------- //\n\n// globally unique identifiers\nvar GUID = 0;\n// internal store of all Flickity intances\nvar instances = {};\n\nfunction Flickity( element, options ) {\n var queryElement = utils.getQueryElement( element );\n if ( !queryElement ) {\n if ( console ) {\n console.error( 'Bad element for Flickity: ' + ( queryElement || element ) );\n }\n return;\n }\n this.element = queryElement;\n // do not initialize twice on same element\n if ( this.element.flickityGUID ) {\n var instance = instances[ this.element.flickityGUID ];\n if ( instance ) instance.option( options );\n return instance;\n }\n\n // add jQuery\n if ( jQuery ) {\n this.$element = jQuery( this.element );\n }\n // options\n this.options = utils.extend( {}, this.constructor.defaults );\n this.option( options );\n\n // kick things off\n this._create();\n}\n\nFlickity.defaults = {\n accessibility: true,\n // adaptiveHeight: false,\n cellAlign: 'center',\n // cellSelector: undefined,\n // contain: false,\n freeScrollFriction: 0.075, // friction when free-scrolling\n friction: 0.28, // friction when selecting\n namespaceJQueryEvents: true,\n // initialIndex: 0,\n percentPosition: true,\n resize: true,\n selectedAttraction: 0.025,\n setGallerySize: true,\n // watchCSS: false,\n // wrapAround: false\n};\n\n// hash of methods triggered on _create()\nFlickity.createMethods = [];\n\nvar proto = Flickity.prototype;\n// inherit EventEmitter\nutils.extend( proto, EvEmitter.prototype );\n\nproto._create = function() {\n // add id for Flickity.data\n var id = this.guid = ++GUID;\n this.element.flickityGUID = id; // expando\n instances[ id ] = this; // associate via id\n // initial properties\n this.selectedIndex = 0;\n // how many frames slider has been in same position\n this.restingFrames = 0;\n // initial physics properties\n this.x = 0;\n this.velocity = 0;\n this.originSide = this.options.rightToLeft ? 'right' : 'left';\n // create viewport & slider\n this.viewport = document.createElement('div');\n this.viewport.className = 'flickity-viewport';\n this._createSlider();\n\n if ( this.options.resize || this.options.watchCSS ) {\n window.addEventListener( 'resize', this );\n }\n\n // add listeners from on option\n for ( var eventName in this.options.on ) {\n var listener = this.options.on[ eventName ];\n this.on( eventName, listener );\n }\n\n Flickity.createMethods.forEach( function( method ) {\n this[ method ]();\n }, this );\n\n if ( this.options.watchCSS ) {\n this.watchCSS();\n } else {\n this.activate();\n }\n\n};\n\n/**\n * set options\n * @param {Object} opts - options to extend\n */\nproto.option = function( opts ) {\n utils.extend( this.options, opts );\n};\n\nproto.activate = function() {\n if ( this.isActive ) {\n return;\n }\n this.isActive = true;\n this.element.classList.add('flickity-enabled');\n if ( this.options.rightToLeft ) {\n this.element.classList.add('flickity-rtl');\n }\n\n this.getSize();\n // move initial cell elements so they can be loaded as cells\n var cellElems = this._filterFindCellElements( this.element.children );\n moveElements( cellElems, this.slider );\n this.viewport.appendChild( this.slider );\n this.element.appendChild( this.viewport );\n // get cells from children\n this.reloadCells();\n\n if ( this.options.accessibility ) {\n // allow element to focusable\n this.element.tabIndex = 0;\n // listen for key presses\n this.element.addEventListener( 'keydown', this );\n }\n\n this.emitEvent('activate');\n this.selectInitialIndex();\n // flag for initial activation, for using initialIndex\n this.isInitActivated = true;\n // ready event. #493\n this.dispatchEvent('ready');\n};\n\n// slider positions the cells\nproto._createSlider = function() {\n // slider element does all the positioning\n var slider = document.createElement('div');\n slider.className = 'flickity-slider';\n slider.style[ this.originSide ] = 0;\n this.slider = slider;\n};\n\nproto._filterFindCellElements = function( elems ) {\n return utils.filterFindElements( elems, this.options.cellSelector );\n};\n\n// goes through all children\nproto.reloadCells = function() {\n // collection of item elements\n this.cells = this._makeCells( this.slider.children );\n this.positionCells();\n this._getWrapShiftCells();\n this.setGallerySize();\n};\n\n/**\n * turn elements into Flickity.Cells\n * @param {[Array, NodeList, HTMLElement]} elems - elements to make into cells\n * @returns {Array} items - collection of new Flickity Cells\n */\nproto._makeCells = function( elems ) {\n var cellElems = this._filterFindCellElements( elems );\n\n // create new Flickity for collection\n var cells = cellElems.map( function( cellElem ) {\n return new Cell( cellElem, this );\n }, this );\n\n return cells;\n};\n\nproto.getLastCell = function() {\n return this.cells[ this.cells.length - 1 ];\n};\n\nproto.getLastSlide = function() {\n return this.slides[ this.slides.length - 1 ];\n};\n\n// positions all cells\nproto.positionCells = function() {\n // size all cells\n this._sizeCells( this.cells );\n // position all cells\n this._positionCells( 0 );\n};\n\n/**\n * position certain cells\n * @param {Integer} index - which cell to start with\n */\nproto._positionCells = function( index ) {\n index = index || 0;\n // also measure maxCellHeight\n // start 0 if positioning all cells\n this.maxCellHeight = index ? this.maxCellHeight || 0 : 0;\n var cellX = 0;\n // get cellX\n if ( index > 0 ) {\n var startCell = this.cells[ index - 1 ];\n cellX = startCell.x + startCell.size.outerWidth;\n }\n var len = this.cells.length;\n for ( var i = index; i < len; i++ ) {\n var cell = this.cells[i];\n cell.setPosition( cellX );\n cellX += cell.size.outerWidth;\n this.maxCellHeight = Math.max( cell.size.outerHeight, this.maxCellHeight );\n }\n // keep track of cellX for wrap-around\n this.slideableWidth = cellX;\n // slides\n this.updateSlides();\n // contain slides target\n this._containSlides();\n // update slidesWidth\n this.slidesWidth = len ? this.getLastSlide().target - this.slides[0].target : 0;\n};\n\n/**\n * cell.getSize() on multiple cells\n * @param {Array} cells - cells to size\n */\nproto._sizeCells = function( cells ) {\n cells.forEach( function( cell ) {\n cell.getSize();\n } );\n};\n\n// -------------------------- -------------------------- //\n\nproto.updateSlides = function() {\n this.slides = [];\n if ( !this.cells.length ) {\n return;\n }\n\n var slide = new Slide( this );\n this.slides.push( slide );\n var isOriginLeft = this.originSide == 'left';\n var nextMargin = isOriginLeft ? 'marginRight' : 'marginLeft';\n\n var canCellFit = this._getCanCellFit();\n\n this.cells.forEach( function( cell, i ) {\n // just add cell if first cell in slide\n if ( !slide.cells.length ) {\n slide.addCell( cell );\n return;\n }\n\n var slideWidth = ( slide.outerWidth - slide.firstMargin ) +\n ( cell.size.outerWidth - cell.size[ nextMargin ] );\n\n if ( canCellFit.call( this, i, slideWidth ) ) {\n slide.addCell( cell );\n } else {\n // doesn't fit, new slide\n slide.updateTarget();\n\n slide = new Slide( this );\n this.slides.push( slide );\n slide.addCell( cell );\n }\n }, this );\n // last slide\n slide.updateTarget();\n // update .selectedSlide\n this.updateSelectedSlide();\n};\n\nproto._getCanCellFit = function() {\n var groupCells = this.options.groupCells;\n if ( !groupCells ) {\n return function() {\n return false;\n };\n } else if ( typeof groupCells == 'number' ) {\n // group by number. 3 -> [0,1,2], [3,4,5], ...\n var number = parseInt( groupCells, 10 );\n return function( i ) {\n return ( i % number ) !== 0;\n };\n }\n // default, group by width of slide\n // parse '75%\n var percentMatch = typeof groupCells == 'string' &&\n groupCells.match( /^(\\d+)%$/ );\n var percent = percentMatch ? parseInt( percentMatch[1], 10 ) / 100 : 1;\n return function( i, slideWidth ) {\n /* eslint-disable-next-line no-invalid-this */\n return slideWidth <= ( this.size.innerWidth + 1 ) * percent;\n };\n};\n\n// alias _init for jQuery plugin .flickity()\nproto._init =\nproto.reposition = function() {\n this.positionCells();\n this.positionSliderAtSelected();\n};\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n this.setCellAlign();\n this.cursorPosition = this.size.innerWidth * this.cellAlign;\n};\n\nvar cellAlignShorthands = {\n // cell align, then based on origin side\n center: {\n left: 0.5,\n right: 0.5,\n },\n left: {\n left: 0,\n right: 1,\n },\n right: {\n right: 0,\n left: 1,\n },\n};\n\nproto.setCellAlign = function() {\n var shorthand = cellAlignShorthands[ this.options.cellAlign ];\n this.cellAlign = shorthand ? shorthand[ this.originSide ] : this.options.cellAlign;\n};\n\nproto.setGallerySize = function() {\n if ( this.options.setGallerySize ) {\n var height = this.options.adaptiveHeight && this.selectedSlide ?\n this.selectedSlide.height : this.maxCellHeight;\n this.viewport.style.height = height + 'px';\n }\n};\n\nproto._getWrapShiftCells = function() {\n // only for wrap-around\n if ( !this.options.wrapAround ) {\n return;\n }\n // unshift previous cells\n this._unshiftCells( this.beforeShiftCells );\n this._unshiftCells( this.afterShiftCells );\n // get before cells\n // initial gap\n var gapX = this.cursorPosition;\n var cellIndex = this.cells.length - 1;\n this.beforeShiftCells = this._getGapCells( gapX, cellIndex, -1 );\n // get after cells\n // ending gap between last cell and end of gallery viewport\n gapX = this.size.innerWidth - this.cursorPosition;\n // start cloning at first cell, working forwards\n this.afterShiftCells = this._getGapCells( gapX, 0, 1 );\n};\n\nproto._getGapCells = function( gapX, cellIndex, increment ) {\n // keep adding cells until the cover the initial gap\n var cells = [];\n while ( gapX > 0 ) {\n var cell = this.cells[ cellIndex ];\n if ( !cell ) {\n break;\n }\n cells.push( cell );\n cellIndex += increment;\n gapX -= cell.size.outerWidth;\n }\n return cells;\n};\n\n// ----- contain ----- //\n\n// contain cell targets so no excess sliding\nproto._containSlides = function() {\n if ( !this.options.contain || this.options.wrapAround || !this.cells.length ) {\n return;\n }\n var isRightToLeft = this.options.rightToLeft;\n var beginMargin = isRightToLeft ? 'marginRight' : 'marginLeft';\n var endMargin = isRightToLeft ? 'marginLeft' : 'marginRight';\n var contentWidth = this.slideableWidth - this.getLastCell().size[ endMargin ];\n // content is less than gallery size\n var isContentSmaller = contentWidth < this.size.innerWidth;\n // bounds\n var beginBound = this.cursorPosition + this.cells[0].size[ beginMargin ];\n var endBound = contentWidth - this.size.innerWidth * ( 1 - this.cellAlign );\n // contain each cell target\n this.slides.forEach( function( slide ) {\n if ( isContentSmaller ) {\n // all cells fit inside gallery\n slide.target = contentWidth * this.cellAlign;\n } else {\n // contain to bounds\n slide.target = Math.max( slide.target, beginBound );\n slide.target = Math.min( slide.target, endBound );\n }\n }, this );\n};\n\n// ----- ----- //\n\n/**\n * emits events via eventEmitter and jQuery events\n * @param {String} type - name of event\n * @param {Event} event - original event\n * @param {Array} args - extra arguments\n */\nproto.dispatchEvent = function( type, event, args ) {\n var emitArgs = event ? [ event ].concat( args ) : args;\n this.emitEvent( type, emitArgs );\n\n if ( jQuery && this.$element ) {\n // default trigger with type if no event\n type += this.options.namespaceJQueryEvents ? '.flickity' : '';\n var $event = type;\n if ( event ) {\n // create jQuery event\n var jQEvent = new jQuery.Event( event );\n jQEvent.type = type;\n $event = jQEvent;\n }\n this.$element.trigger( $event, args );\n }\n};\n\n// -------------------------- select -------------------------- //\n\n/**\n * @param {Integer} index - index of the slide\n * @param {Boolean} isWrap - will wrap-around to last/first if at the end\n * @param {Boolean} isInstant - will immediately set position at selected cell\n */\nproto.select = function( index, isWrap, isInstant ) {\n if ( !this.isActive ) {\n return;\n }\n index = parseInt( index, 10 );\n this._wrapSelect( index );\n\n if ( this.options.wrapAround || isWrap ) {\n index = utils.modulo( index, this.slides.length );\n }\n // bail if invalid index\n if ( !this.slides[ index ] ) {\n return;\n }\n var prevIndex = this.selectedIndex;\n this.selectedIndex = index;\n this.updateSelectedSlide();\n if ( isInstant ) {\n this.positionSliderAtSelected();\n } else {\n this.startAnimation();\n }\n if ( this.options.adaptiveHeight ) {\n this.setGallerySize();\n }\n // events\n this.dispatchEvent( 'select', null, [ index ] );\n // change event if new index\n if ( index != prevIndex ) {\n this.dispatchEvent( 'change', null, [ index ] );\n }\n // old v1 event name, remove in v3\n this.dispatchEvent('cellSelect');\n};\n\n// wraps position for wrapAround, to move to closest slide. #113\nproto._wrapSelect = function( index ) {\n var len = this.slides.length;\n var isWrapping = this.options.wrapAround && len > 1;\n if ( !isWrapping ) {\n return index;\n }\n var wrapIndex = utils.modulo( index, len );\n // go to shortest\n var delta = Math.abs( wrapIndex - this.selectedIndex );\n var backWrapDelta = Math.abs( ( wrapIndex + len ) - this.selectedIndex );\n var forewardWrapDelta = Math.abs( ( wrapIndex - len ) - this.selectedIndex );\n if ( !this.isDragSelect && backWrapDelta < delta ) {\n index += len;\n } else if ( !this.isDragSelect && forewardWrapDelta < delta ) {\n index -= len;\n }\n // wrap position so slider is within normal area\n if ( index < 0 ) {\n this.x -= this.slideableWidth;\n } else if ( index >= len ) {\n this.x += this.slideableWidth;\n }\n};\n\nproto.previous = function( isWrap, isInstant ) {\n this.select( this.selectedIndex - 1, isWrap, isInstant );\n};\n\nproto.next = function( isWrap, isInstant ) {\n this.select( this.selectedIndex + 1, isWrap, isInstant );\n};\n\nproto.updateSelectedSlide = function() {\n var slide = this.slides[ this.selectedIndex ];\n // selectedIndex could be outside of slides, if triggered before resize()\n if ( !slide ) {\n return;\n }\n // unselect previous selected slide\n this.unselectSelectedSlide();\n // update new selected slide\n this.selectedSlide = slide;\n slide.select();\n this.selectedCells = slide.cells;\n this.selectedElements = slide.getCellElements();\n // HACK: selectedCell & selectedElement is first cell in slide, backwards compatibility\n // Remove in v3?\n this.selectedCell = slide.cells[0];\n this.selectedElement = this.selectedElements[0];\n};\n\nproto.unselectSelectedSlide = function() {\n if ( this.selectedSlide ) {\n this.selectedSlide.unselect();\n }\n};\n\nproto.selectInitialIndex = function() {\n var initialIndex = this.options.initialIndex;\n // already activated, select previous selectedIndex\n if ( this.isInitActivated ) {\n this.select( this.selectedIndex, false, true );\n return;\n }\n // select with selector string\n if ( initialIndex && typeof initialIndex == 'string' ) {\n var cell = this.queryCell( initialIndex );\n if ( cell ) {\n this.selectCell( initialIndex, false, true );\n return;\n }\n }\n\n var index = 0;\n // select with number\n if ( initialIndex && this.slides[ initialIndex ] ) {\n index = initialIndex;\n }\n // select instantly\n this.select( index, false, true );\n};\n\n/**\n * select slide from number or cell element\n * @param {[Element, Number]} value - zero-based index or element to select\n * @param {Boolean} isWrap - enables wrapping around for extra index\n * @param {Boolean} isInstant - disables slide animation\n */\nproto.selectCell = function( value, isWrap, isInstant ) {\n // get cell\n var cell = this.queryCell( value );\n if ( !cell ) {\n return;\n }\n\n var index = this.getCellSlideIndex( cell );\n this.select( index, isWrap, isInstant );\n};\n\nproto.getCellSlideIndex = function( cell ) {\n // get index of slides that has cell\n for ( var i = 0; i < this.slides.length; i++ ) {\n var slide = this.slides[i];\n var index = slide.cells.indexOf( cell );\n if ( index != -1 ) {\n return i;\n }\n }\n};\n\n// -------------------------- get cells -------------------------- //\n\n/**\n * get Flickity.Cell, given an Element\n * @param {Element} elem - matching cell element\n * @returns {Flickity.Cell} cell - matching cell\n */\nproto.getCell = function( elem ) {\n // loop through cells to get the one that matches\n for ( var i = 0; i < this.cells.length; i++ ) {\n var cell = this.cells[i];\n if ( cell.element == elem ) {\n return cell;\n }\n }\n};\n\n/**\n * get collection of Flickity.Cells, given Elements\n * @param {[Element, Array, NodeList]} elems - multiple elements\n * @returns {Array} cells - Flickity.Cells\n */\nproto.getCells = function( elems ) {\n elems = utils.makeArray( elems );\n var cells = [];\n elems.forEach( function( elem ) {\n var cell = this.getCell( elem );\n if ( cell ) {\n cells.push( cell );\n }\n }, this );\n return cells;\n};\n\n/**\n * get cell elements\n * @returns {Array} cellElems\n */\nproto.getCellElements = function() {\n return this.cells.map( function( cell ) {\n return cell.element;\n } );\n};\n\n/**\n * get parent cell from an element\n * @param {Element} elem - child element\n * @returns {Flickit.Cell} cell - parent cell\n */\nproto.getParentCell = function( elem ) {\n // first check if elem is cell\n var cell = this.getCell( elem );\n if ( cell ) {\n return cell;\n }\n // try to get parent cell elem\n elem = utils.getParent( elem, '.flickity-slider > *' );\n return this.getCell( elem );\n};\n\n/**\n * get cells adjacent to a slide\n * @param {Integer} adjCount - number of adjacent slides\n * @param {Integer} index - index of slide to start\n * @returns {Array} cells - array of Flickity.Cells\n */\nproto.getAdjacentCellElements = function( adjCount, index ) {\n if ( !adjCount ) {\n return this.selectedSlide.getCellElements();\n }\n index = index === undefined ? this.selectedIndex : index;\n\n var len = this.slides.length;\n if ( 1 + ( adjCount * 2 ) >= len ) {\n return this.getCellElements();\n }\n\n var cellElems = [];\n for ( var i = index - adjCount; i <= index + adjCount; i++ ) {\n var slideIndex = this.options.wrapAround ? utils.modulo( i, len ) : i;\n var slide = this.slides[ slideIndex ];\n if ( slide ) {\n cellElems = cellElems.concat( slide.getCellElements() );\n }\n }\n return cellElems;\n};\n\n/**\n * select slide from number or cell element\n * @param {[Element, String, Number]} selector - element, selector string, or index\n * @returns {Flickity.Cell} - matching cell\n */\nproto.queryCell = function( selector ) {\n if ( typeof selector == 'number' ) {\n // use number as index\n return this.cells[ selector ];\n }\n if ( typeof selector == 'string' ) {\n // do not select invalid selectors from hash: #123, #/. #791\n if ( selector.match( /^[#.]?[\\d/]/ ) ) {\n return;\n }\n // use string as selector, get element\n selector = this.element.querySelector( selector );\n }\n // get cell from element\n return this.getCell( selector );\n};\n\n// -------------------------- events -------------------------- //\n\nproto.uiChange = function() {\n this.emitEvent('uiChange');\n};\n\n// keep focus on element when child UI elements are clicked\nproto.childUIPointerDown = function( event ) {\n // HACK iOS does not allow touch events to bubble up?!\n if ( event.type != 'touchstart' ) {\n event.preventDefault();\n }\n this.focus();\n};\n\n// ----- resize ----- //\n\nproto.onresize = function() {\n this.watchCSS();\n this.resize();\n};\n\nutils.debounceMethod( Flickity, 'onresize', 150 );\n\nproto.resize = function() {\n // #1177 disable resize behavior when animating or dragging for iOS 15\n if ( !this.isActive || this.isAnimating || this.isDragging ) {\n return;\n }\n this.getSize();\n // wrap values\n if ( this.options.wrapAround ) {\n this.x = utils.modulo( this.x, this.slideableWidth );\n }\n this.positionCells();\n this._getWrapShiftCells();\n this.setGallerySize();\n this.emitEvent('resize');\n // update selected index for group slides, instant\n // TODO: position can be lost between groups of various numbers\n var selectedElement = this.selectedElements && this.selectedElements[0];\n this.selectCell( selectedElement, false, true );\n};\n\n// watches the :after property, activates/deactivates\nproto.watchCSS = function() {\n var watchOption = this.options.watchCSS;\n if ( !watchOption ) {\n return;\n }\n\n var afterContent = getComputedStyle( this.element, ':after' ).content;\n // activate if :after { content: 'flickity' }\n if ( afterContent.indexOf('flickity') != -1 ) {\n this.activate();\n } else {\n this.deactivate();\n }\n};\n\n// ----- keydown ----- //\n\n// go previous/next if left/right keys pressed\nproto.onkeydown = function( event ) {\n // only work if element is in focus\n var isNotFocused = document.activeElement && document.activeElement != this.element;\n if ( !this.options.accessibility || isNotFocused ) {\n return;\n }\n\n var handler = Flickity.keyboardHandlers[ event.keyCode ];\n if ( handler ) {\n handler.call( this );\n }\n};\n\nFlickity.keyboardHandlers = {\n // left arrow\n 37: function() {\n var leftMethod = this.options.rightToLeft ? 'next' : 'previous';\n this.uiChange();\n this[ leftMethod ]();\n },\n // right arrow\n 39: function() {\n var rightMethod = this.options.rightToLeft ? 'previous' : 'next';\n this.uiChange();\n this[ rightMethod ]();\n },\n};\n\n// ----- focus ----- //\n\nproto.focus = function() {\n // TODO remove scrollTo once focus options gets more support\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus ...\n // #Browser_compatibility\n var prevScrollY = window.pageYOffset;\n this.element.focus({ preventScroll: true });\n // hack to fix scroll jump after focus, #76\n if ( window.pageYOffset != prevScrollY ) {\n window.scrollTo( window.pageXOffset, prevScrollY );\n }\n};\n\n// -------------------------- destroy -------------------------- //\n\n// deactivate all Flickity functionality, but keep stuff available\nproto.deactivate = function() {\n if ( !this.isActive ) {\n return;\n }\n this.element.classList.remove('flickity-enabled');\n this.element.classList.remove('flickity-rtl');\n this.unselectSelectedSlide();\n // destroy cells\n this.cells.forEach( function( cell ) {\n cell.destroy();\n } );\n this.element.removeChild( this.viewport );\n // move child elements back into element\n moveElements( this.slider.children, this.element );\n if ( this.options.accessibility ) {\n this.element.removeAttribute('tabIndex');\n this.element.removeEventListener( 'keydown', this );\n }\n // set flags\n this.isActive = false;\n this.emitEvent('deactivate');\n};\n\nproto.destroy = function() {\n this.deactivate();\n window.removeEventListener( 'resize', this );\n this.allOff();\n this.emitEvent('destroy');\n if ( jQuery && this.$element ) {\n jQuery.removeData( this.element, 'flickity' );\n }\n delete this.element.flickityGUID;\n delete instances[ this.guid ];\n};\n\n// -------------------------- prototype -------------------------- //\n\nutils.extend( proto, animatePrototype );\n\n// -------------------------- extras -------------------------- //\n\n/**\n * get Flickity instance from element\n * @param {[Element, String]} elem - element or selector string\n * @returns {Flickity} - Flickity instance\n */\nFlickity.data = function( elem ) {\n elem = utils.getQueryElement( elem );\n var id = elem && elem.flickityGUID;\n return id && instances[ id ];\n};\n\nutils.htmlInit( Flickity, 'flickity' );\n\nif ( jQuery && jQuery.bridget ) {\n jQuery.bridget( 'flickity', Flickity );\n}\n\n// set internal jQuery, for Webpack + jQuery v3, #478\nFlickity.setJQuery = function( jq ) {\n jQuery = jq;\n};\n\nFlickity.Cell = Cell;\nFlickity.Slide = Slide;\n\nreturn Flickity;\n\n} ) );\n","/*!\n * jQuery JavaScript Library v1.12.4\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2016-05-20T17:17Z\n */\n\n(function( global, factory ) {\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n}(typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Support: Firefox 18+\n// Can't be in strict mode, several libs including ASP.NET trace\n// the stack via arguments.caller.callee and Firefox dies if\n// you try to trace through \"use strict\" call chains. (#13335)\n//\"use strict\";\nvar deletedIds = [];\n\nvar document = window.document;\n\nvar slice = deletedIds.slice;\n\nvar concat = deletedIds.concat;\n\nvar push = deletedIds.push;\n\nvar indexOf = deletedIds.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar support = {};\n\n\n\nvar\n\tversion = \"1.12.4\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android<4.1, IE<9\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n\t// Matches dashed string for camelizing\n\trmsPrefix = /^-ms-/,\n\trdashAlpha = /-([\\da-z])/gi,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// Start with an empty selector\n\tselector: \"\",\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\t\treturn num != null ?\n\n\t\t\t// Return just the one element from the set\n\t\t\t( num < 0 ? this[ num + this.length ] : this[ num ] ) :\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tslice.call( this );\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\t\tret.context = this.context;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: deletedIds.sort,\n\tsplice: deletedIds.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar src, copyIsArray, copy, name, options, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = jQuery.isArray( copy ) ) ) ) {\n\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && jQuery.isArray( src ) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject( src ) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\t// See test/unit/core.js for details concerning isFunction.\n\t// Since version 1.3, DOM methods and functions like alert\n\t// aren't supported. They return false on IE (#2968).\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type( obj ) === \"function\";\n\t},\n\n\tisArray: Array.isArray || function( obj ) {\n\t\treturn jQuery.type( obj ) === \"array\";\n\t},\n\n\tisWindow: function( obj ) {\n\t\t/* jshint eqeqeq: false */\n\t\treturn obj != null && obj == obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\n\t\t// parseFloat NaNs numeric-cast false positives (null|true|false|\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t// adding 1 corrects loss of precision from parseFloat (#15100)\n\t\tvar realStringObj = obj && obj.toString();\n\t\treturn !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\tvar key;\n\n\t\t// Must be an Object.\n\t\t// Because of IE, we also have to check the presence of the constructor property.\n\t\t// Make sure that DOM nodes and window objects don't pass through, as well\n\t\tif ( !obj || jQuery.type( obj ) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\n\t\t\t// Not own constructor property must be Object\n\t\t\tif ( obj.constructor &&\n\t\t\t\t!hasOwn.call( obj, \"constructor\" ) &&\n\t\t\t\t!hasOwn.call( obj.constructor.prototype, \"isPrototypeOf\" ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} catch ( e ) {\n\n\t\t\t// IE8,9 Will throw exceptions on certain host objects #9897\n\t\t\treturn false;\n\t\t}\n\n\t\t// Support: IE<9\n\t\t// Handle iteration over inherited properties before own properties.\n\t\tif ( !support.ownFirst ) {\n\t\t\tfor ( key in obj ) {\n\t\t\t\treturn hasOwn.call( obj, key );\n\t\t\t}\n\t\t}\n\n\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t// if last one is own, then all properties are own.\n\t\tfor ( key in obj ) {}\n\n\t\treturn key === undefined || hasOwn.call( obj, key );\n\t},\n\n\ttype: function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn obj + \"\";\n\t\t}\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\t\ttypeof obj;\n\t},\n\n\t// Workarounds based on findings by Jim Driscoll\n\t// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context\n\tglobalEval: function( data ) {\n\t\tif ( data && jQuery.trim( data ) ) {\n\n\t\t\t// We use execScript on Internet Explorer\n\t\t\t// We use an anonymous function so that context is window\n\t\t\t// rather than jQuery in Firefox\n\t\t\t( window.execScript || function( data ) {\n\t\t\t\twindow[ \"eval\" ].call( window, data ); // jscs:ignore requireDotNotation\n\t\t\t} )( data );\n\t\t}\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\tnodeName: function( elem, name ) {\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android<4.1, IE<9\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\tvar len;\n\n\t\tif ( arr ) {\n\t\t\tif ( indexOf ) {\n\t\t\t\treturn indexOf.call( arr, elem, i );\n\t\t\t}\n\n\t\t\tlen = arr.length;\n\t\t\ti = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;\n\n\t\t\tfor ( ; i < len; i++ ) {\n\n\t\t\t\t// Skip accessing in sparse arrays\n\t\t\t\tif ( i in arr && arr[ i ] === elem ) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn -1;\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\twhile ( j < len ) {\n\t\t\tfirst[ i++ ] = second[ j++ ];\n\t\t}\n\n\t\t// Support: IE<9\n\t\t// Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists)\n\t\tif ( len !== len ) {\n\t\t\twhile ( second[ j ] !== undefined ) {\n\t\t\t\tfirst[ i++ ] = second[ j++ ];\n\t\t\t}\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tvar args, proxy, tmp;\n\n\t\tif ( typeof context === \"string\" ) {\n\t\t\ttmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\tnow: function() {\n\t\treturn +( new Date() );\n\t},\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\n// JSHint would error on this code due to the Symbol not being defined in ES5.\n// Defining this global in .jshintrc would create a danger of using the global\n// unguarded in another place, it seems safer to just disable JSHint for these\n// three lines.\n/* jshint ignore: start */\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = deletedIds[ Symbol.iterator ];\n}\n/* jshint ignore: end */\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: iOS 8.2 (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = jQuery.type( obj );\n\n\tif ( type === \"function\" || jQuery.isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.2.1\n * http://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2015-10-17\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// General-purpose constants\n\tMAX_NEGATIVE = 1 << 31,\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// http://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\trescape = /'|\\\\/g,\n\n\t// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t};\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, nidselect, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!compilerCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\n\t\t\t\tif ( nodeType !== 1 ) {\n\t\t\t\t\tnewContext = context;\n\t\t\t\t\tnewSelector = selector;\n\n\t\t\t\t// qSA looks outside Element context, which is not what we want\n\t\t\t\t// Thanks to Andrew Dupont for this workaround technique\n\t\t\t\t// Support: IE <=8\n\t\t\t\t// Exclude object elements\n\t\t\t\t} else if ( context.nodeName.toLowerCase() !== \"object\" ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rescape, \"\\\\$&\" );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\tnidselect = ridentifier.test( nid ) ? \"#\" + nid : \"[id='\" + nid + \"']\";\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = nidselect + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\tif ( newSelector ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\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 */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created div and expects a boolean result\n */\nfunction assert( fn ) {\n\tvar div = document.createElement(\"div\");\n\n\ttry {\n\t\treturn !!fn( div );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( div.parentNode ) {\n\t\t\tdiv.parentNode.removeChild( div );\n\t\t}\n\t\t// release memory in IE\n\t\tdiv = null;\n\t}\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 */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\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 */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\t( ~b.sourceIndex || MAX_NEGATIVE ) -\n\t\t\t( ~a.sourceIndex || MAX_NEGATIVE );\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\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 */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\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 */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\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 */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, parent,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( (parent = document.defaultView) && parent.top !== parent ) {\n\t\t// Support: IE 11\n\t\tif ( parent.addEventListener ) {\n\t\t\tparent.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( parent.attachEvent ) {\n\t\t\tparent.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( div ) {\n\t\tdiv.className = \"i\";\n\t\treturn !div.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( div ) {\n\t\tdiv.appendChild( document.createComment(\"\") );\n\t\treturn !div.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( div ) {\n\t\tdocElem.appendChild( div ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID find and filter\n\tif ( support.getById ) {\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar m = context.getElementById( id );\n\t\t\t\treturn m ? [ m ] : [];\n\t\t\t}\n\t\t};\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t} else {\n\t\t// Support: IE6/7\n\t\t// getElementById is not reliable as a find shortcut\n\t\tdelete Expr.find[\"ID\"];\n\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See http://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( div ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// http://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( div ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( div.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !div.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !div.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibing-combinator selector` fails\n\t\t\tif ( !div.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( div ) {\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tdiv.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( div.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":enabled\").length ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tdiv.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( div ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( div, \"div\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( div, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!compilerCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": function( elem ) {\n\t\t\treturn elem.disabled === false;\n\t\t},\n\n\t\t\"disabled\": function( elem ) {\n\t\t\treturn elem.disabled === true;\n\t\t},\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tcheckNonElements = base && dir === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( (oldCache = uniqueCache[ dir ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ dir ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\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 */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tsupport.getById && context.nodeType === 9 && documentIsHTML &&\n\t\t\t\tExpr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( div1 ) {\n\t// Should return 1, but returns 4 (following)\n\treturn div1.compareDocumentPosition( document.createElement(\"div\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( div ) {\n\tdiv.innerHTML = \"<a href='#'></a>\";\n\treturn div.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( div ) {\n\tdiv.innerHTML = \"<input/>\";\n\tdiv.firstChild.setAttribute( \"value\", \"\" );\n\treturn div.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( div ) {\n\treturn div.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\nvar rsingleTag = ( /^<([\\w-]+)\\s*\\/?>(?:<\\/\\1>|)$/ );\n\n\n\nvar risSimple = /^.[^:#\\[\\.,]*$/;\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\t/* jshint -W018 */\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\n\t}\n\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\n\t}\n\n\tif ( typeof qualifier === \"string\" ) {\n\t\tif ( risSimple.test( qualifier ) ) {\n\t\t\treturn jQuery.filter( qualifier, elements, not );\n\t\t}\n\n\t\tqualifier = jQuery.filter( qualifier, elements );\n\t}\n\n\treturn jQuery.grep( elements, function( elem ) {\n\t\treturn ( jQuery.inArray( elem, qualifier ) > -1 ) !== not;\n\t} );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\treturn elems.length === 1 && elem.nodeType === 1 ?\n\t\tjQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :\n\t\tjQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\t\treturn elem.nodeType === 1;\n\t\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i,\n\t\t\tret = [],\n\t\t\tself = this,\n\t\t\tlen = self.length;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\t// Needed because $( selector, context ) becomes $( context ).find( selector )\n\t\tret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );\n\t\tret.selector = this.selector ? this.selector + \" \" + selector : selector;\n\t\treturn ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// init accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector.charAt( 0 ) === \"<\" &&\n\t\t\t\tselector.charAt( selector.length - 1 ) === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\n\t\t\t\t\t\t// Handle the case where IE and Opera return items\n\t\t\t\t\t\t// by name instead of ID\n\t\t\t\t\t\tif ( elem.id !== match[ 2 ] ) {\n\t\t\t\t\t\t\treturn rootjQuery.find( selector );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Otherwise, we inject the element directly into the jQuery object\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.context = document;\n\t\t\t\t\tthis.selector = selector;\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis.context = this[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn typeof root.ready !== \"undefined\" ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\tif ( selector.selector !== undefined ) {\n\t\t\tthis.selector = selector.selector;\n\t\t\tthis.context = selector.context;\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar i,\n\t\t\ttargets = jQuery( target, this ),\n\t\t\tlen = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\tpos = rneedsContext.test( selectors ) || typeof selectors !== \"string\" ?\n\t\t\t\tjQuery( selectors, context || this.context ) :\n\t\t\t\t0;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t// Always skip document fragments\n\t\t\t\tif ( cur.nodeType < 11 && ( pos ?\n\t\t\t\t\tpos.index( cur ) > -1 :\n\n\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within\n\t// the matched set of elements\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn jQuery.inArray( this[ 0 ], jQuery( elem ) );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn jQuery.inArray(\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem, this );\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\tdo {\n\t\tcur = cur[ dir ];\n\t} while ( cur && cur.nodeType !== 1 );\n\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\treturn jQuery.nodeName( elem, \"iframe\" ) ?\n\t\t\telem.contentDocument || elem.contentWindow.document :\n\t\t\tjQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar ret = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tret = jQuery.filter( selector, ret );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tret = jQuery.uniqueSort( ret );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tret = ret.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnotwhite = ( /\\S+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\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 */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( jQuery.isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && jQuery.type( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = true;\n\t\t\t\tif ( !memory ) {\n\t\t\t\t\tself.disable();\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, listener list, final state\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ), \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ), \"rejected\" ],\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ) ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tthen: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\t\t\t\t\tvar fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];\n\n\t\t\t\t\t\t\t// deferred[ done | fail | progress ] for forwarding actions to newDefer\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis === promise ? newDefer.promise() : this,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Keep pipe for back-compat\n\t\tpromise.pipe = promise.then;\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 3 ];\n\n\t\t\t// promise[ done | fail | progress ] = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add( function() {\n\n\t\t\t\t\t// state = [ resolved | rejected ]\n\t\t\t\t\tstate = stateString;\n\n\t\t\t\t// [ reject_list | resolve_list ].disable; progress_list.lock\n\t\t\t\t}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );\n\t\t\t}\n\n\t\t\t// deferred[ resolve | reject | notify ]\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? promise : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( subordinate /* , ..., subordinateN */ ) {\n\t\tvar i = 0,\n\t\t\tresolveValues = slice.call( arguments ),\n\t\t\tlength = resolveValues.length,\n\n\t\t\t// the count of uncompleted subordinates\n\t\t\tremaining = length !== 1 ||\n\t\t\t\t( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,\n\n\t\t\t// the master Deferred.\n\t\t\t// If resolveValues consist of only a single Deferred, just use that.\n\t\t\tdeferred = remaining === 1 ? subordinate : jQuery.Deferred(),\n\n\t\t\t// Update function for both resolve and progress values\n\t\t\tupdateFunc = function( i, contexts, values ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tcontexts[ i ] = this;\n\t\t\t\t\tvalues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( values === progressValues ) {\n\t\t\t\t\t\tdeferred.notifyWith( contexts, values );\n\n\t\t\t\t\t} else if ( !( --remaining ) ) {\n\t\t\t\t\t\tdeferred.resolveWith( contexts, values );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\n\t\t\tprogressValues, progressContexts, resolveContexts;\n\n\t\t// add listeners to Deferred subordinates; treat others as resolved\n\t\tif ( length > 1 ) {\n\t\t\tprogressValues = new Array( length );\n\t\t\tprogressContexts = new Array( length );\n\t\t\tresolveContexts = new Array( length );\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {\n\t\t\t\t\tresolveValues[ i ].promise()\n\t\t\t\t\t\t.progress( updateFunc( i, progressContexts, progressValues ) )\n\t\t\t\t\t\t.done( updateFunc( i, resolveContexts, resolveValues ) )\n\t\t\t\t\t\t.fail( deferred.reject );\n\t\t\t\t} else {\n\t\t\t\t\t--remaining;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// if we're not waiting on anything, resolve the master\n\t\tif ( !remaining ) {\n\t\t\tdeferred.resolveWith( resolveContexts, resolveValues );\n\t\t}\n\n\t\treturn deferred.promise();\n\t}\n} );\n\n\n// The deferred used on DOM ready\nvar readyList;\n\njQuery.fn.ready = function( fn ) {\n\n\t// Add the callback\n\tjQuery.ready.promise().done( fn );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Hold (or release) the ready event\n\tholdReady: function( hold ) {\n\t\tif ( hold ) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready( true );\n\t\t}\n\t},\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\n\t\t// Trigger any bound ready events\n\t\tif ( jQuery.fn.triggerHandler ) {\n\t\t\tjQuery( document ).triggerHandler( \"ready\" );\n\t\t\tjQuery( document ).off( \"ready\" );\n\t\t}\n\t}\n} );\n\n/**\n * Clean-up method for dom ready events\n */\nfunction detach() {\n\tif ( document.addEventListener ) {\n\t\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\t\twindow.removeEventListener( \"load\", completed );\n\n\t} else {\n\t\tdocument.detachEvent( \"onreadystatechange\", completed );\n\t\twindow.detachEvent( \"onload\", completed );\n\t}\n}\n\n/**\n * The ready event handler and self cleanup method\n */\nfunction completed() {\n\n\t// readyState === \"complete\" is good enough for us to call the dom ready in oldIE\n\tif ( document.addEventListener ||\n\t\twindow.event.type === \"load\" ||\n\t\tdocument.readyState === \"complete\" ) {\n\n\t\tdetach();\n\t\tjQuery.ready();\n\t}\n}\n\njQuery.ready.promise = function( obj ) {\n\tif ( !readyList ) {\n\n\t\treadyList = jQuery.Deferred();\n\n\t\t// Catch cases where $(document).ready() is called\n\t\t// after the browser event has already occurred.\n\t\t// Support: IE6-10\n\t\t// Older IE sometimes signals \"interactive\" too soon\n\t\tif ( document.readyState === \"complete\" ||\n\t\t\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\t\twindow.setTimeout( jQuery.ready );\n\n\t\t// Standards-based browsers support DOMContentLoaded\n\t\t} else if ( document.addEventListener ) {\n\n\t\t\t// Use the handy event callback\n\t\t\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.addEventListener( \"load\", completed );\n\n\t\t// If IE event model is used\n\t\t} else {\n\n\t\t\t// Ensure firing before onload, maybe late but safe also for iframes\n\t\t\tdocument.attachEvent( \"onreadystatechange\", completed );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.attachEvent( \"onload\", completed );\n\n\t\t\t// If IE and not a frame\n\t\t\t// continually check to see if the document is ready\n\t\t\tvar top = false;\n\n\t\t\ttry {\n\t\t\t\ttop = window.frameElement == null && document.documentElement;\n\t\t\t} catch ( e ) {}\n\n\t\t\tif ( top && top.doScroll ) {\n\t\t\t\t( function doScrollCheck() {\n\t\t\t\t\tif ( !jQuery.isReady ) {\n\n\t\t\t\t\t\ttry {\n\n\t\t\t\t\t\t\t// Use the trick by Diego Perini\n\t\t\t\t\t\t\t// http://javascript.nwbox.com/IEContentLoaded/\n\t\t\t\t\t\t\ttop.doScroll( \"left\" );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn window.setTimeout( doScrollCheck, 50 );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// detach all dom ready events\n\t\t\t\t\t\tdetach();\n\n\t\t\t\t\t\t// and execute any waiting functions\n\t\t\t\t\t\tjQuery.ready();\n\t\t\t\t\t}\n\t\t\t\t} )();\n\t\t\t}\n\t\t}\n\t}\n\treturn readyList.promise( obj );\n};\n\n// Kick off the DOM ready check even if the user does not\njQuery.ready.promise();\n\n\n\n\n// Support: IE<9\n// Iteration over object's inherited properties before its own\nvar i;\nfor ( i in jQuery( support ) ) {\n\tbreak;\n}\nsupport.ownFirst = i === \"0\";\n\n// Note: most support tests are defined in their respective modules.\n// false until the test is run\nsupport.inlineBlockNeedsLayout = false;\n\n// Execute ASAP in case we need to set body.style.zoom\njQuery( function() {\n\n\t// Minified: var a,b,c,d\n\tvar val, div, body, container;\n\n\tbody = document.getElementsByTagName( \"body\" )[ 0 ];\n\tif ( !body || !body.style ) {\n\n\t\t// Return for frameset docs that don't have a body\n\t\treturn;\n\t}\n\n\t// Setup\n\tdiv = document.createElement( \"div\" );\n\tcontainer = document.createElement( \"div\" );\n\tcontainer.style.cssText = \"position:absolute;border:0;width:0;height:0;top:0;left:-9999px\";\n\tbody.appendChild( container ).appendChild( div );\n\n\tif ( typeof div.style.zoom !== \"undefined\" ) {\n\n\t\t// Support: IE<8\n\t\t// Check if natively block-level elements act like inline-block\n\t\t// elements when setting their display to 'inline' and giving\n\t\t// them layout\n\t\tdiv.style.cssText = \"display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1\";\n\n\t\tsupport.inlineBlockNeedsLayout = val = div.offsetWidth === 3;\n\t\tif ( val ) {\n\n\t\t\t// Prevent IE 6 from affecting layout for positioned elements #11048\n\t\t\t// Prevent IE from shrinking the body in IE 7 mode #12869\n\t\t\t// Support: IE<8\n\t\t\tbody.style.zoom = 1;\n\t\t}\n\t}\n\n\tbody.removeChild( container );\n} );\n\n\n( function() {\n\tvar div = document.createElement( \"div\" );\n\n\t// Support: IE<9\n\tsupport.deleteExpando = true;\n\ttry {\n\t\tdelete div.test;\n\t} catch ( e ) {\n\t\tsupport.deleteExpando = false;\n\t}\n\n\t// Null elements to avoid leaks in IE.\n\tdiv = null;\n} )();\nvar acceptData = function( elem ) {\n\tvar noData = jQuery.noData[ ( elem.nodeName + \" \" ).toLowerCase() ],\n\t\tnodeType = +elem.nodeType || 1;\n\n\t// Do not set data on non-element DOM nodes because it will not be cleared (#8335).\n\treturn nodeType !== 1 && nodeType !== 9 ?\n\t\tfalse :\n\n\t\t// Nodes accept data unless otherwise specified; rejection can be conditional\n\t\t!noData || noData !== true && elem.getAttribute( \"classid\" ) === noData;\n};\n\n\n\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /([A-Z])/g;\n\nfunction dataAttr( elem, key, data ) {\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\n\t\tvar name = \"data-\" + key.replace( rmultiDash, \"-$1\" ).toLowerCase();\n\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = data === \"true\" ? true :\n\t\t\t\t\tdata === \"false\" ? false :\n\t\t\t\t\tdata === \"null\" ? null :\n\n\t\t\t\t\t// Only convert to a number if it doesn't change the string\n\t\t\t\t\t+data + \"\" === data ? +data :\n\t\t\t\t\trbrace.test( data ) ? jQuery.parseJSON( data ) :\n\t\t\t\t\tdata;\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tjQuery.data( elem, key, data );\n\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\n\treturn data;\n}\n\n// checks a cache object for emptiness\nfunction isEmptyDataObject( obj ) {\n\tvar name;\n\tfor ( name in obj ) {\n\n\t\t// if the public data object is empty, the private is still empty\n\t\tif ( name === \"data\" && jQuery.isEmptyObject( obj[ name ] ) ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( name !== \"toJSON\" ) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\nfunction internalData( elem, name, data, pvt /* Internal Use Only */ ) {\n\tif ( !acceptData( elem ) ) {\n\t\treturn;\n\t}\n\n\tvar ret, thisCache,\n\t\tinternalKey = jQuery.expando,\n\n\t\t// We have to handle DOM nodes and JS objects differently because IE6-7\n\t\t// can't GC object references properly across the DOM-JS boundary\n\t\tisNode = elem.nodeType,\n\n\t\t// Only DOM nodes need the global jQuery cache; JS object data is\n\t\t// attached directly to the object so GC can occur automatically\n\t\tcache = isNode ? jQuery.cache : elem,\n\n\t\t// Only defining an ID for JS objects if its cache already exists allows\n\t\t// the code to shortcut on the same path as a DOM node with no cache\n\t\tid = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;\n\n\t// Avoid doing any more work than we need to when trying to get data on an\n\t// object that has no data at all\n\tif ( ( !id || !cache[ id ] || ( !pvt && !cache[ id ].data ) ) &&\n\t\tdata === undefined && typeof name === \"string\" ) {\n\t\treturn;\n\t}\n\n\tif ( !id ) {\n\n\t\t// Only DOM nodes need a new unique ID for each element since their data\n\t\t// ends up in the global cache\n\t\tif ( isNode ) {\n\t\t\tid = elem[ internalKey ] = deletedIds.pop() || jQuery.guid++;\n\t\t} else {\n\t\t\tid = internalKey;\n\t\t}\n\t}\n\n\tif ( !cache[ id ] ) {\n\n\t\t// Avoid exposing jQuery metadata on plain JS objects when the object\n\t\t// is serialized using JSON.stringify\n\t\tcache[ id ] = isNode ? {} : { toJSON: jQuery.noop };\n\t}\n\n\t// An object can be passed to jQuery.data instead of a key/value pair; this gets\n\t// shallow copied over onto the existing cache\n\tif ( typeof name === \"object\" || typeof name === \"function\" ) {\n\t\tif ( pvt ) {\n\t\t\tcache[ id ] = jQuery.extend( cache[ id ], name );\n\t\t} else {\n\t\t\tcache[ id ].data = jQuery.extend( cache[ id ].data, name );\n\t\t}\n\t}\n\n\tthisCache = cache[ id ];\n\n\t// jQuery data() is stored in a separate object inside the object's internal data\n\t// cache in order to avoid key collisions between internal data and user-defined\n\t// data.\n\tif ( !pvt ) {\n\t\tif ( !thisCache.data ) {\n\t\t\tthisCache.data = {};\n\t\t}\n\n\t\tthisCache = thisCache.data;\n\t}\n\n\tif ( data !== undefined ) {\n\t\tthisCache[ jQuery.camelCase( name ) ] = data;\n\t}\n\n\t// Check for both converted-to-camel and non-converted data property names\n\t// If a data property was specified\n\tif ( typeof name === \"string\" ) {\n\n\t\t// First Try to find as-is property data\n\t\tret = thisCache[ name ];\n\n\t\t// Test for null|undefined property data\n\t\tif ( ret == null ) {\n\n\t\t\t// Try to find the camelCased property\n\t\t\tret = thisCache[ jQuery.camelCase( name ) ];\n\t\t}\n\t} else {\n\t\tret = thisCache;\n\t}\n\n\treturn ret;\n}\n\nfunction internalRemoveData( elem, name, pvt ) {\n\tif ( !acceptData( elem ) ) {\n\t\treturn;\n\t}\n\n\tvar thisCache, i,\n\t\tisNode = elem.nodeType,\n\n\t\t// See jQuery.data for more information\n\t\tcache = isNode ? jQuery.cache : elem,\n\t\tid = isNode ? elem[ jQuery.expando ] : jQuery.expando;\n\n\t// If there is already no cache entry for this object, there is no\n\t// purpose in continuing\n\tif ( !cache[ id ] ) {\n\t\treturn;\n\t}\n\n\tif ( name ) {\n\n\t\tthisCache = pvt ? cache[ id ] : cache[ id ].data;\n\n\t\tif ( thisCache ) {\n\n\t\t\t// Support array or space separated string names for data keys\n\t\t\tif ( !jQuery.isArray( name ) ) {\n\n\t\t\t\t// try the string as a key before any manipulation\n\t\t\t\tif ( name in thisCache ) {\n\t\t\t\t\tname = [ name ];\n\t\t\t\t} else {\n\n\t\t\t\t\t// split the camel cased version by spaces unless a key with the spaces exists\n\t\t\t\t\tname = jQuery.camelCase( name );\n\t\t\t\t\tif ( name in thisCache ) {\n\t\t\t\t\t\tname = [ name ];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tname = name.split( \" \" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// If \"name\" is an array of keys...\n\t\t\t\t// When data is initially created, via (\"key\", \"val\") signature,\n\t\t\t\t// keys will be converted to camelCase.\n\t\t\t\t// Since there is no way to tell _how_ a key was added, remove\n\t\t\t\t// both plain key and camelCase key. #12786\n\t\t\t\t// This will only penalize the array argument path.\n\t\t\t\tname = name.concat( jQuery.map( name, jQuery.camelCase ) );\n\t\t\t}\n\n\t\t\ti = name.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete thisCache[ name[ i ] ];\n\t\t\t}\n\n\t\t\t// If there is no data left in the cache, we want to continue\n\t\t\t// and let the cache object itself get destroyed\n\t\t\tif ( pvt ? !isEmptyDataObject( thisCache ) : !jQuery.isEmptyObject( thisCache ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n\t// See jQuery.data for more information\n\tif ( !pvt ) {\n\t\tdelete cache[ id ].data;\n\n\t\t// Don't destroy the parent cache unless the internal data object\n\t\t// had been the only thing left in it\n\t\tif ( !isEmptyDataObject( cache[ id ] ) ) {\n\t\t\treturn;\n\t\t}\n\t}\n\n\t// Destroy the cache\n\tif ( isNode ) {\n\t\tjQuery.cleanData( [ elem ], true );\n\n\t// Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)\n\t/* jshint eqeqeq: false */\n\t} else if ( support.deleteExpando || cache != cache.window ) {\n\t\t/* jshint eqeqeq: true */\n\t\tdelete cache[ id ];\n\n\t// When all else fails, undefined\n\t} else {\n\t\tcache[ id ] = undefined;\n\t}\n}\n\njQuery.extend( {\n\tcache: {},\n\n\t// The following elements (space-suffixed to avoid Object.prototype collisions)\n\t// throw uncatchable exceptions if you attempt to set expando properties\n\tnoData: {\n\t\t\"applet \": true,\n\t\t\"embed \": true,\n\n\t\t// ...but Flash objects (which have this classid) *can* handle expandos\n\t\t\"object \": \"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\"\n\t},\n\n\thasData: function( elem ) {\n\t\telem = elem.nodeType ? jQuery.cache[ elem[ jQuery.expando ] ] : elem[ jQuery.expando ];\n\t\treturn !!elem && !isEmptyDataObject( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn internalData( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\treturn internalRemoveData( elem, name );\n\t},\n\n\t// For internal use only.\n\t_data: function( elem, name, data ) {\n\t\treturn internalData( elem, name, data, true );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\treturn internalRemoveData( elem, name, true );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Special expections of .data basically thwart jQuery.access,\n\t\t// so implement the relevant behavior ourselves\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = jQuery.data( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !jQuery._data( elem, \"parsedAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE11+\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tjQuery._data( elem, \"parsedAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tjQuery.data( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn arguments.length > 1 ?\n\n\t\t\t// Sets one value\n\t\t\tthis.each( function() {\n\t\t\t\tjQuery.data( this, key, value );\n\t\t\t} ) :\n\n\t\t\t// Gets one value\n\t\t\t// Try to fetch any internally stored data first\n\t\t\telem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : undefined;\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeData( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = jQuery._data( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || jQuery.isArray( data ) ) {\n\t\t\t\t\tqueue = jQuery._data( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// not intended for public consumption - generates a queueHooks object,\n\t// or returns the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn jQuery._data( elem, key ) || jQuery._data( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tjQuery._removeData( elem, type + \"queue\" );\n\t\t\t\tjQuery._removeData( elem, key );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = jQuery._data( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\n\n\n( function() {\n\tvar shrinkWrapBlocksVal;\n\n\tsupport.shrinkWrapBlocks = function() {\n\t\tif ( shrinkWrapBlocksVal != null ) {\n\t\t\treturn shrinkWrapBlocksVal;\n\t\t}\n\n\t\t// Will be changed later if needed.\n\t\tshrinkWrapBlocksVal = false;\n\n\t\t// Minified: var b,c,d\n\t\tvar div, body, container;\n\n\t\tbody = document.getElementsByTagName( \"body\" )[ 0 ];\n\t\tif ( !body || !body.style ) {\n\n\t\t\t// Test fired too early or in an unsupported environment, exit.\n\t\t\treturn;\n\t\t}\n\n\t\t// Setup\n\t\tdiv = document.createElement( \"div\" );\n\t\tcontainer = document.createElement( \"div\" );\n\t\tcontainer.style.cssText = \"position:absolute;border:0;width:0;height:0;top:0;left:-9999px\";\n\t\tbody.appendChild( container ).appendChild( div );\n\n\t\t// Support: IE6\n\t\t// Check if elements with layout shrink-wrap their children\n\t\tif ( typeof div.style.zoom !== \"undefined\" ) {\n\n\t\t\t// Reset CSS: box-sizing; display; margin; border\n\t\t\tdiv.style.cssText =\n\n\t\t\t\t// Support: Firefox<29, Android 2.3\n\t\t\t\t// Vendor-prefix box-sizing\n\t\t\t\t\"-webkit-box-sizing:content-box;-moz-box-sizing:content-box;\" +\n\t\t\t\t\"box-sizing:content-box;display:block;margin:0;border:0;\" +\n\t\t\t\t\"padding:1px;width:1px;zoom:1\";\n\t\t\tdiv.appendChild( document.createElement( \"div\" ) ).style.width = \"5px\";\n\t\t\tshrinkWrapBlocksVal = div.offsetWidth !== 3;\n\t\t}\n\n\t\tbody.removeChild( container );\n\n\t\treturn shrinkWrapBlocksVal;\n\t};\n\n} )();\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHidden = function( elem, el ) {\n\n\t\t// isHidden might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\t\treturn jQuery.css( elem, \"display\" ) === \"none\" ||\n\t\t\t!jQuery.contains( elem.ownerDocument, elem );\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted,\n\t\tscale = 1,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() { return tween.cur(); } :\n\t\t\tfunction() { return jQuery.css( elem, prop, \"\" ); },\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\tdo {\n\n\t\t\t// If previous iteration zeroed out, double until we get *something*.\n\t\t\t// Use string for doubling so we don't accidentally see scale as unchanged below\n\t\t\tscale = scale || \".5\";\n\n\t\t\t// Adjust and apply\n\t\t\tinitialInUnit = initialInUnit / scale;\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Update scale, tolerating zero or NaN from tween.cur()\n\t\t// Break the loop if scale is unchanged or perfect, or if we've just had enough.\n\t\t} while (\n\t\t\tscale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations\n\t\t);\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlength = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( jQuery.type( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !jQuery.isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ],\n\t\t\t\t\tkey,\n\t\t\t\t\traw ? value : value.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn chainable ?\n\t\telems :\n\n\t\t// Gets\n\t\tbulk ?\n\t\t\tfn.call( elems ) :\n\t\t\tlength ? fn( elems[ 0 ], key ) : emptyGet;\n};\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([\\w:-]+)/ );\n\nvar rscriptType = ( /^$|\\/(?:java|ecma)script/i );\n\nvar rleadingWhitespace = ( /^\\s+/ );\n\nvar nodeNames = \"abbr|article|aside|audio|bdi|canvas|data|datalist|\" +\n\t\t\"details|dialog|figcaption|figure|footer|header|hgroup|main|\" +\n\t\t\"mark|meter|nav|output|picture|progress|section|summary|template|time|video\";\n\n\n\nfunction createSafeFragment( document ) {\n\tvar list = nodeNames.split( \"|\" ),\n\t\tsafeFrag = document.createDocumentFragment();\n\n\tif ( safeFrag.createElement ) {\n\t\twhile ( list.length ) {\n\t\t\tsafeFrag.createElement(\n\t\t\t\tlist.pop()\n\t\t\t);\n\t\t}\n\t}\n\treturn safeFrag;\n}\n\n\n( function() {\n\tvar div = document.createElement( \"div\" ),\n\t\tfragment = document.createDocumentFragment(),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Setup\n\tdiv.innerHTML = \" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>\";\n\n\t// IE strips leading whitespace when .innerHTML is used\n\tsupport.leadingWhitespace = div.firstChild.nodeType === 3;\n\n\t// Make sure that tbody elements aren't automatically inserted\n\t// IE will insert them into empty tables\n\tsupport.tbody = !div.getElementsByTagName( \"tbody\" ).length;\n\n\t// Make sure that link elements get serialized correctly by innerHTML\n\t// This requires a wrapper element in IE\n\tsupport.htmlSerialize = !!div.getElementsByTagName( \"link\" ).length;\n\n\t// Makes sure cloning an html5 element does not cause problems\n\t// Where outerHTML is undefined, this still works\n\tsupport.html5Clone =\n\t\tdocument.createElement( \"nav\" ).cloneNode( true ).outerHTML !== \"<:nav></:nav>\";\n\n\t// Check if a disconnected checkbox will retain its checked\n\t// value of true after appended to the DOM (IE6/7)\n\tinput.type = \"checkbox\";\n\tinput.checked = true;\n\tfragment.appendChild( input );\n\tsupport.appendChecked = input.checked;\n\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\t// Support: IE6-IE11+\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n\n\t// #11217 - WebKit loses check when the name is after the checked attribute\n\tfragment.appendChild( div );\n\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput = document.createElement( \"input\" );\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3\n\t// old WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE<9\n\t// Cloned elements keep attachEvent handlers, we use addEventListener on IE9+\n\tsupport.noCloneEvent = !!div.addEventListener;\n\n\t// Support: IE<9\n\t// Since attributes and properties are the same in IE,\n\t// cleanData must set properties to undefined rather than use removeAttribute\n\tdiv[ jQuery.expando ] = 1;\n\tsupport.attributes = !div.getAttribute( jQuery.expando );\n} )();\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\tlegend: [ 1, \"<fieldset>\", \"</fieldset>\" ],\n\tarea: [ 1, \"<map>\", \"</map>\" ],\n\n\t// Support: IE8\n\tparam: [ 1, \"<object>\", \"</object>\" ],\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\tcol: [ 2, \"<table><tbody></tbody><colgroup>\", \"</colgroup></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,\n\t// unless wrapped in a div with non-breaking characters in front of it.\n\t_default: support.htmlSerialize ? [ 0, \"\", \"\" ] : [ 1, \"X<div>\", \"</div>\" ]\n};\n\n// Support: IE8-IE9\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\tvar elems, elem,\n\t\ti = 0,\n\t\tfound = typeof context.getElementsByTagName !== \"undefined\" ?\n\t\t\tcontext.getElementsByTagName( tag || \"*\" ) :\n\t\t\ttypeof context.querySelectorAll !== \"undefined\" ?\n\t\t\t\tcontext.querySelectorAll( tag || \"*\" ) :\n\t\t\t\tundefined;\n\n\tif ( !found ) {\n\t\tfor ( found = [], elems = context.childNodes || context;\n\t\t\t( elem = elems[ i ] ) != null;\n\t\t\ti++\n\t\t) {\n\t\t\tif ( !tag || jQuery.nodeName( elem, tag ) ) {\n\t\t\t\tfound.push( elem );\n\t\t\t} else {\n\t\t\t\tjQuery.merge( found, getAll( elem, tag ) );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn tag === undefined || tag && jQuery.nodeName( context, tag ) ?\n\t\tjQuery.merge( [ context ], found ) :\n\t\tfound;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar elem,\n\t\ti = 0;\n\tfor ( ; ( elem = elems[ i ] ) != null; i++ ) {\n\t\tjQuery._data(\n\t\t\telem,\n\t\t\t\"globalEval\",\n\t\t\t!refElements || jQuery._data( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/,\n\trtbody = /<tbody/i;\n\nfunction fixDefaultChecked( elem ) {\n\tif ( rcheckableType.test( elem.type ) ) {\n\t\telem.defaultChecked = elem.checked;\n\t}\n}\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar j, elem, contains,\n\t\ttmp, tag, tbody, wrap,\n\t\tl = elems.length,\n\n\t\t// Ensure a safe fragment\n\t\tsafe = createSafeFragment( context ),\n\n\t\tnodes = [],\n\t\ti = 0;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( jQuery.type( elem ) === \"object\" ) {\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || safe.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Manually add leading whitespace removed by IE\n\t\t\t\tif ( !support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {\n\t\t\t\t\tnodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[ 0 ] ) );\n\t\t\t\t}\n\n\t\t\t\t// Remove IE's autoinserted <tbody> from table fragments\n\t\t\t\tif ( !support.tbody ) {\n\n\t\t\t\t\t// String was a <table>, *may* have spurious <tbody>\n\t\t\t\t\telem = tag === \"table\" && !rtbody.test( elem ) ?\n\t\t\t\t\t\ttmp.firstChild :\n\n\t\t\t\t\t\t// String was a bare <thead> or <tfoot>\n\t\t\t\t\t\twrap[ 1 ] === \"<table>\" && !rtbody.test( elem ) ?\n\t\t\t\t\t\t\ttmp :\n\t\t\t\t\t\t\t0;\n\n\t\t\t\t\tj = elem && elem.childNodes.length;\n\t\t\t\t\twhile ( j-- ) {\n\t\t\t\t\t\tif ( jQuery.nodeName( ( tbody = elem.childNodes[ j ] ), \"tbody\" ) &&\n\t\t\t\t\t\t\t!tbody.childNodes.length ) {\n\n\t\t\t\t\t\t\telem.removeChild( tbody );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Fix #12392 for WebKit and IE > 9\n\t\t\t\ttmp.textContent = \"\";\n\n\t\t\t\t// Fix #12392 for oldIE\n\t\t\t\twhile ( tmp.firstChild ) {\n\t\t\t\t\ttmp.removeChild( tmp.firstChild );\n\t\t\t\t}\n\n\t\t\t\t// Remember the top-level container for proper cleanup\n\t\t\t\ttmp = safe.lastChild;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Fix #11356: Clear elements from fragment\n\tif ( tmp ) {\n\t\tsafe.removeChild( tmp );\n\t}\n\n\t// Reset defaultChecked for any radios and checkboxes\n\t// about to be appended to the DOM in IE 6/7 (#8060)\n\tif ( !support.appendChecked ) {\n\t\tjQuery.grep( getAll( nodes, \"input\" ), fixDefaultChecked );\n\t}\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\n\t\t\tcontinue;\n\t\t}\n\n\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( safe.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( contains ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\ttmp = null;\n\n\treturn safe;\n}\n\n\n( function() {\n\tvar i, eventName,\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Support: IE<9 (lack submit/change bubble), Firefox (lack focus(in | out) events)\n\tfor ( i in { submit: true, change: true, focusin: true } ) {\n\t\teventName = \"on\" + i;\n\n\t\tif ( !( support[ i ] = eventName in window ) ) {\n\n\t\t\t// Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP)\n\t\t\tdiv.setAttribute( eventName, \"t\" );\n\t\t\tsupport[ i ] = div.attributes[ eventName ].expando === false;\n\t\t}\n\t}\n\n\t// Null elements to avoid leaks in IE.\n\tdiv = null;\n} )();\n\n\nvar rformElems = /^(?:input|select|textarea)$/i,\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE9\n// See #13393 for more info\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\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 */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\t\tvar tmp, events, t, handleObjIn,\n\t\t\tspecial, eventHandle, handleObj,\n\t\t\thandlers, type, namespaces, origType,\n\t\t\telemData = jQuery._data( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" &&\n\t\t\t\t\t( !e || jQuery.event.triggered !== e.type ) ?\n\t\t\t\t\tjQuery.event.dispatch.apply( eventHandle.elem, arguments ) :\n\t\t\t\t\tundefined;\n\t\t\t};\n\n\t\t\t// Add elem as a property of the handle fn to prevent a memory leak\n\t\t\t// with IE non-native events\n\t\t\teventHandle.elem = elem;\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener/attachEvent if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\t// Bind the global event handler to the element\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle, false );\n\n\t\t\t\t\t} else if ( elem.attachEvent ) {\n\t\t\t\t\t\telem.attachEvent( \"on\" + type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t\t// Nullify elem to prevent memory leaks in IE\n\t\telem = null;\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\t\tvar j, handleObj, tmp,\n\t\t\torigCount, t, events,\n\t\t\tspecial, handlers, type,\n\t\t\tnamespaces, origType,\n\t\t\telemData = jQuery.hasData( elem ) && jQuery._data( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdelete elemData.handle;\n\n\t\t\t// removeData also checks for emptiness and clears the expando if empty\n\t\t\t// so use it instead of delete\n\t\t\tjQuery._removeData( elem, \"events\" );\n\t\t}\n\t},\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\t\tvar handle, ontype, cur,\n\t\t\tbubbleType, special, tmp, i,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( jQuery._data( cur, \"events\" ) || {} )[ event.type ] &&\n\t\t\t\tjQuery._data( cur, \"handle\" );\n\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif (\n\t\t\t\t( !special._default ||\n\t\t\t\t special._default.apply( eventPath.pop(), data ) === false\n\t\t\t\t) && acceptData( elem )\n\t\t\t) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name name as the event.\n\t\t\t\t// Can't use an .isFunction() check here because IE6/7 fails that test.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\t\t\t\t\ttry {\n\t\t\t\t\t\telem[ type ]();\n\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t// IE<9 dies on focus/blur to hidden element (#1486,#12518)\n\t\t\t\t\t\t// only reproducible on winXP IE8 native, not IE9 in IE8 mode\n\t\t\t\t\t}\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\tdispatch: function( event ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tevent = jQuery.event.fix( event );\n\n\t\tvar i, j, ret, matched, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\targs = slice.call( arguments ),\n\t\t\thandlers = ( jQuery._data( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\n\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, matches, sel, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Support (at least): Chrome, IE9\n\t\t// Find delegate handlers\n\t\t// Black-hole SVG <use> instance trees (#13180)\n\t\t//\n\t\t// Support: Firefox<=42+\n\t\t// Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343)\n\t\tif ( delegateCount && cur.nodeType &&\n\t\t\t( event.type !== \"click\" || isNaN( event.button ) || event.button < 1 ) ) {\n\n\t\t\t/* jshint eqeqeq: false */\n\t\t\tfor ( ; cur != this; cur = cur.parentNode || this ) {\n\t\t\t\t/* jshint eqeqeq: true */\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== \"click\" ) ) {\n\t\t\t\t\tmatches = [];\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matches[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatches[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matches[ sel ] ) {\n\t\t\t\t\t\t\tmatches.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matches.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matches } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\tfix: function( event ) {\n\t\tif ( event[ jQuery.expando ] ) {\n\t\t\treturn event;\n\t\t}\n\n\t\t// Create a writable copy of the event object and normalize some properties\n\t\tvar i, prop, copy,\n\t\t\ttype = event.type,\n\t\t\toriginalEvent = event,\n\t\t\tfixHook = this.fixHooks[ type ];\n\n\t\tif ( !fixHook ) {\n\t\t\tthis.fixHooks[ type ] = fixHook =\n\t\t\t\trmouseEvent.test( type ) ? this.mouseHooks :\n\t\t\t\trkeyEvent.test( type ) ? this.keyHooks :\n\t\t\t\t{};\n\t\t}\n\t\tcopy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;\n\n\t\tevent = new jQuery.Event( originalEvent );\n\n\t\ti = copy.length;\n\t\twhile ( i-- ) {\n\t\t\tprop = copy[ i ];\n\t\t\tevent[ prop ] = originalEvent[ prop ];\n\t\t}\n\n\t\t// Support: IE<9\n\t\t// Fix target property (#1925)\n\t\tif ( !event.target ) {\n\t\t\tevent.target = originalEvent.srcElement || document;\n\t\t}\n\n\t\t// Support: Safari 6-8+\n\t\t// Target should not be a text node (#504, #13143)\n\t\tif ( event.target.nodeType === 3 ) {\n\t\t\tevent.target = event.target.parentNode;\n\t\t}\n\n\t\t// Support: IE<9\n\t\t// For mouse/key events, metaKey==false if it's undefined (#3368, #11328)\n\t\tevent.metaKey = !!event.metaKey;\n\n\t\treturn fixHook.filter ? fixHook.filter( event, originalEvent ) : event;\n\t},\n\n\t// Includes some event props shared by KeyEvent and MouseEvent\n\tprops: ( \"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase \" +\n\t\t\"metaKey relatedTarget shiftKey target timeStamp view which\" ).split( \" \" ),\n\n\tfixHooks: {},\n\n\tkeyHooks: {\n\t\tprops: \"char charCode key keyCode\".split( \" \" ),\n\t\tfilter: function( event, original ) {\n\n\t\t\t// Add which for key events\n\t\t\tif ( event.which == null ) {\n\t\t\t\tevent.which = original.charCode != null ? original.charCode : original.keyCode;\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tmouseHooks: {\n\t\tprops: ( \"button buttons clientX clientY fromElement offsetX offsetY \" +\n\t\t\t\"pageX pageY screenX screenY toElement\" ).split( \" \" ),\n\t\tfilter: function( event, original ) {\n\t\t\tvar body, eventDoc, doc,\n\t\t\t\tbutton = original.button,\n\t\t\t\tfromElement = original.fromElement;\n\n\t\t\t// Calculate pageX/Y if missing and clientX/Y available\n\t\t\tif ( event.pageX == null && original.clientX != null ) {\n\t\t\t\teventDoc = event.target.ownerDocument || document;\n\t\t\t\tdoc = eventDoc.documentElement;\n\t\t\t\tbody = eventDoc.body;\n\n\t\t\t\tevent.pageX = original.clientX +\n\t\t\t\t\t( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) -\n\t\t\t\t\t( doc && doc.clientLeft || body && body.clientLeft || 0 );\n\t\t\t\tevent.pageY = original.clientY +\n\t\t\t\t\t( doc && doc.scrollTop || body && body.scrollTop || 0 ) -\n\t\t\t\t\t( doc && doc.clientTop || body && body.clientTop || 0 );\n\t\t\t}\n\n\t\t\t// Add relatedTarget, if necessary\n\t\t\tif ( !event.relatedTarget && fromElement ) {\n\t\t\t\tevent.relatedTarget = fromElement === event.target ?\n\t\t\t\t\toriginal.toElement :\n\t\t\t\t\tfromElement;\n\t\t\t}\n\n\t\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\t\t// Note: button is not normalized, so don't use it\n\t\t\tif ( !event.which && button !== undefined ) {\n\t\t\t\tevent.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tthis.focus();\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t// Support: IE<9\n\t\t\t\t\t\t// If we error on focus to hidden element (#1486, #12518),\n\t\t\t\t\t\t// let .trigger() run the handlers\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( jQuery.nodeName( this, \"input\" ) && this.type === \"checkbox\" && this.click ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn jQuery.nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\n\t\t\t\t// Previously, `originalEvent: {}` was set here, so stopPropagation call\n\t\t\t\t// would not be triggered on donor event, since in our own\n\t\t\t\t// jQuery.event.stopPropagation function we had a check for existence of\n\t\t\t\t// originalEvent.stopPropagation method, so, consequently it would be a noop.\n\t\t\t\t//\n\t\t\t\t// Guard for simulated events was moved to jQuery.event.stopPropagation function\n\t\t\t\t// since `originalEvent` should point to the original event for the\n\t\t\t\t// constancy with other events and for more focused logic\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\n\t\tif ( e.isDefaultPrevented() ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n};\n\njQuery.removeEvent = document.removeEventListener ?\n\tfunction( elem, type, handle ) {\n\n\t\t// This \"if\" is needed for plain objects\n\t\tif ( elem.removeEventListener ) {\n\t\t\telem.removeEventListener( type, handle );\n\t\t}\n\t} :\n\tfunction( elem, type, handle ) {\n\t\tvar name = \"on\" + type;\n\n\t\tif ( elem.detachEvent ) {\n\n\t\t\t// #8545, #7054, preventing memory leaks for custom events in IE6-8\n\t\t\t// detachEvent needed property on element, by name of that event,\n\t\t\t// to properly expose it to GC\n\t\t\tif ( typeof elem[ name ] === \"undefined\" ) {\n\t\t\t\telem[ name ] = null;\n\t\t\t}\n\n\t\t\telem.detachEvent( name, handle );\n\t\t}\n\t};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: IE < 9, Android < 4.0\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\t\tif ( !e ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If preventDefault exists, run it on the original event\n\t\tif ( e.preventDefault ) {\n\t\t\te.preventDefault();\n\n\t\t// Support: IE\n\t\t// Otherwise set the returnValue property of the original event to false\n\t\t} else {\n\t\t\te.returnValue = false;\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( !e || this.isSimulated ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If stopPropagation exists, run it on the original event\n\t\tif ( e.stopPropagation ) {\n\t\t\te.stopPropagation();\n\t\t}\n\n\t\t// Support: IE\n\t\t// Set the cancelBubble property of the original event to true\n\t\te.cancelBubble = true;\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && e.stopImmediatePropagation ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\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://code.google.com/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\n// IE submit delegation\nif ( !support.submit ) {\n\n\tjQuery.event.special.submit = {\n\t\tsetup: function() {\n\n\t\t\t// Only need this for delegated form submit events\n\t\t\tif ( jQuery.nodeName( this, \"form\" ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Lazy-add a submit handler when a descendant form may potentially be submitted\n\t\t\tjQuery.event.add( this, \"click._submit keypress._submit\", function( e ) {\n\n\t\t\t\t// Node name check avoids a VML-related crash in IE (#9807)\n\t\t\t\tvar elem = e.target,\n\t\t\t\t\tform = jQuery.nodeName( elem, \"input\" ) || jQuery.nodeName( elem, \"button\" ) ?\n\n\t\t\t\t\t\t// Support: IE <=8\n\t\t\t\t\t\t// We use jQuery.prop instead of elem.form\n\t\t\t\t\t\t// to allow fixing the IE8 delegated submit issue (gh-2332)\n\t\t\t\t\t\t// by 3rd party polyfills/workarounds.\n\t\t\t\t\t\tjQuery.prop( elem, \"form\" ) :\n\t\t\t\t\t\tundefined;\n\n\t\t\t\tif ( form && !jQuery._data( form, \"submit\" ) ) {\n\t\t\t\t\tjQuery.event.add( form, \"submit._submit\", function( event ) {\n\t\t\t\t\t\tevent._submitBubble = true;\n\t\t\t\t\t} );\n\t\t\t\t\tjQuery._data( form, \"submit\", true );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// return undefined since we don't need an event listener\n\t\t},\n\n\t\tpostDispatch: function( event ) {\n\n\t\t\t// If form was submitted by the user, bubble the event up the tree\n\t\t\tif ( event._submitBubble ) {\n\t\t\t\tdelete event._submitBubble;\n\t\t\t\tif ( this.parentNode && !event.isTrigger ) {\n\t\t\t\t\tjQuery.event.simulate( \"submit\", this.parentNode, event );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tteardown: function() {\n\n\t\t\t// Only need this for delegated form submit events\n\t\t\tif ( jQuery.nodeName( this, \"form\" ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Remove delegated handlers; cleanData eventually reaps submit handlers attached above\n\t\t\tjQuery.event.remove( this, \"._submit\" );\n\t\t}\n\t};\n}\n\n// IE change delegation and checkbox/radio fix\nif ( !support.change ) {\n\n\tjQuery.event.special.change = {\n\n\t\tsetup: function() {\n\n\t\t\tif ( rformElems.test( this.nodeName ) ) {\n\n\t\t\t\t// IE doesn't fire change on a check/radio until blur; trigger it on click\n\t\t\t\t// after a propertychange. Eat the blur-change in special.change.handle.\n\t\t\t\t// This still fires onchange a second time for check/radio after blur.\n\t\t\t\tif ( this.type === \"checkbox\" || this.type === \"radio\" ) {\n\t\t\t\t\tjQuery.event.add( this, \"propertychange._change\", function( event ) {\n\t\t\t\t\t\tif ( event.originalEvent.propertyName === \"checked\" ) {\n\t\t\t\t\t\t\tthis._justChanged = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t\tjQuery.event.add( this, \"click._change\", function( event ) {\n\t\t\t\t\t\tif ( this._justChanged && !event.isTrigger ) {\n\t\t\t\t\t\t\tthis._justChanged = false;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Allow triggered, simulated change events (#11500)\n\t\t\t\t\t\tjQuery.event.simulate( \"change\", this, event );\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Delegated event; lazy-add a change handler on descendant inputs\n\t\t\tjQuery.event.add( this, \"beforeactivate._change\", function( e ) {\n\t\t\t\tvar elem = e.target;\n\n\t\t\t\tif ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, \"change\" ) ) {\n\t\t\t\t\tjQuery.event.add( elem, \"change._change\", function( event ) {\n\t\t\t\t\t\tif ( this.parentNode && !event.isSimulated && !event.isTrigger ) {\n\t\t\t\t\t\t\tjQuery.event.simulate( \"change\", this.parentNode, event );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t\tjQuery._data( elem, \"change\", true );\n\t\t\t\t}\n\t\t\t} );\n\t\t},\n\n\t\thandle: function( event ) {\n\t\t\tvar elem = event.target;\n\n\t\t\t// Swallow native change events from checkbox/radio, we already triggered them above\n\t\t\tif ( this !== elem || event.isSimulated || event.isTrigger ||\n\t\t\t\t( elem.type !== \"radio\" && elem.type !== \"checkbox\" ) ) {\n\n\t\t\t\treturn event.handleObj.handler.apply( this, arguments );\n\t\t\t}\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tjQuery.event.remove( this, \"._change\" );\n\n\t\t\treturn !rformElems.test( this.nodeName );\n\t\t}\n\t};\n}\n\n// Support: Firefox\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, Safari\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://code.google.com/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = jQuery._data( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tjQuery._data( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = jQuery._data( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tjQuery._removeData( doc, fix );\n\t\t\t\t} else {\n\t\t\t\t\tjQuery._data( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t},\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\nvar rinlinejQuery = / jQuery\\d+=\"(?:null|\\d+)\"/g,\n\trnoshimcache = new RegExp( \"<(?:\" + nodeNames + \")[\\\\s/>]\", \"i\" ),\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:-]+)[^>]*)\\/>/gi,\n\n\t// Support: IE 10-11, Edge 10240+\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trscriptTypeMasked = /^true\\/(.*)/,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g,\n\tsafeFragment = createSafeFragment( document ),\n\tfragmentDiv = safeFragment.appendChild( document.createElement( \"div\" ) );\n\n// Support: IE<8\n// Manipulating tables requires a tbody\nfunction manipulationTarget( elem, content ) {\n\treturn jQuery.nodeName( elem, \"table\" ) &&\n\t\tjQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ?\n\n\t\telem.getElementsByTagName( \"tbody\" )[ 0 ] ||\n\t\t\telem.appendChild( elem.ownerDocument.createElement( \"tbody\" ) ) :\n\t\telem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( jQuery.find.attr( elem, \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tvar match = rscriptTypeMasked.exec( elem.type );\n\tif ( match ) {\n\t\telem.type = match[ 1 ];\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tif ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {\n\t\treturn;\n\t}\n\n\tvar type, i, l,\n\t\toldData = jQuery._data( src ),\n\t\tcurData = jQuery._data( dest, oldData ),\n\t\tevents = oldData.events;\n\n\tif ( events ) {\n\t\tdelete curData.handle;\n\t\tcurData.events = {};\n\n\t\tfor ( type in events ) {\n\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t}\n\t\t}\n\t}\n\n\t// make the cloned public data object a copy from the original\n\tif ( curData.data ) {\n\t\tcurData.data = jQuery.extend( {}, curData.data );\n\t}\n}\n\nfunction fixCloneNodeIssues( src, dest ) {\n\tvar nodeName, e, data;\n\n\t// We do not need to do anything for non-Elements\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\tnodeName = dest.nodeName.toLowerCase();\n\n\t// IE6-8 copies events bound via attachEvent when using cloneNode.\n\tif ( !support.noCloneEvent && dest[ jQuery.expando ] ) {\n\t\tdata = jQuery._data( dest );\n\n\t\tfor ( e in data.events ) {\n\t\t\tjQuery.removeEvent( dest, e, data.handle );\n\t\t}\n\n\t\t// Event data gets referenced instead of copied if the expando gets copied too\n\t\tdest.removeAttribute( jQuery.expando );\n\t}\n\n\t// IE blanks contents when cloning scripts, and tries to evaluate newly-set text\n\tif ( nodeName === \"script\" && dest.text !== src.text ) {\n\t\tdisableScript( dest ).text = src.text;\n\t\trestoreScript( dest );\n\n\t// IE6-10 improperly clones children of object elements using classid.\n\t// IE10 throws NoModificationAllowedError if parent is null, #12132.\n\t} else if ( nodeName === \"object\" ) {\n\t\tif ( dest.parentNode ) {\n\t\t\tdest.outerHTML = src.outerHTML;\n\t\t}\n\n\t\t// This path appears unavoidable for IE9. When cloning an object\n\t\t// element in IE9, the outerHTML strategy above is not sufficient.\n\t\t// If the src has innerHTML and the destination does not,\n\t\t// copy the src.innerHTML into the dest.innerHTML. #10324\n\t\tif ( support.html5Clone && ( src.innerHTML && !jQuery.trim( dest.innerHTML ) ) ) {\n\t\t\tdest.innerHTML = src.innerHTML;\n\t\t}\n\n\t} else if ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\n\t\t// IE6-8 fails to persist the checked state of a cloned checkbox\n\t\t// or radio button. Worse, IE6-7 fail to give the cloned element\n\t\t// a checked appearance if the defaultChecked value isn't also set\n\n\t\tdest.defaultChecked = dest.checked = src.checked;\n\n\t\t// IE6-7 get confused and end up setting the value of a cloned\n\t\t// checkbox/radio button to an empty string instead of \"on\"\n\t\tif ( dest.value !== src.value ) {\n\t\t\tdest.value = src.value;\n\t\t}\n\n\t// IE6-8 fails to return the selected option to the default selected\n\t// state when cloning options\n\t} else if ( nodeName === \"option\" ) {\n\t\tdest.defaultSelected = dest.selected = src.defaultSelected;\n\n\t// IE6-8 fails to set the defaultValue to the correct value when\n\t// cloning other types of input fields\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar first, node, hasScripts,\n\t\tscripts, doc, fragment,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tisFunction = jQuery.isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( isFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( isFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!jQuery._data( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tjQuery.globalEval(\n\t\t\t\t\t\t\t\t( node.text || node.textContent || node.innerHTML || \"\" )\n\t\t\t\t\t\t\t\t\t.replace( rcleanScript, \"\" )\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Fix #11809: Avoid leaking memory\n\t\t\tfragment = first = null;\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\telems = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = elems[ i ] ) != null; i++ ) {\n\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && jQuery.contains( node.ownerDocument, node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1></$2>\" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar destElements, node, clone, i, srcElements,\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\tif ( support.html5Clone || jQuery.isXMLDoc( elem ) ||\n\t\t\t!rnoshimcache.test( \"<\" + elem.nodeName + \">\" ) ) {\n\n\t\t\tclone = elem.cloneNode( true );\n\n\t\t// IE<=8 does not properly clone detached, unknown element nodes\n\t\t} else {\n\t\t\tfragmentDiv.innerHTML = elem.outerHTML;\n\t\t\tfragmentDiv.removeChild( clone = fragmentDiv.firstChild );\n\t\t}\n\n\t\tif ( ( !support.noCloneEvent || !support.noCloneChecked ) &&\n\t\t\t\t( elem.nodeType === 1 || elem.nodeType === 11 ) && !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\t// Fix all IE cloning issues\n\t\t\tfor ( i = 0; ( node = srcElements[ i ] ) != null; ++i ) {\n\n\t\t\t\t// Ensure that the destination node is not null; Fixes #9587\n\t\t\t\tif ( destElements[ i ] ) {\n\t\t\t\t\tfixCloneNodeIssues( node, destElements[ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0; ( node = srcElements[ i ] ) != null; i++ ) {\n\t\t\t\t\tcloneCopyEvent( node, destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\tdestElements = srcElements = node = null;\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems, /* internal */ forceAcceptData ) {\n\t\tvar elem, type, id, data,\n\t\t\ti = 0,\n\t\t\tinternalKey = jQuery.expando,\n\t\t\tcache = jQuery.cache,\n\t\t\tattributes = support.attributes,\n\t\t\tspecial = jQuery.event.special;\n\n\t\tfor ( ; ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\tif ( forceAcceptData || acceptData( elem ) ) {\n\n\t\t\t\tid = elem[ internalKey ];\n\t\t\t\tdata = id && cache[ id ];\n\n\t\t\t\tif ( data ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remove cache only if it was not already removed by jQuery.event.remove\n\t\t\t\t\tif ( cache[ id ] ) {\n\n\t\t\t\t\t\tdelete cache[ id ];\n\n\t\t\t\t\t\t// Support: IE<9\n\t\t\t\t\t\t// IE does not allow us to delete expando properties from nodes\n\t\t\t\t\t\t// IE creates expando attributes along with the property\n\t\t\t\t\t\t// IE does not have a removeAttribute function on Document nodes\n\t\t\t\t\t\tif ( !attributes && typeof elem.removeAttribute !== \"undefined\" ) {\n\t\t\t\t\t\t\telem.removeAttribute( internalKey );\n\n\t\t\t\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t\t\t\t// https://code.google.com/p/chromium/issues/detail?id=378607\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\telem[ internalKey ] = undefined;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdeletedIds.push( id );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\n\t// Keep domManip exposed until 3.0 (gh-2225)\n\tdomManip: domManip,\n\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().append(\n\t\t\t\t\t( this[ 0 ] && this[ 0 ].ownerDocument || document ).createTextNode( value )\n\t\t\t\t);\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\n\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t}\n\n\t\t\t// Remove any remaining nodes\n\t\t\twhile ( elem.firstChild ) {\n\t\t\t\telem.removeChild( elem.firstChild );\n\t\t\t}\n\n\t\t\t// If this is a select, ensure that it displays empty (#12336)\n\t\t\t// Support: IE<9\n\t\t\tif ( elem.options && jQuery.nodeName( elem, \"select\" ) ) {\n\t\t\t\telem.options.length = 0;\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined ) {\n\t\t\t\treturn elem.nodeType === 1 ?\n\t\t\t\t\telem.innerHTML.replace( rinlinejQuery, \"\" ) :\n\t\t\t\t\tundefined;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t( support.htmlSerialize || !rnoshimcache.test( value ) ) &&\n\t\t\t\t( support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\telem = this[ i ] || {};\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\ti = 0,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\n\n\nvar iframe,\n\telemdisplay = {\n\n\t\t// Support: Firefox\n\t\t// We have to pre-define these values for FF (#10227)\n\t\tHTML: \"block\",\n\t\tBODY: \"block\"\n\t};\n\n/**\n * Retrieve the actual display of a element\n * @param {String} name nodeName of the element\n * @param {Object} doc Document object\n */\n\n// Called only from within defaultDisplay\nfunction actualDisplay( name, doc ) {\n\tvar elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),\n\n\t\tdisplay = jQuery.css( elem[ 0 ], \"display\" );\n\n\t// We don't have any data stored on the element,\n\t// so use \"detach\" method as fast way to get rid of the element\n\telem.detach();\n\n\treturn display;\n}\n\n/**\n * Try to determine the default display value of an element\n * @param {String} nodeName\n */\nfunction defaultDisplay( nodeName ) {\n\tvar doc = document,\n\t\tdisplay = elemdisplay[ nodeName ];\n\n\tif ( !display ) {\n\t\tdisplay = actualDisplay( nodeName, doc );\n\n\t\t// If the simple way fails, read from inside an iframe\n\t\tif ( display === \"none\" || !display ) {\n\n\t\t\t// Use the already-created iframe if possible\n\t\t\tiframe = ( iframe || jQuery( \"<iframe frameborder='0' width='0' height='0'/>\" ) )\n\t\t\t\t.appendTo( doc.documentElement );\n\n\t\t\t// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse\n\t\t\tdoc = ( iframe[ 0 ].contentWindow || iframe[ 0 ].contentDocument ).document;\n\n\t\t\t// Support: IE\n\t\t\tdoc.write();\n\t\t\tdoc.close();\n\n\t\t\tdisplay = actualDisplay( nodeName, doc );\n\t\t\tiframe.detach();\n\t\t}\n\n\t\t// Store the correct default display\n\t\telemdisplay[ nodeName ] = display;\n\t}\n\n\treturn display;\n}\nvar rmargin = ( /^margin/ );\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar documentElement = document.documentElement;\n\n\n\n( function() {\n\tvar pixelPositionVal, pixelMarginRightVal, boxSizingReliableVal,\n\t\treliableHiddenOffsetsVal, reliableMarginRightVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\tdiv.style.cssText = \"float:left;opacity:.5\";\n\n\t// Support: IE<9\n\t// Make sure that element opacity exists (as opposed to filter)\n\tsupport.opacity = div.style.opacity === \"0.5\";\n\n\t// Verify style float existence\n\t// (IE uses styleFloat instead of cssFloat)\n\tsupport.cssFloat = !!div.style.cssFloat;\n\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tcontainer = document.createElement( \"div\" );\n\tcontainer.style.cssText = \"border:0;width:8px;height:0;top:0;left:-9999px;\" +\n\t\t\"padding:0;margin-top:1px;position:absolute\";\n\tdiv.innerHTML = \"\";\n\tcontainer.appendChild( div );\n\n\t// Support: Firefox<29, Android 2.3\n\t// Vendor-prefix box-sizing\n\tsupport.boxSizing = div.style.boxSizing === \"\" || div.style.MozBoxSizing === \"\" ||\n\t\tdiv.style.WebkitBoxSizing === \"\";\n\n\tjQuery.extend( support, {\n\t\treliableHiddenOffsets: function() {\n\t\t\tif ( pixelPositionVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn reliableHiddenOffsetsVal;\n\t\t},\n\n\t\tboxSizingReliable: function() {\n\n\t\t\t// We're checking for pixelPositionVal here instead of boxSizingReliableVal\n\t\t\t// since that compresses better and they're computed together anyway.\n\t\t\tif ( pixelPositionVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\n\t\tpixelMarginRight: function() {\n\n\t\t\t// Support: Android 4.0-4.3\n\t\t\tif ( pixelPositionVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn pixelMarginRightVal;\n\t\t},\n\n\t\tpixelPosition: function() {\n\t\t\tif ( pixelPositionVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn pixelPositionVal;\n\t\t},\n\n\t\treliableMarginRight: function() {\n\n\t\t\t// Support: Android 2.3\n\t\t\tif ( pixelPositionVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn reliableMarginRightVal;\n\t\t},\n\n\t\treliableMarginLeft: function() {\n\n\t\t\t// Support: IE <=8 only, Android 4.0 - 4.3 only, Firefox <=3 - 37\n\t\t\tif ( pixelPositionVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn reliableMarginLeftVal;\n\t\t}\n\t} );\n\n\tfunction computeStyleTests() {\n\t\tvar contents, divStyle,\n\t\t\tdocumentElement = document.documentElement;\n\n\t\t// Setup\n\t\tdocumentElement.appendChild( container );\n\n\t\tdiv.style.cssText =\n\n\t\t\t// Support: Android 2.3\n\t\t\t// Vendor-prefix box-sizing\n\t\t\t\"-webkit-box-sizing:border-box;box-sizing:border-box;\" +\n\t\t\t\"position:relative;display:block;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"top:1%;width:50%\";\n\n\t\t// Support: IE<9\n\t\t// Assume reasonable values in the absence of getComputedStyle\n\t\tpixelPositionVal = boxSizingReliableVal = reliableMarginLeftVal = false;\n\t\tpixelMarginRightVal = reliableMarginRightVal = true;\n\n\t\t// Check for getComputedStyle so that this code is not run in IE<9.\n\t\tif ( window.getComputedStyle ) {\n\t\t\tdivStyle = window.getComputedStyle( div );\n\t\t\tpixelPositionVal = ( divStyle || {} ).top !== \"1%\";\n\t\t\treliableMarginLeftVal = ( divStyle || {} ).marginLeft === \"2px\";\n\t\t\tboxSizingReliableVal = ( divStyle || { width: \"4px\" } ).width === \"4px\";\n\n\t\t\t// Support: Android 4.0 - 4.3 only\n\t\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\t\tdiv.style.marginRight = \"50%\";\n\t\t\tpixelMarginRightVal = ( divStyle || { marginRight: \"4px\" } ).marginRight === \"4px\";\n\n\t\t\t// Support: Android 2.3 only\n\t\t\t// Div with explicit width and no margin-right incorrectly\n\t\t\t// gets computed margin-right based on width of container (#3333)\n\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\tcontents = div.appendChild( document.createElement( \"div\" ) );\n\n\t\t\t// Reset CSS: box-sizing; display; margin; border; padding\n\t\t\tcontents.style.cssText = div.style.cssText =\n\n\t\t\t\t// Support: Android 2.3\n\t\t\t\t// Vendor-prefix box-sizing\n\t\t\t\t\"-webkit-box-sizing:content-box;-moz-box-sizing:content-box;\" +\n\t\t\t\t\"box-sizing:content-box;display:block;margin:0;border:0;padding:0\";\n\t\t\tcontents.style.marginRight = contents.style.width = \"0\";\n\t\t\tdiv.style.width = \"1px\";\n\n\t\t\treliableMarginRightVal =\n\t\t\t\t!parseFloat( ( window.getComputedStyle( contents ) || {} ).marginRight );\n\n\t\t\tdiv.removeChild( contents );\n\t\t}\n\n\t\t// Support: IE6-8\n\t\t// First check that getClientRects works as expected\n\t\t// Check if table cells still have offsetWidth/Height when they are set\n\t\t// to display:none and there are still other visible table cells in a\n\t\t// table row; if so, offsetWidth/Height are not reliable for use when\n\t\t// determining if an element has been hidden directly using\n\t\t// display:none (it is still safe to use offsets if a parent element is\n\t\t// hidden; don safety goggles and see bug #4512 for more information).\n\t\tdiv.style.display = \"none\";\n\t\treliableHiddenOffsetsVal = div.getClientRects().length === 0;\n\t\tif ( reliableHiddenOffsetsVal ) {\n\t\t\tdiv.style.display = \"\";\n\t\t\tdiv.innerHTML = \"<table><tr><td></td><td>t</td></tr></table>\";\n\t\t\tdiv.childNodes[ 0 ].style.borderCollapse = \"separate\";\n\t\t\tcontents = div.getElementsByTagName( \"td\" );\n\t\t\tcontents[ 0 ].style.cssText = \"margin:0;border:0;padding:0;display:none\";\n\t\t\treliableHiddenOffsetsVal = contents[ 0 ].offsetHeight === 0;\n\t\t\tif ( reliableHiddenOffsetsVal ) {\n\t\t\t\tcontents[ 0 ].style.display = \"\";\n\t\t\t\tcontents[ 1 ].style.display = \"none\";\n\t\t\t\treliableHiddenOffsetsVal = contents[ 0 ].offsetHeight === 0;\n\t\t\t}\n\t\t}\n\n\t\t// Teardown\n\t\tdocumentElement.removeChild( container );\n\t}\n\n} )();\n\n\nvar getStyles, curCSS,\n\trposition = /^(top|right|bottom|left)$/;\n\nif ( window.getComputedStyle ) {\n\tgetStyles = function( elem ) {\n\n\t\t// Support: IE<=11+, Firefox<=30+ (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\n\tcurCSS = function( elem, name, computed ) {\n\t\tvar width, minWidth, maxWidth, ret,\n\t\t\tstyle = elem.style;\n\n\t\tcomputed = computed || getStyles( elem );\n\n\t\t// getPropertyValue is only needed for .css('filter') in IE9, see #12537\n\t\tret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined;\n\n\t\t// Support: Opera 12.1x only\n\t\t// Fall back to style even without computed\n\t\t// computed is undefined for elems on document fragments\n\t\tif ( ( ret === \"\" || ret === undefined ) && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\tif ( computed ) {\n\n\t\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t\t// Chrome < 17 and Safari 5.0 uses \"computed value\"\n\t\t\t// instead of \"used value\" for margin-right\n\t\t\t// Safari 5.1.7 (at least) returns percentage for a larger set of values,\n\t\t\t// but width seems to be reliably pixels\n\t\t\t// this is against the CSSOM draft spec:\n\t\t\t// http://dev.w3.org/csswg/cssom/#resolved-values\n\t\t\tif ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {\n\n\t\t\t\t// Remember the original values\n\t\t\t\twidth = style.width;\n\t\t\t\tminWidth = style.minWidth;\n\t\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t\t// Put in the new values to get a computed value out\n\t\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\t\tret = computed.width;\n\n\t\t\t\t// Revert the changed values\n\t\t\t\tstyle.width = width;\n\t\t\t\tstyle.minWidth = minWidth;\n\t\t\t\tstyle.maxWidth = maxWidth;\n\t\t\t}\n\t\t}\n\n\t\t// Support: IE\n\t\t// IE returns zIndex value as an integer.\n\t\treturn ret === undefined ?\n\t\t\tret :\n\t\t\tret + \"\";\n\t};\n} else if ( documentElement.currentStyle ) {\n\tgetStyles = function( elem ) {\n\t\treturn elem.currentStyle;\n\t};\n\n\tcurCSS = function( elem, name, computed ) {\n\t\tvar left, rs, rsLeft, ret,\n\t\t\tstyle = elem.style;\n\n\t\tcomputed = computed || getStyles( elem );\n\t\tret = computed ? computed[ name ] : undefined;\n\n\t\t// Avoid setting ret to empty string here\n\t\t// so we don't default to auto\n\t\tif ( ret == null && style && style[ name ] ) {\n\t\t\tret = style[ name ];\n\t\t}\n\n\t\t// From the awesome hack by Dean Edwards\n\t\t// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291\n\n\t\t// If we're not dealing with a regular pixel number\n\t\t// but a number that has a weird ending, we need to convert it to pixels\n\t\t// but not position css attributes, as those are\n\t\t// proportional to the parent element instead\n\t\t// and we can't measure the parent instead because it\n\t\t// might trigger a \"stacking dolls\" problem\n\t\tif ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\tleft = style.left;\n\t\t\trs = elem.runtimeStyle;\n\t\t\trsLeft = rs && rs.left;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tif ( rsLeft ) {\n\t\t\t\trs.left = elem.currentStyle.left;\n\t\t\t}\n\t\t\tstyle.left = name === \"fontSize\" ? \"1em\" : ret;\n\t\t\tret = style.pixelLeft + \"px\";\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.left = left;\n\t\t\tif ( rsLeft ) {\n\t\t\t\trs.left = rsLeft;\n\t\t\t}\n\t\t}\n\n\t\t// Support: IE\n\t\t// IE returns zIndex value as an integer.\n\t\treturn ret === undefined ?\n\t\t\tret :\n\t\t\tret + \"\" || \"auto\";\n\t};\n}\n\n\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar\n\n\t\tralpha = /alpha\\([^)]*\\)/i,\n\tropacity = /opacity\\s*=\\s*([^)]*)/i,\n\n\t// swappable if display is none or starts with table except\n\t// \"table\", \"table-cell\", or \"table-caption\"\n\t// see here for display values:\n\t// https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trnumsplit = new RegExp( \"^(\" + pnum + \")(.*)$\", \"i\" ),\n\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t},\n\n\tcssPrefixes = [ \"Webkit\", \"O\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style;\n\n\n// return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( name ) {\n\n\t// shortcut for names that are not vendor prefixed\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\n\t// check for vendor prefixed names\n\tvar capName = name.charAt( 0 ).toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem, hidden,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tvalues[ index ] = jQuery._data( elem, \"olddisplay\" );\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Reset the inline display of this element to learn if it is\n\t\t\t// being hidden by cascaded rules or not\n\t\t\tif ( !values[ index ] && display === \"none\" ) {\n\t\t\t\telem.style.display = \"\";\n\t\t\t}\n\n\t\t\t// Set elements which have been overridden with display: none\n\t\t\t// in a stylesheet to whatever the default browser style is\n\t\t\t// for such an element\n\t\t\tif ( elem.style.display === \"\" && isHidden( elem ) ) {\n\t\t\t\tvalues[ index ] =\n\t\t\t\t\tjQuery._data( elem, \"olddisplay\", defaultDisplay( elem.nodeName ) );\n\t\t\t}\n\t\t} else {\n\t\t\thidden = isHidden( elem );\n\n\t\t\tif ( display && display !== \"none\" || !hidden ) {\n\t\t\t\tjQuery._data(\n\t\t\t\t\telem,\n\t\t\t\t\t\"olddisplay\",\n\t\t\t\t\thidden ? display : jQuery.css( elem, \"display\" )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of most of the elements in a second loop\n\t// to avoid the constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( !show || elem.style.display === \"none\" || elem.style.display === \"\" ) {\n\t\t\telem.style.display = show ? values[ index ] || \"\" : \"none\";\n\t\t}\n\t}\n\n\treturn elements;\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\tvar matches = rnumsplit.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {\n\tvar i = extra === ( isBorderBox ? \"border\" : \"content\" ) ?\n\n\t\t// If we already have the right measurement, avoid augmentation\n\t\t4 :\n\n\t\t// Otherwise initialize for horizontal or vertical properties\n\t\tname === \"width\" ? 1 : 0,\n\n\t\tval = 0;\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// both box models exclude margin, so add it if we want it\n\t\tif ( extra === \"margin\" ) {\n\t\t\tval += jQuery.css( elem, extra + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\tif ( isBorderBox ) {\n\n\t\t\t// border-box includes padding, so remove it if we want content\n\t\t\tif ( extra === \"content\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// at this point, extra isn't border nor margin, so remove border\n\t\t\tif ( extra !== \"margin\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// at this point, extra isn't content, so add padding\n\t\t\tval += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// at this point, extra isn't content nor padding, so add border\n\t\t\tif ( extra !== \"padding\" ) {\n\t\t\t\tval += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn val;\n}\n\nfunction getWidthOrHeight( elem, name, extra ) {\n\n\t// Start with offset property, which is equivalent to the border-box value\n\tvar valueIsBorderBox = true,\n\t\tval = name === \"width\" ? elem.offsetWidth : elem.offsetHeight,\n\t\tstyles = getStyles( elem ),\n\t\tisBorderBox = support.boxSizing &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t// some non-html elements return undefined for offsetWidth, so check for null/undefined\n\t// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285\n\t// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668\n\tif ( val <= 0 || val == null ) {\n\n\t\t// Fall back to computed then uncomputed css if necessary\n\t\tval = curCSS( elem, name, styles );\n\t\tif ( val < 0 || val == null ) {\n\t\t\tval = elem.style[ name ];\n\t\t}\n\n\t\t// Computed unit is not pixels. Stop here and return.\n\t\tif ( rnumnonpx.test( val ) ) {\n\t\t\treturn val;\n\t\t}\n\n\t\t// we need the check for style in case a browser which returns unreliable values\n\t\t// for getComputedStyle silently falls back to the reliable elem.style\n\t\tvalueIsBorderBox = isBorderBox &&\n\t\t\t( support.boxSizingReliable() || val === elem.style[ name ] );\n\n\t\t// Normalize \"\", auto, and prepare for extra\n\t\tval = parseFloat( val ) || 0;\n\t}\n\n\t// use the active box-sizing model to add/subtract irrelevant styles\n\treturn ( val +\n\t\taugmentWidthOrHeight(\n\t\t\telem,\n\t\t\tname,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {\n\n\t\t// normalize float css property\n\t\t\"float\": support.cssFloat ? \"cssFloat\" : \"styleFloat\"\n\t},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = jQuery.camelCase( name ),\n\t\t\tstyle = elem.style;\n\n\t\tname = jQuery.cssProps[ origName ] ||\n\t\t\t( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );\n\n\t\t// gets hook for the prefixed version\n\t\t// followed by the unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set. See: #7116\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// Fixes #8908, it can be done more correctly by specifing setters in cssHooks,\n\t\t\t// but it would mean to define eight\n\t\t\t// (for every problematic property) identical functions\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\t// Support: IE\n\t\t\t\t// Swallow errors from 'invalid' CSS values (#5509)\n\t\t\t\ttry {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar num, val, hooks,\n\t\t\torigName = jQuery.camelCase( name );\n\n\t\t// Make sure that we're working with the right name\n\t\tname = jQuery.cssProps[ origName ] ||\n\t\t\t( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );\n\n\t\t// gets hook for the prefixed version\n\t\t// followed by the unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t//convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Return, converting to number if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( i, name ) {\n\tjQuery.cssHooks[ name ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// certain elements can have dimension info if we invisibly show them\n\t\t\t\t// however, it must have a current display style that would benefit from this\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\t\t\t\t\telem.offsetWidth === 0 ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, name, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, name, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar styles = extra && getStyles( elem );\n\t\t\treturn setPositiveNumber( elem, value, extra ?\n\t\t\t\taugmentWidthOrHeight(\n\t\t\t\t\telem,\n\t\t\t\t\tname,\n\t\t\t\t\textra,\n\t\t\t\t\tsupport.boxSizing &&\n\t\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\t\tstyles\n\t\t\t\t) : 0\n\t\t\t);\n\t\t}\n\t};\n} );\n\nif ( !support.opacity ) {\n\tjQuery.cssHooks.opacity = {\n\t\tget: function( elem, computed ) {\n\n\t\t\t// IE uses filters for opacity\n\t\t\treturn ropacity.test( ( computed && elem.currentStyle ?\n\t\t\t\telem.currentStyle.filter :\n\t\t\t\telem.style.filter ) || \"\" ) ?\n\t\t\t\t\t( 0.01 * parseFloat( RegExp.$1 ) ) + \"\" :\n\t\t\t\t\tcomputed ? \"1\" : \"\";\n\t\t},\n\n\t\tset: function( elem, value ) {\n\t\t\tvar style = elem.style,\n\t\t\t\tcurrentStyle = elem.currentStyle,\n\t\t\t\topacity = jQuery.isNumeric( value ) ? \"alpha(opacity=\" + value * 100 + \")\" : \"\",\n\t\t\t\tfilter = currentStyle && currentStyle.filter || style.filter || \"\";\n\n\t\t\t// IE has trouble with opacity if it does not have layout\n\t\t\t// Force it by setting the zoom level\n\t\t\tstyle.zoom = 1;\n\n\t\t\t// if setting opacity to 1, and no other filters exist -\n\t\t\t// attempt to remove filter attribute #6652\n\t\t\t// if value === \"\", then remove inline opacity #12685\n\t\t\tif ( ( value >= 1 || value === \"\" ) &&\n\t\t\t\t\tjQuery.trim( filter.replace( ralpha, \"\" ) ) === \"\" &&\n\t\t\t\t\tstyle.removeAttribute ) {\n\n\t\t\t\t// Setting style.filter to null, \"\" & \" \" still leave \"filter:\" in the cssText\n\t\t\t\t// if \"filter:\" is present at all, clearType is disabled, we want to avoid this\n\t\t\t\t// style.removeAttribute is IE Only, but so apparently is this code path...\n\t\t\t\tstyle.removeAttribute( \"filter\" );\n\n\t\t\t\t// if there is no filter style applied in a css rule\n\t\t\t\t// or unset inline opacity, we are done\n\t\t\t\tif ( value === \"\" || currentStyle && !currentStyle.filter ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// otherwise, set new filter values\n\t\t\tstyle.filter = ralpha.test( filter ) ?\n\t\t\t\tfilter.replace( ralpha, opacity ) :\n\t\t\t\tfilter + \" \" + opacity;\n\t\t}\n\t};\n}\n\njQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn swap( elem, { \"display\": \"inline-block\" },\n\t\t\t\tcurCSS, [ elem, \"marginRight\" ] );\n\t\t}\n\t}\n);\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn (\n\t\t\t\tparseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\n\t\t\t\t// Support: IE<=11+\n\t\t\t\t// Running getBoundingClientRect on a disconnected node in IE throws an error\n\t\t\t\t// Support: IE8 only\n\t\t\t\t// getClientRects() errors on disconnected elems\n\t\t\t\t( jQuery.contains( elem.ownerDocument, elem ) ?\n\t\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t0\n\t\t\t\t)\n\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( !rmargin.test( prefix ) ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( jQuery.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t},\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHidden( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails\n\t\t\t// so, simple values such as \"10px\" are parsed to Float.\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// use step hook for back compat - use cssHook if its there - use .style if its\n\t\t\t// available and use plain properties where available\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 &&\n\t\t\t\t( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9\n// Panic based approach to setting things on disconnected nodes\n\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back Compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, timerId,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = jQuery.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\tattrs = { height: type },\n\t\ti = 0;\n\n\t// if we include width, step value is 1 to do all cssExpand values,\n\t// if we don't include width, step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4 ; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// we're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\t/* jshint validthis: true */\n\tvar prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHidden( elem ),\n\t\tdataShow = jQuery._data( elem, \"fxshow\" );\n\n\t// handle queue: false promises\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// doing this makes sure that the complete handler will be called\n\t\t\t// before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// height/width overflow pass\n\tif ( elem.nodeType === 1 && ( \"height\" in props || \"width\" in props ) ) {\n\n\t\t// Make sure that nothing sneaks out\n\t\t// Record all 3 overflow attributes because IE does not\n\t\t// change the overflow attribute when overflowX and\n\t\t// overflowY are set to the same value\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Set display property to inline-block for height/width\n\t\t// animations on inline elements that are having width/height animated\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\n\t\t// Test default display if display is currently \"none\"\n\t\tcheckDisplay = display === \"none\" ?\n\t\t\tjQuery._data( elem, \"olddisplay\" ) || defaultDisplay( elem.nodeName ) : display;\n\n\t\tif ( checkDisplay === \"inline\" && jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t// inline-level elements accept inline-block;\n\t\t\t// block-level elements need to be inline with layout\n\t\t\tif ( !support.inlineBlockNeedsLayout || defaultDisplay( elem.nodeName ) === \"inline\" ) {\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t} else {\n\t\t\t\tstyle.zoom = 1;\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tif ( !support.shrinkWrapBlocks() ) {\n\t\t\tanim.always( function() {\n\t\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t\t} );\n\t\t}\n\t}\n\n\t// show/hide pass\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.exec( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// If there is dataShow left over from a stopped hide or show\n\t\t\t\t// and we are going to proceed with show, we should pretend to be hidden\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\n\t\t// Any non-fx value stops us from restoring the original display value\n\t\t} else {\n\t\t\tdisplay = undefined;\n\t\t}\n\t}\n\n\tif ( !jQuery.isEmptyObject( orig ) ) {\n\t\tif ( dataShow ) {\n\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\thidden = dataShow.hidden;\n\t\t\t}\n\t\t} else {\n\t\t\tdataShow = jQuery._data( elem, \"fxshow\", {} );\n\t\t}\n\n\t\t// store state if its toggle - enables .stop().toggle() to \"reverse\"\n\t\tif ( toggle ) {\n\t\t\tdataShow.hidden = !hidden;\n\t\t}\n\t\tif ( hidden ) {\n\t\t\tjQuery( elem ).show();\n\t\t} else {\n\t\t\tanim.done( function() {\n\t\t\t\tjQuery( elem ).hide();\n\t\t\t} );\n\t\t}\n\t\tanim.done( function() {\n\t\t\tvar prop;\n\t\t\tjQuery._removeData( elem, \"fxshow\" );\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t}\n\t\t} );\n\t\tfor ( prop in orig ) {\n\t\t\ttween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\n\t\t\tif ( !( prop in dataShow ) ) {\n\t\t\t\tdataShow[ prop ] = tween.start;\n\t\t\t\tif ( hidden ) {\n\t\t\t\t\ttween.end = tween.start;\n\t\t\t\t\ttween.start = prop === \"width\" || prop === \"height\" ? 1 : 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t// If this is a noop like .hide().hide(), restore an overwritten display value\n\t} else if ( ( display === \"none\" ? defaultDisplay( elem.nodeName ) : display ) === \"inline\" ) {\n\t\tstyle.display = display;\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = jQuery.camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( jQuery.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// not quite $.extend, this wont overwrite keys already present.\n\t\t\t// also - reusing 'index' from above because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t} else {\n\t\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// if we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// resolve when we played the last frame\n\t\t\t\t// otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length ; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( jQuery.isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tjQuery.proxy( result.stop, result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( jQuery.isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\t// attach callbacks from options\n\treturn animation.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( jQuery.isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnotwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length ; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tjQuery.isFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !jQuery.isFunction( easing ) && easing\n\t};\n\n\topt.duration = jQuery.fx.off ? 0 : typeof opt.duration === \"number\" ? opt.duration :\n\t\topt.duration in jQuery.fx.speeds ?\n\t\t\tjQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;\n\n\t// normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( jQuery.isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHidden ).css( \"opacity\", 0 ).show()\n\n\t\t\t// animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || jQuery._data( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = jQuery._data( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// start the next in the queue if the last step wasn't forced\n\t\t\t// timers currently will call their complete callbacks, which will dequeue\n\t\t\t// but only if they were gotoEnd\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = jQuery._data( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ttimers = jQuery.timers,\n\t\ti = 0;\n\n\tfxNow = jQuery.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Checks the timer has not already been removed\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tif ( timer() ) {\n\t\tjQuery.fx.start();\n\t} else {\n\t\tjQuery.timers.pop();\n\t}\n};\n\njQuery.fx.interval = 13;\n\njQuery.fx.start = function() {\n\tif ( !timerId ) {\n\t\ttimerId = window.setInterval( jQuery.fx.tick, jQuery.fx.interval );\n\t}\n};\n\njQuery.fx.stop = function() {\n\twindow.clearInterval( timerId );\n\ttimerId = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// http://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar a,\n\t\tinput = document.createElement( \"input\" ),\n\t\tdiv = document.createElement( \"div\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\t// Setup\n\tdiv = document.createElement( \"div\" );\n\tdiv.setAttribute( \"className\", \"t\" );\n\tdiv.innerHTML = \" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>\";\n\ta = div.getElementsByTagName( \"a\" )[ 0 ];\n\n\t// Support: Windows Web Apps (WWA)\n\t// `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"checkbox\" );\n\tdiv.appendChild( input );\n\n\ta = div.getElementsByTagName( \"a\" )[ 0 ];\n\n\t// First batch of tests.\n\ta.style.cssText = \"top:1px\";\n\n\t// Test setAttribute on camelCase class.\n\t// If it works, we need attrFixes when doing get/setAttribute (ie6/7)\n\tsupport.getSetAttribute = div.className !== \"t\";\n\n\t// Get the style information from getAttribute\n\t// (IE uses .cssText instead)\n\tsupport.style = /top/.test( a.getAttribute( \"style\" ) );\n\n\t// Make sure that URLs aren't manipulated\n\t// (IE normalizes it by default)\n\tsupport.hrefNormalized = a.getAttribute( \"href\" ) === \"/a\";\n\n\t// Check the default checkbox/radio value (\"\" on WebKit; \"on\" elsewhere)\n\tsupport.checkOn = !!input.value;\n\n\t// Make sure that a selected-by-default option has a working selected property.\n\t// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)\n\tsupport.optSelected = opt.selected;\n\n\t// Tests for enctype support on a form (#6743)\n\tsupport.enctype = !!document.createElement( \"form\" ).enctype;\n\n\t// Make sure that the options inside disabled selects aren't marked as disabled\n\t// (WebKit marks them as disabled)\n\tselect.disabled = true;\n\tsupport.optDisabled = !opt.disabled;\n\n\t// Support: IE8 only\n\t// Check if we can trust getAttribute(\"value\")\n\tinput = document.createElement( \"input\" );\n\tinput.setAttribute( \"value\", \"\" );\n\tsupport.input = input.getAttribute( \"value\" ) === \"\";\n\n\t// Check if an input maintains its value after becoming a radio\n\tinput.value = \"t\";\n\tinput.setAttribute( \"type\", \"radio\" );\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar rreturn = /\\r/g,\n\trspaces = /[\\x20\\t\\r\\n\\f]+/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, isFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif (\n\t\t\t\t\thooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\treturn typeof ret === \"string\" ?\n\n\t\t\t\t\t// handle most common string cases\n\t\t\t\t\tret.replace( rreturn, \"\" ) :\n\n\t\t\t\t\t// handle cases where value is null/undef or number\n\t\t\t\t\tret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tisFunction = jQuery.isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( isFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\t\t\t} else if ( jQuery.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE10-11+\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tjQuery.trim( jQuery.text( elem ) ).replace( rspaces, \" \" );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\" || index < 0,\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length,\n\t\t\t\t\ti = index < 0 ?\n\t\t\t\t\t\tmax :\n\t\t\t\t\t\tone ? index : 0;\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// oldIE doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t( support.optDisabled ?\n\t\t\t\t\t\t\t\t!option.disabled :\n\t\t\t\t\t\t\t\toption.getAttribute( \"disabled\" ) === null ) &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!jQuery.nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 ) {\n\n\t\t\t\t\t\t// Support: IE6\n\t\t\t\t\t\t// When new option element is added to select box we need to\n\t\t\t\t\t\t// force reflow of newly added node in order to workaround delay\n\t\t\t\t\t\t// of initialization properties\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\toption.selected = optionSet = true;\n\n\t\t\t\t\t\t} catch ( _ ) {\n\n\t\t\t\t\t\t\t// Will be executed only in IE6\n\t\t\t\t\t\t\toption.scrollHeight;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\toption.selected = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\n\t\t\t\treturn options;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( jQuery.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\nvar nodeHook, boolHook,\n\tattrHandle = jQuery.expr.attrHandle,\n\truseDefault = /^(?:checked|selected)$/i,\n\tgetSetAttribute = support.getSetAttribute,\n\tgetSetInput = support.input;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// All attributes are lowercase\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\tname = name.toLowerCase();\n\t\t\thooks = jQuery.attrHooks[ name ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tjQuery.nodeName( elem, \"input\" ) ) {\n\n\t\t\t\t\t// Setting the type on a radio button after the value resets the value in IE8-9\n\t\t\t\t\t// Reset value to default in case type is set after value during creation\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name, propName,\n\t\t\ti = 0,\n\t\t\tattrNames = value && value.match( rnotwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\tpropName = jQuery.propFix[ name ] || name;\n\n\t\t\t\t// Boolean attributes get special treatment (#10870)\n\t\t\t\tif ( jQuery.expr.match.bool.test( name ) ) {\n\n\t\t\t\t\t// Set corresponding property to false\n\t\t\t\t\tif ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {\n\t\t\t\t\t\telem[ propName ] = false;\n\n\t\t\t\t\t// Support: IE<9\n\t\t\t\t\t// Also clear defaultChecked/defaultSelected (if appropriate)\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem[ jQuery.camelCase( \"default-\" + name ) ] =\n\t\t\t\t\t\t\telem[ propName ] = false;\n\t\t\t\t\t}\n\n\t\t\t\t// See #9699 for explanation of this approach (setting first, then removal)\n\t\t\t\t} else {\n\t\t\t\t\tjQuery.attr( elem, name, \"\" );\n\t\t\t\t}\n\n\t\t\t\telem.removeAttribute( getSetAttribute ? name : propName );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {\n\n\t\t\t// IE<8 needs the *property* name\n\t\t\telem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );\n\n\t\t} else {\n\n\t\t\t// Support: IE<9\n\t\t\t// Use defaultChecked and defaultSelected for oldIE\n\t\t\telem[ jQuery.camelCase( \"default-\" + name ) ] = elem[ name ] = true;\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tif ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {\n\t\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\t\tvar ret, handle;\n\t\t\tif ( !isXML ) {\n\n\t\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\t\thandle = attrHandle[ name ];\n\t\t\t\tattrHandle[ name ] = ret;\n\t\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\t\tname.toLowerCase() :\n\t\t\t\t\tnull;\n\t\t\t\tattrHandle[ name ] = handle;\n\t\t\t}\n\t\t\treturn ret;\n\t\t};\n\t} else {\n\t\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\t\tif ( !isXML ) {\n\t\t\t\treturn elem[ jQuery.camelCase( \"default-\" + name ) ] ?\n\t\t\t\t\tname.toLowerCase() :\n\t\t\t\t\tnull;\n\t\t\t}\n\t\t};\n\t}\n} );\n\n// fix oldIE attroperties\nif ( !getSetInput || !getSetAttribute ) {\n\tjQuery.attrHooks.value = {\n\t\tset: function( elem, value, name ) {\n\t\t\tif ( jQuery.nodeName( elem, \"input\" ) ) {\n\n\t\t\t\t// Does not return so that setAttribute is also used\n\t\t\t\telem.defaultValue = value;\n\t\t\t} else {\n\n\t\t\t\t// Use nodeHook if defined (#1954); otherwise setAttribute is fine\n\t\t\t\treturn nodeHook && nodeHook.set( elem, value, name );\n\t\t\t}\n\t\t}\n\t};\n}\n\n// IE6/7 do not support getting/setting some attributes with get/setAttribute\nif ( !getSetAttribute ) {\n\n\t// Use this for any attribute in IE6/7\n\t// This fixes almost every IE6/7 issue\n\tnodeHook = {\n\t\tset: function( elem, value, name ) {\n\n\t\t\t// Set the existing or create a new attribute node\n\t\t\tvar ret = elem.getAttributeNode( name );\n\t\t\tif ( !ret ) {\n\t\t\t\telem.setAttributeNode(\n\t\t\t\t\t( ret = elem.ownerDocument.createAttribute( name ) )\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tret.value = value += \"\";\n\n\t\t\t// Break association with cloned elements by also using setAttribute (#9646)\n\t\t\tif ( name === \"value\" || value === elem.getAttribute( name ) ) {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t};\n\n\t// Some attributes are constructed with empty-string values when not defined\n\tattrHandle.id = attrHandle.name = attrHandle.coords =\n\t\tfunction( elem, name, isXML ) {\n\t\t\tvar ret;\n\t\t\tif ( !isXML ) {\n\t\t\t\treturn ( ret = elem.getAttributeNode( name ) ) && ret.value !== \"\" ?\n\t\t\t\t\tret.value :\n\t\t\t\t\tnull;\n\t\t\t}\n\t\t};\n\n\t// Fixing value retrieval on a button requires this module\n\tjQuery.valHooks.button = {\n\t\tget: function( elem, name ) {\n\t\t\tvar ret = elem.getAttributeNode( name );\n\t\t\tif ( ret && ret.specified ) {\n\t\t\t\treturn ret.value;\n\t\t\t}\n\t\t},\n\t\tset: nodeHook.set\n\t};\n\n\t// Set contenteditable to false on removals(#10429)\n\t// Setting to empty string throws an error as an invalid value\n\tjQuery.attrHooks.contenteditable = {\n\t\tset: function( elem, value, name ) {\n\t\t\tnodeHook.set( elem, value === \"\" ? false : value, name );\n\t\t}\n\t};\n\n\t// Set width and height to auto instead of 0 on empty string( Bug #8150 )\n\t// This is for removals\n\tjQuery.each( [ \"width\", \"height\" ], function( i, name ) {\n\t\tjQuery.attrHooks[ name ] = {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( value === \"\" ) {\n\t\t\t\t\telem.setAttribute( name, \"auto\" );\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\n\nif ( !support.style ) {\n\tjQuery.attrHooks.style = {\n\t\tget: function( elem ) {\n\n\t\t\t// Return undefined in the case of empty string\n\t\t\t// Note: IE uppercases css property names, but if we were to .toLowerCase()\n\t\t\t// .cssText, that would destroy case sensitivity in URL's, like in \"background\"\n\t\t\treturn elem.style.cssText || undefined;\n\t\t},\n\t\tset: function( elem, value ) {\n\t\t\treturn ( elem.style.cssText = value + \"\" );\n\t\t}\n\t};\n}\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button|object)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\tname = jQuery.propFix[ name ] || name;\n\t\treturn this.each( function() {\n\n\t\t\t// try/catch handles cases where IE balks (such as removing a property on window)\n\t\t\ttry {\n\t\t\t\tthis[ name ] = undefined;\n\t\t\t\tdelete this[ name ];\n\t\t\t} catch ( e ) {}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\treturn tabindex ?\n\t\t\t\t\tparseInt( tabindex, 10 ) :\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\t\trclickable.test( elem.nodeName ) && elem.href ?\n\t\t\t\t\t\t\t0 :\n\t\t\t\t\t\t\t-1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Some attributes require a special call on IE\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !support.hrefNormalized ) {\n\n\t// href/src property should get the full normalized URL (#10299/#12915)\n\tjQuery.each( [ \"href\", \"src\" ], function( i, name ) {\n\t\tjQuery.propHooks[ name ] = {\n\t\t\tget: function( elem ) {\n\t\t\t\treturn elem.getAttribute( name, 4 );\n\t\t\t}\n\t\t};\n\t} );\n}\n\n// Support: Safari, IE9+\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\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\t// Make sure that it also works with optgroups, see #5701\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n// IE6/7 call enctype encoding\nif ( !support.enctype ) {\n\tjQuery.propFix.enctype = \"encoding\";\n}\n\n\n\n\nvar rclass = /[\\t\\r\\n\\f]/g;\n\nfunction getClass( elem ) {\n\treturn jQuery.attr( elem, \"class\" ) || \"\";\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnotwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 &&\n\t\t\t\t\t( \" \" + curValue + \" \" ).replace( rclass, \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = jQuery.trim( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tjQuery.attr( elem, \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnotwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 &&\n\t\t\t\t\t( \" \" + curValue + \" \" ).replace( rclass, \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = jQuery.trim( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tjQuery.attr( elem, \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value;\n\n\t\tif ( typeof stateVal === \"boolean\" && type === \"string\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( type === \"string\" ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = value.match( rnotwhite ) || [];\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// store className if set\n\t\t\t\t\tjQuery._data( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed \"false\",\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tjQuery.attr( this, \"class\",\n\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\"\" :\n\t\t\t\t\tjQuery._data( this, \"__className__\" ) || \"\"\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + getClass( elem ) + \" \" ).replace( rclass, \" \" )\n\t\t\t\t\t.indexOf( className ) > -1\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\njQuery.each( ( \"blur focus focusin focusout load resize scroll unload click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup error contextmenu\" ).split( \" \" ),\n\tfunction( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n} );\n\njQuery.fn.extend( {\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\n\nvar location = window.location;\n\nvar nonce = jQuery.now();\n\nvar rquery = ( /\\?/ );\n\n\n\nvar rvalidtokens = /(,)|(\\[|{)|(}|])|\"(?:[^\"\\\\\\r\\n]|\\\\[\"\\\\\\/bfnrt]|\\\\u[\\da-fA-F]{4})*\"\\s*:?|true|false|null|-?(?!0\\d)\\d+(?:\\.\\d+|)(?:[eE][+-]?\\d+|)/g;\n\njQuery.parseJSON = function( data ) {\n\n\t// Attempt to parse using the native JSON parser first\n\tif ( window.JSON && window.JSON.parse ) {\n\n\t\t// Support: Android 2.3\n\t\t// Workaround failure to string-cast null input\n\t\treturn window.JSON.parse( data + \"\" );\n\t}\n\n\tvar requireNonComma,\n\t\tdepth = null,\n\t\tstr = jQuery.trim( data + \"\" );\n\n\t// Guard against invalid (and possibly dangerous) input by ensuring that nothing remains\n\t// after removing valid tokens\n\treturn str && !jQuery.trim( str.replace( rvalidtokens, function( token, comma, open, close ) {\n\n\t\t// Force termination if we see a misplaced comma\n\t\tif ( requireNonComma && comma ) {\n\t\t\tdepth = 0;\n\t\t}\n\n\t\t// Perform no more replacements after returning to outermost depth\n\t\tif ( depth === 0 ) {\n\t\t\treturn token;\n\t\t}\n\n\t\t// Commas must not follow \"[\", \"{\", or \",\"\n\t\trequireNonComma = open || comma;\n\n\t\t// Determine new depth\n\t\t// array/object open (\"[\" or \"{\"): depth += true - false (increment)\n\t\t// array/object close (\"]\" or \"}\"): depth += false - true (decrement)\n\t\t// other cases (\",\" or primitive): depth += true - true (numeric cast)\n\t\tdepth += !close - !open;\n\n\t\t// Remove this token\n\t\treturn \"\";\n\t} ) ) ?\n\t\t( Function( \"return \" + str ) )() :\n\t\tjQuery.error( \"Invalid JSON: \" + data );\n};\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, tmp;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\ttry {\n\t\tif ( window.DOMParser ) { // Standard\n\t\t\ttmp = new window.DOMParser();\n\t\t\txml = tmp.parseFromString( data, \"text/xml\" );\n\t\t} else { // IE\n\t\t\txml = new window.ActiveXObject( \"Microsoft.XMLDOM\" );\n\t\t\txml.async = \"false\";\n\t\t\txml.loadXML( data );\n\t\t}\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\tif ( !xml || !xml.documentElement || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trhash = /#.*$/,\n\trts = /([?&])_=[^&]*/,\n\n\t// IE leaves an \\r character at EOL\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\trurl = /^([\\w.+-]+:)(?:\\/\\/(?:[^\\/?#]*@|)([^\\/?#:]*)(?::(\\d+)|)|)/,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Document location\n\tajaxLocation = location.href,\n\n\t// Segment location into parts\n\tajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];\n\n\t\tif ( jQuery.isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType.charAt( 0 ) === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar deep, key,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\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 */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\tvar firstDataType, ct, finalDataType, type,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s[ \"throws\" ] ) { // jscs:ignore requireDotNotation\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: ajaxLocation,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": jQuery.parseJSON,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar\n\n\t\t\t// Cross-domain detection vars\n\t\t\tparts,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers as string\n\t\t\tresponseHeadersString,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\ttransport,\n\n\t\t\t// Response headers\n\t\t\tresponseHeaders,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// The jqXHR state\n\t\t\tstate = 0,\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( state === 2 ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn state === 2 ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tvar lname = name.toLowerCase();\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\tname = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\t\t\tfor ( code in map ) {\n\n\t\t\t\t\t\t\t\t// Lazy-add the new callback in a way that preserves old ones\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR ).complete = completeDeferred.add;\n\t\tjqXHR.success = jqXHR.done;\n\t\tjqXHR.error = jqXHR.fail;\n\n\t\t// Remove hash character (#7531: and string promotion)\n\t\t// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || ajaxLocation ) + \"\" )\n\t\t\t.replace( rhash, \"\" )\n\t\t\t.replace( rprotocol, ajaxLocParts[ 1 ] + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = jQuery.trim( s.dataType || \"*\" ).toLowerCase().match( rnotwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when we have a protocol:host:port mismatch\n\t\tif ( s.crossDomain == null ) {\n\t\t\tparts = rurl.exec( s.url.toLowerCase() );\n\t\t\ts.crossDomain = !!( parts &&\n\t\t\t\t( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||\n\t\t\t\t\t( parts[ 3 ] || ( parts[ 1 ] === \"http:\" ? \"80\" : \"443\" ) ) !==\n\t\t\t\t\t\t( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === \"http:\" ? \"80\" : \"443\" ) ) )\n\t\t\t);\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( state === 2 ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\tcacheURL = s.url;\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// If data is available, append data to url\n\t\t\tif ( s.data ) {\n\t\t\t\tcacheURL = ( s.url += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data );\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add anti-cache in url if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\ts.url = rts.test( cacheURL ) ?\n\n\t\t\t\t\t// If there is already a '_' parameter, set its value\n\t\t\t\t\tcacheURL.replace( rts, \"$1_=\" + nonce++ ) :\n\n\t\t\t\t\t// Otherwise add one to the end\n\t\t\t\t\tcacheURL + ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + nonce++;\n\t\t\t}\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tfor ( i in { success: 1, error: 1, complete: 1 } ) {\n\t\t\tjqXHR[ i ]( s[ i ] );\n\t\t}\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tstate = 1;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Propagate exception as error if not done\n\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\tdone( -1, e );\n\n\t\t\t\t// Simply rethrow otherwise\n\t\t\t\t} else {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Called once\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// State is \"done\" now\n\t\t\tstate = 2;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// We extract error from statusText\n\t\t\t\t// then normalize statusText and status for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// shift arguments if data argument was omitted\n\t\tif ( jQuery.isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\n\njQuery._evalUrl = function( url ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\t\t\"throws\": true\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapAll( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( this[ 0 ] ) {\n\n\t\t\t// The elements to wrap the target around\n\t\t\tvar wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstChild && elem.firstChild.nodeType === 1 ) {\n\t\t\t\t\telem = elem.firstChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar isFunction = jQuery.isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function() {\n\t\treturn this.parent().each( function() {\n\t\t\tif ( !jQuery.nodeName( this, \"body\" ) ) {\n\t\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t\t}\n\t\t} ).end();\n\t}\n} );\n\n\nfunction getDisplay( elem ) {\n\treturn elem.style && elem.style.display || jQuery.css( elem, \"display\" );\n}\n\nfunction filterHidden( elem ) {\n\n\t// Disconnected elements are considered hidden\n\tif ( !jQuery.contains( elem.ownerDocument || document, elem ) ) {\n\t\treturn true;\n\t}\n\twhile ( elem && elem.nodeType === 1 ) {\n\t\tif ( getDisplay( elem ) === \"none\" || elem.type === \"hidden\" ) {\n\t\t\treturn true;\n\t\t}\n\t\telem = elem.parentNode;\n\t}\n\treturn false;\n}\n\njQuery.expr.filters.hidden = function( elem ) {\n\n\t// Support: Opera <= 12.12\n\t// Opera reports offsetWidths and offsetHeights less than zero on some elements\n\treturn support.reliableHiddenOffsets() ?\n\t\t( elem.offsetWidth <= 0 && elem.offsetHeight <= 0 &&\n\t\t\t!elem.getClientRects().length ) :\n\t\t\tfilterHidden( elem );\n};\n\njQuery.expr.filters.visible = function( elem ) {\n\treturn !jQuery.expr.filters.hidden( elem );\n};\n\n\n\n\nvar r20 = /%20/g,\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( jQuery.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && jQuery.type( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, value ) {\n\n\t\t\t// If value is a function, invoke it and return its value\n\t\t\tvalue = jQuery.isFunction( value ) ? value() : ( value == null ? \"\" : value );\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" + encodeURIComponent( value );\n\t\t};\n\n\t// Set traditional to true for jQuery <= 1.3.2 behavior.\n\tif ( traditional === undefined ) {\n\t\ttraditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" ).replace( r20, \"+\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is(\":disabled\") so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\treturn val == null ?\n\t\t\t\tnull :\n\t\t\t\tjQuery.isArray( val ) ?\n\t\t\t\t\tjQuery.map( val, function( val ) {\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t\t} ) :\n\t\t\t\t\t{ name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\n// Create the request object\n// (This is still attached to ajaxSettings for backward compatibility)\njQuery.ajaxSettings.xhr = window.ActiveXObject !== undefined ?\n\n\t// Support: IE6-IE8\n\tfunction() {\n\n\t\t// XHR cannot access local files, always use ActiveX for that case\n\t\tif ( this.isLocal ) {\n\t\t\treturn createActiveXHR();\n\t\t}\n\n\t\t// Support: IE 9-11\n\t\t// IE seems to error on cross-domain PATCH requests when ActiveX XHR\n\t\t// is used. In IE 9+ always use the native XHR.\n\t\t// Note: this condition won't catch Edge as it doesn't define\n\t\t// document.documentMode but it also doesn't support ActiveX so it won't\n\t\t// reach this code.\n\t\tif ( document.documentMode > 8 ) {\n\t\t\treturn createStandardXHR();\n\t\t}\n\n\t\t// Support: IE<9\n\t\t// oldIE XHR does not support non-RFC2616 methods (#13240)\n\t\t// See http://msdn.microsoft.com/en-us/library/ie/ms536648(v=vs.85).aspx\n\t\t// and http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9\n\t\t// Although this check for six methods instead of eight\n\t\t// since IE also does not support \"trace\" and \"connect\"\n\t\treturn /^(get|post|head|put|delete|options)$/i.test( this.type ) &&\n\t\t\tcreateStandardXHR() || createActiveXHR();\n\t} :\n\n\t// For all other browsers, use the standard XMLHttpRequest object\n\tcreateStandardXHR;\n\nvar xhrId = 0,\n\txhrCallbacks = {},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\n// Support: IE<10\n// Open requests must be manually aborted on unload (#5280)\n// See https://support.microsoft.com/kb/2856746 for more info\nif ( window.attachEvent ) {\n\twindow.attachEvent( \"onunload\", function() {\n\t\tfor ( var key in xhrCallbacks ) {\n\t\t\txhrCallbacks[ key ]( undefined, true );\n\t\t}\n\t} );\n}\n\n// Determine support properties\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nxhrSupported = support.ajax = !!xhrSupported;\n\n// Create transport if the browser can provide an xhr\nif ( xhrSupported ) {\n\n\tjQuery.ajaxTransport( function( options ) {\n\n\t\t// Cross domain only allowed if supported through XMLHttpRequest\n\t\tif ( !options.crossDomain || support.cors ) {\n\n\t\t\tvar callback;\n\n\t\t\treturn {\n\t\t\t\tsend: function( headers, complete ) {\n\t\t\t\t\tvar i,\n\t\t\t\t\t\txhr = options.xhr(),\n\t\t\t\t\t\tid = ++xhrId;\n\n\t\t\t\t\t// Open the socket\n\t\t\t\t\txhr.open(\n\t\t\t\t\t\toptions.type,\n\t\t\t\t\t\toptions.url,\n\t\t\t\t\t\toptions.async,\n\t\t\t\t\t\toptions.username,\n\t\t\t\t\t\toptions.password\n\t\t\t\t\t);\n\n\t\t\t\t\t// Apply custom fields if provided\n\t\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override mime type if needed\n\t\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t\t}\n\n\t\t\t\t\t// X-Requested-With header\n\t\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set headers\n\t\t\t\t\tfor ( i in headers ) {\n\n\t\t\t\t\t\t// Support: IE<9\n\t\t\t\t\t\t// IE's ActiveXObject throws a 'Type Mismatch' exception when setting\n\t\t\t\t\t\t// request header to a null-value.\n\t\t\t\t\t\t//\n\t\t\t\t\t\t// To keep consistent with other XHR implementations, cast the value\n\t\t\t\t\t\t// to string and ignore `undefined`.\n\t\t\t\t\t\tif ( headers[ i ] !== undefined ) {\n\t\t\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] + \"\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Do send the request\n\t\t\t\t\t// This may raise an exception which is actually\n\t\t\t\t\t// handled in jQuery.ajax (so no try/catch here)\n\t\t\t\t\txhr.send( ( options.hasContent && options.data ) || null );\n\n\t\t\t\t\t// Listener\n\t\t\t\t\tcallback = function( _, isAbort ) {\n\t\t\t\t\t\tvar status, statusText, responses;\n\n\t\t\t\t\t\t// Was never called and is aborted or complete\n\t\t\t\t\t\tif ( callback && ( isAbort || xhr.readyState === 4 ) ) {\n\n\t\t\t\t\t\t\t// Clean up\n\t\t\t\t\t\t\tdelete xhrCallbacks[ id ];\n\t\t\t\t\t\t\tcallback = undefined;\n\t\t\t\t\t\t\txhr.onreadystatechange = jQuery.noop;\n\n\t\t\t\t\t\t\t// Abort manually if needed\n\t\t\t\t\t\t\tif ( isAbort ) {\n\t\t\t\t\t\t\t\tif ( xhr.readyState !== 4 ) {\n\t\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tresponses = {};\n\t\t\t\t\t\t\t\tstatus = xhr.status;\n\n\t\t\t\t\t\t\t\t// Support: IE<10\n\t\t\t\t\t\t\t\t// Accessing binary-data responseText throws an exception\n\t\t\t\t\t\t\t\t// (#11426)\n\t\t\t\t\t\t\t\tif ( typeof xhr.responseText === \"string\" ) {\n\t\t\t\t\t\t\t\t\tresponses.text = xhr.responseText;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Firefox throws an exception when accessing\n\t\t\t\t\t\t\t\t// statusText for faulty cross-domain requests\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tstatusText = xhr.statusText;\n\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t// We normalize with Webkit giving an empty statusText\n\t\t\t\t\t\t\t\t\tstatusText = \"\";\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Filter status for non standard behaviors\n\n\t\t\t\t\t\t\t\t// If the request is local and we have data: assume a success\n\t\t\t\t\t\t\t\t// (success with no data won't get notified, that's the best we\n\t\t\t\t\t\t\t\t// can do given current implementations)\n\t\t\t\t\t\t\t\tif ( !status && options.isLocal && !options.crossDomain ) {\n\t\t\t\t\t\t\t\t\tstatus = responses.text ? 200 : 404;\n\n\t\t\t\t\t\t\t\t// IE - #1450: sometimes returns 1223 when it should be 204\n\t\t\t\t\t\t\t\t} else if ( status === 1223 ) {\n\t\t\t\t\t\t\t\t\tstatus = 204;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Call complete if needed\n\t\t\t\t\t\tif ( responses ) {\n\t\t\t\t\t\t\tcomplete( status, statusText, responses, xhr.getAllResponseHeaders() );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\t// Do send the request\n\t\t\t\t\t// `xhr.send` may raise an exception, but it will be\n\t\t\t\t\t// handled in jQuery.ajax (so no try/catch here)\n\t\t\t\t\tif ( !options.async ) {\n\n\t\t\t\t\t\t// If we're in sync mode we fire the callback\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t} else if ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t// (IE6 & IE7) if it's in cache and has been\n\t\t\t\t\t\t// retrieved directly we need to fire the callback\n\t\t\t\t\t\twindow.setTimeout( callback );\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Register the callback, but delay it in case `xhr.send` throws\n\t\t\t\t\t\t// Add to the list of active xhr callbacks\n\t\t\t\t\t\txhr.onreadystatechange = xhrCallbacks[ id ] = callback;\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tabort: function() {\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tcallback( undefined, true );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t} );\n}\n\n// Functions to create xhrs\nfunction createStandardXHR() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n}\n\nfunction createActiveXHR() {\n\ttry {\n\t\treturn new window.ActiveXObject( \"Microsoft.XMLHTTP\" );\n\t} catch ( e ) {}\n}\n\n\n\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and global\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t\ts.global = false;\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\n\t\tvar script,\n\t\t\thead = document.head || jQuery( \"head\" )[ 0 ] || document.documentElement;\n\n\t\treturn {\n\n\t\t\tsend: function( _, callback ) {\n\n\t\t\t\tscript = document.createElement( \"script\" );\n\n\t\t\t\tscript.async = true;\n\n\t\t\t\tif ( s.scriptCharset ) {\n\t\t\t\t\tscript.charset = s.scriptCharset;\n\t\t\t\t}\n\n\t\t\t\tscript.src = s.url;\n\n\t\t\t\t// Attach handlers for all browsers\n\t\t\t\tscript.onload = script.onreadystatechange = function( _, isAbort ) {\n\n\t\t\t\t\tif ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {\n\n\t\t\t\t\t\t// Handle memory leak in IE\n\t\t\t\t\t\tscript.onload = script.onreadystatechange = null;\n\n\t\t\t\t\t\t// Remove the script\n\t\t\t\t\t\tif ( script.parentNode ) {\n\t\t\t\t\t\t\tscript.parentNode.removeChild( script );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Dereference the script\n\t\t\t\t\t\tscript = null;\n\n\t\t\t\t\t\t// Callback if not abort\n\t\t\t\t\t\tif ( !isAbort ) {\n\t\t\t\t\t\t\tcallback( 200, \"success\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\t// Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\thead.insertBefore( script, head.firstChild );\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( script ) {\n\t\t\t\t\tscript.onload( undefined, true );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && jQuery.isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// data: 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\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\tcontext = context || document;\n\n\tvar parsed = rsingleTag.exec( data ),\n\t\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n// Keep a copy of the old load method\nvar _load = jQuery.fn.load;\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tif ( typeof url !== \"string\" && _load ) {\n\t\treturn _load.apply( this, arguments );\n\t}\n\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = jQuery.trim( url.slice( off, url.length ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( jQuery.isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.expr.filters.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\n\n/**\n * Gets a window from an element\n */\nfunction getWindow( elem ) {\n\treturn jQuery.isWindow( elem ) ?\n\t\telem :\n\t\telem.nodeType === 9 ?\n\t\t\telem.defaultView || elem.parentWindow :\n\t\t\tfalse;\n}\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\tjQuery.inArray( \"auto\", [ curCSSTop, curCSSLeft ] ) > -1;\n\n\t\t// need to be able to calculate position if either top or left\n\t\t// is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( jQuery.isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\toffset: function( options ) {\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar docElem, win,\n\t\t\tbox = { top: 0, left: 0 },\n\t\t\telem = this[ 0 ],\n\t\t\tdoc = elem && elem.ownerDocument;\n\n\t\tif ( !doc ) {\n\t\t\treturn;\n\t\t}\n\n\t\tdocElem = doc.documentElement;\n\n\t\t// Make sure it's not a disconnected DOM node\n\t\tif ( !jQuery.contains( docElem, elem ) ) {\n\t\t\treturn box;\n\t\t}\n\n\t\t// If we don't have gBCR, just use 0,0 rather than error\n\t\t// BlackBerry 5, iOS 3 (original iPhone)\n\t\tif ( typeof elem.getBoundingClientRect !== \"undefined\" ) {\n\t\t\tbox = elem.getBoundingClientRect();\n\t\t}\n\t\twin = getWindow( doc );\n\t\treturn {\n\t\t\ttop: box.top + ( win.pageYOffset || docElem.scrollTop ) - ( docElem.clientTop || 0 ),\n\t\t\tleft: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )\n\t\t};\n\t},\n\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset,\n\t\t\tparentOffset = { top: 0, left: 0 },\n\t\t\telem = this[ 0 ];\n\n\t\t// Fixed elements are offset from window (parentOffset = {top:0, left: 0},\n\t\t// because it is its only offset parent\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// we assume that getBoundingClientRect is available when computed position is fixed\n\t\t\toffset = elem.getBoundingClientRect();\n\t\t} else {\n\n\t\t\t// Get *real* offsetParent\n\t\t\toffsetParent = this.offsetParent();\n\n\t\t\t// Get correct offsets\n\t\t\toffset = this.offset();\n\t\t\tif ( !jQuery.nodeName( offsetParent[ 0 ], \"html\" ) ) {\n\t\t\t\tparentOffset = offsetParent.offset();\n\t\t\t}\n\n\t\t\t// Add offsetParent borders\n\t\t\tparentOffset.top += jQuery.css( offsetParent[ 0 ], \"borderTopWidth\", true );\n\t\t\tparentOffset.left += jQuery.css( offsetParent[ 0 ], \"borderLeftWidth\", true );\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\t// note: when an element has margin: auto the offsetLeft and marginLeft\n\t\t// are the same in Safari causing offset.left to incorrectly be 0\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && ( !jQuery.nodeName( offsetParent, \"html\" ) &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = /Y/.test( prop );\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\t\t\tvar win = getWindow( elem );\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? ( prop in win ) ? win[ prop ] :\n\t\t\t\t\twin.document.documentElement[ method ] :\n\t\t\t\t\telem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : jQuery( win ).scrollLeft(),\n\t\t\t\t\ttop ? val : jQuery( win ).scrollTop()\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length, null );\n\t};\n} );\n\n// Support: Safari<7-8+, Chrome<37-44+\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// getComputedStyle returns percent when specified for top/left/bottom/right\n// rather than make the css module depend on the offset module, we just check for it here\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// if curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\tfunction( defaultExtra, funcName ) {\n\n\t\t// margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there\n\t\t\t\t\t// isn't a whole lot we can do. See pull request at this URL for discussion:\n\t\t\t\t\t// https://github.com/jquery/jquery/pull/764\n\t\t\t\t\treturn elem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\t// unfortunately, this causes bug #3838 in IE6/8 only,\n\t\t\t\t\t// but there is currently no good, small way to fix it.\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable, null );\n\t\t};\n\t} );\n} );\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t}\n} );\n\n// The number of elements contained in the matched element set\njQuery.fn.size = function() {\n\treturn this.length;\n};\n\njQuery.fn.andSelf = jQuery.fn.addBack;\n\n\n\n\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\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\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in\n// AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( !noGlobal ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\nreturn jQuery;\n}));\n","/*!\n * Outlayer v2.1.1\n * the brains and guts of a layout library\n * MIT license\n */\n\n( function( window, factory ) {\n 'use strict';\n // universal module definition\n /* jshint strict: false */ /* globals define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD - RequireJS\n define( [\n 'ev-emitter/ev-emitter',\n 'get-size/get-size',\n 'fizzy-ui-utils/utils',\n './item'\n ],\n function( EvEmitter, getSize, utils, Item ) {\n return factory( window, EvEmitter, getSize, utils, Item);\n }\n );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS - Browserify, Webpack\n module.exports = factory(\n window,\n require('ev-emitter'),\n require('get-size'),\n require('fizzy-ui-utils'),\n require('./item')\n );\n } else {\n // browser global\n window.Outlayer = factory(\n window,\n window.EvEmitter,\n window.getSize,\n window.fizzyUIUtils,\n window.Outlayer.Item\n );\n }\n\n}( window, function factory( window, EvEmitter, getSize, utils, Item ) {\n'use strict';\n\n// ----- vars ----- //\n\nvar console = window.console;\nvar jQuery = window.jQuery;\nvar noop = function() {};\n\n// -------------------------- Outlayer -------------------------- //\n\n// globally unique identifiers\nvar GUID = 0;\n// internal store of all Outlayer intances\nvar instances = {};\n\n\n/**\n * @param {Element, String} element\n * @param {Object} options\n * @constructor\n */\nfunction Outlayer( element, options ) {\n var queryElement = utils.getQueryElement( element );\n if ( !queryElement ) {\n if ( console ) {\n console.error( 'Bad element for ' + this.constructor.namespace +\n ': ' + ( queryElement || element ) );\n }\n return;\n }\n this.element = queryElement;\n // add jQuery\n if ( jQuery ) {\n this.$element = jQuery( this.element );\n }\n\n // options\n this.options = utils.extend( {}, this.constructor.defaults );\n this.option( options );\n\n // add id for Outlayer.getFromElement\n var id = ++GUID;\n this.element.outlayerGUID = id; // expando\n instances[ id ] = this; // associate via id\n\n // kick it off\n this._create();\n\n var isInitLayout = this._getOption('initLayout');\n if ( isInitLayout ) {\n this.layout();\n }\n}\n\n// settings are for internal use only\nOutlayer.namespace = 'outlayer';\nOutlayer.Item = Item;\n\n// default options\nOutlayer.defaults = {\n containerStyle: {\n position: 'relative'\n },\n initLayout: true,\n originLeft: true,\n originTop: true,\n resize: true,\n resizeContainer: true,\n // item options\n transitionDuration: '0.4s',\n hiddenStyle: {\n opacity: 0,\n transform: 'scale(0.001)'\n },\n visibleStyle: {\n opacity: 1,\n transform: 'scale(1)'\n }\n};\n\nvar proto = Outlayer.prototype;\n// inherit EvEmitter\nutils.extend( proto, EvEmitter.prototype );\n\n/**\n * set options\n * @param {Object} opts\n */\nproto.option = function( opts ) {\n utils.extend( this.options, opts );\n};\n\n/**\n * get backwards compatible option value, check old name\n */\nproto._getOption = function( option ) {\n var oldOption = this.constructor.compatOptions[ option ];\n return oldOption && this.options[ oldOption ] !== undefined ?\n this.options[ oldOption ] : this.options[ option ];\n};\n\nOutlayer.compatOptions = {\n // currentName: oldName\n initLayout: 'isInitLayout',\n horizontal: 'isHorizontal',\n layoutInstant: 'isLayoutInstant',\n originLeft: 'isOriginLeft',\n originTop: 'isOriginTop',\n resize: 'isResizeBound',\n resizeContainer: 'isResizingContainer'\n};\n\nproto._create = function() {\n // get items from children\n this.reloadItems();\n // elements that affect layout, but are not laid out\n this.stamps = [];\n this.stamp( this.options.stamp );\n // set container style\n utils.extend( this.element.style, this.options.containerStyle );\n\n // bind resize method\n var canBindResize = this._getOption('resize');\n if ( canBindResize ) {\n this.bindResize();\n }\n};\n\n// goes through all children again and gets bricks in proper order\nproto.reloadItems = function() {\n // collection of item elements\n this.items = this._itemize( this.element.children );\n};\n\n\n/**\n * turn elements into Outlayer.Items to be used in layout\n * @param {Array or NodeList or HTMLElement} elems\n * @returns {Array} items - collection of new Outlayer Items\n */\nproto._itemize = function( elems ) {\n\n var itemElems = this._filterFindItemElements( elems );\n var Item = this.constructor.Item;\n\n // create new Outlayer Items for collection\n var items = [];\n for ( var i=0; i < itemElems.length; i++ ) {\n var elem = itemElems[i];\n var item = new Item( elem, this );\n items.push( item );\n }\n\n return items;\n};\n\n/**\n * get item elements to be used in layout\n * @param {Array or NodeList or HTMLElement} elems\n * @returns {Array} items - item elements\n */\nproto._filterFindItemElements = function( elems ) {\n return utils.filterFindElements( elems, this.options.itemSelector );\n};\n\n/**\n * getter method for getting item elements\n * @returns {Array} elems - collection of item elements\n */\nproto.getItemElements = function() {\n return this.items.map( function( item ) {\n return item.element;\n });\n};\n\n// ----- init & layout ----- //\n\n/**\n * lays out all items\n */\nproto.layout = function() {\n this._resetLayout();\n this._manageStamps();\n\n // don't animate first layout\n var layoutInstant = this._getOption('layoutInstant');\n var isInstant = layoutInstant !== undefined ?\n layoutInstant : !this._isLayoutInited;\n this.layoutItems( this.items, isInstant );\n\n // flag for initalized\n this._isLayoutInited = true;\n};\n\n// _init is alias for layout\nproto._init = proto.layout;\n\n/**\n * logic before any new layout\n */\nproto._resetLayout = function() {\n this.getSize();\n};\n\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n};\n\n/**\n * get measurement from option, for columnWidth, rowHeight, gutter\n * if option is String -> get element from selector string, & get size of element\n * if option is Element -> get size of element\n * else use option as a number\n *\n * @param {String} measurement\n * @param {String} size - width or height\n * @private\n */\nproto._getMeasurement = function( measurement, size ) {\n var option = this.options[ measurement ];\n var elem;\n if ( !option ) {\n // default to 0\n this[ measurement ] = 0;\n } else {\n // use option as an element\n if ( typeof option == 'string' ) {\n elem = this.element.querySelector( option );\n } else if ( option instanceof HTMLElement ) {\n elem = option;\n }\n // use size of element, if element\n this[ measurement ] = elem ? getSize( elem )[ size ] : option;\n }\n};\n\n/**\n * layout a collection of item elements\n * @api public\n */\nproto.layoutItems = function( items, isInstant ) {\n items = this._getItemsForLayout( items );\n\n this._layoutItems( items, isInstant );\n\n this._postLayout();\n};\n\n/**\n * get the items to be laid out\n * you may want to skip over some items\n * @param {Array} items\n * @returns {Array} items\n */\nproto._getItemsForLayout = function( items ) {\n return items.filter( function( item ) {\n return !item.isIgnored;\n });\n};\n\n/**\n * layout items\n * @param {Array} items\n * @param {Boolean} isInstant\n */\nproto._layoutItems = function( items, isInstant ) {\n this._emitCompleteOnItems( 'layout', items );\n\n if ( !items || !items.length ) {\n // no items, emit event with empty array\n return;\n }\n\n var queue = [];\n\n items.forEach( function( item ) {\n // get x/y object from method\n var position = this._getItemLayoutPosition( item );\n // enqueue\n position.item = item;\n position.isInstant = isInstant || item.isLayoutInstant;\n queue.push( position );\n }, this );\n\n this._processLayoutQueue( queue );\n};\n\n/**\n * get item layout position\n * @param {Outlayer.Item} item\n * @returns {Object} x and y position\n */\nproto._getItemLayoutPosition = function( /* item */ ) {\n return {\n x: 0,\n y: 0\n };\n};\n\n/**\n * iterate over array and position each item\n * Reason being - separating this logic prevents 'layout invalidation'\n * thx @paul_irish\n * @param {Array} queue\n */\nproto._processLayoutQueue = function( queue ) {\n this.updateStagger();\n queue.forEach( function( obj, i ) {\n this._positionItem( obj.item, obj.x, obj.y, obj.isInstant, i );\n }, this );\n};\n\n// set stagger from option in milliseconds number\nproto.updateStagger = function() {\n var stagger = this.options.stagger;\n if ( stagger === null || stagger === undefined ) {\n this.stagger = 0;\n return;\n }\n this.stagger = getMilliseconds( stagger );\n return this.stagger;\n};\n\n/**\n * Sets position of item in DOM\n * @param {Outlayer.Item} item\n * @param {Number} x - horizontal position\n * @param {Number} y - vertical position\n * @param {Boolean} isInstant - disables transitions\n */\nproto._positionItem = function( item, x, y, isInstant, i ) {\n if ( isInstant ) {\n // if not transition, just set CSS\n item.goTo( x, y );\n } else {\n item.stagger( i * this.stagger );\n item.moveTo( x, y );\n }\n};\n\n/**\n * Any logic you want to do after each layout,\n * i.e. size the container\n */\nproto._postLayout = function() {\n this.resizeContainer();\n};\n\nproto.resizeContainer = function() {\n var isResizingContainer = this._getOption('resizeContainer');\n if ( !isResizingContainer ) {\n return;\n }\n var size = this._getContainerSize();\n if ( size ) {\n this._setContainerMeasure( size.width, true );\n this._setContainerMeasure( size.height, false );\n }\n};\n\n/**\n * Sets width or height of container if returned\n * @returns {Object} size\n * @param {Number} width\n * @param {Number} height\n */\nproto._getContainerSize = noop;\n\n/**\n * @param {Number} measure - size of width or height\n * @param {Boolean} isWidth\n */\nproto._setContainerMeasure = function( measure, isWidth ) {\n if ( measure === undefined ) {\n return;\n }\n\n var elemSize = this.size;\n // add padding and border width if border box\n if ( elemSize.isBorderBox ) {\n measure += isWidth ? elemSize.paddingLeft + elemSize.paddingRight +\n elemSize.borderLeftWidth + elemSize.borderRightWidth :\n elemSize.paddingBottom + elemSize.paddingTop +\n elemSize.borderTopWidth + elemSize.borderBottomWidth;\n }\n\n measure = Math.max( measure, 0 );\n this.element.style[ isWidth ? 'width' : 'height' ] = measure + 'px';\n};\n\n/**\n * emit eventComplete on a collection of items events\n * @param {String} eventName\n * @param {Array} items - Outlayer.Items\n */\nproto._emitCompleteOnItems = function( eventName, items ) {\n var _this = this;\n function onComplete() {\n _this.dispatchEvent( eventName + 'Complete', null, [ items ] );\n }\n\n var count = items.length;\n if ( !items || !count ) {\n onComplete();\n return;\n }\n\n var doneCount = 0;\n function tick() {\n doneCount++;\n if ( doneCount == count ) {\n onComplete();\n }\n }\n\n // bind callback\n items.forEach( function( item ) {\n item.once( eventName, tick );\n });\n};\n\n/**\n * emits events via EvEmitter and jQuery events\n * @param {String} type - name of event\n * @param {Event} event - original event\n * @param {Array} args - extra arguments\n */\nproto.dispatchEvent = function( type, event, args ) {\n // add original event to arguments\n var emitArgs = event ? [ event ].concat( args ) : args;\n this.emitEvent( type, emitArgs );\n\n if ( jQuery ) {\n // set this.$element\n this.$element = this.$element || jQuery( this.element );\n if ( event ) {\n // create jQuery event\n var $event = jQuery.Event( event );\n $event.type = type;\n this.$element.trigger( $event, args );\n } else {\n // just trigger with type if no event available\n this.$element.trigger( type, args );\n }\n }\n};\n\n// -------------------------- ignore & stamps -------------------------- //\n\n\n/**\n * keep item in collection, but do not lay it out\n * ignored items do not get skipped in layout\n * @param {Element} elem\n */\nproto.ignore = function( elem ) {\n var item = this.getItem( elem );\n if ( item ) {\n item.isIgnored = true;\n }\n};\n\n/**\n * return item to layout collection\n * @param {Element} elem\n */\nproto.unignore = function( elem ) {\n var item = this.getItem( elem );\n if ( item ) {\n delete item.isIgnored;\n }\n};\n\n/**\n * adds elements to stamps\n * @param {NodeList, Array, Element, or String} elems\n */\nproto.stamp = function( elems ) {\n elems = this._find( elems );\n if ( !elems ) {\n return;\n }\n\n this.stamps = this.stamps.concat( elems );\n // ignore\n elems.forEach( this.ignore, this );\n};\n\n/**\n * removes elements to stamps\n * @param {NodeList, Array, or Element} elems\n */\nproto.unstamp = function( elems ) {\n elems = this._find( elems );\n if ( !elems ){\n return;\n }\n\n elems.forEach( function( elem ) {\n // filter out removed stamp elements\n utils.removeFrom( this.stamps, elem );\n this.unignore( elem );\n }, this );\n};\n\n/**\n * finds child elements\n * @param {NodeList, Array, Element, or String} elems\n * @returns {Array} elems\n */\nproto._find = function( elems ) {\n if ( !elems ) {\n return;\n }\n // if string, use argument as selector string\n if ( typeof elems == 'string' ) {\n elems = this.element.querySelectorAll( elems );\n }\n elems = utils.makeArray( elems );\n return elems;\n};\n\nproto._manageStamps = function() {\n if ( !this.stamps || !this.stamps.length ) {\n return;\n }\n\n this._getBoundingRect();\n\n this.stamps.forEach( this._manageStamp, this );\n};\n\n// update boundingLeft / Top\nproto._getBoundingRect = function() {\n // get bounding rect for container element\n var boundingRect = this.element.getBoundingClientRect();\n var size = this.size;\n this._boundingRect = {\n left: boundingRect.left + size.paddingLeft + size.borderLeftWidth,\n top: boundingRect.top + size.paddingTop + size.borderTopWidth,\n right: boundingRect.right - ( size.paddingRight + size.borderRightWidth ),\n bottom: boundingRect.bottom - ( size.paddingBottom + size.borderBottomWidth )\n };\n};\n\n/**\n * @param {Element} stamp\n**/\nproto._manageStamp = noop;\n\n/**\n * get x/y position of element relative to container element\n * @param {Element} elem\n * @returns {Object} offset - has left, top, right, bottom\n */\nproto._getElementOffset = function( elem ) {\n var boundingRect = elem.getBoundingClientRect();\n var thisRect = this._boundingRect;\n var size = getSize( elem );\n var offset = {\n left: boundingRect.left - thisRect.left - size.marginLeft,\n top: boundingRect.top - thisRect.top - size.marginTop,\n right: thisRect.right - boundingRect.right - size.marginRight,\n bottom: thisRect.bottom - boundingRect.bottom - size.marginBottom\n };\n return offset;\n};\n\n// -------------------------- resize -------------------------- //\n\n// enable event handlers for listeners\n// i.e. resize -> onresize\nproto.handleEvent = utils.handleEvent;\n\n/**\n * Bind layout to window resizing\n */\nproto.bindResize = function() {\n window.addEventListener( 'resize', this );\n this.isResizeBound = true;\n};\n\n/**\n * Unbind layout to window resizing\n */\nproto.unbindResize = function() {\n window.removeEventListener( 'resize', this );\n this.isResizeBound = false;\n};\n\nproto.onresize = function() {\n this.resize();\n};\n\nutils.debounceMethod( Outlayer, 'onresize', 100 );\n\nproto.resize = function() {\n // don't trigger if size did not change\n // or if resize was unbound. See #9\n if ( !this.isResizeBound || !this.needsResizeLayout() ) {\n return;\n }\n\n this.layout();\n};\n\n/**\n * check if layout is needed post layout\n * @returns Boolean\n */\nproto.needsResizeLayout = function() {\n var size = getSize( this.element );\n // check that this.size and size are there\n // IE8 triggers resize on body size change, so they might not be\n var hasSizes = this.size && size;\n return hasSizes && size.innerWidth !== this.size.innerWidth;\n};\n\n// -------------------------- methods -------------------------- //\n\n/**\n * add items to Outlayer instance\n * @param {Array or NodeList or Element} elems\n * @returns {Array} items - Outlayer.Items\n**/\nproto.addItems = function( elems ) {\n var items = this._itemize( elems );\n // add items to collection\n if ( items.length ) {\n this.items = this.items.concat( items );\n }\n return items;\n};\n\n/**\n * Layout newly-appended item elements\n * @param {Array or NodeList or Element} elems\n */\nproto.appended = function( elems ) {\n var items = this.addItems( elems );\n if ( !items.length ) {\n return;\n }\n // layout and reveal just the new items\n this.layoutItems( items, true );\n this.reveal( items );\n};\n\n/**\n * Layout prepended elements\n * @param {Array or NodeList or Element} elems\n */\nproto.prepended = function( elems ) {\n var items = this._itemize( elems );\n if ( !items.length ) {\n return;\n }\n // add items to beginning of collection\n var previousItems = this.items.slice(0);\n this.items = items.concat( previousItems );\n // start new layout\n this._resetLayout();\n this._manageStamps();\n // layout new stuff without transition\n this.layoutItems( items, true );\n this.reveal( items );\n // layout previous items\n this.layoutItems( previousItems );\n};\n\n/**\n * reveal a collection of items\n * @param {Array of Outlayer.Items} items\n */\nproto.reveal = function( items ) {\n this._emitCompleteOnItems( 'reveal', items );\n if ( !items || !items.length ) {\n return;\n }\n var stagger = this.updateStagger();\n items.forEach( function( item, i ) {\n item.stagger( i * stagger );\n item.reveal();\n });\n};\n\n/**\n * hide a collection of items\n * @param {Array of Outlayer.Items} items\n */\nproto.hide = function( items ) {\n this._emitCompleteOnItems( 'hide', items );\n if ( !items || !items.length ) {\n return;\n }\n var stagger = this.updateStagger();\n items.forEach( function( item, i ) {\n item.stagger( i * stagger );\n item.hide();\n });\n};\n\n/**\n * reveal item elements\n * @param {Array}, {Element}, {NodeList} items\n */\nproto.revealItemElements = function( elems ) {\n var items = this.getItems( elems );\n this.reveal( items );\n};\n\n/**\n * hide item elements\n * @param {Array}, {Element}, {NodeList} items\n */\nproto.hideItemElements = function( elems ) {\n var items = this.getItems( elems );\n this.hide( items );\n};\n\n/**\n * get Outlayer.Item, given an Element\n * @param {Element} elem\n * @param {Function} callback\n * @returns {Outlayer.Item} item\n */\nproto.getItem = function( elem ) {\n // loop through items to get the one that matches\n for ( var i=0; i < this.items.length; i++ ) {\n var item = this.items[i];\n if ( item.element == elem ) {\n // return item\n return item;\n }\n }\n};\n\n/**\n * get collection of Outlayer.Items, given Elements\n * @param {Array} elems\n * @returns {Array} items - Outlayer.Items\n */\nproto.getItems = function( elems ) {\n elems = utils.makeArray( elems );\n var items = [];\n elems.forEach( function( elem ) {\n var item = this.getItem( elem );\n if ( item ) {\n items.push( item );\n }\n }, this );\n\n return items;\n};\n\n/**\n * remove element(s) from instance and DOM\n * @param {Array or NodeList or Element} elems\n */\nproto.remove = function( elems ) {\n var removeItems = this.getItems( elems );\n\n this._emitCompleteOnItems( 'remove', removeItems );\n\n // bail if no items to remove\n if ( !removeItems || !removeItems.length ) {\n return;\n }\n\n removeItems.forEach( function( item ) {\n item.remove();\n // remove item from collection\n utils.removeFrom( this.items, item );\n }, this );\n};\n\n// ----- destroy ----- //\n\n// remove and disable Outlayer instance\nproto.destroy = function() {\n // clean up dynamic styles\n var style = this.element.style;\n style.height = '';\n style.position = '';\n style.width = '';\n // destroy items\n this.items.forEach( function( item ) {\n item.destroy();\n });\n\n this.unbindResize();\n\n var id = this.element.outlayerGUID;\n delete instances[ id ]; // remove reference to instance by id\n delete this.element.outlayerGUID;\n // remove data for jQuery\n if ( jQuery ) {\n jQuery.removeData( this.element, this.constructor.namespace );\n }\n\n};\n\n// -------------------------- data -------------------------- //\n\n/**\n * get Outlayer instance from element\n * @param {Element} elem\n * @returns {Outlayer}\n */\nOutlayer.data = function( elem ) {\n elem = utils.getQueryElement( elem );\n var id = elem && elem.outlayerGUID;\n return id && instances[ id ];\n};\n\n\n// -------------------------- create Outlayer class -------------------------- //\n\n/**\n * create a layout class\n * @param {String} namespace\n */\nOutlayer.create = function( namespace, options ) {\n // sub-class Outlayer\n var Layout = subclass( Outlayer );\n // apply new options and compatOptions\n Layout.defaults = utils.extend( {}, Outlayer.defaults );\n utils.extend( Layout.defaults, options );\n Layout.compatOptions = utils.extend( {}, Outlayer.compatOptions );\n\n Layout.namespace = namespace;\n\n Layout.data = Outlayer.data;\n\n // sub-class Item\n Layout.Item = subclass( Item );\n\n // -------------------------- declarative -------------------------- //\n\n utils.htmlInit( Layout, namespace );\n\n // -------------------------- jQuery bridge -------------------------- //\n\n // make into jQuery plugin\n if ( jQuery && jQuery.bridget ) {\n jQuery.bridget( namespace, Layout );\n }\n\n return Layout;\n};\n\nfunction subclass( Parent ) {\n function SubClass() {\n Parent.apply( this, arguments );\n }\n\n SubClass.prototype = Object.create( Parent.prototype );\n SubClass.prototype.constructor = SubClass;\n\n return SubClass;\n}\n\n// ----- helpers ----- //\n\n// how many milliseconds are in each unit\nvar msUnits = {\n ms: 1,\n s: 1000\n};\n\n// munge time-like parameter into millisecond number\n// '0.4s' -> 40\nfunction getMilliseconds( time ) {\n if ( typeof time == 'number' ) {\n return time;\n }\n var matches = time.match( /(^\\d*\\.?\\d*)(\\w*)/ );\n var num = matches && matches[1];\n var unit = matches && matches[2];\n if ( !num.length ) {\n return 0;\n }\n num = parseFloat( num );\n var mult = msUnits[ unit ] || 1;\n return num * mult;\n}\n\n// ----- fin ----- //\n\n// back in global\nOutlayer.Item = Item;\n\nreturn Outlayer;\n\n}));\n","/*!\n * Flickity v2.3.0\n * Touch, responsive, flickable carousels\n *\n * Licensed GPLv3 for open source use\n * or Flickity Commercial License for commercial use\n *\n * https://flickity.metafizzy.co\n * Copyright 2015-2021 Metafizzy\n */\n\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n './drag',\n './prev-next-button',\n './page-dots',\n './player',\n './add-remove-cell',\n './lazyload',\n ], factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('./flickity'),\n require('./drag'),\n require('./prev-next-button'),\n require('./page-dots'),\n require('./player'),\n require('./add-remove-cell'),\n require('./lazyload')\n );\n }\n\n} )( window, function factory( Flickity ) {\n return Flickity;\n} );\n","/**\n * Outlayer Item\n */\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */ /* globals define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD - RequireJS\n define( [\n 'ev-emitter/ev-emitter',\n 'get-size/get-size'\n ],\n factory\n );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS - Browserify, Webpack\n module.exports = factory(\n require('ev-emitter'),\n require('get-size')\n );\n } else {\n // browser global\n window.Outlayer = {};\n window.Outlayer.Item = factory(\n window.EvEmitter,\n window.getSize\n );\n }\n\n}( window, function factory( EvEmitter, getSize ) {\n'use strict';\n\n// ----- helpers ----- //\n\nfunction isEmptyObj( obj ) {\n for ( var prop in obj ) {\n return false;\n }\n prop = null;\n return true;\n}\n\n// -------------------------- CSS3 support -------------------------- //\n\n\nvar docElemStyle = document.documentElement.style;\n\nvar transitionProperty = typeof docElemStyle.transition == 'string' ?\n 'transition' : 'WebkitTransition';\nvar transformProperty = typeof docElemStyle.transform == 'string' ?\n 'transform' : 'WebkitTransform';\n\nvar transitionEndEvent = {\n WebkitTransition: 'webkitTransitionEnd',\n transition: 'transitionend'\n}[ transitionProperty ];\n\n// cache all vendor properties that could have vendor prefix\nvar vendorProperties = {\n transform: transformProperty,\n transition: transitionProperty,\n transitionDuration: transitionProperty + 'Duration',\n transitionProperty: transitionProperty + 'Property',\n transitionDelay: transitionProperty + 'Delay'\n};\n\n// -------------------------- Item -------------------------- //\n\nfunction Item( element, layout ) {\n if ( !element ) {\n return;\n }\n\n this.element = element;\n // parent layout class, i.e. Masonry, Isotope, or Packery\n this.layout = layout;\n this.position = {\n x: 0,\n y: 0\n };\n\n this._create();\n}\n\n// inherit EvEmitter\nvar proto = Item.prototype = Object.create( EvEmitter.prototype );\nproto.constructor = Item;\n\nproto._create = function() {\n // transition objects\n this._transn = {\n ingProperties: {},\n clean: {},\n onEnd: {}\n };\n\n this.css({\n position: 'absolute'\n });\n};\n\n// trigger specified handler for event type\nproto.handleEvent = function( event ) {\n var method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n};\n\n/**\n * apply CSS styles to element\n * @param {Object} style\n */\nproto.css = function( style ) {\n var elemStyle = this.element.style;\n\n for ( var prop in style ) {\n // use vendor property if available\n var supportedProp = vendorProperties[ prop ] || prop;\n elemStyle[ supportedProp ] = style[ prop ];\n }\n};\n\n // measure position, and sets it\nproto.getPosition = function() {\n var style = getComputedStyle( this.element );\n var isOriginLeft = this.layout._getOption('originLeft');\n var isOriginTop = this.layout._getOption('originTop');\n var xValue = style[ isOriginLeft ? 'left' : 'right' ];\n var yValue = style[ isOriginTop ? 'top' : 'bottom' ];\n var x = parseFloat( xValue );\n var y = parseFloat( yValue );\n // convert percent to pixels\n var layoutSize = this.layout.size;\n if ( xValue.indexOf('%') != -1 ) {\n x = ( x / 100 ) * layoutSize.width;\n }\n if ( yValue.indexOf('%') != -1 ) {\n y = ( y / 100 ) * layoutSize.height;\n }\n // clean up 'auto' or other non-integer values\n x = isNaN( x ) ? 0 : x;\n y = isNaN( y ) ? 0 : y;\n // remove padding from measurement\n x -= isOriginLeft ? layoutSize.paddingLeft : layoutSize.paddingRight;\n y -= isOriginTop ? layoutSize.paddingTop : layoutSize.paddingBottom;\n\n this.position.x = x;\n this.position.y = y;\n};\n\n// set settled position, apply padding\nproto.layoutPosition = function() {\n var layoutSize = this.layout.size;\n var style = {};\n var isOriginLeft = this.layout._getOption('originLeft');\n var isOriginTop = this.layout._getOption('originTop');\n\n // x\n var xPadding = isOriginLeft ? 'paddingLeft' : 'paddingRight';\n var xProperty = isOriginLeft ? 'left' : 'right';\n var xResetProperty = isOriginLeft ? 'right' : 'left';\n\n var x = this.position.x + layoutSize[ xPadding ];\n // set in percentage or pixels\n style[ xProperty ] = this.getXValue( x );\n // reset other property\n style[ xResetProperty ] = '';\n\n // y\n var yPadding = isOriginTop ? 'paddingTop' : 'paddingBottom';\n var yProperty = isOriginTop ? 'top' : 'bottom';\n var yResetProperty = isOriginTop ? 'bottom' : 'top';\n\n var y = this.position.y + layoutSize[ yPadding ];\n // set in percentage or pixels\n style[ yProperty ] = this.getYValue( y );\n // reset other property\n style[ yResetProperty ] = '';\n\n this.css( style );\n this.emitEvent( 'layout', [ this ] );\n};\n\nproto.getXValue = function( x ) {\n var isHorizontal = this.layout._getOption('horizontal');\n return this.layout.options.percentPosition && !isHorizontal ?\n ( ( x / this.layout.size.width ) * 100 ) + '%' : x + 'px';\n};\n\nproto.getYValue = function( y ) {\n var isHorizontal = this.layout._getOption('horizontal');\n return this.layout.options.percentPosition && isHorizontal ?\n ( ( y / this.layout.size.height ) * 100 ) + '%' : y + 'px';\n};\n\nproto._transitionTo = function( x, y ) {\n this.getPosition();\n // get current x & y from top/left\n var curX = this.position.x;\n var curY = this.position.y;\n\n var didNotMove = x == this.position.x && y == this.position.y;\n\n // save end position\n this.setPosition( x, y );\n\n // if did not move and not transitioning, just go to layout\n if ( didNotMove && !this.isTransitioning ) {\n this.layoutPosition();\n return;\n }\n\n var transX = x - curX;\n var transY = y - curY;\n var transitionStyle = {};\n transitionStyle.transform = this.getTranslate( transX, transY );\n\n this.transition({\n to: transitionStyle,\n onTransitionEnd: {\n transform: this.layoutPosition\n },\n isCleaning: true\n });\n};\n\nproto.getTranslate = function( x, y ) {\n // flip cooridinates if origin on right or bottom\n var isOriginLeft = this.layout._getOption('originLeft');\n var isOriginTop = this.layout._getOption('originTop');\n x = isOriginLeft ? x : -x;\n y = isOriginTop ? y : -y;\n return 'translate3d(' + x + 'px, ' + y + 'px, 0)';\n};\n\n// non transition + transform support\nproto.goTo = function( x, y ) {\n this.setPosition( x, y );\n this.layoutPosition();\n};\n\nproto.moveTo = proto._transitionTo;\n\nproto.setPosition = function( x, y ) {\n this.position.x = parseFloat( x );\n this.position.y = parseFloat( y );\n};\n\n// ----- transition ----- //\n\n/**\n * @param {Object} style - CSS\n * @param {Function} onTransitionEnd\n */\n\n// non transition, just trigger callback\nproto._nonTransition = function( args ) {\n this.css( args.to );\n if ( args.isCleaning ) {\n this._removeStyles( args.to );\n }\n for ( var prop in args.onTransitionEnd ) {\n args.onTransitionEnd[ prop ].call( this );\n }\n};\n\n/**\n * proper transition\n * @param {Object} args - arguments\n * @param {Object} to - style to transition to\n * @param {Object} from - style to start transition from\n * @param {Boolean} isCleaning - removes transition styles after transition\n * @param {Function} onTransitionEnd - callback\n */\nproto.transition = function( args ) {\n // redirect to nonTransition if no transition duration\n if ( !parseFloat( this.layout.options.transitionDuration ) ) {\n this._nonTransition( args );\n return;\n }\n\n var _transition = this._transn;\n // keep track of onTransitionEnd callback by css property\n for ( var prop in args.onTransitionEnd ) {\n _transition.onEnd[ prop ] = args.onTransitionEnd[ prop ];\n }\n // keep track of properties that are transitioning\n for ( prop in args.to ) {\n _transition.ingProperties[ prop ] = true;\n // keep track of properties to clean up when transition is done\n if ( args.isCleaning ) {\n _transition.clean[ prop ] = true;\n }\n }\n\n // set from styles\n if ( args.from ) {\n this.css( args.from );\n // force redraw. http://blog.alexmaccaw.com/css-transitions\n var h = this.element.offsetHeight;\n // hack for JSHint to hush about unused var\n h = null;\n }\n // enable transition\n this.enableTransition( args.to );\n // set styles that are transitioning\n this.css( args.to );\n\n this.isTransitioning = true;\n\n};\n\n// dash before all cap letters, including first for\n// WebkitTransform => -webkit-transform\nfunction toDashedAll( str ) {\n return str.replace( /([A-Z])/g, function( $1 ) {\n return '-' + $1.toLowerCase();\n });\n}\n\nvar transitionProps = 'opacity,' + toDashedAll( transformProperty );\n\nproto.enableTransition = function(/* style */) {\n // HACK changing transitionProperty during a transition\n // will cause transition to jump\n if ( this.isTransitioning ) {\n return;\n }\n\n // make `transition: foo, bar, baz` from style object\n // HACK un-comment this when enableTransition can work\n // while a transition is happening\n // var transitionValues = [];\n // for ( var prop in style ) {\n // // dash-ify camelCased properties like WebkitTransition\n // prop = vendorProperties[ prop ] || prop;\n // transitionValues.push( toDashedAll( prop ) );\n // }\n // munge number to millisecond, to match stagger\n var duration = this.layout.options.transitionDuration;\n duration = typeof duration == 'number' ? duration + 'ms' : duration;\n // enable transition styles\n this.css({\n transitionProperty: transitionProps,\n transitionDuration: duration,\n transitionDelay: this.staggerDelay || 0\n });\n // listen for transition end event\n this.element.addEventListener( transitionEndEvent, this, false );\n};\n\n// ----- events ----- //\n\nproto.onwebkitTransitionEnd = function( event ) {\n this.ontransitionend( event );\n};\n\nproto.onotransitionend = function( event ) {\n this.ontransitionend( event );\n};\n\n// properties that I munge to make my life easier\nvar dashedVendorProperties = {\n '-webkit-transform': 'transform'\n};\n\nproto.ontransitionend = function( event ) {\n // disregard bubbled events from children\n if ( event.target !== this.element ) {\n return;\n }\n var _transition = this._transn;\n // get property name of transitioned property, convert to prefix-free\n var propertyName = dashedVendorProperties[ event.propertyName ] || event.propertyName;\n\n // remove property that has completed transitioning\n delete _transition.ingProperties[ propertyName ];\n // check if any properties are still transitioning\n if ( isEmptyObj( _transition.ingProperties ) ) {\n // all properties have completed transitioning\n this.disableTransition();\n }\n // clean style\n if ( propertyName in _transition.clean ) {\n // clean up style\n this.element.style[ event.propertyName ] = '';\n delete _transition.clean[ propertyName ];\n }\n // trigger onTransitionEnd callback\n if ( propertyName in _transition.onEnd ) {\n var onTransitionEnd = _transition.onEnd[ propertyName ];\n onTransitionEnd.call( this );\n delete _transition.onEnd[ propertyName ];\n }\n\n this.emitEvent( 'transitionEnd', [ this ] );\n};\n\nproto.disableTransition = function() {\n this.removeTransitionStyles();\n this.element.removeEventListener( transitionEndEvent, this, false );\n this.isTransitioning = false;\n};\n\n/**\n * removes style property from element\n * @param {Object} style\n**/\nproto._removeStyles = function( style ) {\n // clean up transition styles\n var cleanStyle = {};\n for ( var prop in style ) {\n cleanStyle[ prop ] = '';\n }\n this.css( cleanStyle );\n};\n\nvar cleanTransitionStyle = {\n transitionProperty: '',\n transitionDuration: '',\n transitionDelay: ''\n};\n\nproto.removeTransitionStyles = function() {\n // remove transition\n this.css( cleanTransitionStyle );\n};\n\n// ----- stagger ----- //\n\nproto.stagger = function( delay ) {\n delay = isNaN( delay ) ? 0 : delay;\n this.staggerDelay = delay + 'ms';\n};\n\n// ----- show/hide/remove ----- //\n\n// remove element from DOM\nproto.removeElem = function() {\n this.element.parentNode.removeChild( this.element );\n // remove display: none\n this.css({ display: '' });\n this.emitEvent( 'remove', [ this ] );\n};\n\nproto.remove = function() {\n // just remove element if no transition support or no transition\n if ( !transitionProperty || !parseFloat( this.layout.options.transitionDuration ) ) {\n this.removeElem();\n return;\n }\n\n // start transition\n this.once( 'transitionEnd', function() {\n this.removeElem();\n });\n this.hide();\n};\n\nproto.reveal = function() {\n delete this.isHidden;\n // remove display: none\n this.css({ display: '' });\n\n var options = this.layout.options;\n\n var onTransitionEnd = {};\n var transitionEndProperty = this.getHideRevealTransitionEndProperty('visibleStyle');\n onTransitionEnd[ transitionEndProperty ] = this.onRevealTransitionEnd;\n\n this.transition({\n from: options.hiddenStyle,\n to: options.visibleStyle,\n isCleaning: true,\n onTransitionEnd: onTransitionEnd\n });\n};\n\nproto.onRevealTransitionEnd = function() {\n // check if still visible\n // during transition, item may have been hidden\n if ( !this.isHidden ) {\n this.emitEvent('reveal');\n }\n};\n\n/**\n * get style property use for hide/reveal transition end\n * @param {String} styleProperty - hiddenStyle/visibleStyle\n * @returns {String}\n */\nproto.getHideRevealTransitionEndProperty = function( styleProperty ) {\n var optionStyle = this.layout.options[ styleProperty ];\n // use opacity\n if ( optionStyle.opacity ) {\n return 'opacity';\n }\n // get first property\n for ( var prop in optionStyle ) {\n return prop;\n }\n};\n\nproto.hide = function() {\n // set flag\n this.isHidden = true;\n // remove display: none\n this.css({ display: '' });\n\n var options = this.layout.options;\n\n var onTransitionEnd = {};\n var transitionEndProperty = this.getHideRevealTransitionEndProperty('hiddenStyle');\n onTransitionEnd[ transitionEndProperty ] = this.onHideTransitionEnd;\n\n this.transition({\n from: options.visibleStyle,\n to: options.hiddenStyle,\n // keep hidden stuff hidden\n isCleaning: true,\n onTransitionEnd: onTransitionEnd\n });\n};\n\nproto.onHideTransitionEnd = function() {\n // check if still hidden\n // during transition, item may have been un-hidden\n if ( this.isHidden ) {\n this.css({ display: 'none' });\n this.emitEvent('hide');\n }\n};\n\nproto.destroy = function() {\n this.css({\n position: '',\n left: '',\n right: '',\n top: '',\n bottom: '',\n transition: '',\n transform: ''\n });\n};\n\nreturn Item;\n\n}));\n","jQuery(document).ready(function($) {\n\n\t$('.tab--link a').on('click', function(e){\n\n\t\te.preventDefault();\n\n\t\t$('.tab--link').removeClass('is-showing');\n\t\t$(this).parent().parent().addClass('is-showing');\n\t\tvar id = $(this).attr('href');\n\t\tvar tabs = $(this).closest('.tabs');\n\n\t\ttabs.find('.tab--content').removeClass('is-showing');\n\t\t$( id ).addClass('is-showing');\n\n\t});\n\n\n\t$('.tab--close').on('click', function(e){\n\n\t\te.preventDefault();\n\n\t\tvar tabs = $(this).closest('.tabs');\n\n\t\ttabs.find('.tab--content').removeClass('is-showing');\n\n\t});\n\n});\n","/*!\n * getSize v2.0.3\n * measure size of elements\n * MIT license\n */\n\n/* jshint browser: true, strict: true, undef: true, unused: true */\n/* globals console: false */\n\n( function( window, factory ) {\n /* jshint strict: false */ /* globals define, module */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.getSize = factory();\n }\n\n})( window, function factory() {\n'use strict';\n\n// -------------------------- helpers -------------------------- //\n\n// get a number from a string, not a percentage\nfunction getStyleSize( value ) {\n var num = parseFloat( value );\n // not a percent like '100%', and a number\n var isValid = value.indexOf('%') == -1 && !isNaN( num );\n return isValid && num;\n}\n\nfunction noop() {}\n\nvar logError = typeof console == 'undefined' ? noop :\n function( message ) {\n console.error( message );\n };\n\n// -------------------------- measurements -------------------------- //\n\nvar measurements = [\n 'paddingLeft',\n 'paddingRight',\n 'paddingTop',\n 'paddingBottom',\n 'marginLeft',\n 'marginRight',\n 'marginTop',\n 'marginBottom',\n 'borderLeftWidth',\n 'borderRightWidth',\n 'borderTopWidth',\n 'borderBottomWidth'\n];\n\nvar measurementsLength = measurements.length;\n\nfunction getZeroSize() {\n var size = {\n width: 0,\n height: 0,\n innerWidth: 0,\n innerHeight: 0,\n outerWidth: 0,\n outerHeight: 0\n };\n for ( var i=0; i < measurementsLength; i++ ) {\n var measurement = measurements[i];\n size[ measurement ] = 0;\n }\n return size;\n}\n\n// -------------------------- getStyle -------------------------- //\n\n/**\n * getStyle, get style of element, check for Firefox bug\n * https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n */\nfunction getStyle( elem ) {\n var style = getComputedStyle( elem );\n if ( !style ) {\n logError( 'Style returned ' + style +\n '. Are you running this code in a hidden iframe on Firefox? ' +\n 'See https://bit.ly/getsizebug1' );\n }\n return style;\n}\n\n// -------------------------- setup -------------------------- //\n\nvar isSetup = false;\n\nvar isBoxSizeOuter;\n\n/**\n * setup\n * check isBoxSizerOuter\n * do on first getSize() rather than on page load for Firefox bug\n */\nfunction setup() {\n // setup once\n if ( isSetup ) {\n return;\n }\n isSetup = true;\n\n // -------------------------- box sizing -------------------------- //\n\n /**\n * Chrome & Safari measure the outer-width on style.width on border-box elems\n * IE11 & Firefox<29 measures the inner-width\n */\n var div = document.createElement('div');\n div.style.width = '200px';\n div.style.padding = '1px 2px 3px 4px';\n div.style.borderStyle = 'solid';\n div.style.borderWidth = '1px 2px 3px 4px';\n div.style.boxSizing = 'border-box';\n\n var body = document.body || document.documentElement;\n body.appendChild( div );\n var style = getStyle( div );\n // round value for browser zoom. desandro/masonry#928\n isBoxSizeOuter = Math.round( getStyleSize( style.width ) ) == 200;\n getSize.isBoxSizeOuter = isBoxSizeOuter;\n\n body.removeChild( div );\n}\n\n// -------------------------- getSize -------------------------- //\n\nfunction getSize( elem ) {\n setup();\n\n // use querySeletor if elem is string\n if ( typeof elem == 'string' ) {\n elem = document.querySelector( elem );\n }\n\n // do not proceed on non-objects\n if ( !elem || typeof elem != 'object' || !elem.nodeType ) {\n return;\n }\n\n var style = getStyle( elem );\n\n // if hidden, everything is 0\n if ( style.display == 'none' ) {\n return getZeroSize();\n }\n\n var size = {};\n size.width = elem.offsetWidth;\n size.height = elem.offsetHeight;\n\n var isBorderBox = size.isBorderBox = style.boxSizing == 'border-box';\n\n // get all measurements\n for ( var i=0; i < measurementsLength; i++ ) {\n var measurement = measurements[i];\n var value = style[ measurement ];\n var num = parseFloat( value );\n // any 'auto', 'medium' value will be 0\n size[ measurement ] = !isNaN( num ) ? num : 0;\n }\n\n var paddingWidth = size.paddingLeft + size.paddingRight;\n var paddingHeight = size.paddingTop + size.paddingBottom;\n var marginWidth = size.marginLeft + size.marginRight;\n var marginHeight = size.marginTop + size.marginBottom;\n var borderWidth = size.borderLeftWidth + size.borderRightWidth;\n var borderHeight = size.borderTopWidth + size.borderBottomWidth;\n\n var isBorderBoxSizeOuter = isBorderBox && isBoxSizeOuter;\n\n // overwrite width and height if we can get it from style\n var styleWidth = getStyleSize( style.width );\n if ( styleWidth !== false ) {\n size.width = styleWidth +\n // add padding and border unless it's already including it\n ( isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth );\n }\n\n var styleHeight = getStyleSize( style.height );\n if ( styleHeight !== false ) {\n size.height = styleHeight +\n // add padding and border unless it's already including it\n ( isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight );\n }\n\n size.innerWidth = size.width - ( paddingWidth + borderWidth );\n size.innerHeight = size.height - ( paddingHeight + borderHeight );\n\n size.outerWidth = size.width + marginWidth;\n size.outerHeight = size.height + marginHeight;\n\n return size;\n}\n\nreturn getSize;\n\n});\n","export const subform = (test) => {\n\n if( !$('.newsletter-subscription').length ) return;\n\n $('input, textarea')\n .on('change blur', function () {\n var $input = $(this);\n var hasValue = $input.val();\n\n if (hasValue != '' && hasValue != '(___) ___-____') {\n //note: accounts for tel input mask\n $input.parents('.ap3w-form-input').addClass('has_value');\n } else {\n $input.parents('.ap3w-form-input').removeClass('has_value');\n }\n })\n .each(function () {\n var $input = $(this);\n var hasValue = $input.val();\n\n if (hasValue != '' && hasValue != '(___) ___-____') {\n //note: accounts for tel input mask\n $input.parents('.ap3w-form-input').addClass('has_value');\n //console.log(hasValue);\n } else {\n $input.parents('.ap3w-form-input').removeClass('has_value');\n }\n });\n\n}\n","// drag\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'unidragger/unidragger',\n 'fizzy-ui-utils/utils',\n ], function( Flickity, Unidragger, utils ) {\n return factory( window, Flickity, Unidragger, utils );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('unidragger'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n window.Flickity = factory(\n window,\n window.Flickity,\n window.Unidragger,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, Unidragger, utils ) {\n\n'use strict';\n\n// ----- defaults ----- //\n\nutils.extend( Flickity.defaults, {\n draggable: '>1',\n dragThreshold: 3,\n} );\n\n// ----- create ----- //\n\nFlickity.createMethods.push('_createDrag');\n\n// -------------------------- drag prototype -------------------------- //\n\nvar proto = Flickity.prototype;\nutils.extend( proto, Unidragger.prototype );\nproto._touchActionValue = 'pan-y';\n\n// -------------------------- -------------------------- //\n\nproto._createDrag = function() {\n this.on( 'activate', this.onActivateDrag );\n this.on( 'uiChange', this._uiChangeDrag );\n this.on( 'deactivate', this.onDeactivateDrag );\n this.on( 'cellChange', this.updateDraggable );\n // TODO updateDraggable on resize? if groupCells & slides change\n};\n\nproto.onActivateDrag = function() {\n this.handles = [ this.viewport ];\n this.bindHandles();\n this.updateDraggable();\n};\n\nproto.onDeactivateDrag = function() {\n this.unbindHandles();\n this.element.classList.remove('is-draggable');\n};\n\nproto.updateDraggable = function() {\n // disable dragging if less than 2 slides. #278\n if ( this.options.draggable == '>1' ) {\n this.isDraggable = this.slides.length > 1;\n } else {\n this.isDraggable = this.options.draggable;\n }\n if ( this.isDraggable ) {\n this.element.classList.add('is-draggable');\n } else {\n this.element.classList.remove('is-draggable');\n }\n};\n\n// backwards compatibility\nproto.bindDrag = function() {\n this.options.draggable = true;\n this.updateDraggable();\n};\n\nproto.unbindDrag = function() {\n this.options.draggable = false;\n this.updateDraggable();\n};\n\nproto._uiChangeDrag = function() {\n delete this.isFreeScrolling;\n};\n\n// -------------------------- pointer events -------------------------- //\n\nproto.pointerDown = function( event, pointer ) {\n if ( !this.isDraggable ) {\n this._pointerDownDefault( event, pointer );\n return;\n }\n var isOkay = this.okayPointerDown( event );\n if ( !isOkay ) {\n return;\n }\n\n this._pointerDownPreventDefault( event );\n this.pointerDownFocus( event );\n // blur\n if ( document.activeElement != this.element ) {\n // do not blur if already focused\n this.pointerDownBlur();\n }\n\n // stop if it was moving\n this.dragX = this.x;\n this.viewport.classList.add('is-pointer-down');\n // track scrolling\n this.pointerDownScroll = getScrollPosition();\n window.addEventListener( 'scroll', this );\n\n this._pointerDownDefault( event, pointer );\n};\n\n// default pointerDown logic, used for staticClick\nproto._pointerDownDefault = function( event, pointer ) {\n // track start event position\n // Safari 9 overrides pageX and pageY. These values needs to be copied. #779\n this.pointerDownPointer = {\n pageX: pointer.pageX,\n pageY: pointer.pageY,\n };\n // bind move and end events\n this._bindPostStartEvents( event );\n this.dispatchEvent( 'pointerDown', event, [ pointer ] );\n};\n\nvar focusNodes = {\n INPUT: true,\n TEXTAREA: true,\n SELECT: true,\n};\n\nproto.pointerDownFocus = function( event ) {\n var isFocusNode = focusNodes[ event.target.nodeName ];\n if ( !isFocusNode ) {\n this.focus();\n }\n};\n\nproto._pointerDownPreventDefault = function( event ) {\n var isTouchStart = event.type == 'touchstart';\n var isTouchPointer = event.pointerType == 'touch';\n var isFocusNode = focusNodes[ event.target.nodeName ];\n if ( !isTouchStart && !isTouchPointer && !isFocusNode ) {\n event.preventDefault();\n }\n};\n\n// ----- move ----- //\n\nproto.hasDragStarted = function( moveVector ) {\n return Math.abs( moveVector.x ) > this.options.dragThreshold;\n};\n\n// ----- up ----- //\n\nproto.pointerUp = function( event, pointer ) {\n delete this.isTouchScrolling;\n this.viewport.classList.remove('is-pointer-down');\n this.dispatchEvent( 'pointerUp', event, [ pointer ] );\n this._dragPointerUp( event, pointer );\n};\n\nproto.pointerDone = function() {\n window.removeEventListener( 'scroll', this );\n delete this.pointerDownScroll;\n};\n\n// -------------------------- dragging -------------------------- //\n\nproto.dragStart = function( event, pointer ) {\n if ( !this.isDraggable ) {\n return;\n }\n this.dragStartPosition = this.x;\n this.startAnimation();\n window.removeEventListener( 'scroll', this );\n this.dispatchEvent( 'dragStart', event, [ pointer ] );\n};\n\nproto.pointerMove = function( event, pointer ) {\n var moveVector = this._dragPointerMove( event, pointer );\n this.dispatchEvent( 'pointerMove', event, [ pointer, moveVector ] );\n this._dragMove( event, pointer, moveVector );\n};\n\nproto.dragMove = function( event, pointer, moveVector ) {\n if ( !this.isDraggable ) {\n return;\n }\n event.preventDefault();\n\n this.previousDragX = this.dragX;\n // reverse if right-to-left\n var direction = this.options.rightToLeft ? -1 : 1;\n if ( this.options.wrapAround ) {\n // wrap around move. #589\n moveVector.x %= this.slideableWidth;\n }\n var dragX = this.dragStartPosition + moveVector.x * direction;\n\n if ( !this.options.wrapAround && this.slides.length ) {\n // slow drag\n var originBound = Math.max( -this.slides[0].target, this.dragStartPosition );\n dragX = dragX > originBound ? ( dragX + originBound ) * 0.5 : dragX;\n var endBound = Math.min( -this.getLastSlide().target, this.dragStartPosition );\n dragX = dragX < endBound ? ( dragX + endBound ) * 0.5 : dragX;\n }\n\n this.dragX = dragX;\n\n this.dragMoveTime = new Date();\n this.dispatchEvent( 'dragMove', event, [ pointer, moveVector ] );\n};\n\nproto.dragEnd = function( event, pointer ) {\n if ( !this.isDraggable ) {\n return;\n }\n if ( this.options.freeScroll ) {\n this.isFreeScrolling = true;\n }\n // set selectedIndex based on where flick will end up\n var index = this.dragEndRestingSelect();\n\n if ( this.options.freeScroll && !this.options.wrapAround ) {\n // if free-scroll & not wrap around\n // do not free-scroll if going outside of bounding slides\n // so bounding slides can attract slider, and keep it in bounds\n var restingX = this.getRestingPosition();\n this.isFreeScrolling = -restingX > this.slides[0].target &&\n -restingX < this.getLastSlide().target;\n } else if ( !this.options.freeScroll && index == this.selectedIndex ) {\n // boost selection if selected index has not changed\n index += this.dragEndBoostSelect();\n }\n delete this.previousDragX;\n // apply selection\n // TODO refactor this, selecting here feels weird\n // HACK, set flag so dragging stays in correct direction\n this.isDragSelect = this.options.wrapAround;\n this.select( index );\n delete this.isDragSelect;\n this.dispatchEvent( 'dragEnd', event, [ pointer ] );\n};\n\nproto.dragEndRestingSelect = function() {\n var restingX = this.getRestingPosition();\n // how far away from selected slide\n var distance = Math.abs( this.getSlideDistance( -restingX, this.selectedIndex ) );\n // get closet resting going up and going down\n var positiveResting = this._getClosestResting( restingX, distance, 1 );\n var negativeResting = this._getClosestResting( restingX, distance, -1 );\n // use closer resting for wrap-around\n var index = positiveResting.distance < negativeResting.distance ?\n positiveResting.index : negativeResting.index;\n return index;\n};\n\n/**\n * given resting X and distance to selected cell\n * get the distance and index of the closest cell\n * @param {Number} restingX - estimated post-flick resting position\n * @param {Number} distance - distance to selected cell\n * @param {Integer} increment - +1 or -1, going up or down\n * @returns {Object} - { distance: {Number}, index: {Integer} }\n */\nproto._getClosestResting = function( restingX, distance, increment ) {\n var index = this.selectedIndex;\n var minDistance = Infinity;\n var condition = this.options.contain && !this.options.wrapAround ?\n // if contain, keep going if distance is equal to minDistance\n function( dist, minDist ) {\n return dist <= minDist;\n } : function( dist, minDist ) {\n return dist < minDist;\n };\n while ( condition( distance, minDistance ) ) {\n // measure distance to next cell\n index += increment;\n minDistance = distance;\n distance = this.getSlideDistance( -restingX, index );\n if ( distance === null ) {\n break;\n }\n distance = Math.abs( distance );\n }\n return {\n distance: minDistance,\n // selected was previous index\n index: index - increment,\n };\n};\n\n/**\n * measure distance between x and a slide target\n * @param {Number} x - horizontal position\n * @param {Integer} index - slide index\n * @returns {Number} - slide distance\n */\nproto.getSlideDistance = function( x, index ) {\n var len = this.slides.length;\n // wrap around if at least 2 slides\n var isWrapAround = this.options.wrapAround && len > 1;\n var slideIndex = isWrapAround ? utils.modulo( index, len ) : index;\n var slide = this.slides[ slideIndex ];\n if ( !slide ) {\n return null;\n }\n // add distance for wrap-around slides\n var wrap = isWrapAround ? this.slideableWidth * Math.floor( index/len ) : 0;\n return x - ( slide.target + wrap );\n};\n\nproto.dragEndBoostSelect = function() {\n // do not boost if no previousDragX or dragMoveTime\n if ( this.previousDragX === undefined || !this.dragMoveTime ||\n // or if drag was held for 100 ms\n new Date() - this.dragMoveTime > 100 ) {\n return 0;\n }\n\n var distance = this.getSlideDistance( -this.dragX, this.selectedIndex );\n var delta = this.previousDragX - this.dragX;\n if ( distance > 0 && delta > 0 ) {\n // boost to next if moving towards the right, and positive velocity\n return 1;\n } else if ( distance < 0 && delta < 0 ) {\n // boost to previous if moving towards the left, and negative velocity\n return -1;\n }\n return 0;\n};\n\n// ----- staticClick ----- //\n\nproto.staticClick = function( event, pointer ) {\n // get clickedCell, if cell was clicked\n var clickedCell = this.getParentCell( event.target );\n var cellElem = clickedCell && clickedCell.element;\n var cellIndex = clickedCell && this.cells.indexOf( clickedCell );\n this.dispatchEvent( 'staticClick', event, [ pointer, cellElem, cellIndex ] );\n};\n\n// ----- scroll ----- //\n\nproto.onscroll = function() {\n var scroll = getScrollPosition();\n var scrollMoveX = this.pointerDownScroll.x - scroll.x;\n var scrollMoveY = this.pointerDownScroll.y - scroll.y;\n // cancel click/tap if scroll is too much\n if ( Math.abs( scrollMoveX ) > 3 || Math.abs( scrollMoveY ) > 3 ) {\n this._pointerDone();\n }\n};\n\n// ----- utils ----- //\n\nfunction getScrollPosition() {\n return {\n x: window.pageXOffset,\n y: window.pageYOffset,\n };\n}\n\n// ----- ----- //\n\nreturn Flickity;\n\n} ) );\n","/*!\n * Bootstrap v4.6.2 (https://getbootstrap.com/)\n * Copyright 2011-2022 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 === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery'), require('popper.js')) :\n typeof define === 'function' && define.amd ? define(['exports', 'jquery', 'popper.js'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.bootstrap = {}, global.jQuery, global.Popper));\n})(this, (function (exports, $, Popper) { 'use strict';\n\n function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\n var $__default = /*#__PURE__*/_interopDefaultLegacy($);\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 Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n }\n\n function _extends() {\n _extends = Object.assign ? Object.assign.bind() : 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 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\n _setPrototypeOf(subClass, superClass);\n }\n\n function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n }\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.2): util.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n /**\n * Private TransitionEnd Helpers\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 * Public Util API\n */\n\n\n var Util = {\n TRANSITION_END: 'bsTransitionEnd',\n getUID: function getUID(prefix) {\n do {\n // eslint-disable-next-line no-bitwise\n prefix += ~~(Math.random() * MAX_UID); // \"~~\" acts like a faster Math.floor() here\n } while (document.getElementById(prefix));\n\n return prefix;\n },\n getSelectorFromElement: function getSelectorFromElement(element) {\n var selector = element.getAttribute('data-target');\n\n if (!selector || selector === '#') {\n var hrefAttr = element.getAttribute('href');\n selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '';\n }\n\n try {\n return document.querySelector(selector) ? selector : null;\n } catch (_) {\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 var NAME$a = 'alert';\n var VERSION$a = '4.6.2';\n var DATA_KEY$a = 'bs.alert';\n var EVENT_KEY$a = \".\" + DATA_KEY$a;\n var DATA_API_KEY$7 = '.data-api';\n var JQUERY_NO_CONFLICT$a = $__default[\"default\"].fn[NAME$a];\n var CLASS_NAME_ALERT = 'alert';\n var CLASS_NAME_FADE$5 = 'fade';\n var CLASS_NAME_SHOW$7 = 'show';\n var EVENT_CLOSE = \"close\" + EVENT_KEY$a;\n var EVENT_CLOSED = \"closed\" + EVENT_KEY$a;\n var EVENT_CLICK_DATA_API$6 = \"click\" + EVENT_KEY$a + DATA_API_KEY$7;\n var SELECTOR_DISMISS = '[data-dismiss=\"alert\"]';\n /**\n * Class definition\n */\n\n var Alert = /*#__PURE__*/function () {\n function Alert(element) {\n this._element = element;\n } // Getters\n\n\n var _proto = Alert.prototype;\n\n // Public\n _proto.close = function close(element) {\n var rootElement = this._element;\n\n if (element) {\n rootElement = this._getRootElement(element);\n }\n\n var customEvent = this._triggerCloseEvent(rootElement);\n\n if (customEvent.isDefaultPrevented()) {\n return;\n }\n\n this._removeElement(rootElement);\n };\n\n _proto.dispose = function dispose() {\n $__default[\"default\"].removeData(this._element, DATA_KEY$a);\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$7);\n\n if (!$__default[\"default\"](element).hasClass(CLASS_NAME_FADE$5)) {\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$a);\n\n if (!data) {\n data = new Alert(this);\n $element.data(DATA_KEY$a, 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$a;\n }\n }]);\n\n return Alert;\n }();\n /**\n * Data API implementation\n */\n\n\n $__default[\"default\"](document).on(EVENT_CLICK_DATA_API$6, SELECTOR_DISMISS, Alert._handleDismiss(new Alert()));\n /**\n * jQuery\n */\n\n $__default[\"default\"].fn[NAME$a] = Alert._jQueryInterface;\n $__default[\"default\"].fn[NAME$a].Constructor = Alert;\n\n $__default[\"default\"].fn[NAME$a].noConflict = function () {\n $__default[\"default\"].fn[NAME$a] = JQUERY_NO_CONFLICT$a;\n return Alert._jQueryInterface;\n };\n\n /**\n * Constants\n */\n\n var NAME$9 = 'button';\n var VERSION$9 = '4.6.2';\n var DATA_KEY$9 = 'bs.button';\n var EVENT_KEY$9 = \".\" + DATA_KEY$9;\n var DATA_API_KEY$6 = '.data-api';\n var JQUERY_NO_CONFLICT$9 = $__default[\"default\"].fn[NAME$9];\n var CLASS_NAME_ACTIVE$3 = 'active';\n var CLASS_NAME_BUTTON = 'btn';\n var CLASS_NAME_FOCUS = 'focus';\n var EVENT_CLICK_DATA_API$5 = \"click\" + EVENT_KEY$9 + DATA_API_KEY$6;\n var EVENT_FOCUS_BLUR_DATA_API = \"focus\" + EVENT_KEY$9 + DATA_API_KEY$6 + \" \" + (\"blur\" + EVENT_KEY$9 + DATA_API_KEY$6);\n var EVENT_LOAD_DATA_API$2 = \"load\" + EVENT_KEY$9 + DATA_API_KEY$6;\n var SELECTOR_DATA_TOGGLE_CARROT = '[data-toggle^=\"button\"]';\n var SELECTOR_DATA_TOGGLES = '[data-toggle=\"buttons\"]';\n var SELECTOR_DATA_TOGGLE$4 = '[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$2 = '.active';\n var SELECTOR_BUTTON = '.btn';\n /**\n * Class definition\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;\n\n // Public\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$3)) {\n triggerChangeEvent = false;\n } else {\n var activeElement = rootElement.querySelector(SELECTOR_ACTIVE$2);\n\n if (activeElement) {\n $__default[\"default\"](activeElement).removeClass(CLASS_NAME_ACTIVE$3);\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$3);\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$3));\n }\n\n if (triggerChangeEvent) {\n $__default[\"default\"](this._element).toggleClass(CLASS_NAME_ACTIVE$3);\n }\n }\n };\n\n _proto.dispose = function dispose() {\n $__default[\"default\"].removeData(this._element, DATA_KEY$9);\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$9);\n\n if (!data) {\n data = new Button(this);\n $element.data(DATA_KEY$9, 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$9;\n }\n }]);\n\n return Button;\n }();\n /**\n * Data API implementation\n */\n\n\n $__default[\"default\"](document).on(EVENT_CLICK_DATA_API$5, 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$2, 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$3);\n } else {\n button.classList.remove(CLASS_NAME_ACTIVE$3);\n }\n } // find all button toggles\n\n\n buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$4));\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$3);\n } else {\n _button.classList.remove(CLASS_NAME_ACTIVE$3);\n }\n }\n });\n /**\n * jQuery\n */\n\n $__default[\"default\"].fn[NAME$9] = Button._jQueryInterface;\n $__default[\"default\"].fn[NAME$9].Constructor = Button;\n\n $__default[\"default\"].fn[NAME$9].noConflict = function () {\n $__default[\"default\"].fn[NAME$9] = JQUERY_NO_CONFLICT$9;\n return Button._jQueryInterface;\n };\n\n /**\n * Constants\n */\n\n var NAME$8 = 'carousel';\n var VERSION$8 = '4.6.2';\n var DATA_KEY$8 = 'bs.carousel';\n var EVENT_KEY$8 = \".\" + DATA_KEY$8;\n var DATA_API_KEY$5 = '.data-api';\n var JQUERY_NO_CONFLICT$8 = $__default[\"default\"].fn[NAME$8];\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 CLASS_NAME_CAROUSEL = 'carousel';\n var CLASS_NAME_ACTIVE$2 = '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 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$8;\n var EVENT_SLID = \"slid\" + EVENT_KEY$8;\n var EVENT_KEYDOWN = \"keydown\" + EVENT_KEY$8;\n var EVENT_MOUSEENTER = \"mouseenter\" + EVENT_KEY$8;\n var EVENT_MOUSELEAVE = \"mouseleave\" + EVENT_KEY$8;\n var EVENT_TOUCHSTART = \"touchstart\" + EVENT_KEY$8;\n var EVENT_TOUCHMOVE = \"touchmove\" + EVENT_KEY$8;\n var EVENT_TOUCHEND = \"touchend\" + EVENT_KEY$8;\n var EVENT_POINTERDOWN = \"pointerdown\" + EVENT_KEY$8;\n var EVENT_POINTERUP = \"pointerup\" + EVENT_KEY$8;\n var EVENT_DRAG_START = \"dragstart\" + EVENT_KEY$8;\n var EVENT_LOAD_DATA_API$1 = \"load\" + EVENT_KEY$8 + DATA_API_KEY$5;\n var EVENT_CLICK_DATA_API$4 = \"click\" + EVENT_KEY$8 + DATA_API_KEY$5;\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 Default$7 = {\n interval: 5000,\n keyboard: true,\n slide: false,\n pause: 'hover',\n wrap: true,\n touch: true\n };\n var DefaultType$7 = {\n interval: '(number|boolean)',\n keyboard: 'boolean',\n slide: '(boolean|string)',\n pause: '(string|boolean)',\n wrap: 'boolean',\n touch: 'boolean'\n };\n var PointerType = {\n TOUCH: 'touch',\n PEN: 'pen'\n };\n /**\n * Class definition\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;\n\n // Public\n _proto.next = function next() {\n if (!this._isSliding) {\n this._slide(DIRECTION_NEXT);\n }\n };\n\n _proto.nextWhenVisible = function nextWhenVisible() {\n 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._updateInterval();\n\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$8);\n $__default[\"default\"].removeData(this._element, DATA_KEY$8);\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$7, config);\n Util.typeCheckConfig(NAME$8, config, DefaultType$7);\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 _this3.touchDeltaX = event.originalEvent.touches && event.originalEvent.touches.length > 1 ? 0 : event.originalEvent.touches[0].clientX - _this3.touchStartX;\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$2);\n\n var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];\n\n if (nextIndicator) {\n $__default[\"default\"](nextIndicator).addClass(CLASS_NAME_ACTIVE$2);\n }\n }\n };\n\n _proto._updateInterval = function _updateInterval() {\n var element = this._activeElement || this._element.querySelector(SELECTOR_ACTIVE_ITEM);\n\n if (!element) {\n return;\n }\n\n var elementInterval = parseInt(element.getAttribute('data-interval'), 10);\n\n if (elementInterval) {\n this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n this._config.interval = elementInterval;\n } else {\n this._config.interval = this._config.defaultInterval || this._config.interval;\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$2)) {\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 this._activeElement = nextElement;\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 transitionDuration = Util.getTransitionDurationFromElement(activeElement);\n $__default[\"default\"](activeElement).one(Util.TRANSITION_END, function () {\n $__default[\"default\"](nextElement).removeClass(directionalClassName + \" \" + orderClassName).addClass(CLASS_NAME_ACTIVE$2);\n $__default[\"default\"](activeElement).removeClass(CLASS_NAME_ACTIVE$2 + \" \" + 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$2);\n $__default[\"default\"](nextElement).addClass(CLASS_NAME_ACTIVE$2);\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$8);\n\n var _config = _extends({}, Default$7, $__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$8, 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$8).to(slideIndex);\n }\n\n event.preventDefault();\n };\n\n _createClass(Carousel, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION$8;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default$7;\n }\n }]);\n\n return Carousel;\n }();\n /**\n * Data API implementation\n */\n\n\n $__default[\"default\"](document).on(EVENT_CLICK_DATA_API$4, 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 * jQuery\n */\n\n $__default[\"default\"].fn[NAME$8] = Carousel._jQueryInterface;\n $__default[\"default\"].fn[NAME$8].Constructor = Carousel;\n\n $__default[\"default\"].fn[NAME$8].noConflict = function () {\n $__default[\"default\"].fn[NAME$8] = JQUERY_NO_CONFLICT$8;\n return Carousel._jQueryInterface;\n };\n\n /**\n * Constants\n */\n\n var NAME$7 = 'collapse';\n var VERSION$7 = '4.6.2';\n var DATA_KEY$7 = 'bs.collapse';\n var EVENT_KEY$7 = \".\" + DATA_KEY$7;\n var DATA_API_KEY$4 = '.data-api';\n var JQUERY_NO_CONFLICT$7 = $__default[\"default\"].fn[NAME$7];\n var CLASS_NAME_SHOW$6 = '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 EVENT_SHOW$4 = \"show\" + EVENT_KEY$7;\n var EVENT_SHOWN$4 = \"shown\" + EVENT_KEY$7;\n var EVENT_HIDE$4 = \"hide\" + EVENT_KEY$7;\n var EVENT_HIDDEN$4 = \"hidden\" + EVENT_KEY$7;\n var EVENT_CLICK_DATA_API$3 = \"click\" + EVENT_KEY$7 + DATA_API_KEY$4;\n var SELECTOR_ACTIVES = '.show, .collapsing';\n var SELECTOR_DATA_TOGGLE$3 = '[data-toggle=\"collapse\"]';\n var Default$6 = {\n toggle: true,\n parent: ''\n };\n var DefaultType$6 = {\n toggle: 'boolean',\n parent: '(string|element)'\n };\n /**\n * Class definition\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$3));\n\n for (var i = 0, len = toggleList.length; i < len; i++) {\n var elem = toggleList[i];\n var selector = Util.getSelectorFromElement(elem);\n var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) {\n return foundElem === element;\n });\n\n if (selector !== null && filterElement.length > 0) {\n this._selector = selector;\n\n this._triggerArray.push(elem);\n }\n }\n\n this._parent = this._config.parent ? this._getParent() : null;\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n }\n\n if (this._config.toggle) {\n this.toggle();\n }\n } // Getters\n\n\n var _proto = Collapse.prototype;\n\n // Public\n _proto.toggle = function toggle() {\n if ($__default[\"default\"](this._element).hasClass(CLASS_NAME_SHOW$6)) {\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$6)) {\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$7);\n\n if (activesData && activesData._isTransitioning) {\n return;\n }\n }\n\n var startEvent = $__default[\"default\"].Event(EVENT_SHOW$4);\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$7, 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$6);\n _this._element.style[dimension] = '';\n\n _this.setTransitioning(false);\n\n $__default[\"default\"](_this._element).trigger(EVENT_SHOWN$4);\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$6)) {\n return;\n }\n\n var startEvent = $__default[\"default\"].Event(EVENT_HIDE$4);\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$6);\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$6)) {\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$4);\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$7);\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$6, config);\n config.toggle = Boolean(config.toggle); // Coerce string values\n\n Util.typeCheckConfig(NAME$7, config, DefaultType$6);\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$6);\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$7);\n\n var _config = _extends({}, Default$6, $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$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(Collapse, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION$7;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default$6;\n }\n }]);\n\n return Collapse;\n }();\n /**\n * Data API implementation\n */\n\n\n $__default[\"default\"](document).on(EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, 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$7);\n var config = data ? 'toggle' : $trigger.data();\n\n Collapse._jQueryInterface.call($target, config);\n });\n });\n /**\n * jQuery\n */\n\n $__default[\"default\"].fn[NAME$7] = Collapse._jQueryInterface;\n $__default[\"default\"].fn[NAME$7].Constructor = Collapse;\n\n $__default[\"default\"].fn[NAME$7].noConflict = function () {\n $__default[\"default\"].fn[NAME$7] = JQUERY_NO_CONFLICT$7;\n return Collapse._jQueryInterface;\n };\n\n /**\n * Constants\n */\n\n var NAME$6 = 'dropdown';\n var VERSION$6 = '4.6.2';\n var DATA_KEY$6 = 'bs.dropdown';\n var EVENT_KEY$6 = \".\" + DATA_KEY$6;\n var DATA_API_KEY$3 = '.data-api';\n var JQUERY_NO_CONFLICT$6 = $__default[\"default\"].fn[NAME$6];\n var ESCAPE_KEYCODE$1 = 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$1);\n var CLASS_NAME_DISABLED$1 = 'disabled';\n var CLASS_NAME_SHOW$5 = '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 EVENT_HIDE$3 = \"hide\" + EVENT_KEY$6;\n var EVENT_HIDDEN$3 = \"hidden\" + EVENT_KEY$6;\n var EVENT_SHOW$3 = \"show\" + EVENT_KEY$6;\n var EVENT_SHOWN$3 = \"shown\" + EVENT_KEY$6;\n var EVENT_CLICK = \"click\" + EVENT_KEY$6;\n var EVENT_CLICK_DATA_API$2 = \"click\" + EVENT_KEY$6 + DATA_API_KEY$3;\n var EVENT_KEYDOWN_DATA_API = \"keydown\" + EVENT_KEY$6 + DATA_API_KEY$3;\n var EVENT_KEYUP_DATA_API = \"keyup\" + EVENT_KEY$6 + DATA_API_KEY$3;\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$5 = {\n offset: 0,\n flip: true,\n boundary: 'scrollParent',\n reference: 'toggle',\n display: 'dynamic',\n popperConfig: null\n };\n var DefaultType$5 = {\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 * Class definition\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;\n\n // Public\n _proto.toggle = function toggle() {\n if (this._element.disabled || $__default[\"default\"](this._element).hasClass(CLASS_NAME_DISABLED$1)) {\n return;\n }\n\n var isActive = $__default[\"default\"](this._menu).hasClass(CLASS_NAME_SHOW$5);\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$1) || $__default[\"default\"](this._menu).hasClass(CLASS_NAME_SHOW$5)) {\n return;\n }\n\n var relatedTarget = {\n relatedTarget: this._element\n };\n var showEvent = $__default[\"default\"].Event(EVENT_SHOW$3, relatedTarget);\n\n var parent = Dropdown._getParentFromElement(this._element);\n\n $__default[\"default\"](parent).trigger(showEvent);\n\n if (showEvent.isDefaultPrevented()) {\n return;\n } // Totally disable Popper for Dropdowns in Navbar\n\n\n if (!this._inNavbar && usePopper) {\n // Check for Popper dependency\n if (typeof Popper__default[\"default\"] === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper (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$5);\n $__default[\"default\"](parent).toggleClass(CLASS_NAME_SHOW$5).trigger($__default[\"default\"].Event(EVENT_SHOWN$3, relatedTarget));\n };\n\n _proto.hide = function hide() {\n if (this._element.disabled || $__default[\"default\"](this._element).hasClass(CLASS_NAME_DISABLED$1) || !$__default[\"default\"](this._menu).hasClass(CLASS_NAME_SHOW$5)) {\n return;\n }\n\n var relatedTarget = {\n relatedTarget: this._element\n };\n var hideEvent = $__default[\"default\"].Event(EVENT_HIDE$3, 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$5);\n $__default[\"default\"](parent).toggleClass(CLASS_NAME_SHOW$5).trigger($__default[\"default\"].Event(EVENT_HIDDEN$3, relatedTarget));\n };\n\n _proto.dispose = function dispose() {\n $__default[\"default\"].removeData(this._element, DATA_KEY$6);\n $__default[\"default\"](this._element).off(EVENT_KEY$6);\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$6, 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 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$6);\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$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 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$6);\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$5)) {\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$3, 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$5);\n $__default[\"default\"](parent).removeClass(CLASS_NAME_SHOW$5).trigger($__default[\"default\"].Event(EVENT_HIDDEN$3, 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$1 && (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$1)) {\n return;\n }\n\n var parent = Dropdown._getParentFromElement(this);\n\n var isActive = $__default[\"default\"](parent).hasClass(CLASS_NAME_SHOW$5);\n\n if (!isActive && event.which === ESCAPE_KEYCODE$1) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n if (!isActive || event.which === ESCAPE_KEYCODE$1 || event.which === SPACE_KEYCODE) {\n if (event.which === ESCAPE_KEYCODE$1) {\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$6;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default$5;\n }\n }, {\n key: \"DefaultType\",\n get: function get() {\n return DefaultType$5;\n }\n }]);\n\n return Dropdown;\n }();\n /**\n * Data API implementation\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$2 + \" \" + EVENT_KEYUP_DATA_API, Dropdown._clearMenus).on(EVENT_CLICK_DATA_API$2, 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$2, SELECTOR_FORM_CHILD, function (e) {\n e.stopPropagation();\n });\n /**\n * jQuery\n */\n\n $__default[\"default\"].fn[NAME$6] = Dropdown._jQueryInterface;\n $__default[\"default\"].fn[NAME$6].Constructor = Dropdown;\n\n $__default[\"default\"].fn[NAME$6].noConflict = function () {\n $__default[\"default\"].fn[NAME$6] = JQUERY_NO_CONFLICT$6;\n return Dropdown._jQueryInterface;\n };\n\n /**\n * Constants\n */\n\n var NAME$5 = 'modal';\n var VERSION$5 = '4.6.2';\n var DATA_KEY$5 = 'bs.modal';\n var EVENT_KEY$5 = \".\" + DATA_KEY$5;\n var DATA_API_KEY$2 = '.data-api';\n var JQUERY_NO_CONFLICT$5 = $__default[\"default\"].fn[NAME$5];\n var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key\n\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$4 = 'fade';\n var CLASS_NAME_SHOW$4 = 'show';\n var CLASS_NAME_STATIC = 'modal-static';\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$1 = \"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$1 = \"click\" + EVENT_KEY$5 + DATA_API_KEY$2;\n var SELECTOR_DIALOG = '.modal-dialog';\n var SELECTOR_MODAL_BODY = '.modal-body';\n var SELECTOR_DATA_TOGGLE$1 = '[data-toggle=\"modal\"]';\n var SELECTOR_DATA_DISMISS$1 = '[data-dismiss=\"modal\"]';\n var SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\n var SELECTOR_STICKY_CONTENT = '.sticky-top';\n var Default$4 = {\n backdrop: true,\n keyboard: true,\n focus: true,\n show: true\n };\n var DefaultType$4 = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n focus: 'boolean',\n show: 'boolean'\n };\n /**\n * Class definition\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;\n\n // Public\n _proto.toggle = function toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget);\n };\n\n _proto.show = function show(relatedTarget) {\n var _this = this;\n\n if (this._isShown || this._isTransitioning) {\n return;\n }\n\n var showEvent = $__default[\"default\"].Event(EVENT_SHOW$2, {\n relatedTarget: relatedTarget\n });\n $__default[\"default\"](this._element).trigger(showEvent);\n\n if (showEvent.isDefaultPrevented()) {\n return;\n }\n\n this._isShown = true;\n\n if ($__default[\"default\"](this._element).hasClass(CLASS_NAME_FADE$4)) {\n this._isTransitioning = true;\n }\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$1, SELECTOR_DATA_DISMISS$1, 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$4);\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$4);\n $__default[\"default\"](this._element).off(EVENT_CLICK_DISMISS$1);\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$4, config);\n Util.typeCheckConfig(NAME$5, config, DefaultType$4);\n return config;\n };\n\n _proto._triggerBackdropTransition = function _triggerBackdropTransition() {\n var _this3 = this;\n\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 };\n\n _proto._showElement = function _showElement(relatedTarget) {\n var _this4 = this;\n\n var transition = $__default[\"default\"](this._element).hasClass(CLASS_NAME_FADE$4);\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$4);\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) {\n event.preventDefault();\n\n _this6.hide();\n } else if (!_this6._config.keyboard && event.which === ESCAPE_KEYCODE) {\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$4) ? CLASS_NAME_FADE$4 : '';\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$1, 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 if (_this9._config.backdrop === 'static') {\n _this9._triggerBackdropTransition();\n } else {\n _this9.hide();\n }\n });\n\n if (animate) {\n Util.reflow(this._backdrop);\n }\n\n $__default[\"default\"](this._backdrop).addClass(CLASS_NAME_SHOW$4);\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$4);\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$4)) {\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$4, $__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$4;\n }\n }]);\n\n return Modal;\n }();\n /**\n * Data API implementation\n */\n\n\n $__default[\"default\"](document).on(EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, 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 * jQuery\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 * --------------------------------------------------------------------------\n * Bootstrap (v4.6.2): tools/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href'];\n var ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n var DefaultWhitelist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', '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 https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\n\n var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i;\n /**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/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(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));\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 (regExp[i].test(attrName)) {\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); // eslint-disable-next-line unicorn/prefer-spread\n\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 var NAME$4 = 'tooltip';\n var VERSION$4 = '4.6.2';\n var DATA_KEY$4 = 'bs.tooltip';\n var EVENT_KEY$4 = \".\" + DATA_KEY$4;\n var JQUERY_NO_CONFLICT$4 = $__default[\"default\"].fn[NAME$4];\n var CLASS_PREFIX$1 = 'bs-tooltip';\n var BSCLS_PREFIX_REGEX$1 = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX$1 + \"\\\\S+\", 'g');\n var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'];\n var CLASS_NAME_FADE$3 = 'fade';\n var CLASS_NAME_SHOW$3 = 'show';\n var HOVER_STATE_SHOW = 'show';\n var HOVER_STATE_OUT = 'out';\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 var AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: 'right',\n BOTTOM: 'bottom',\n LEFT: 'left'\n };\n var Default$3 = {\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 customClass: '',\n sanitize: true,\n sanitizeFn: null,\n whiteList: DefaultWhitelist,\n popperConfig: null\n };\n var DefaultType$3 = {\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 customClass: '(string|function)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n whiteList: 'object',\n popperConfig: '(null|object)'\n };\n var Event$1 = {\n HIDE: \"hide\" + EVENT_KEY$4,\n HIDDEN: \"hidden\" + EVENT_KEY$4,\n SHOW: \"show\" + EVENT_KEY$4,\n SHOWN: \"shown\" + EVENT_KEY$4,\n INSERTED: \"inserted\" + EVENT_KEY$4,\n CLICK: \"click\" + EVENT_KEY$4,\n FOCUSIN: \"focusin\" + EVENT_KEY$4,\n FOCUSOUT: \"focusout\" + EVENT_KEY$4,\n MOUSEENTER: \"mouseenter\" + EVENT_KEY$4,\n MOUSELEAVE: \"mouseleave\" + EVENT_KEY$4\n };\n /**\n * Class definition\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 (https://popper.js.org)');\n } // Private\n\n\n this._isEnabled = true;\n this._timeout = 0;\n this._hoverState = '';\n this._activeTrigger = {};\n this._popper = null; // Protected\n\n this.element = element;\n this.config = this._getConfig(config);\n this.tip = null;\n\n this._setListeners();\n } // Getters\n\n\n var _proto = Tooltip.prototype;\n\n // Public\n _proto.enable = function enable() {\n this._isEnabled = true;\n };\n\n _proto.disable = function disable() {\n this._isEnabled = false;\n };\n\n _proto.toggleEnabled = function toggleEnabled() {\n this._isEnabled = !this._isEnabled;\n };\n\n _proto.toggle = function toggle(event) {\n if (!this._isEnabled) {\n return;\n }\n\n if (event) {\n var dataKey = this.constructor.DATA_KEY;\n var context = $__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$3)) {\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$3);\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$3);\n $__default[\"default\"](tip).addClass(this.config.customClass); // 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$3)) {\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$3); // 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$3)) {\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$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 = this.getTipElement();\n this.setElementContent($__default[\"default\"](tip.querySelectorAll(SELECTOR_TOOLTIP_INNER)), this.getTitle());\n $__default[\"default\"](tip).removeClass(CLASS_NAME_FADE$3 + \" \" + CLASS_NAME_SHOW$3);\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$3) || 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$4, 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$1);\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$3);\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$4);\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$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 _createClass(Tooltip, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION$4;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default$3;\n }\n }, {\n key: \"NAME\",\n get: function get() {\n return NAME$4;\n }\n }, {\n key: \"DATA_KEY\",\n get: function get() {\n return DATA_KEY$4;\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$4;\n }\n }, {\n key: \"DefaultType\",\n get: function get() {\n return DefaultType$3;\n }\n }]);\n\n return Tooltip;\n }();\n /**\n * jQuery\n */\n\n\n $__default[\"default\"].fn[NAME$4] = Tooltip._jQueryInterface;\n $__default[\"default\"].fn[NAME$4].Constructor = Tooltip;\n\n $__default[\"default\"].fn[NAME$4].noConflict = function () {\n $__default[\"default\"].fn[NAME$4] = JQUERY_NO_CONFLICT$4;\n return Tooltip._jQueryInterface;\n };\n\n /**\n * Constants\n */\n\n var NAME$3 = 'popover';\n var VERSION$3 = '4.6.2';\n var DATA_KEY$3 = 'bs.popover';\n var EVENT_KEY$3 = \".\" + DATA_KEY$3;\n var JQUERY_NO_CONFLICT$3 = $__default[\"default\"].fn[NAME$3];\n var CLASS_PREFIX = 'bs-popover';\n var BSCLS_PREFIX_REGEX = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX + \"\\\\S+\", 'g');\n var CLASS_NAME_FADE$2 = 'fade';\n var CLASS_NAME_SHOW$2 = 'show';\n var SELECTOR_TITLE = '.popover-header';\n var SELECTOR_CONTENT = '.popover-body';\n\n var Default$2 = _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$2 = _extends({}, Tooltip.DefaultType, {\n content: '(string|element|function)'\n });\n\n var Event = {\n HIDE: \"hide\" + EVENT_KEY$3,\n HIDDEN: \"hidden\" + EVENT_KEY$3,\n SHOW: \"show\" + EVENT_KEY$3,\n SHOWN: \"shown\" + EVENT_KEY$3,\n INSERTED: \"inserted\" + EVENT_KEY$3,\n CLICK: \"click\" + EVENT_KEY$3,\n FOCUSIN: \"focusin\" + EVENT_KEY$3,\n FOCUSOUT: \"focusout\" + EVENT_KEY$3,\n MOUSEENTER: \"mouseenter\" + EVENT_KEY$3,\n MOUSELEAVE: \"mouseleave\" + EVENT_KEY$3\n };\n /**\n * Class definition\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;\n\n // Overrides\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 + \"-\" + 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$2 + \" \" + CLASS_NAME_SHOW$2);\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);\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$3);\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$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(Popover, null, [{\n key: \"VERSION\",\n get: // Getters\n function get() {\n return VERSION$3;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default$2;\n }\n }, {\n key: \"NAME\",\n get: function get() {\n return NAME$3;\n }\n }, {\n key: \"DATA_KEY\",\n get: function get() {\n return DATA_KEY$3;\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$3;\n }\n }, {\n key: \"DefaultType\",\n get: function get() {\n return DefaultType$2;\n }\n }]);\n\n return Popover;\n }(Tooltip);\n /**\n * jQuery\n */\n\n\n $__default[\"default\"].fn[NAME$3] = Popover._jQueryInterface;\n $__default[\"default\"].fn[NAME$3].Constructor = Popover;\n\n $__default[\"default\"].fn[NAME$3].noConflict = function () {\n $__default[\"default\"].fn[NAME$3] = JQUERY_NO_CONFLICT$3;\n return Popover._jQueryInterface;\n };\n\n /**\n * Constants\n */\n\n var NAME$2 = 'scrollspy';\n var VERSION$2 = '4.6.2';\n var DATA_KEY$2 = 'bs.scrollspy';\n var EVENT_KEY$2 = \".\" + DATA_KEY$2;\n var DATA_API_KEY$1 = '.data-api';\n var JQUERY_NO_CONFLICT$2 = $__default[\"default\"].fn[NAME$2];\n var CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\n var CLASS_NAME_ACTIVE$1 = 'active';\n var EVENT_ACTIVATE = \"activate\" + EVENT_KEY$2;\n var EVENT_SCROLL = \"scroll\" + EVENT_KEY$2;\n var EVENT_LOAD_DATA_API = \"load\" + EVENT_KEY$2 + DATA_API_KEY$1;\n var METHOD_OFFSET = 'offset';\n var METHOD_POSITION = 'position';\n var SELECTOR_DATA_SPY = '[data-spy=\"scroll\"]';\n var SELECTOR_NAV_LIST_GROUP$1 = '.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$1 = '.dropdown';\n var SELECTOR_DROPDOWN_ITEMS = '.dropdown-item';\n var SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\n var Default$1 = {\n offset: 10,\n method: 'auto',\n target: ''\n };\n var DefaultType$1 = {\n offset: 'number',\n method: 'string',\n target: '(string|element)'\n };\n /**\n * Class definition\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;\n\n // Public\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(Boolean).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$2);\n $__default[\"default\"](this._scrollElement).off(EVENT_KEY$2);\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$1, 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$2);\n $__default[\"default\"](config.target).attr('id', id);\n }\n\n config.target = \"#\" + id;\n }\n\n Util.typeCheckConfig(NAME$2, config, DefaultType$1);\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$1).find(SELECTOR_DROPDOWN_TOGGLE$1).addClass(CLASS_NAME_ACTIVE$1);\n $link.addClass(CLASS_NAME_ACTIVE$1);\n } else {\n // Set triggered link as active\n $link.addClass(CLASS_NAME_ACTIVE$1); // 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$1).prev(SELECTOR_NAV_LINKS + \", \" + SELECTOR_LIST_ITEMS).addClass(CLASS_NAME_ACTIVE$1); // Handle special case when .nav-link is inside .nav-item\n\n $link.parents(SELECTOR_NAV_LIST_GROUP$1).prev(SELECTOR_NAV_ITEMS).children(SELECTOR_NAV_LINKS).addClass(CLASS_NAME_ACTIVE$1);\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$1);\n }).forEach(function (node) {\n return node.classList.remove(CLASS_NAME_ACTIVE$1);\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$2);\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$2, 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$2;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default$1;\n }\n }]);\n\n return ScrollSpy;\n }();\n /**\n * Data API implementation\n */\n\n\n $__default[\"default\"](window).on(EVENT_LOAD_DATA_API, function () {\n var scrollSpys = [].slice.call(document.querySelectorAll(SELECTOR_DATA_SPY));\n var scrollSpysLength = scrollSpys.length;\n\n for (var i = scrollSpysLength; i--;) {\n var $spy = $__default[\"default\"](scrollSpys[i]);\n\n ScrollSpy._jQueryInterface.call($spy, $spy.data());\n }\n });\n /**\n * jQuery\n */\n\n $__default[\"default\"].fn[NAME$2] = ScrollSpy._jQueryInterface;\n $__default[\"default\"].fn[NAME$2].Constructor = ScrollSpy;\n\n $__default[\"default\"].fn[NAME$2].noConflict = function () {\n $__default[\"default\"].fn[NAME$2] = JQUERY_NO_CONFLICT$2;\n return ScrollSpy._jQueryInterface;\n };\n\n /**\n * Constants\n */\n\n var NAME$1 = 'tab';\n var VERSION$1 = '4.6.2';\n var DATA_KEY$1 = 'bs.tab';\n var EVENT_KEY$1 = \".\" + DATA_KEY$1;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT$1 = $__default[\"default\"].fn[NAME$1];\n var CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\n var CLASS_NAME_ACTIVE = 'active';\n var CLASS_NAME_DISABLED = 'disabled';\n var CLASS_NAME_FADE$1 = 'fade';\n var CLASS_NAME_SHOW$1 = 'show';\n var EVENT_HIDE$1 = \"hide\" + EVENT_KEY$1;\n var EVENT_HIDDEN$1 = \"hidden\" + EVENT_KEY$1;\n var EVENT_SHOW$1 = \"show\" + EVENT_KEY$1;\n var EVENT_SHOWN$1 = \"shown\" + EVENT_KEY$1;\n var EVENT_CLICK_DATA_API = \"click\" + EVENT_KEY$1 + DATA_API_KEY;\n var SELECTOR_DROPDOWN = '.dropdown';\n var SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\n var SELECTOR_ACTIVE = '.active';\n var SELECTOR_ACTIVE_UL = '> li > .active';\n var SELECTOR_DATA_TOGGLE = '[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]';\n var SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\n var SELECTOR_DROPDOWN_ACTIVE_CHILD = '> .dropdown-menu .active';\n /**\n * Class definition\n */\n\n var Tab = /*#__PURE__*/function () {\n function Tab(element) {\n this._element = element;\n } // Getters\n\n\n var _proto = Tab.prototype;\n\n // Public\n _proto.show = function show() {\n var _this = this;\n\n if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $__default[\"default\"](this._element).hasClass(CLASS_NAME_ACTIVE) || $__default[\"default\"](this._element).hasClass(CLASS_NAME_DISABLED) || this._element.hasAttribute('disabled')) {\n return;\n }\n\n var target;\n var previous;\n var listElement = $__default[\"default\"](this._element).closest(SELECTOR_NAV_LIST_GROUP)[0];\n var selector = Util.getSelectorFromElement(this._element);\n\n if (listElement) {\n var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;\n previous = $__default[\"default\"].makeArray($__default[\"default\"](listElement).find(itemSelector));\n previous = previous[previous.length - 1];\n }\n\n var hideEvent = $__default[\"default\"].Event(EVENT_HIDE$1, {\n relatedTarget: this._element\n });\n var showEvent = $__default[\"default\"].Event(EVENT_SHOW$1, {\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$1, {\n relatedTarget: _this._element\n });\n var shownEvent = $__default[\"default\"].Event(EVENT_SHOWN$1, {\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$1);\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);\n var active = activeElements[0];\n var isTransitioning = callback && active && $__default[\"default\"](active).hasClass(CLASS_NAME_FADE$1);\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$1).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);\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);\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);\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$1)) {\n element.classList.add(CLASS_NAME_SHOW$1);\n }\n\n var parent = element.parentNode;\n\n if (parent && parent.nodeName === 'LI') {\n parent = parent.parentNode;\n }\n\n if (parent && $__default[\"default\"](parent).hasClass(CLASS_NAME_DROPDOWN_MENU)) {\n var dropdownElement = $__default[\"default\"](element).closest(SELECTOR_DROPDOWN)[0];\n\n if (dropdownElement) {\n var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(SELECTOR_DROPDOWN_TOGGLE));\n $__default[\"default\"](dropdownToggleList).addClass(CLASS_NAME_ACTIVE);\n }\n\n element.setAttribute('aria-expanded', true);\n }\n\n if (callback) {\n callback();\n }\n } // Static\n ;\n\n Tab._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var $this = $__default[\"default\"](this);\n var data = $this.data(DATA_KEY$1);\n\n if (!data) {\n data = new Tab(this);\n $this.data(DATA_KEY$1, 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$1;\n }\n }]);\n\n return Tab;\n }();\n /**\n * Data API implementation\n */\n\n\n $__default[\"default\"](document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault();\n\n Tab._jQueryInterface.call($__default[\"default\"](this), 'show');\n });\n /**\n * jQuery\n */\n\n $__default[\"default\"].fn[NAME$1] = Tab._jQueryInterface;\n $__default[\"default\"].fn[NAME$1].Constructor = Tab;\n\n $__default[\"default\"].fn[NAME$1].noConflict = function () {\n $__default[\"default\"].fn[NAME$1] = JQUERY_NO_CONFLICT$1;\n return Tab._jQueryInterface;\n };\n\n /**\n * Constants\n */\n\n var NAME = 'toast';\n var VERSION = '4.6.2';\n var DATA_KEY = 'bs.toast';\n var EVENT_KEY = \".\" + DATA_KEY;\n var JQUERY_NO_CONFLICT = $__default[\"default\"].fn[NAME];\n var CLASS_NAME_FADE = 'fade';\n var CLASS_NAME_HIDE = 'hide';\n var CLASS_NAME_SHOW = 'show';\n var CLASS_NAME_SHOWING = 'showing';\n var EVENT_CLICK_DISMISS = \"click.dismiss\" + EVENT_KEY;\n var EVENT_HIDE = \"hide\" + EVENT_KEY;\n var EVENT_HIDDEN = \"hidden\" + EVENT_KEY;\n var EVENT_SHOW = \"show\" + EVENT_KEY;\n var EVENT_SHOWN = \"shown\" + EVENT_KEY;\n var SELECTOR_DATA_DISMISS = '[data-dismiss=\"toast\"]';\n var Default = {\n animation: true,\n autohide: true,\n delay: 500\n };\n var DefaultType = {\n animation: 'boolean',\n autohide: 'boolean',\n delay: 'number'\n };\n /**\n * Class definition\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;\n\n // Public\n _proto.show = function show() {\n var _this = this;\n\n var showEvent = $__default[\"default\"].Event(EVENT_SHOW);\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);\n }\n\n var complete = function complete() {\n _this._element.classList.remove(CLASS_NAME_SHOWING);\n\n _this._element.classList.add(CLASS_NAME_SHOW);\n\n $__default[\"default\"](_this._element).trigger(EVENT_SHOWN);\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)) {\n return;\n }\n\n var hideEvent = $__default[\"default\"].Event(EVENT_HIDE);\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)) {\n this._element.classList.remove(CLASS_NAME_SHOW);\n }\n\n $__default[\"default\"](this._element).off(EVENT_CLICK_DISMISS);\n $__default[\"default\"].removeData(this._element, DATA_KEY);\n this._element = null;\n this._config = null;\n } // Private\n ;\n\n _proto._getConfig = function _getConfig(config) {\n config = _extends({}, Default, $__default[\"default\"](this._element).data(), typeof config === 'object' && config ? config : {});\n Util.typeCheckConfig(NAME, 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, SELECTOR_DATA_DISMISS, 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);\n };\n\n this._element.classList.remove(CLASS_NAME_SHOW);\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);\n\n var _config = typeof config === 'object' && config;\n\n if (!data) {\n data = new Toast(this, _config);\n $element.data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config](this);\n }\n });\n };\n\n _createClass(Toast, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"DefaultType\",\n get: function get() {\n return DefaultType;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }]);\n\n return Toast;\n }();\n /**\n * jQuery\n */\n\n\n $__default[\"default\"].fn[NAME] = Toast._jQueryInterface;\n $__default[\"default\"].fn[NAME].Constructor = Toast;\n\n $__default[\"default\"].fn[NAME].noConflict = function () {\n $__default[\"default\"].fn[NAME] = JQUERY_NO_CONFLICT;\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\n Object.defineProperty(exports, '__esModule', { value: true });\n\n}));\n//# sourceMappingURL=bootstrap.js.map\n","import { subform } from './blocks/newsletter';\n\nrequire('./bootstrap');\n\n// Components\nrequire('./components/utilities');\nrequire('./components/disclaimer');\nrequire('./components/colorbox');\nrequire('./components/post');\nrequire('./components/selectric');\n\n// Blocks\nrequire('./blocks/accordion');\nrequire('./blocks/news-slider');\nrequire('./blocks/portfolio-grid');\nrequire('./blocks/stats');\nrequire('./blocks/tabs');\nrequire('./blocks/team-slider');\n\n$(() => {\n subform();\n});\n","var __assign=this&&this.__assign||function(){return(__assign=Object.assign||function(t){for(var i,n=1,s=arguments.length;n<s;n++)for(var a in i=arguments[n])Object.prototype.hasOwnProperty.call(i,a)&&(t[a]=i[a]);return t}).apply(this,arguments)},CountUp=function(){function t(t,i,n){var s=this;this.endVal=i,this.options=n,this.version=\"2.3.2\",this.defaults={startVal:0,decimalPlaces:0,duration:2,useEasing:!0,useGrouping:!0,smartEasingThreshold:999,smartEasingAmount:333,separator:\",\",decimal:\".\",prefix:\"\",suffix:\"\",enableScrollSpy:!1,scrollSpyDelay:200,scrollSpyOnce:!1},this.finalEndVal=null,this.useEasing=!0,this.countDown=!1,this.error=\"\",this.startVal=0,this.paused=!0,this.once=!1,this.count=function(t){s.startTime||(s.startTime=t);var i=t-s.startTime;s.remaining=s.duration-i,s.useEasing?s.countDown?s.frameVal=s.startVal-s.easingFn(i,0,s.startVal-s.endVal,s.duration):s.frameVal=s.easingFn(i,s.startVal,s.endVal-s.startVal,s.duration):s.frameVal=s.startVal+(s.endVal-s.startVal)*(i/s.duration);var n=s.countDown?s.frameVal<s.endVal:s.frameVal>s.endVal;s.frameVal=n?s.endVal:s.frameVal,s.frameVal=Number(s.frameVal.toFixed(s.options.decimalPlaces)),s.printValue(s.frameVal),i<s.duration?s.rAF=requestAnimationFrame(s.count):null!==s.finalEndVal?s.update(s.finalEndVal):s.callback&&s.callback()},this.formatNumber=function(t){var i,n,a,e,r=t<0?\"-\":\"\";i=Math.abs(t).toFixed(s.options.decimalPlaces);var o=(i+=\"\").split(\".\");if(n=o[0],a=o.length>1?s.options.decimal+o[1]:\"\",s.options.useGrouping){e=\"\";for(var l=0,h=n.length;l<h;++l)0!==l&&l%3==0&&(e=s.options.separator+e),e=n[h-l-1]+e;n=e}return s.options.numerals&&s.options.numerals.length&&(n=n.replace(/[0-9]/g,function(t){return s.options.numerals[+t]}),a=a.replace(/[0-9]/g,function(t){return s.options.numerals[+t]})),r+s.options.prefix+n+a+s.options.suffix},this.easeOutExpo=function(t,i,n,s){return n*(1-Math.pow(2,-10*t/s))*1024/1023+i},this.options=__assign(__assign({},this.defaults),n),this.formattingFn=this.options.formattingFn?this.options.formattingFn:this.formatNumber,this.easingFn=this.options.easingFn?this.options.easingFn:this.easeOutExpo,this.startVal=this.validateValue(this.options.startVal),this.frameVal=this.startVal,this.endVal=this.validateValue(i),this.options.decimalPlaces=Math.max(this.options.decimalPlaces),this.resetDuration(),this.options.separator=String(this.options.separator),this.useEasing=this.options.useEasing,\"\"===this.options.separator&&(this.options.useGrouping=!1),this.el=\"string\"==typeof t?document.getElementById(t):t,this.el?this.printValue(this.startVal):this.error=\"[CountUp] target is null or undefined\",\"undefined\"!=typeof window&&this.options.enableScrollSpy&&(this.error?console.error(this.error,t):(window.onScrollFns=window.onScrollFns||[],window.onScrollFns.push(function(){return s.handleScroll(s)}),window.onscroll=function(){window.onScrollFns.forEach(function(t){return t()})},this.handleScroll(this)))}return t.prototype.handleScroll=function(t){if(t&&window&&!t.once){var i=window.innerHeight+window.scrollY,n=t.el.getBoundingClientRect(),s=n.top+n.height+window.pageYOffset;s<i&&s>window.scrollY&&t.paused?(t.paused=!1,setTimeout(function(){return t.start()},t.options.scrollSpyDelay),t.options.scrollSpyOnce&&(t.once=!0)):window.scrollY>s&&!t.paused&&t.reset()}},t.prototype.determineDirectionAndSmartEasing=function(){var t=this.finalEndVal?this.finalEndVal:this.endVal;this.countDown=this.startVal>t;var i=t-this.startVal;if(Math.abs(i)>this.options.smartEasingThreshold&&this.options.useEasing){this.finalEndVal=t;var n=this.countDown?1:-1;this.endVal=t+n*this.options.smartEasingAmount,this.duration=this.duration/2}else this.endVal=t,this.finalEndVal=null;null!==this.finalEndVal?this.useEasing=!1:this.useEasing=this.options.useEasing},t.prototype.start=function(t){this.error||(this.callback=t,this.duration>0?(this.determineDirectionAndSmartEasing(),this.paused=!1,this.rAF=requestAnimationFrame(this.count)):this.printValue(this.endVal))},t.prototype.pauseResume=function(){this.paused?(this.startTime=null,this.duration=this.remaining,this.startVal=this.frameVal,this.determineDirectionAndSmartEasing(),this.rAF=requestAnimationFrame(this.count)):cancelAnimationFrame(this.rAF),this.paused=!this.paused},t.prototype.reset=function(){cancelAnimationFrame(this.rAF),this.paused=!0,this.resetDuration(),this.startVal=this.validateValue(this.options.startVal),this.frameVal=this.startVal,this.printValue(this.startVal)},t.prototype.update=function(t){cancelAnimationFrame(this.rAF),this.startTime=null,this.endVal=this.validateValue(t),this.endVal!==this.frameVal&&(this.startVal=this.frameVal,null==this.finalEndVal&&this.resetDuration(),this.finalEndVal=null,this.determineDirectionAndSmartEasing(),this.rAF=requestAnimationFrame(this.count))},t.prototype.printValue=function(t){var i=this.formattingFn(t);\"INPUT\"===this.el.tagName?this.el.value=i:\"text\"===this.el.tagName||\"tspan\"===this.el.tagName?this.el.textContent=i:this.el.innerHTML=i},t.prototype.ensureNumber=function(t){return\"number\"==typeof t&&!isNaN(t)},t.prototype.validateValue=function(t){var i=Number(t);return this.ensureNumber(i)?i:(this.error=\"[CountUp] invalid start or end value: \".concat(t),null)},t.prototype.resetDuration=function(){this.startTime=null,this.duration=1e3*Number(this.options.duration),this.remaining=this.duration},t}();export{CountUp};","import { CountUp } from 'countup.js';\n\njQuery(document).ready(function($) {\n\n var isScrolledIntoView = function(elem) {\n var docViewTop = $(window).scrollTop();\n var docViewBottom = docViewTop + $(window).height();\n var elemTop = $(elem).offset().top;\n var elemBottom = elemTop + $(elem).height();\n return ((elemBottom <= docViewBottom) && (elemTop >= docViewTop));\n }\n\n var numbersAnimation = function() {\n\n var numbers = $('.number');\n\n $.each( numbers, function ( i, e ) {\n\n if ( isScrolledIntoView(this) === true && !$(this).hasClass('is-in-view') ) {\n\n var endVal = $(this).text().replace(/,/g, '');\n $(this).addClass('is-in-view');\n\n var hasDecimals = endVal.indexOf('.') == -1 ? 0 : 1;\n\n var separator = $(this).data('disable-separator');\n console.log(separator);\n separator = separator ? '' : ',';\n\n var options = {\n startVal : 0,\n   useEasing : false,\n   useGrouping : true,\n   separator : separator,\n   decimal : '.',\n decimalPlaces : hasDecimals,\n duration : 1\n };\n\n if ( endVal && endVal > 0 ) {\n var number = new CountUp( jQuery(this).attr('id'), endVal, options);\n number.start();\n }\n\n }\n\n });\n\n };\n\n numbersAnimation();\n\n $(window).scroll(function () {\n numbersAnimation();\n });\n\n});\n","jQuery(document).ready(function($) {\n\n\t$('.portfolio-grid').on('click','.portfolio-grid-item-accordion-close',function(e) {\n\n\t\te.preventDefault();\n\t\t$('.portfolio-grid-item').removeClass('is-expanded');\n\n\t});\n\n\t$('.portfolio-grid-items').on('click', '.portfolio-grid-item', function() {\n\n\t\t$('.portfolio-grid-item').removeClass('is-expanded');\n\t\t$(this).addClass('is-expanded');\n\n\t\tvar gridOffset = $(this).offset();\n\t\tvar banner = $('.banner').height();\n\n\t\t$('html, body').animate({\n\t\t\tscrollTop: gridOffset.top - banner\n\t\t}, 750);\n\n\t});\n\n\t$('.portfolio-grid--grid').on('click', '.grid-item--accordion-close', function(e) {\n\n\t\te.preventDefault();\n\t\t$(this).closest('.grid-item--accordion').prev().removeClass('is-expanded');\n\n\t});\n\n\t$('.portfolio-grid--statuses-a').on('click',function(e) {\n\n\t\te.preventDefault();\n\t\tvar dataStatus = $(this).data('status');\n\t\tvar dataType = $('.portfolio-grid--types .active a').data('type');\n\t\tvar parentEls = $(this).parent().parent().find('li');\n\t\tparentEls.removeClass('active');\n\t\t$(this).parent().addClass('active');\n\t\tajaxQuery(dataStatus, dataType);\n\n\t});\n\n\t$('.portfolio-grid--types-a').on('click',function(e) {\n\n\t\te.preventDefault();\n\t\tvar dataStatus = $('.portfolio-grid--statuses .active a').data('status');\n\t\tvar dataType = $(this).data('type');\n\t\tvar parentEls = $(this).parent().parent().find('li');\n\t\tparentEls.removeClass('active');\n\t\t$(this).parent().addClass('active');\n\t\tajaxQuery(dataStatus, dataType);\n\n\t});\n\n\tvar ajaxQuery = function( status = 'all', type = 'all' ) {\n\n var filterValues = {\n 'status' : status,\n\t\t\t'type' : type,\n };\n\n\t\tconsole.log(filterValues);\n\n $.ajax({\n\t\t\ttype : \"POST\",\n\t\t\turl : localized_object.ajax_url,\n\t\t\tdata : {\n action : 'get_portfolio_filters',\n data : filterValues\n },\n\t\t\tdataType : \"json\",\n\t\t\ttimeout : 90000000,\n\t\t\tbeforeSend : function() { $('.portfolio-grid-items').addClass('is-loading')}\n })\n .done( function( response ) {\n\n $('.portfolio-grid-items').html(response.posts);\n $('.portfolio-grid-items').removeClass('is-loading');\n\n })\n .fail( function( request, status, err ) {\n\t\t\tconsole.log( 'REQUEST => ' + request );\n\t\t\tconsole.log( 'STATUS => ' + status );\n\t\t\tconsole.log( 'ERR => ' );\n\t\t\tconsole.log( err );\n });\n\n }\n\n});\n","/**\n * Fizzy UI utils v2.0.7\n * MIT license\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true */\n\n( function( window, factory ) {\n // universal module definition\n /*jshint strict: false */ /*globals define, module, require */\n\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'desandro-matches-selector/matches-selector'\n ], function( matchesSelector ) {\n return factory( window, matchesSelector );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('desandro-matches-selector')\n );\n } else {\n // browser global\n window.fizzyUIUtils = factory(\n window,\n window.matchesSelector\n );\n }\n\n}( window, function factory( window, matchesSelector ) {\n\n'use strict';\n\nvar utils = {};\n\n// ----- extend ----- //\n\n// extends objects\nutils.extend = function( a, b ) {\n for ( var prop in b ) {\n a[ prop ] = b[ prop ];\n }\n return a;\n};\n\n// ----- modulo ----- //\n\nutils.modulo = function( num, div ) {\n return ( ( num % div ) + div ) % div;\n};\n\n// ----- makeArray ----- //\n\nvar arraySlice = Array.prototype.slice;\n\n// turn element or nodeList into an array\nutils.makeArray = function( obj ) {\n if ( Array.isArray( obj ) ) {\n // use object if already an array\n return obj;\n }\n // return empty array if undefined or null. #6\n if ( obj === null || obj === undefined ) {\n return [];\n }\n\n var isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\n if ( isArrayLike ) {\n // convert nodeList to array\n return arraySlice.call( obj );\n }\n\n // array of single index\n return [ obj ];\n};\n\n// ----- removeFrom ----- //\n\nutils.removeFrom = function( ary, obj ) {\n var index = ary.indexOf( obj );\n if ( index != -1 ) {\n ary.splice( index, 1 );\n }\n};\n\n// ----- getParent ----- //\n\nutils.getParent = function( elem, selector ) {\n while ( elem.parentNode && elem != document.body ) {\n elem = elem.parentNode;\n if ( matchesSelector( elem, selector ) ) {\n return elem;\n }\n }\n};\n\n// ----- getQueryElement ----- //\n\n// use element as selector string\nutils.getQueryElement = function( elem ) {\n if ( typeof elem == 'string' ) {\n return document.querySelector( elem );\n }\n return elem;\n};\n\n// ----- handleEvent ----- //\n\n// enable .ontype to trigger from .addEventListener( elem, 'type' )\nutils.handleEvent = function( event ) {\n var method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\n// ----- filterFindElements ----- //\n\nutils.filterFindElements = function( elems, selector ) {\n // make array of elems\n elems = utils.makeArray( elems );\n var ffElems = [];\n\n elems.forEach( function( elem ) {\n // check that elem is an actual element\n if ( !( elem instanceof HTMLElement ) ) {\n return;\n }\n // add elem if no selector\n if ( !selector ) {\n ffElems.push( elem );\n return;\n }\n // filter & find items if we have a selector\n // filter\n if ( matchesSelector( elem, selector ) ) {\n ffElems.push( elem );\n }\n // find children\n var childElems = elem.querySelectorAll( selector );\n // concat childElems to filterFound array\n for ( var i=0; i < childElems.length; i++ ) {\n ffElems.push( childElems[i] );\n }\n });\n\n return ffElems;\n};\n\n// ----- debounceMethod ----- //\n\nutils.debounceMethod = function( _class, methodName, threshold ) {\n threshold = threshold || 100;\n // original method\n var method = _class.prototype[ methodName ];\n var timeoutName = methodName + 'Timeout';\n\n _class.prototype[ methodName ] = function() {\n var timeout = this[ timeoutName ];\n clearTimeout( timeout );\n\n var args = arguments;\n var _this = this;\n this[ timeoutName ] = setTimeout( function() {\n method.apply( _this, args );\n delete _this[ timeoutName ];\n }, threshold );\n };\n};\n\n// ----- docReady ----- //\n\nutils.docReady = function( callback ) {\n var readyState = document.readyState;\n if ( readyState == 'complete' || readyState == 'interactive' ) {\n // do async to allow for other scripts to run. metafizzy/flickity#441\n setTimeout( callback );\n } else {\n document.addEventListener( 'DOMContentLoaded', callback );\n }\n};\n\n// ----- htmlInit ----- //\n\n// http://jamesroberts.name/blog/2010/02/22/string-functions-for-javascript-trim-to-camel-case-to-dashed-and-to-underscore/\nutils.toDashed = function( str ) {\n return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) {\n return $1 + '-' + $2;\n }).toLowerCase();\n};\n\nvar console = window.console;\n/**\n * allow user to initialize classes via [data-namespace] or .js-namespace class\n * htmlInit( Widget, 'widgetName' )\n * options are parsed from data-namespace-options\n */\nutils.htmlInit = function( WidgetClass, namespace ) {\n utils.docReady( function() {\n var dashedNamespace = utils.toDashed( namespace );\n var dataAttr = 'data-' + dashedNamespace;\n var dataAttrElems = document.querySelectorAll( '[' + dataAttr + ']' );\n var jsDashElems = document.querySelectorAll( '.js-' + dashedNamespace );\n var elems = utils.makeArray( dataAttrElems )\n .concat( utils.makeArray( jsDashElems ) );\n var dataOptionsAttr = dataAttr + '-options';\n var jQuery = window.jQuery;\n\n elems.forEach( function( elem ) {\n var attr = elem.getAttribute( dataAttr ) ||\n elem.getAttribute( dataOptionsAttr );\n var options;\n try {\n options = attr && JSON.parse( attr );\n } catch ( error ) {\n // log error, do not initialize\n if ( console ) {\n console.error( 'Error parsing ' + dataAttr + ' on ' + elem.className +\n ': ' + error );\n }\n return;\n }\n // initialize\n var instance = new WidgetClass( elem, options );\n // make available via $().data('namespace')\n if ( jQuery ) {\n jQuery.data( elem, namespace, instance );\n }\n });\n\n });\n};\n\n// ----- ----- //\n\nreturn utils;\n\n}));\n","/**\n * Bridget makes jQuery widgets\n * v2.0.1\n * MIT license\n */\n\n/* jshint browser: true, strict: true, undef: true, unused: true */\n\n( function( window, factory ) {\n // universal module definition\n /*jshint strict: false */ /* globals define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [ 'jquery' ], function( jQuery ) {\n return factory( window, jQuery );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('jquery')\n );\n } else {\n // browser global\n window.jQueryBridget = factory(\n window,\n window.jQuery\n );\n }\n\n}( window, function factory( window, jQuery ) {\n'use strict';\n\n// ----- utils ----- //\n\nvar arraySlice = Array.prototype.slice;\n\n// helper function for logging errors\n// $.error breaks jQuery chaining\nvar console = window.console;\nvar logError = typeof console == 'undefined' ? function() {} :\n function( message ) {\n console.error( message );\n };\n\n// ----- jQueryBridget ----- //\n\nfunction jQueryBridget( namespace, PluginClass, $ ) {\n $ = $ || jQuery || window.jQuery;\n if ( !$ ) {\n return;\n }\n\n // add option method -> $().plugin('option', {...})\n if ( !PluginClass.prototype.option ) {\n // option setter\n PluginClass.prototype.option = function( opts ) {\n // bail out if not an object\n if ( !$.isPlainObject( opts ) ){\n return;\n }\n this.options = $.extend( true, this.options, opts );\n };\n }\n\n // make jQuery plugin\n $.fn[ namespace ] = function( arg0 /*, arg1 */ ) {\n if ( typeof arg0 == 'string' ) {\n // method call $().plugin( 'methodName', { options } )\n // shift arguments by 1\n var args = arraySlice.call( arguments, 1 );\n return methodCall( this, arg0, args );\n }\n // just $().plugin({ options })\n plainCall( this, arg0 );\n return this;\n };\n\n // $().plugin('methodName')\n function methodCall( $elems, methodName, args ) {\n var returnValue;\n var pluginMethodStr = '$().' + namespace + '(\"' + methodName + '\")';\n\n $elems.each( function( i, elem ) {\n // get instance\n var instance = $.data( elem, namespace );\n if ( !instance ) {\n logError( namespace + ' not initialized. Cannot call methods, i.e. ' +\n pluginMethodStr );\n return;\n }\n\n var method = instance[ methodName ];\n if ( !method || methodName.charAt(0) == '_' ) {\n logError( pluginMethodStr + ' is not a valid method' );\n return;\n }\n\n // apply method, get return value\n var value = method.apply( instance, args );\n // set return value if value is returned, use only first value\n returnValue = returnValue === undefined ? value : returnValue;\n });\n\n return returnValue !== undefined ? returnValue : $elems;\n }\n\n function plainCall( $elems, options ) {\n $elems.each( function( i, elem ) {\n var instance = $.data( elem, namespace );\n if ( instance ) {\n // set options & init\n instance.option( options );\n instance._init();\n } else {\n // initialize new instance\n instance = new PluginClass( elem, options );\n $.data( elem, namespace, instance );\n }\n });\n }\n\n updateJQuery( $ );\n\n}\n\n// ----- updateJQuery ----- //\n\n// set $.bridget for v1 backwards compatibility\nfunction updateJQuery( $ ) {\n if ( !$ || ( $ && $.bridget ) ) {\n return;\n }\n $.bridget = jQueryBridget;\n}\n\nupdateJQuery( jQuery || window.jQuery );\n\n// ----- ----- //\n\nreturn jQueryBridget;\n\n}));\n","try {\n\n // Vendor libs\n window.$ = window.jQuery = require('jquery');\n window.jQueryBridget = require('jquery-bridget');\n window.Masonry = require('masonry-layout');\n window.flickity = require('flickity');\n\n // make Masonry a jQuery plugin\n jQueryBridget( 'masonry', Masonry, $ );\n\n // TWBS\n window.Popper = require('popper.js/dist/umd/popper.js').default;\n require('bootstrap');\n\n jQuery.fn.exists = function(){return this.length>0;}\n\n $.fn.serializeObject = jQuery.fn.serializeObject = function() {\n var o = {};\n var a = this.serializeArray();\n $.each(a, function() {\n if (o[this.name] !== undefined) {\n if (!o[this.name].push) {\n o[this.name] = [o[this.name]];\n }\n o[this.name].push(this.value || '');\n } else {\n o[this.name] = this.value || '';\n }\n });\n return o;\n };\n\n} catch (e) {\n console.log(e);\n}\n","jQuery(document).ready(function($) {\n\n\tif ( $('.team-slider--grid').length > 0 ) {\n\n\t\tvar winWidth = $(window).width();\n\t\tvar slider = $('.team-slider--grid');\n\t\tvar cells = winWidth > 767 ? 3 : 1;\n\n\t\tslider.flickity({\n\t\t\tcellAlign : 'left',\n\t \tcontain : true,\n\t\t\twrapAround : true,\n\t\t\tprevNextButtons : true,\n\t\t\tpageDots : false,\n groupCells : cells,\n\t\t\tdraggable : false\n\t\t});\n\n\t\t$(window).resize(function() {\n\t\t\tslider.flickity('resize');\n\t\t});\n\n\t}\n\n});\n","jQuery( document ).ready(function($) {\n\n var winWidth = $(window).width();\n\n $('.masthead--arrow').on('click', function(e) {\n\n e.preventDefault();\n\n var curEl = $($(this).attr('href'));\n var nextOffset = curEl.next().offset();\n var nextOffsetTop = nextOffset.top;\n\n $('html, body').animate({\n scrollTop: nextOffsetTop + 'px'\n }, 750);\n\n });\n\n $('.case-study--link a').on('click', function(e) {\n e.preventDefault();\n var elID = $(this).attr('href');\n $(this).toggleClass('is-expanded');\n $(elID).toggleClass('is-expanded');\n });\n\n $('.banner .menu-item a').on('click', function(e) {\n\n var anchorEl = $(this).attr('href');\n\n if (anchorEl.indexOf('#') === 0) {\n\n e.preventDefault();\n\n var nextOffset = $(anchorEl).next().offset();\n var nextOffsetTop = nextOffset.top;\n var ElOffset = nextOffsetTop - 120;\n $('body').removeClass('menu-is-open');\n\n $('html, body').animate({\n scrollTop: ElOffset + 'px'\n }, 750);\n\n }\n\n });\n\n // Add class to body on hamburger click\n $('.navbar-toggler').on('click', function(e) {\n e.preventDefault();\n $('body').toggleClass('menu-is-open');\n });\n\n var isIE11 = !!window.MSInputMethodContext && !!document.documentMode ? 'is-ie' : 'is-not-ie';\n\n $('body').addClass('is-loaded').addClass(isIE11);\n\n // Detect if banner has been scrolled past\n var navScrolled = function() {\n\n var $window = $(window);\n var docViewTop = 90;\n var nav = $('.banner');\n var elemTop = $window.scrollTop();\n\n if ( elemTop > docViewTop ) {\n nav.addClass('scrolled');\n } else {\n nav.removeClass('scrolled');\n }\n\n };\n\n navScrolled();\n\n $( window ).scroll( function(e) {\n navScrolled();\n });\n\n // Detect if element is inview\n var inView = function ( elements ) {\n\n var $window = $(window);\n var docViewTop = $window.scrollTop() + $window.height() - ( $window.height() / 10 );\n\n elements.each( function( index ) {\n\n if ( !$(this).hasClass('over') ) {\n\n var elemTop = $(this).offset().top;\n\n if ( elemTop < docViewTop ) {\n $(this).addClass('over');\n }\n\n }\n\n });\n\n };\n\n inView( $('.inview') );\n\n $( window ).scroll( function(e) {\n inView( $('.inview') );\n });\n\n if ( $('.blank').length > 0 ) {\n\n $('.blank').each( function(index, value) {\n $(this).find('a').attr('target','_blank').attr('rel','external noreferrer noopener');\n });\n\n }\n\n});\n","// slide\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.Slide = factory();\n }\n\n}( window, function factory() {\n'use strict';\n\nfunction Slide( parent ) {\n this.parent = parent;\n this.isOriginLeft = parent.originSide == 'left';\n this.cells = [];\n this.outerWidth = 0;\n this.height = 0;\n}\n\nvar proto = Slide.prototype;\n\nproto.addCell = function( cell ) {\n this.cells.push( cell );\n this.outerWidth += cell.size.outerWidth;\n this.height = Math.max( cell.size.outerHeight, this.height );\n // first cell stuff\n if ( this.cells.length == 1 ) {\n this.x = cell.x; // x comes from first cell\n var beginMargin = this.isOriginLeft ? 'marginLeft' : 'marginRight';\n this.firstMargin = cell.size[ beginMargin ];\n }\n};\n\nproto.updateTarget = function() {\n var endMargin = this.isOriginLeft ? 'marginRight' : 'marginLeft';\n var lastCell = this.getLastCell();\n var lastMargin = lastCell ? lastCell.size[ endMargin ] : 0;\n var slideWidth = this.outerWidth - ( this.firstMargin + lastMargin );\n this.target = this.x + this.firstMargin + slideWidth * this.parent.cellAlign;\n};\n\nproto.getLastCell = function() {\n return this.cells[ this.cells.length - 1 ];\n};\n\nproto.select = function() {\n this.cells.forEach( function( cell ) {\n cell.select();\n } );\n};\n\nproto.unselect = function() {\n this.cells.forEach( function( cell ) {\n cell.unselect();\n } );\n};\n\nproto.getCellElements = function() {\n return this.cells.map( function( cell ) {\n return cell.element;\n } );\n};\n\nreturn Slide;\n\n} ) );\n","/*!\n * Masonry v4.2.2\n * Cascading grid layout library\n * https://masonry.desandro.com\n * MIT License\n * by David DeSandro\n */\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */ /*globals define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'outlayer/outlayer',\n 'get-size/get-size'\n ],\n factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('outlayer'),\n require('get-size')\n );\n } else {\n // browser global\n window.Masonry = factory(\n window.Outlayer,\n window.getSize\n );\n }\n\n}( window, function factory( Outlayer, getSize ) {\n\n'use strict';\n\n// -------------------------- masonryDefinition -------------------------- //\n\n // create an Outlayer layout class\n var Masonry = Outlayer.create('masonry');\n // isFitWidth -> fitWidth\n Masonry.compatOptions.fitWidth = 'isFitWidth';\n\n var proto = Masonry.prototype;\n\n proto._resetLayout = function() {\n this.getSize();\n this._getMeasurement( 'columnWidth', 'outerWidth' );\n this._getMeasurement( 'gutter', 'outerWidth' );\n this.measureColumns();\n\n // reset column Y\n this.colYs = [];\n for ( var i=0; i < this.cols; i++ ) {\n this.colYs.push( 0 );\n }\n\n this.maxY = 0;\n this.horizontalColIndex = 0;\n };\n\n proto.measureColumns = function() {\n this.getContainerWidth();\n // if columnWidth is 0, default to outerWidth of first item\n if ( !this.columnWidth ) {\n var firstItem = this.items[0];\n var firstItemElem = firstItem && firstItem.element;\n // columnWidth fall back to item of first element\n this.columnWidth = firstItemElem && getSize( firstItemElem ).outerWidth ||\n // if first elem has no width, default to size of container\n this.containerWidth;\n }\n\n var columnWidth = this.columnWidth += this.gutter;\n\n // calculate columns\n var containerWidth = this.containerWidth + this.gutter;\n var cols = containerWidth / columnWidth;\n // fix rounding errors, typically with gutters\n var excess = columnWidth - containerWidth % columnWidth;\n // if overshoot is less than a pixel, round up, otherwise floor it\n var mathMethod = excess && excess < 1 ? 'round' : 'floor';\n cols = Math[ mathMethod ]( cols );\n this.cols = Math.max( cols, 1 );\n };\n\n proto.getContainerWidth = function() {\n // container is parent if fit width\n var isFitWidth = this._getOption('fitWidth');\n var container = isFitWidth ? this.element.parentNode : this.element;\n // check that this.size and size are there\n // IE8 triggers resize on body size change, so they might not be\n var size = getSize( container );\n this.containerWidth = size && size.innerWidth;\n };\n\n proto._getItemLayoutPosition = function( item ) {\n item.getSize();\n // how many columns does this brick span\n var remainder = item.size.outerWidth % this.columnWidth;\n var mathMethod = remainder && remainder < 1 ? 'round' : 'ceil';\n // round if off by 1 pixel, otherwise use ceil\n var colSpan = Math[ mathMethod ]( item.size.outerWidth / this.columnWidth );\n colSpan = Math.min( colSpan, this.cols );\n // use horizontal or top column position\n var colPosMethod = this.options.horizontalOrder ?\n '_getHorizontalColPosition' : '_getTopColPosition';\n var colPosition = this[ colPosMethod ]( colSpan, item );\n // position the brick\n var position = {\n x: this.columnWidth * colPosition.col,\n y: colPosition.y\n };\n // apply setHeight to necessary columns\n var setHeight = colPosition.y + item.size.outerHeight;\n var setMax = colSpan + colPosition.col;\n for ( var i = colPosition.col; i < setMax; i++ ) {\n this.colYs[i] = setHeight;\n }\n\n return position;\n };\n\n proto._getTopColPosition = function( colSpan ) {\n var colGroup = this._getTopColGroup( colSpan );\n // get the minimum Y value from the columns\n var minimumY = Math.min.apply( Math, colGroup );\n\n return {\n col: colGroup.indexOf( minimumY ),\n y: minimumY,\n };\n };\n\n /**\n * @param {Number} colSpan - number of columns the element spans\n * @returns {Array} colGroup\n */\n proto._getTopColGroup = function( colSpan ) {\n if ( colSpan < 2 ) {\n // if brick spans only one column, use all the column Ys\n return this.colYs;\n }\n\n var colGroup = [];\n // how many different places could this brick fit horizontally\n var groupCount = this.cols + 1 - colSpan;\n // for each group potential horizontal position\n for ( var i = 0; i < groupCount; i++ ) {\n colGroup[i] = this._getColGroupY( i, colSpan );\n }\n return colGroup;\n };\n\n proto._getColGroupY = function( col, colSpan ) {\n if ( colSpan < 2 ) {\n return this.colYs[ col ];\n }\n // make an array of colY values for that one group\n var groupColYs = this.colYs.slice( col, col + colSpan );\n // and get the max value of the array\n return Math.max.apply( Math, groupColYs );\n };\n\n // get column position based on horizontal index. #873\n proto._getHorizontalColPosition = function( colSpan, item ) {\n var col = this.horizontalColIndex % this.cols;\n var isOver = colSpan > 1 && col + colSpan > this.cols;\n // shift to next row if item can't fit on current row\n col = isOver ? 0 : col;\n // don't let zero-size items take up space\n var hasSize = item.size.outerWidth && item.size.outerHeight;\n this.horizontalColIndex = hasSize ? col + colSpan : this.horizontalColIndex;\n\n return {\n col: col,\n y: this._getColGroupY( col, colSpan ),\n };\n };\n\n proto._manageStamp = function( stamp ) {\n var stampSize = getSize( stamp );\n var offset = this._getElementOffset( stamp );\n // get the columns that this stamp affects\n var isOriginLeft = this._getOption('originLeft');\n var firstX = isOriginLeft ? offset.left : offset.right;\n var lastX = firstX + stampSize.outerWidth;\n var firstCol = Math.floor( firstX / this.columnWidth );\n firstCol = Math.max( 0, firstCol );\n var lastCol = Math.floor( lastX / this.columnWidth );\n // lastCol should not go over if multiple of columnWidth #425\n lastCol -= lastX % this.columnWidth ? 0 : 1;\n lastCol = Math.min( this.cols - 1, lastCol );\n // set colYs to bottom of the stamp\n\n var isOriginTop = this._getOption('originTop');\n var stampMaxY = ( isOriginTop ? offset.top : offset.bottom ) +\n stampSize.outerHeight;\n for ( var i = firstCol; i <= lastCol; i++ ) {\n this.colYs[i] = Math.max( stampMaxY, this.colYs[i] );\n }\n };\n\n proto._getContainerSize = function() {\n this.maxY = Math.max.apply( Math, this.colYs );\n var size = {\n height: this.maxY\n };\n\n if ( this._getOption('fitWidth') ) {\n size.width = this._getContainerFitWidth();\n }\n\n return size;\n };\n\n proto._getContainerFitWidth = function() {\n var unusedCols = 0;\n // count unused columns\n var i = this.cols;\n while ( --i ) {\n if ( this.colYs[i] !== 0 ) {\n break;\n }\n unusedCols++;\n }\n // fit container to columns that have been used\n return ( this.cols - unusedCols ) * this.columnWidth - this.gutter;\n };\n\n proto.needsResizeLayout = function() {\n var previousWidth = this.containerWidth;\n this.getContainerWidth();\n return previousWidth != this.containerWidth;\n };\n\n return Masonry;\n\n}));\n","// lazyload\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'fizzy-ui-utils/utils',\n ], function( Flickity, utils ) {\n return factory( window, Flickity, utils );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, utils ) {\n'use strict';\n\nFlickity.createMethods.push('_createLazyload');\nvar proto = Flickity.prototype;\n\nproto._createLazyload = function() {\n this.on( 'select', this.lazyLoad );\n};\n\nproto.lazyLoad = function() {\n var lazyLoad = this.options.lazyLoad;\n if ( !lazyLoad ) {\n return;\n }\n // get adjacent cells, use lazyLoad option for adjacent count\n var adjCount = typeof lazyLoad == 'number' ? lazyLoad : 0;\n var cellElems = this.getAdjacentCellElements( adjCount );\n // get lazy images in those cells\n var lazyImages = [];\n cellElems.forEach( function( cellElem ) {\n var lazyCellImages = getCellLazyImages( cellElem );\n lazyImages = lazyImages.concat( lazyCellImages );\n } );\n // load lazy images\n lazyImages.forEach( function( img ) {\n new LazyLoader( img, this );\n }, this );\n};\n\nfunction getCellLazyImages( cellElem ) {\n // check if cell element is lazy image\n if ( cellElem.nodeName == 'IMG' ) {\n var lazyloadAttr = cellElem.getAttribute('data-flickity-lazyload');\n var srcAttr = cellElem.getAttribute('data-flickity-lazyload-src');\n var srcsetAttr = cellElem.getAttribute('data-flickity-lazyload-srcset');\n if ( lazyloadAttr || srcAttr || srcsetAttr ) {\n return [ cellElem ];\n }\n }\n // select lazy images in cell\n var lazySelector = 'img[data-flickity-lazyload], ' +\n 'img[data-flickity-lazyload-src], img[data-flickity-lazyload-srcset]';\n var imgs = cellElem.querySelectorAll( lazySelector );\n return utils.makeArray( imgs );\n}\n\n// -------------------------- LazyLoader -------------------------- //\n\n/**\n * class to handle loading images\n * @param {Image} img - Image element\n * @param {Flickity} flickity - Flickity instance\n */\nfunction LazyLoader( img, flickity ) {\n this.img = img;\n this.flickity = flickity;\n this.load();\n}\n\nLazyLoader.prototype.handleEvent = utils.handleEvent;\n\nLazyLoader.prototype.load = function() {\n this.img.addEventListener( 'load', this );\n this.img.addEventListener( 'error', this );\n // get src & srcset\n var src = this.img.getAttribute('data-flickity-lazyload') ||\n this.img.getAttribute('data-flickity-lazyload-src');\n var srcset = this.img.getAttribute('data-flickity-lazyload-srcset');\n // set src & serset\n this.img.src = src;\n if ( srcset ) {\n this.img.setAttribute( 'srcset', srcset );\n }\n // remove attr\n this.img.removeAttribute('data-flickity-lazyload');\n this.img.removeAttribute('data-flickity-lazyload-src');\n this.img.removeAttribute('data-flickity-lazyload-srcset');\n};\n\nLazyLoader.prototype.onload = function( event ) {\n this.complete( event, 'flickity-lazyloaded' );\n};\n\nLazyLoader.prototype.onerror = function( event ) {\n this.complete( event, 'flickity-lazyerror' );\n};\n\nLazyLoader.prototype.complete = function( event, className ) {\n // unbind events\n this.img.removeEventListener( 'load', this );\n this.img.removeEventListener( 'error', this );\n\n var cell = this.flickity.getParentCell( this.img );\n var cellElem = cell && cell.element;\n this.flickity.cellSizeChange( cellElem );\n\n this.img.classList.add( className );\n this.flickity.dispatchEvent( 'lazyLoad', event, cellElem );\n};\n\n// ----- ----- //\n\nFlickity.LazyLoader = LazyLoader;\n\nreturn Flickity;\n\n} ) );\n","jQuery(document).ready(function($) {\n\n\tif ( $('.news-slider--grid').length > 0 ) {\n\n\t\tvar slider = $('.news-slider--grid');\n\t\tvar winWidth = $(window).width();\n\t\tvar cells = winWidth > 767 ? 2 : 1;\n\n\t\tslider.flickity({\n\t\t\tcellAlign : 'left',\n\t \tcontain : true,\n\t\t\twrapAround : false,\n\t\t\tprevNextButtons : true,\n\t\t\tpageDots : false,\n groupCells : cells,\n\t\t\tdraggable : false\n\t\t});\n\n\t\t$(window).resize(function() {\n\t\t\tslider.flickity('resize');\n\t\t});\n\n\t}\n\n});\n","$(document).ready(function() {\n\n $(\".posts--pagination-more\").on('click',function(e) {\n e.preventDefault();\n var paged = parseFloat( $(this).attr('data-next') );\n updatePostsResults(paged);\n });\n\n\tvar updatePostsResults = function( paged ) {\n\n paged = paged ? paged : 1;\n var grid = $('.news-grid');\n\n console.log(paged);\n\n $.ajax({\n type : \"post\",\n dataType : \"json\",\n url : localized_object.ajax_url,\n data : {\n action : \"get_posts_form\",\n data : {'paged' : paged},\n nonce : localized_object.nonce,\n paged : paged\n },\n timeout : 300000,\n beforeSend : function() {\n\n }\n }).done( function( response ) {\n\n if ( response && typeof response.news !== 'undefined' ) {\n\n \tvar count = $('.cur-num').text();\n count = parseFloat(count) + parseFloat(response.displaying);\n\n var newPosts = $( response.news );\n grid.append(newPosts);\n\n $(\".posts--pagination-more\").attr('data-next', response.cur_page + 1 );\n $('.cur-num').html(count);\n $('.max-num').html(parseFloat(response.max_count));\n\n if ( response.cur_page < response.max_pages ) {\n $(\".posts--pagination-more\").show();\n } else {\n $(\".posts--pagination-more\").hide();\n }\n\n\t\t }\n\n }).fail( function( request, status, err ) {\n\n console.log( 'REQUEST => ' + request );\n console.log( 'STATUS => ' + status );\n console.log( 'ERR => ' );\n console.log( err );\n\n }).always(function() {\n\n\n\n });\n\n }\n\n});\n","// player & autoPlay\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'ev-emitter/ev-emitter',\n 'fizzy-ui-utils/utils',\n './flickity',\n ], function( EvEmitter, utils, Flickity ) {\n return factory( EvEmitter, utils, Flickity );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('ev-emitter'),\n require('fizzy-ui-utils'),\n require('./flickity')\n );\n } else {\n // browser global\n factory(\n window.EvEmitter,\n window.fizzyUIUtils,\n window.Flickity\n );\n }\n\n}( window, function factory( EvEmitter, utils, Flickity ) {\n\n'use strict';\n\n// -------------------------- Player -------------------------- //\n\nfunction Player( parent ) {\n this.parent = parent;\n this.state = 'stopped';\n // visibility change event handler\n this.onVisibilityChange = this.visibilityChange.bind( this );\n this.onVisibilityPlay = this.visibilityPlay.bind( this );\n}\n\nPlayer.prototype = Object.create( EvEmitter.prototype );\n\n// start play\nPlayer.prototype.play = function() {\n if ( this.state == 'playing' ) {\n return;\n }\n // do not play if page is hidden, start playing when page is visible\n var isPageHidden = document.hidden;\n if ( isPageHidden ) {\n document.addEventListener( 'visibilitychange', this.onVisibilityPlay );\n return;\n }\n\n this.state = 'playing';\n // listen to visibility change\n document.addEventListener( 'visibilitychange', this.onVisibilityChange );\n // start ticking\n this.tick();\n};\n\nPlayer.prototype.tick = function() {\n // do not tick if not playing\n if ( this.state != 'playing' ) {\n return;\n }\n\n var time = this.parent.options.autoPlay;\n // default to 3 seconds\n time = typeof time == 'number' ? time : 3000;\n var _this = this;\n // HACK: reset ticks if stopped and started within interval\n this.clear();\n this.timeout = setTimeout( function() {\n _this.parent.next( true );\n _this.tick();\n }, time );\n};\n\nPlayer.prototype.stop = function() {\n this.state = 'stopped';\n this.clear();\n // remove visibility change event\n document.removeEventListener( 'visibilitychange', this.onVisibilityChange );\n};\n\nPlayer.prototype.clear = function() {\n clearTimeout( this.timeout );\n};\n\nPlayer.prototype.pause = function() {\n if ( this.state == 'playing' ) {\n this.state = 'paused';\n this.clear();\n }\n};\n\nPlayer.prototype.unpause = function() {\n // re-start play if paused\n if ( this.state == 'paused' ) {\n this.play();\n }\n};\n\n// pause if page visibility is hidden, unpause if visible\nPlayer.prototype.visibilityChange = function() {\n var isPageHidden = document.hidden;\n this[ isPageHidden ? 'pause' : 'unpause' ]();\n};\n\nPlayer.prototype.visibilityPlay = function() {\n this.play();\n document.removeEventListener( 'visibilitychange', this.onVisibilityPlay );\n};\n\n// -------------------------- Flickity -------------------------- //\n\nutils.extend( Flickity.defaults, {\n pauseAutoPlayOnHover: true,\n} );\n\nFlickity.createMethods.push('_createPlayer');\nvar proto = Flickity.prototype;\n\nproto._createPlayer = function() {\n this.player = new Player( this );\n\n this.on( 'activate', this.activatePlayer );\n this.on( 'uiChange', this.stopPlayer );\n this.on( 'pointerDown', this.stopPlayer );\n this.on( 'deactivate', this.deactivatePlayer );\n};\n\nproto.activatePlayer = function() {\n if ( !this.options.autoPlay ) {\n return;\n }\n this.player.play();\n this.element.addEventListener( 'mouseenter', this );\n};\n\n// Player API, don't hate the ... thanks I know where the door is\n\nproto.playPlayer = function() {\n this.player.play();\n};\n\nproto.stopPlayer = function() {\n this.player.stop();\n};\n\nproto.pausePlayer = function() {\n this.player.pause();\n};\n\nproto.unpausePlayer = function() {\n this.player.unpause();\n};\n\nproto.deactivatePlayer = function() {\n this.player.stop();\n this.element.removeEventListener( 'mouseenter', this );\n};\n\n// ----- mouseenter/leave ----- //\n\n// pause auto-play on hover\nproto.onmouseenter = function() {\n if ( !this.options.pauseAutoPlayOnHover ) {\n return;\n }\n this.player.pause();\n this.element.addEventListener( 'mouseleave', this );\n};\n\n// resume auto-play on hover off\nproto.onmouseleave = function() {\n this.player.unpause();\n this.element.removeEventListener( 'mouseleave', this );\n};\n\n// ----- ----- //\n\nFlickity.Player = Player;\n\nreturn Flickity;\n\n} ) );\n","// add, remove cell\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'fizzy-ui-utils/utils',\n ], function( Flickity, utils ) {\n return factory( window, Flickity, utils );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, utils ) {\n\n'use strict';\n\n// append cells to a document fragment\nfunction getCellsFragment( cells ) {\n var fragment = document.createDocumentFragment();\n cells.forEach( function( cell ) {\n fragment.appendChild( cell.element );\n } );\n return fragment;\n}\n\n// -------------------------- add/remove cell prototype -------------------------- //\n\nvar proto = Flickity.prototype;\n\n/**\n * Insert, prepend, or append cells\n * @param {[Element, Array, NodeList]} elems - Elements to insert\n * @param {Integer} index - Zero-based number to insert\n */\nproto.insert = function( elems, index ) {\n var cells = this._makeCells( elems );\n if ( !cells || !cells.length ) {\n return;\n }\n var len = this.cells.length;\n // default to append\n index = index === undefined ? len : index;\n // add cells with document fragment\n var fragment = getCellsFragment( cells );\n // append to slider\n var isAppend = index == len;\n if ( isAppend ) {\n this.slider.appendChild( fragment );\n } else {\n var insertCellElement = this.cells[ index ].element;\n this.slider.insertBefore( fragment, insertCellElement );\n }\n // add to this.cells\n if ( index === 0 ) {\n // prepend, add to start\n this.cells = cells.concat( this.cells );\n } else if ( isAppend ) {\n // append, add to end\n this.cells = this.cells.concat( cells );\n } else {\n // insert in this.cells\n var endCells = this.cells.splice( index, len - index );\n this.cells = this.cells.concat( cells ).concat( endCells );\n }\n\n this._sizeCells( cells );\n this.cellChange( index, true );\n};\n\nproto.append = function( elems ) {\n this.insert( elems, this.cells.length );\n};\n\nproto.prepend = function( elems ) {\n this.insert( elems, 0 );\n};\n\n/**\n * Remove cells\n * @param {[Element, Array, NodeList]} elems - ELements to remove\n */\nproto.remove = function( elems ) {\n var cells = this.getCells( elems );\n if ( !cells || !cells.length ) {\n return;\n }\n\n var minCellIndex = this.cells.length - 1;\n // remove cells from collection & DOM\n cells.forEach( function( cell ) {\n cell.remove();\n var index = this.cells.indexOf( cell );\n minCellIndex = Math.min( index, minCellIndex );\n utils.removeFrom( this.cells, cell );\n }, this );\n\n this.cellChange( minCellIndex, true );\n};\n\n/**\n * logic to be run after a cell's size changes\n * @param {Element} elem - cell's element\n */\nproto.cellSizeChange = function( elem ) {\n var cell = this.getCell( elem );\n if ( !cell ) {\n return;\n }\n cell.getSize();\n\n var index = this.cells.indexOf( cell );\n this.cellChange( index );\n};\n\n/**\n * logic any time a cell is changed: added, removed, or size changed\n * @param {Integer} changedCellIndex - index of the changed cell, optional\n * @param {Boolean} isPositioningSlider - Positions slider after selection\n */\nproto.cellChange = function( changedCellIndex, isPositioningSlider ) {\n var prevSelectedElem = this.selectedElement;\n this._positionCells( changedCellIndex );\n this._getWrapShiftCells();\n this.setGallerySize();\n // update selectedIndex\n // try to maintain position & select previous selected element\n var cell = this.getCell( prevSelectedElem );\n if ( cell ) {\n this.selectedIndex = this.getCellSlideIndex( cell );\n }\n this.selectedIndex = Math.min( this.slides.length - 1, this.selectedIndex );\n\n this.emitEvent( 'cellChange', [ changedCellIndex ] );\n // position slider\n this.select( this.selectedIndex );\n // do not position slider after lazy load\n if ( isPositioningSlider ) {\n this.positionSliderAtSelected();\n }\n};\n\n// ----- ----- //\n\nreturn Flickity;\n\n} ) );\n","/**\n * matchesSelector v2.0.2\n * matchesSelector( element, '.selector' )\n * MIT license\n */\n\n/*jshint browser: true, strict: true, undef: true, unused: true */\n\n( function( window, factory ) {\n /*global define: false, module: false */\n 'use strict';\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.matchesSelector = factory();\n }\n\n}( window, function factory() {\n 'use strict';\n\n var matchesMethod = ( function() {\n var ElemProto = window.Element.prototype;\n // check for the standard method name first\n if ( ElemProto.matches ) {\n return 'matches';\n }\n // check un-prefixed\n if ( ElemProto.matchesSelector ) {\n return 'matchesSelector';\n }\n // check vendor prefixes\n var prefixes = [ 'webkit', 'moz', 'ms', 'o' ];\n\n for ( var i=0; i < prefixes.length; i++ ) {\n var prefix = prefixes[i];\n var method = prefix + 'MatchesSelector';\n if ( ElemProto[ method ] ) {\n return method;\n }\n }\n })();\n\n return function matchesSelector( elem, selector ) {\n return elem[ matchesMethod ]( selector );\n };\n\n}));\n","jQuery(document).ready(function($) {\n\n if ( $('#disclaimer').length > 0 ) {\n\n var cookie_exists = document.cookie.match(/^(.*;)?\\s*STYXKEYdisclaimerAccepted\\s*=\\s*[^;]+(.*)?$/);\n\n if ( cookie_exists ) {\n $('body').removeClass('disclaimer-popup-showing');\n } else {\n $('body').addClass('disclaimer-popup-showing');\n }\n\n $('.disclaimer--terms-button').on( 'click', function (e) {\n\n e.preventDefault();\n\n var date = new Date();\n date.setTime(date.getTime() + (1000 * 60 * 60 * 24 * 7));\n document.cookie = \"STYXKEYdisclaimerAccepted=1;path=/;expires= \" + date;\n $('body').removeClass('disclaimer-popup-showing');\n\n });\n\n }\n\n});\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","// Flickity.Cell\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'get-size/get-size',\n ], function( getSize ) {\n return factory( window, getSize );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('get-size')\n );\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.Cell = factory(\n window,\n window.getSize\n );\n }\n\n}( window, function factory( window, getSize ) {\n\n'use strict';\n\nfunction Cell( elem, parent ) {\n this.element = elem;\n this.parent = parent;\n\n this.create();\n}\n\nvar proto = Cell.prototype;\n\nproto.create = function() {\n this.element.style.position = 'absolute';\n this.element.setAttribute( 'aria-hidden', 'true' );\n this.x = 0;\n this.shift = 0;\n this.element.style[ this.parent.originSide ] = 0;\n};\n\nproto.destroy = function() {\n // reset style\n this.unselect();\n this.element.style.position = '';\n var side = this.parent.originSide;\n this.element.style[ side ] = '';\n this.element.style.transform = '';\n this.element.removeAttribute('aria-hidden');\n};\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n};\n\nproto.setPosition = function( x ) {\n this.x = x;\n this.updateTarget();\n this.renderPosition( x );\n};\n\n// setDefaultTarget v1 method, backwards compatibility, remove in v3\nproto.updateTarget = proto.setDefaultTarget = function() {\n var marginProperty = this.parent.originSide == 'left' ? 'marginLeft' : 'marginRight';\n this.target = this.x + this.size[ marginProperty ] +\n this.size.width * this.parent.cellAlign;\n};\n\nproto.renderPosition = function( x ) {\n // render position of cell with in slider\n var sideOffset = this.parent.originSide === 'left' ? 1 : -1;\n\n var adjustedX = this.parent.options.percentPosition ?\n x * sideOffset * ( this.parent.size.innerWidth / this.size.width ) :\n x * sideOffset;\n\n this.element.style.transform = 'translateX(' +\n this.parent.getPositionValue( adjustedX ) + ')';\n};\n\nproto.select = function() {\n this.element.classList.add('is-selected');\n this.element.removeAttribute('aria-hidden');\n};\n\nproto.unselect = function() {\n this.element.classList.remove('is-selected');\n this.element.setAttribute( 'aria-hidden', 'true' );\n};\n\n/**\n * @param {Integer} shift - 0, 1, or -1\n */\nproto.wrapShift = function( shift ) {\n this.shift = shift;\n this.renderPosition( this.x + this.parent.slideableWidth * shift );\n};\n\nproto.remove = function() {\n this.element.parentNode.removeChild( this.element );\n};\n\nreturn Cell;\n\n} ) );\n","// prev/next buttons\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'unipointer/unipointer',\n 'fizzy-ui-utils/utils',\n ], function( Flickity, Unipointer, utils ) {\n return factory( window, Flickity, Unipointer, utils );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('unipointer'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.Unipointer,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, Unipointer, utils ) {\n'use strict';\n\nvar svgURI = 'http://www.w3.org/2000/svg';\n\n// -------------------------- PrevNextButton -------------------------- //\n\nfunction PrevNextButton( direction, parent ) {\n this.direction = direction;\n this.parent = parent;\n this._create();\n}\n\nPrevNextButton.prototype = Object.create( Unipointer.prototype );\n\nPrevNextButton.prototype._create = function() {\n // properties\n this.isEnabled = true;\n this.isPrevious = this.direction == -1;\n var leftDirection = this.parent.options.rightToLeft ? 1 : -1;\n this.isLeft = this.direction == leftDirection;\n\n var element = this.element = document.createElement('button');\n element.className = 'flickity-button flickity-prev-next-button';\n element.className += this.isPrevious ? ' previous' : ' next';\n // prevent button from submitting form http://stackoverflow.com/a/10836076/182183\n element.setAttribute( 'type', 'button' );\n // init as disabled\n this.disable();\n\n element.setAttribute( 'aria-label', this.isPrevious ? 'Previous' : 'Next' );\n\n // create arrow\n var svg = this.createSVG();\n element.appendChild( svg );\n // events\n this.parent.on( 'select', this.update.bind( this ) );\n this.on( 'pointerDown', this.parent.childUIPointerDown.bind( this.parent ) );\n};\n\nPrevNextButton.prototype.activate = function() {\n this.bindStartEvent( this.element );\n this.element.addEventListener( 'click', this );\n // add to DOM\n this.parent.element.appendChild( this.element );\n};\n\nPrevNextButton.prototype.deactivate = function() {\n // remove from DOM\n this.parent.element.removeChild( this.element );\n // click events\n this.unbindStartEvent( this.element );\n this.element.removeEventListener( 'click', this );\n};\n\nPrevNextButton.prototype.createSVG = function() {\n var svg = document.createElementNS( svgURI, 'svg' );\n svg.setAttribute( 'class', 'flickity-button-icon' );\n svg.setAttribute( 'viewBox', '0 0 100 100' );\n var path = document.createElementNS( svgURI, 'path' );\n var pathMovements = getArrowMovements( this.parent.options.arrowShape );\n path.setAttribute( 'd', pathMovements );\n path.setAttribute( 'class', 'arrow' );\n // rotate arrow\n if ( !this.isLeft ) {\n path.setAttribute( 'transform', 'translate(100, 100) rotate(180) ' );\n }\n svg.appendChild( path );\n return svg;\n};\n\n// get SVG path movmement\nfunction getArrowMovements( shape ) {\n // use shape as movement if string\n if ( typeof shape == 'string' ) {\n return shape;\n }\n // create movement string\n return 'M ' + shape.x0 + ',50' +\n ' L ' + shape.x1 + ',' + ( shape.y1 + 50 ) +\n ' L ' + shape.x2 + ',' + ( shape.y2 + 50 ) +\n ' L ' + shape.x3 + ',50 ' +\n ' L ' + shape.x2 + ',' + ( 50 - shape.y2 ) +\n ' L ' + shape.x1 + ',' + ( 50 - shape.y1 ) +\n ' Z';\n}\n\nPrevNextButton.prototype.handleEvent = utils.handleEvent;\n\nPrevNextButton.prototype.onclick = function() {\n if ( !this.isEnabled ) {\n return;\n }\n this.parent.uiChange();\n var method = this.isPrevious ? 'previous' : 'next';\n this.parent[ method ]();\n};\n\n// ----- ----- //\n\nPrevNextButton.prototype.enable = function() {\n if ( this.isEnabled ) {\n return;\n }\n this.element.disabled = false;\n this.isEnabled = true;\n};\n\nPrevNextButton.prototype.disable = function() {\n if ( !this.isEnabled ) {\n return;\n }\n this.element.disabled = true;\n this.isEnabled = false;\n};\n\nPrevNextButton.prototype.update = function() {\n // index of first or last slide, if previous or next\n var slides = this.parent.slides;\n // enable is wrapAround and at least 2 slides\n if ( this.parent.options.wrapAround && slides.length > 1 ) {\n this.enable();\n return;\n }\n var lastIndex = slides.length ? slides.length - 1 : 0;\n var boundIndex = this.isPrevious ? 0 : lastIndex;\n var method = this.parent.selectedIndex == boundIndex ? 'disable' : 'enable';\n this[ method ]();\n};\n\nPrevNextButton.prototype.destroy = function() {\n this.deactivate();\n this.allOff();\n};\n\n// -------------------------- Flickity prototype -------------------------- //\n\nutils.extend( Flickity.defaults, {\n prevNextButtons: true,\n arrowShape: {\n x0: 10,\n x1: 60, y1: 50,\n x2: 70, y2: 40,\n x3: 30,\n },\n} );\n\nFlickity.createMethods.push('_createPrevNextButtons');\nvar proto = Flickity.prototype;\n\nproto._createPrevNextButtons = function() {\n if ( !this.options.prevNextButtons ) {\n return;\n }\n\n this.prevButton = new PrevNextButton( -1, this );\n this.nextButton = new PrevNextButton( 1, this );\n\n this.on( 'activate', this.activatePrevNextButtons );\n};\n\nproto.activatePrevNextButtons = function() {\n this.prevButton.activate();\n this.nextButton.activate();\n this.on( 'deactivate', this.deactivatePrevNextButtons );\n};\n\nproto.deactivatePrevNextButtons = function() {\n this.prevButton.deactivate();\n this.nextButton.deactivate();\n this.off( 'deactivate', this.deactivatePrevNextButtons );\n};\n\n// -------------------------- -------------------------- //\n\nFlickity.PrevNextButton = PrevNextButton;\n\nreturn Flickity;\n\n} ) );\n"],"sourceRoot":""}