HEX
Server: Apache
System: Linux msm5694.mjhst.com 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64
User: camjab_ssh (1000)
PHP: 5.3.29
Disabled: NONE
Upload Files
File: /home/httpd/html/freecams1.com/public_html/templates/default_tube2018/js/app.min.js.map
{"version":3,"sources":["webpack:///js/app.min.js","webpack:///webpack/bootstrap 7a8a56ec867747e49762","webpack:///../~/jquery/dist/jquery.js","webpack:///../~/babel-runtime/helpers/classCallCheck.js","webpack:///../~/babel-runtime/helpers/createClass.js","webpack:///../~/core-js/library/modules/_core.js","webpack:///../~/babel-runtime/core-js/array/from.js","webpack:///../~/core-js/library/modules/_global.js","webpack:///../~/core-js/library/modules/_wks.js","webpack:///../~/babel-runtime/helpers/typeof.js","webpack:///../~/core-js/library/modules/_export.js","webpack:///./js/newTube/helpers/index.ts","webpack:///../~/core-js/library/modules/_an-object.js","webpack:///../~/core-js/library/modules/_object-dp.js","webpack:///../~/core-js/library/modules/_descriptors.js","webpack:///../~/core-js/library/modules/_has.js","webpack:///../~/core-js/library/modules/_hide.js","webpack:///../~/core-js/library/modules/_fails.js","webpack:///../~/core-js/library/modules/_is-object.js","webpack:///../~/core-js/library/modules/_to-iobject.js","webpack:///../~/core-js/library/modules/_cof.js","webpack:///../~/core-js/library/modules/_ctx.js","webpack:///../~/core-js/library/modules/_iterators.js","webpack:///../~/core-js/library/modules/_object-keys.js","webpack:///../~/core-js/library/modules/_property-desc.js","webpack:///../~/babel-runtime/core-js/promise.js","webpack:///../~/core-js/library/modules/_a-function.js","webpack:///../~/core-js/library/modules/_library.js","webpack:///../~/core-js/library/modules/_object-pie.js","webpack:///../~/core-js/library/modules/_set-to-string-tag.js","webpack:///../~/core-js/library/modules/_to-object.js","webpack:///../~/core-js/library/modules/_uid.js","webpack:///../~/core-js/library/modules/es6.string.iterator.js","webpack:///./js/newTube/modals/modals.ts","webpack:///./js/newTube/responsive-trigger/nhance.responsive-trigger.ts","webpack:///../~/core-js/library/modules/_defined.js","webpack:///../~/core-js/library/modules/_dom-create.js","webpack:///../~/core-js/library/modules/_enum-bug-keys.js","webpack:///../~/core-js/library/modules/_new-promise-capability.js","webpack:///../~/core-js/library/modules/_object-gops.js","webpack:///../~/core-js/library/modules/_shared-key.js","webpack:///../~/core-js/library/modules/_shared.js","webpack:///../~/core-js/library/modules/_to-integer.js","webpack:///../~/core-js/library/modules/_to-length.js","webpack:///../~/core-js/library/modules/_to-primitive.js","webpack:///../~/core-js/library/modules/_wks-define.js","webpack:///../~/core-js/library/modules/_wks-ext.js","webpack:///../~/core-js/library/modules/core.get-iterator-method.js","webpack:///../~/core-js/library/modules/web.dom.iterable.js","webpack:///./js/newTube/core/jRating.jquery.js","webpack:///./js/newTube/helpers/dom.helper.ts","webpack:///./js/newTube/helpers/platform.helper.ts","webpack:///./js/newTube/scroll-top/scroll-top.ts","webpack:///../~/babel-runtime/core-js/number/is-nan.js","webpack:///../~/babel-runtime/core-js/object/assign.js","webpack:///../~/babel-runtime/core-js/object/keys.js","webpack:///../~/babel-runtime/regenerator/index.js","webpack:///../~/cookie-storage/lib/format-cookie.js","webpack:///../~/cookie-storage/lib/parse-cookies.js","webpack:///../~/core-js/library/modules/_classof.js","webpack:///../~/core-js/library/modules/_html.js","webpack:///../~/core-js/library/modules/_ie8-dom-define.js","webpack:///../~/core-js/library/modules/_iobject.js","webpack:///../~/core-js/library/modules/_is-array-iter.js","webpack:///../~/core-js/library/modules/_iter-call.js","webpack:///../~/core-js/library/modules/_iter-define.js","webpack:///../~/core-js/library/modules/_iter-detect.js","webpack:///../~/core-js/library/modules/_object-create.js","webpack:///../~/core-js/library/modules/_object-gopn.js","webpack:///../~/core-js/library/modules/_object-keys-internal.js","webpack:///../~/core-js/library/modules/_perform.js","webpack:///../~/core-js/library/modules/_promise-resolve.js","webpack:///../~/core-js/library/modules/_redefine.js","webpack:///../~/core-js/library/modules/_species-constructor.js","webpack:///../~/core-js/library/modules/_task.js","webpack:///../~/webpack/buildin/amd-options.js","webpack:///./js/newTube/index.ts","webpack:///./js/newTube/core/easing.js","webpack:///./js/newTube/core/jquery-ui.js","webpack:///./js/newTube/core/jquery.fineuploader-3.2.js","webpack:///./js/newTube/core/jquery.fullscreen.js","webpack:///./js/newTube/core/jquery.pajinate.min.js","webpack:///./js/newTube/core/jquery.scrollTo.js","webpack:///./js/newTube/core/jquery.scrollUp.js","webpack:///./js/newTube/core/jquery.touchSwipe.min.js","webpack:///./js/newTube/core/jquery.validationEngine-en.js","webpack:///./js/newTube/core/jquery.validationEngine.js","webpack:///./js/newTube/core/spin.min.js","webpack:///./js/newTube/core/tubebase.js","webpack:///./js/newTube/core/validate.js","webpack:///./js/app.ts","webpack:///./js/newTube/ad-in-items/ad-in-items.ts","webpack:///./js/newTube/color-changer/color-changer.ts","webpack:///./js/newTube/comments/comments.ts","webpack:///./js/newTube/double-tap/double-tap.ts","webpack:///./js/newTube/dropdowns/dropdowns.ts","webpack:///./js/newTube/expander/expander.ts","webpack:///./js/newTube/fake-upload/fake-upload.ts","webpack:///./js/newTube/gallery/gallery.ts","webpack:///./js/newTube/height-normalizer/height-normalizer.ts","webpack:///./js/newTube/helpers/http.helper.ts","webpack:///./js/newTube/ion-range-slider/ion.range-slider.ts","webpack:///./js/newTube/main-nav/main-nav.ts","webpack:///./js/newTube/quick-hover/quick-hover.ts","webpack:///./js/newTube/rating/rating.ts","webpack:///./js/newTube/responsive-trigger/interfaces/index.ts","webpack:///./js/newTube/responsive-trigger/shared/dom-classes.helper.ts","webpack:///./js/newTube/responsive-trigger/shared/index.ts","webpack:///./js/newTube/search-selector/search-selector.ts","webpack:///./js/newTube/simple-scrollbar/simple-scrollbar.ts","webpack:///./js/newTube/tabs/tabs.ts","webpack:///./js/newTube/thumb-shuffler/thumb-shuffler.ts","webpack:///./js/newTube/gallery/native.history.js","webpack:///./js/newTube/ion-range-slider/ion.range-slider.src.js","webpack:///./js/newTube/modals/bs.modal.src.js","webpack:///./js/newTube/modals/modals.src.js","webpack:///../~/babel-runtime/core-js/get-iterator.js","webpack:///../~/babel-runtime/core-js/json/stringify.js","webpack:///../~/babel-runtime/core-js/object/define-property.js","webpack:///../~/babel-runtime/core-js/symbol.js","webpack:///../~/babel-runtime/core-js/symbol/iterator.js","webpack:///../~/babel-runtime/helpers/toConsumableArray.js","webpack:///../~/cookie-storage/lib/cookie-storage.js","webpack:///../~/cookie-storage/lib/index.js","webpack:///../~/core-js/library/fn/array/from.js","webpack:///../~/core-js/library/fn/get-iterator.js","webpack:///../~/core-js/library/fn/json/stringify.js","webpack:///../~/core-js/library/fn/number/is-nan.js","webpack:///../~/core-js/library/fn/object/assign.js","webpack:///../~/core-js/library/fn/object/define-property.js","webpack:///../~/core-js/library/fn/object/keys.js","webpack:///../~/core-js/library/fn/promise.js","webpack:///../~/core-js/library/fn/symbol/index.js","webpack:///../~/core-js/library/fn/symbol/iterator.js","webpack:///../~/core-js/library/modules/_add-to-unscopables.js","webpack:///../~/core-js/library/modules/_an-instance.js","webpack:///../~/core-js/library/modules/_array-includes.js","webpack:///../~/core-js/library/modules/_create-property.js","webpack:///../~/core-js/library/modules/_enum-keys.js","webpack:///../~/core-js/library/modules/_for-of.js","webpack:///../~/core-js/library/modules/_invoke.js","webpack:///../~/core-js/library/modules/_is-array.js","webpack:///../~/core-js/library/modules/_iter-create.js","webpack:///../~/core-js/library/modules/_iter-step.js","webpack:///../~/core-js/library/modules/_meta.js","webpack:///../~/core-js/library/modules/_microtask.js","webpack:///../~/core-js/library/modules/_object-assign.js","webpack:///../~/core-js/library/modules/_object-dps.js","webpack:///../~/core-js/library/modules/_object-gopd.js","webpack:///../~/core-js/library/modules/_object-gopn-ext.js","webpack:///../~/core-js/library/modules/_object-gpo.js","webpack:///../~/core-js/library/modules/_object-sap.js","webpack:///../~/core-js/library/modules/_redefine-all.js","webpack:///../~/core-js/library/modules/_set-species.js","webpack:///../~/core-js/library/modules/_string-at.js","webpack:///../~/core-js/library/modules/_to-absolute-index.js","webpack:///../~/core-js/library/modules/core.get-iterator.js","webpack:///../~/core-js/library/modules/es6.array.from.js","webpack:///../~/core-js/library/modules/es6.array.iterator.js","webpack:///../~/core-js/library/modules/es6.number.is-nan.js","webpack:///../~/core-js/library/modules/es6.object.assign.js","webpack:///../~/core-js/library/modules/es6.object.define-property.js","webpack:///../~/core-js/library/modules/es6.object.keys.js","webpack:///../~/core-js/library/modules/es6.promise.js","webpack:///../~/core-js/library/modules/es6.symbol.js","webpack:///../~/core-js/library/modules/es7.promise.finally.js","webpack:///../~/core-js/library/modules/es7.promise.try.js","webpack:///../~/core-js/library/modules/es7.symbol.async-iterator.js","webpack:///../~/core-js/library/modules/es7.symbol.observable.js","webpack:///../~/regenerator-runtime/runtime-module.js","webpack:///../~/regenerator-runtime/runtime.js","webpack:///../~/simplebar/dist/simplebar.js"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","value","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","default","object","property","prototype","hasOwnProperty","p","s","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","global","factory","document","w","Error","window","this","noGlobal","isArrayLike","obj","length","type","jQuery","isWindow","winnow","elements","qualifier","not","isFunction","grep","elem","nodeType","risSimple","test","filter","inArray","sibling","cur","dir","createOptions","options","each","match","rnotwhite","_","flag","detach","addEventListener","removeEventListener","completed","detachEvent","event","readyState","ready","dataAttr","key","data","replace","rmultiDash","toLowerCase","getAttribute","rbrace","parseJSON","e","isEmptyDataObject","isEmptyObject","internalData","pvt","acceptData","ret","thisCache","internalKey","expando","isNode","cache","id","deletedIds","pop","guid","toJSON","noop","extend","camelCase","internalRemoveData","isArray","concat","map","split","cleanData","support","deleteExpando","adjustCSS","prop","valueParts","tween","adjusted","scale","maxIterations","currentValue","css","initial","unit","cssNumber","initialInUnit","rcssNum","exec","style","start","end","createSafeFragment","list","nodeNames","safeFrag","createDocumentFragment","createElement","getAll","context","tag","elems","found","getElementsByTagName","querySelectorAll","childNodes","nodeName","push","merge","setGlobalEval","refElements","_data","fixDefaultChecked","rcheckableType","defaultChecked","checked","buildFragment","scripts","selection","ignored","j","contains","tmp","tbody","wrap","safe","nodes","rhtml","appendChild","rtagName","wrapMap","_default","innerHTML","htmlPrefilter","lastChild","leadingWhitespace","rleadingWhitespace","createTextNode","rtbody","firstChild","removeChild","textContent","appendChecked","ownerDocument","rscriptType","returnTrue","returnFalse","safeActiveElement","activeElement","err","on","types","selector","fn","one","origFn","undefined","off","apply","arguments","add","manipulationTarget","content","disableScript","find","attr","restoreScript","rscriptTypeMasked","removeAttribute","cloneCopyEvent","src","dest","hasData","oldData","curData","events","handle","fixCloneNodeIssues","noCloneEvent","removeEvent","text","parentNode","outerHTML","html5Clone","trim","defaultSelected","selected","defaultValue","domManip","collection","args","callback","first","node","hasScripts","doc","fragment","iNoClone","checkClone","rchecked","index","self","eq","html","clone","_evalUrl","globalEval","rcleanScript","remove","keepData","actualDisplay","appendTo","body","display","defaultDisplay","elemdisplay","iframe","documentElement","contentWindow","contentDocument","write","close","addGetHookIf","conditionFn","hookFn","vendorPropName","emptyStyle","capName","charAt","toUpperCase","slice","cssPrefixes","showHide","show","hidden","values","isHidden","setPositiveNumber","subtract","matches","rnumsplit","Math","max","augmentWidthOrHeight","extra","isBorderBox","styles","val","cssExpand","getWidthOrHeight","valueIsBorderBox","offsetWidth","offsetHeight","getStyles","boxSizing","curCSS","rnumnonpx","boxSizingReliable","parseFloat","Tween","easing","init","createFxNow","setTimeout","fxNow","now","genFx","includeWidth","which","attrs","height","opacity","width","createTween","animation","Animation","tweeners","defaultPrefilter","props","opts","toggle","hooks","oldfire","anim","orig","dataShow","queue","_queueHooks","unqueued","empty","fire","always","overflow","overflowX","overflowY","inlineBlockNeedsLayout","zoom","shrinkWrapBlocks","rfxtypes","done","hide","_removeData","propFilter","specialEasing","cssHooks","expand","properties","result","stopped","prefilters","deferred","Deferred","tick","currentTime","remaining","startTime","duration","temp","percent","tweens","run","notifyWith","resolveWith","promise","originalProperties","originalOptions","stop","gotoEnd","rejectWith","proxy","fx","timer","progress","complete","fail","getClass","addToPrefiltersOrTransports","structure","dataTypeExpression","func","dataType","dataTypes","unshift","inspectPrefiltersOrTransports","jqXHR","inspect","inspected","prefilterOrFactory","dataTypeOrTransport","seekingTransport","transports","ajaxExtend","target","deep","flatOptions","ajaxSettings","ajaxHandleResponses","responses","firstDataType","ct","finalDataType","contents","shift","mimeType","getResponseHeader","converters","ajaxConvert","response","isSuccess","conv2","current","conv","prev","responseFields","dataFilter","throws","state","error","getDisplay","filterHidden","buildParams","prefix","traditional","v","rbracket","createStandardXHR","XMLHttpRequest","createActiveXHR","ActiveXObject","getWindow","defaultView","parentWindow","indexOf","class2type","toString","hasOwn","rtrim","rmsPrefix","rdashAlpha","fcamelCase","all","letter","jquery","constructor","toArray","num","pushStack","prevObject","last","len","sort","splice","copyIsArray","copy","isPlainObject","random","isReady","msg","Array","isNumeric","realStringObj","ownFirst","execScript","eval","string","makeArray","arr","results","second","invert","callbackExpect","arg","Date","Symbol","iterator","Sizzle","seed","nid","nidselect","groups","newSelector","newContext","preferredDoc","setDocument","documentIsHTML","rquickExpr","getElementById","getElementsByClassName","qsa","compilerCache","rbuggyQSA","rescape","setAttribute","tokenize","ridentifier","toSelector","join","rsibling","testContext","qsaError","select","createCache","keys","Expr","cacheLength","markFunction","assert","div","addHandle","handler","attrHandle","siblingCheck","a","b","diff","sourceIndex","MAX_NEGATIVE","nextSibling","createPositionalPseudo","argument","matchIndexes","setFilters","tokens","addCombinator","matcher","combinator","base","checkNonElements","doneName","xml","oldCache","uniqueCache","outerCache","newCache","dirruns","uniqueID","elementMatcher","matchers","multipleContexts","contexts","condense","unmatched","newUnmatched","mapped","setMatcher","preFilter","postFilter","postFinder","postSelector","preMap","postMap","preexisting","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","relative","implicitRelative","matchContext","matchAnyContext","outermostContext","matcherFromGroupMatchers","elementMatchers","setMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","TAG","dirrunsUnique","uniqueSort","getText","isXML","compile","sortInput","hasDuplicate","docElem","rbuggyMatches","classCache","tokenCache","sortOrder","push_native","booleans","whitespace","identifier","attributes","pseudos","rwhitespace","RegExp","rcomma","rcombinators","rattributeQuotes","rpseudo","matchExpr","ID","CLASS","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rnative","runescape","funescape","escaped","escapedWhitespace","high","String","fromCharCode","unloadHandler","els","hasCompare","parent","top","attachEvent","className","createComment","getById","getElementsByName","attrId","getAttributeNode","input","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","expr","specified","duplicates","detectDuplicates","sortStable","nodeValue","selectors","createPseudo",">"," ","+","~","excess","unquoted","nodeNameSelector","pattern","operator","check","what","simple","forward","ofType","nodeIndex","useCache","pseudo","idx","matched","has","innerText","lang","elemLang","hash","location","root","focus","hasFocus","href","tabIndex","enabled","disabled","selectedIndex","header","button","even","odd","lt","gt","nth","radio","checkbox","file","password","image","submit","reset","filters","parseOnly","soFar","preFilters","cached","token","compiled","div1","unique","isXMLDoc","until","truncate","is","siblings","rneedsContext","rsingleTag","rootjQuery","parseHTML","rparentsprev","guaranteedUnique","children","next","targets","closest","pos","prevAll","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","reverse","Callbacks","firing","memory","fired","locked","firingIndex","once","stopOnFalse","disable","lock","fireWith","tuples","then","fns","newDefer","tuple","returned","notify","resolve","reject","pipe","stateString","when","subordinate","progressValues","progressContexts","resolveContexts","resolveValues","updateFunc","readyList","readyWait","holdReady","hold","wait","triggerHandler","doScroll","frameElement","doScrollCheck","container","cssText","noData","applet ","embed ","object ","removeData","dequeue","startLength","setter","clearQueue","count","defer","shrinkWrapBlocksVal","pnum","source","el","access","chainable","emptyGet","raw","bulk","htmlSerialize","cloneNode","noCloneChecked","option","legend","area","param","thead","tr","col","td","optgroup","tfoot","colgroup","caption","th","eventName","change","focusin","rformElems","rkeyEvent","rmouseEvent","rfocusMorph","rtypenamespace","t","handleObjIn","special","eventHandle","handleObj","handlers","namespaces","origType","elemData","triggered","dispatch","delegateType","bindType","namespace","delegateCount","setup","mappedTypes","origCount","teardown","trigger","onlyHandlers","ontype","bubbleType","eventPath","Event","isTrigger","rnamespace","noBubble","isPropagationStopped","preventDefault","isDefaultPrevented","fix","handlerQueue","delegateTarget","preDispatch","currentTarget","isImmediatePropagationStopped","stopPropagation","postDispatch","sel","isNaN","originalEvent","fixHook","fixHooks","mouseHooks","keyHooks","srcElement","metaKey","original","charCode","keyCode","eventDoc","fromElement","pageX","clientX","scrollLeft","clientLeft","pageY","clientY","scrollTop","clientTop","relatedTarget","toElement","load","blur","click","beforeunload","returnValue","simulate","isSimulated","defaultPrevented","timeStamp","cancelBubble","stopImmediatePropagation","mouseenter","mouseleave","pointerenter","pointerleave","related","form","_submitBubble","propertyName","_justChanged","attaches","rinlinejQuery","rnoshimcache","rxhtmlTag","rnoInnerhtml","safeFragment","fragmentDiv","dataAndEvents","deepDataAndEvents","destElements","srcElements","inPage","forceAcceptData","append","prepend","insertBefore","before","after","replaceWith","replaceChild","prependTo","insertAfter","replaceAll","insert","HTML","BODY","rmargin","swap","old","computeStyleTests","divStyle","pixelPositionVal","boxSizingReliableVal","reliableMarginLeftVal","pixelMarginRightVal","reliableMarginRightVal","getComputedStyle","marginLeft","marginRight","reliableHiddenOffsetsVal","getClientRects","borderCollapse","cssFloat","backgroundClip","clearCloneStyle","MozBoxSizing","WebkitBoxSizing","reliableHiddenOffsets","pixelMarginRight","pixelPosition","reliableMarginRight","reliableMarginLeft","rposition","view","opener","computed","minWidth","maxWidth","getPropertyValue","currentStyle","left","rs","rsLeft","runtimeStyle","pixelLeft","ralpha","ropacity","rdisplayswap","cssShow","position","visibility","cssNormalTransform","letterSpacing","fontWeight","animationIterationCount","columnCount","fillOpacity","flexGrow","flexShrink","lineHeight","order","orphans","widows","zIndex","cssProps","float","origName","set","isFinite","$1","getBoundingClientRect","margin","padding","border","suffix","expanded","parts","propHooks","eased","step","linear","swing","cos","PI","timerId","rrun","*","tweener","prefilter","speed","opt","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","interval","setInterval","clearInterval","slow","fast","delay","time","timeout","clearTimeout","getSetAttribute","hrefNormalized","checkOn","optSelected","enctype","optDisabled","radioValue","rreturn","rspaces","valHooks","optionSet","scrollHeight","nodeHook","boolHook","ruseDefault","getSetInput","removeAttr","nType","attrHooks","propName","attrNames","propFix","setAttributeNode","createAttribute","coords","contenteditable","rfocusable","rclickable","removeProp","tabindex","parseInt","for","class","rclass","addClass","classes","curValue","clazz","finalValue","removeClass","toggleClass","stateVal","classNames","hasClass","hover","fnOver","fnOut","nonce","rquery","rvalidtokens","JSON","parse","requireNonComma","depth","str","comma","open","Function","parseXML","DOMParser","parseFromString","async","loadXML","rhash","rts","rheaders","rlocalProtocol","rnoContent","rprotocol","rurl","allTypes","ajaxLocation","ajaxLocParts","active","lastModified","etag","url","isLocal","processData","contentType","accepts","json","* text","text html","text json","text xml","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","status","nativeStatusText","headers","success","modified","statusText","timeoutTimer","transport","responseHeadersString","ifModified","cacheURL","callbackContext","statusCode","fireGlobals","globalEventContext","completeDeferred","responseHeaders","requestHeaders","requestHeadersNames","strAbort","getAllResponseHeaders","setRequestHeader","lname","overrideMimeType","code","abort","finalText","method","crossDomain","hasContent","beforeSend","send","getJSON","getScript","wrapAll","wrapInner","unwrap","visible","r20","rCRLF","rsubmitterTypes","rsubmittable","encodeURIComponent","serialize","serializeArray","xhr","documentMode","xhrId","xhrCallbacks","xhrSupported","cors","username","xhrFields","isAbort","onreadystatechange","responseText","script","text script","head","scriptCharset","charset","onload","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","keepScripts","parsed","_load","params","animated","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","calculatePosition","curElem","using","win","box","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","","defaultExtra","funcName","bind","unbind","delegate","undelegate","size","andSelf","_jQuery","_$","$","noConflict","instance","Constructor","TypeError","_defineProperty","_defineProperty2","defineProperties","descriptor","writable","protoProps","staticProps","core","version","__e","__g","store","uid","USE_SYMBOL","_interopRequireDefault","_iterator","_iterator2","_symbol","_symbol2","_typeof","ctx","$export","own","out","IS_FORCED","F","IS_GLOBAL","G","IS_STATIC","S","IS_PROTO","P","IS_BIND","B","IS_WRAP","W","expProto","C","virtual","R","U","__export","isObject","it","anObject","IE8_DOM_DEFINE","toPrimitive","dP","f","O","Attributes","createDesc","IObject","defined","aFunction","that","$keys","enumBugKeys","bitmap","propertyIsEnumerable","def","stat","px","$at","iterated","_t","_i","point","_typeof2","_typeof3","modalWindows","preventDefaultForScrollKeys","disableScroll","onwheel","onmousewheel","ontouchmove","onkeydown","enableScroll","showModal","bodyClass","modal","nh_modalShow","defaults","defaultOpen","nh_modalHide","nh_modalTriggerClick","37","38","39","40","getAttributes","buildNewModal","current_modal","modal_markup","title","closeTitle","watIsDis","btn","aa","bw","bh","modalOptions","rand","floor","cc","decodedStr","Modals","_isNan","_isNan2","_from","_from2","_assign","_assign2","_keys","_keys2","_classCallCheck2","_classCallCheck3","_createClass2","_createClass3","NhanceTools","index_1","Helpers","tempClass","getScreenSize","windowObject","windowInner","ResponsiveTriggerClass","_this","_defaultSettings","triggerElement","querySelector","targetElement","activeToMaxScreenWidth","onWindowResizeTimeout","anywhereActionClose","anywhereExcludedElements","anywhereActionCloseMaxWindowWidth","in","animIn","animOut","animProgress","triggerActive","targetActive","setBodyClasses","enableEvents","onActivate","onDeactivate","onInit","eventPrefixName","eventAttachedTo","animClasses","animTimeout","preventDefaultTrigger","stopPropagationTrigger","preventDefaultTarget","stopPropagationTarget","stateStorage","stateStorageName","onTriggerClick","onElementClick","onAnywhereClick","onChange","onDestroy","onBeforeHide","onAfterHide","onBeforeShow","onAfterShow","isInitialized","_opts","_target","_trigger","_notBubblingElement","canUseTrigger","isActive","isDisabled","_eventInitAttachedFunction","_eventActivateAttachedFunction","_eventDeactivateAttachedFunction","api","deactivate","acivate","activate","destroy","tempOptionsObject","validateInputSettings","_setProperties","_registerEvents","_onInit","setNotBubbleElements","isMultiple","NodeList","isSingle","Element","_this2","_registerClickToElements","_onClickTrigger","_onClickTarget","_onScreenSizeChange","_ref","_onClickWindow","ev","attachTo","eventInit","eventActivate","eventDeactivate","dispatchEvent","_setRegister","element","forEach","singleElement","_dispatchEvent","_actionController","_this3","action","windowWidth","_setToDisabled","_setToEnabled","maxSizeCondition","isParamFalseValue","canSetDefaultOpenState","isStorageEnabled","storageStateIsDisabled","_getStorageState","removeItem","_unsetAllClasses","_setAllClasses","cls","_setStorage","_purgeStorage","ResponsiveTrigger","PromiseCapability","$$resolve","$$reject","getOwnPropertySymbols","shared","ceil","toInteger","min","valueOf","LIBRARY","wksExt","$Symbol","classof","ITERATOR","Iterators","getIteratorMethod","TO_STRING_TAG","DOMIterables","NAME","Collection","proto","_jquery","_jquery2","jRating","op","bigStarsPath","_basehttp","smallStarsPath","phpPath","showRateInfo","canRateAgain","decimalLength","rateMax","rateInfosX","rateInfosY","nbRates","onSuccess","onError","getNote","relativeX","noteBrut","widthRatingContainer","note","round","findRealLeft","offsetLeft","newWidth","starWidth","starHeight","bgPath","hasRated","globalWidth","nbOfRates","jDisabled","average","idBox","typeBox","widthColor","background","realOffsetLeft","mouseover","mouseout","mousemove","rate","post","server","_promise","_promise2","DomHelpers","_len","_key","classList","includes","_len2","_key2","existingClass","PlatformHelper","viewportSize","windowHeight","detectMobileDevice","navigator","userAgent","detectIOS","doubleTap","touchCount","parentElement","rAnimFrame","reqFunc","requestAnimFrame","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","ScrollTop","addListener","_elem","_init","scroll","scrollTargetY","scrollY","abs","easingEquations","easeOutSine","sin","easeInOutSine","easeInOutQuint","pow","easeInOutCubic","console","warn","formatOptions","path","domain","expires","secure","toUTCString","formatCookie","k","_slicedToArray","sliceIterator","_arr","_n","_d","_e","_s","return","parseCookies","_i$split","_i$split2","encodedKey","encodedValue","decodeURIComponent","cof","ARG","tryGet","T","callee","ArrayProto","entries","redefine","$iterCreate","setToStringTag","getPrototypeOf","BUGGY","returnThis","Base","DEFAULT","IS_SET","FORCED","methods","IteratorPrototype","getMethod","kind","DEF_VALUES","VALUES_BUG","$native","$default","$entries","$anyNative","SAFE_CLOSING","riter","from","skipClosing","iter","dPs","IE_PROTO","Empty","createDict","iframeDocument","create","Properties","hiddenKeys","getOwnPropertyNames","toIObject","arrayIndexOf","names","newPromiseCapability","x","promiseCapability","SPECIES","D","channel","port","invoke","cel","process","setTask","setImmediate","clearTask","clearImmediate","MessageChannel","Dispatch","counter","listener","nextTick","port2","port1","onmessage","postMessage","importScripts","clear","__webpack_amd_options__","jswing","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","sqrt","easeOutCirc","easeInOutCirc","easeInElastic","asin","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","easeInOutBounce","__WEBPACK_AMD_DEFINE_FACTORY__","focusable","isTabIndexNotNaN","mapName","img","ui","BACKSPACE","COMMA","DELETE","DOWN","END","ENTER","ESCAPE","HOME","LEFT","PAGE_DOWN","PAGE_UP","PERIOD","RIGHT","SPACE","TAB","UP","scrollParent","includeHidden","excludeStaticParent","overflowRegex","uniqueId","uuid","removeUniqueId","dataName","tabbable","isTabIndexNaN","outerWidth","reduce","side","innerWidth","innerHeight","outerHeight","ie","disableSelection","eventType","enableSelection","plugin","plugins","allowDisconnected","widget_uuid","widget_slice","widget","fullName","existingConstructor","basePrototype","proxiedPrototype","Widget","_createWidget","_proto","_childConstructors","_super","_superApply","__super","__superApply","widgetEventPrefix","widgetName","widgetFullName","child","childPrototype","bridge","inputIndex","inputLength","isMethodCall","methodValue","defaultElement","eventNamespace","bindings","hoverable","_on","_getCreateOptions","_create","_getCreateEventData","_destroy","curOption","_setOptions","_setOption","enable","suppressDisabledCheck","delegateElement","handlerProxy","_off","_delay","_hoverable","_focusable","focusout","defaultEffect","effect","hasOptions","effectName","effects","mouseHandled","mouseup","cancel","distance","_mouseInit","_mouseDown","started","_mouseDestroy","_mouseMoveDelegate","_mouseUpDelegate","_mouseMoved","_mouseStarted","_mouseUp","_mouseDownEvent","btnIsLeft","elIsCancel","_mouseCapture","mouseDelayMet","_mouseDelayTimer","_mouseDistanceMet","_mouseDelayMet","_mouseStart","_mouseMove","_mouseDrag","_mouseStop","getOffsets","offsets","rpercent","parseCss","getDimensions","cachedScrollbarWidth","supportsOffsetFractions","rhorizontal","rvertical","roffset","_position","scrollbarWidth","w1","w2","innerDiv","clientWidth","getScrollInfo","within","isDocument","hasOverflowX","scrollWidth","getWithinInfo","withinElement","of","atOffset","targetWidth","targetHeight","targetOffset","basePosition","dimensions","scrollInfo","collision","at","horizontalOffset","verticalOffset","collisionPosition","elemWidth","elemHeight","marginTop","collisionWidth","collisionHeight","myOffset","my","right","bottom","feedback","horizontal","vertical","important","fit","newOverRight","withinOffset","collisionPosLeft","overLeft","overRight","newOverBottom","collisionPosTop","overTop","overBottom","flip","newOverLeft","newOverTop","offsetTop","flipfit","testElement","testElementParent","testElementStyle","icons","submenu","items","menus","role","activeMenu","mousedown .ui-menu-item","click .ui-menu-item","mouseenter .ui-menu-item","previousFilter","mouseleave .ui-menu","keepActiveItem","item","collapseAll","keydown","refresh","_closeOnDocumentClick","_keydown","character","skip","previousPage","nextPage","_move","previous","collapse","_activate","filterTimer","_filterMenuItems","icon","submenus","aria-hidden","aria-expanded","menu","submenuCarat","_isDivider","_itemRole","listbox","nested","focused","_scrollIntoView","_close","_startOpening","borderTop","paddingTop","elementHeight","itemHeight","_hasScroll","fromFocus","_open","currentMenu","startMenu","newItem","isFirstItem","isLastItem","direction","escapedCharacter","regex","autoFocus","minLength","search","requestIndex","pending","suppressKeyPress","suppressKeyPressRepeat","suppressInput","isTextarea","isInput","isMultiLine","valueMethod","isNewMenu","_keyEvent","_value","term","_searchTimeout","keypress","selectedItem","cancelBlur","searching","_change","_initSource","_appendTo","mousedown","menuElement","menufocus","label","liveRegion","menuselect","aria-live","aria-relevant","array","request","autocomplete","equalValues","menuVisible","modifierKey","altKey","ctrlKey","shiftKey","_search","cancelSearch","_response","__response","_normalize","_suggest","ul","_renderMenu","_resizeMenu","_renderItemData","_renderItem","keyEvent","escapeRegex","messages","noResults","amount","message","qq","attach","descendant","elementB","re","getByClass","candidates","setText","clearText","log","level","variable","isFileOrInput","maybeFileOrInput","File","HTMLInputElement","tagName","isXhrUploadSupported","multiple","FormData","upload","isFolderDropSupported","dataTransfer","webkitGetAsEntry","isFileChunkingSupported","android","webkitSlice","mozSlice","extendNested","elt","getUniqueId","r","ie10","safari","vendor","chrome","firefox","windows","platform","obj2url","prefixDone","uristrings","nextObj","nextTemp","obj2FormData","formData","arrayKeyName","obj2Inputs","setCookie","days","date","setTime","getTime","toGMTString","cookie","getCookie","nameEQ","ca","substring","getCookieNames","regexp","cookies","cookieNames","equalsIdx","substr","deleteCookie","areCookiesEnabled","randNum","parseJson","DisposeSupport","disposers","dispose","disposer","addDisposer","disposeFunction","UploadButton","_options","acceptFiles","hoverClass","focusClass","_disposeSupport","_element","_input","_createInput","getInput","fontFamily","fontSize","cursor","FineUploaderBasic","debug","maxConnections","disableCancelForFormUploads","autoUpload","endpoint","paramsInBody","customHeaders","forceMultipart","inputName","uuidName","totalFileSizeName","validation","allowedExtensions","sizeLimit","minSizeLimit","stopOnFirstInvalidFile","callbacks","onSubmit","fileName","onComplete","responseJSON","onCancel","onUpload","onUploadChunk","chunkData","onResume","onProgress","loaded","total","reason","onAutoRetry","attemptNumber","onManualRetry","onValidateBatch","fileData","onValidate","typeError","sizeError","minSizeError","emptyError","noFilesError","onLeave","retry","enableAuto","maxAutoAttempts","autoAttemptDelay","preventRetryResponseProperty","buttonHover","buttonFocus","chunking","partSize","paramNames","partIndex","partByteOffset","chunkSize","totalFileSize","totalParts","filename","resume","cookiesExpireIn","resuming","formatFileName","sizeSymbols","_wrapCallbacks","_filesInProgress","_storedFileIds","_autoRetries","_retryTimeouts","_preventRetries","_paramsStore","_createParamsStore","_endpointStore","_createEndpointStore","_handler","_createUploadHandler","_button","_createUploadButton","_preventLeaveInProgress","setParams","fileId","setEndpoint","getInProgress","uploadStoredFiles","idToUpload","clearStoredFiles","_onBeforeManualRetry","addFiles","filesOrInputs","fileOrInput","verifiedFilesOrInputs","FileList","_uploadFileList","getUuid","getResumableFilesData","getSize","getFile","_onInputChange","UploadHandler","uuidParamName","totalFileSizeParamName","demoMode","paramsStore","endpointStore","_onProgress","_onComplete","_onCancel","_onUpload","_shouldAutoRetry","_maybeParseAndSendUploadError","_onBeforeAutoRetry","_onAutoRetry","_onSubmit","_removeFromFilesInProgress","storedFileIndex","files","isValid","getName","errorReason","validationDescriptors","_getValidationDescriptors","_validateFile","_uploadFile","_error","fileContainer","_storeFileForLater","validationDescriptor","_getValidationDescriptor","_isAllowedExtension","replacement","extensions","_formatSize","allowed","valid","allowedExt","extRegex","bytes","toFixed","safeCallback","exception","callbackFunc","_parseFileName","_parseFileSize","fileSize","fileDescriptor","fileDescriptors","paramsCopy","getParams","getEndpoint","DragAndDrop","maybeUploadDroppedFiles","droppedEntriesCount","droppedEntriesParsedCount","dirPending","droppedFiles","dz","dropDisabled","dropProcessing","addDroppedFile","traverseFileTree","entry","dirReader","isFile","isDirectory","createReader","readEntries","handleDataTransfer","getAsFile","setupDropzone","dropArea","UploadDropZone","onEnter","dropActive","onLeaveNotDescendants","onDrop","hideDropzones","disposeSupport","isFileDrag","dragEvent","fileDrag","setupDragDrop","extraDropzones","dropzones","FineUploader","_leaving_document_out","isProcessing","setupExtraDropzone","removeExtraDropzone","dzs","dragover_should_be_canceled","isValidFileDrag","effectTest","dt","isSafari","effectAllowed","isOrSetDropDisabled","preventDrop","dropOutsideDisabled","dropEffect","elementFromPoint","listElement","dragAndDrop","disableDefaultDropzone","uploadButton","cancelButton","retryButton","failUpload","dragZone","formatProgress","waitingForResponse","template","fileTemplate","drop","progressBar","spinner","finished","retrying","retryable","successIcon","failIcon","dropProcessingSpinner","failedUploadTextDisplay","mode","maxChars","responseProperty","enableTooltip","tooManyFilesError","showAutoRetryNote","autoRetryNote","showButton","showMessage","alert","_listElement","_find","_classes","_bindCancelAndRetryEvents","_dnd","_setupDragAndDrop","addExtraDropzone","getItemByFileId","qqFileId","dnd","preventSelectFiles","defaultDropAreaEl","dropProcessingEl","_addToList","cancelLink","_formatProgress","_controlFailureTextDisplay","_showSpinner","failTextEl","retryNumForDisplay","maxAuto","retryNote","_showCancelLink","fileElement","_clearList","uploadedSize","totalSize","failureReason","shortFailureReason","_showTooltip","handlerImpl","nextId","UploadHandlerXhr","UploadHandlerForm","cancelAll","getQueue","uploadCompleteCallback","logCallback","attachLoadEvent","detachLoadEvents","getIframeContentJson","createIframe","createForm","protocol","uuids","inputs","uploadComplete","fileInput","addChunkingSpecificParams","part","multipart","addResumeSpecificParams","getChunk","startByte","endByte","getChunkData","chunkIndex","fileState","startBytes","endBytes","getTotalChunks","blob","createXhr","setParamsAndGetEntityToSend","fileOrBlob","setHeaders","extraHeaders","handleCompletedFile","attemptingResume","uploadNextChunk","toSend","remainingChunkIdxs","persistChunkData","getReadyStateChangeHandler","onprogress","lengthComputable","totalLoaded","getChunkDataForCallback","handleSuccessfullyCompletedChunk","chunkIdx","deletePersistedChunkData","isErrorResponse","parseResponse","handleResetResponse","resumeEnabled","handleResetResponseOnResumeAttempt","handleNonResetErrorResponse","chunkFiles","fileUuid","cookieName","getChunkDataCookieName","cookieValue","cookieItemDelimiter","cookieExpDays","getPersistedChunkData","delimiterIndex","chunkCookieValue","maxChunkSize","resumeId","handleFileChunkingUpload","persistedChunkInfoForResume","firstChunkDataForResume","currentChunkIndex","firstChunkIndex","handleStandardFileUpload","getLoaded","matchingCookieNames","resumableFilesData","cookiesNameParts","cookieValueParts","partIdx","uploader","$el","dataStore","pluginOption","pluginOptions","addCallbacks","transformVariables","isValidCommand","delegateCommand","xformedOpts","instanceToStore","optionVal","transformedOpts","$callbackEl","xformed","arrayVals","uploaderType","arrayVal","command","xformedArgs","origArgs","fineUploader","optionsOrCommand","selfArgs","retVals","fullScreen","exitFullscreen","webkitExitFullscreen","webkitCancelFullScreen","msExitFullscreen","mozCancelFullScreen","fullscreenElement","msFullscreenElement","webkitIsFullScreen","mozFullScreen","webkitFullscreenElement","webkitCurrentFullScreenElement","mozFullScreenElement","requestFullscreen","webkitRequestFullscreen","webkitRequestFullScreen","msRequestFullscreen","mozRequestFullScreen","toggleFullScreen","fullScreenChangeHandler","fullScreenErrorHandler","pajinate","showPrevPage","new_page","meta","current_page","movePageNumbersRight","gotopage","wrap_around","total_page_no_links","showNextPage","movePageNumbersLeft","page_num","ipp","items_per_page","start_from","end_on","$items","$page_container","nav_panel_id","jquery_ui_active_class","$current_page","total_items","$item_container","$number_of_pages","nav_info_id","nav_label_info","toggleMoreLess","tagNextPrev","onPageDisplayed","new_p","$nav_panels","num_page_links_to_display","jquery_ui_disabled_class","item_container_id","start_page","nav_label_first","nav_label_prev","nav_label_next","nav_label_last","nav_order","show_first_last","abort_on_small_lists","jquery_ui","jquery_ui_active","jquery_ui_default","jquery_ui_disabled","jquery_ui_default_class","number_of_pages","navigation_html","current_link","lastPage","isWin","both","$scrollTo","axis","limit","onAfter","over","targ","$elem","toff","Pos","onAfterFirst","Dim","curr","interrupt","_last","scrollUp","animSpeed","scrollDis","scrollTarget","$self","triggerVisible","scrollTrigger","scrollName","scrollTitle","scrollImg","scrollText","activeOverlay","scrollDistance","animationSpeed","scrollFrom","scrollSpeed","easingType","scrollEvent","E","allowPageScroll","swipe","swipeStatus","tap","a4","av","aN","bd","aB","excludedElements","aR","bc","be","bb","touches","Z","g","ag","aP","aJ","ab","a1","aZ","aq","aQ","aj","M","fingers","aX","ai","au","pinchStatus","q","af","longTapThreshold","ao","a3","h","am","bf","aH","a2","ar","a7","aL","al","aS","aM","aI","triggerOnTouchEnd","triggerOnTouchLeave","bg","aY","aC","L","ad","ba","an","a6","aF","A","a9","K","aK","J","aD","ay","aA","I","V","aG","ah","aV","swipeLeft","swipeRight","swipeUp","swipeDown","a8","pinchIn","z","pinchOut","aW","Y","H","N","doubleTapThreshold","longTap","threshold","cancelThreshold","aT","ae","pinchThreshold","maxTimeThreshold","u","aO","X","aU","Q","ax","a0","a5","fingerReleaseThreshold","y","ac","aw","aE","atan2","az","fallbackToMouseEvents","ak","msPointerEnabled","pointerEnabled","phases","PHASE_START","PHASE_MOVE","PHASE_END","PHASE_CANCEL","directions","IN","OUT","pageScroll","NONE","HORIZONTAL","VERTICAL","AUTO","ONE","TWO","THREE","ALL","validationEngineLanguage","newLang","allRules","required","alertText","alertTextCheckboxMultiple","alertTextCheckboxe","alertTextDateRange","requiredInFunction","field","rules","dateRange","alertText2","dateTimeRange","minSize","maxSize","groupRequired","past","future","maxCheckbox","minCheckbox","equals","creditCard","phone","email","integer","number","year","month","day","getFullYear","getMonth","getDate","ipv4","onlyNumberSp","onlyLetterSp","onlyLetterNumber","ajaxUserCall","extraData","alertTextLoad","ajaxUserCallPhp","alertTextOk","ajaxNameCall","ajaxNameCallPhp","validate2fields","dateFormat","dateTimeFormat","alertText3","alertText4","_saveOptions","userOptions","validateAttribute","binded","validationEventTrigger","_onFieldEvent","autoPositionUpdate","noAnimation","formElem","updatePromptsPosition","_submitButtonClick","_onSubmitEvent","onAjaxFormComplete","die","validate","validationEngine","_validateField","onFieldSuccess","onFieldFailure","InvalidFields","_validateFields","onFailure","onValidationComplete","prettySelect","usePrefix","useSuffix","prompt","_getPrompt","promptText","_updatePrompt","showPrompt","promptPosition","showArrow","_showPrompt","closingtag","fadeDuration","_getClassName","hideAll","eventTrigger","submitButton","ajaxFormValidation","_validateFormWithAjax","_checkAjaxStatus","ajaxValidCache","_checkAjaxFieldStatus","fieldid","errorFound","first_err","_jqSelector","doNotShowAllErrosOnSubmit","showOneMessage","destination","fixleft","positionType","prompt_err","scrollOffset","isOverflown","overflowDIV","overflownDIV","focusFirstField","ajaxFormValidationMethod","ajaxFormValidationURL","onBeforeAjaxFormValidation","_ajaxError","errorInForm","errorFieldId","errorField","allrules","txt","showPrompts","_closePrompt","skipAjaxValidation","fieldIdCounter","rulesParsing","getRules","fieldName","promptType","limitErrors","isError","maxErrorsPerField","field_errors","have_required","errorMsg","_getErrorMessage","_required","_custom","classGroup","firstOfGroup","_groupRequired","_ajax","_minSize","_maxSize","_min","_max","_past","_future","secondOfGroup","_dateRange","_dateTimeRange","_maxCheckbox","_minCheckbox","_equals","_funcCall","_creditCard","_condRequired","end_validation","fieldType","errindex","_handleStatusCssClasses","addSuccessCssClassToField","addFailureCssClassToField","rule","originalValidationMethod","rule_index","alteredRule","element_classes","element_classes_array","custom_message","_getCustomErrorMessage","validityProp","_validityProp","custom_error_messages","element_class","custom","funcCall","condRequired","customRule","ex","functionName","scope","customFunctions","equalsField","pdate","fieldAlt","_parseDate","_dateToString","_isDate","_isDateTime","_dateCompare","nbCheck","groupname","cardNumber","numDigits","digit","sum","luhn","errorSelector","extraDataDynamic","fieldId","fieldValue","tempData","domIds","inputValue","escape","dateParts","ajaxed","ajaxform","_buildPrompt","arrow","addPromptClass","_calculatePosition","callerTopPosition","callerleftPosition","marginTopSize","autoHidePrompt","autoHideDelay","closePrompt","formId","_escapeExpression","isRTL","$document","$body","rtl","Boolean","promptElmt","promptTopPosition","promptleftPosition","fieldWidth","fieldLeft","fieldTop","promptHeight","shift1","shift2","shiftX","shiftY","dependingField","bindMethod","inlineAjax","insertRule","cssRules","sheet","styleSheet","lines","radius","rotate","corners","color","trail","fps","spin","boxShadow","transformOrigin","transform","borderRadius","hwaccel","shadow","behavior","adj","addRule","coordsize","coordorigin","rotation","arcsize","presets","tiny","small","large","Spinner","$this","base64","_getbyte64","_ALPHA","_decode","b10","pads","imax","_PADCHAR","_getbyte","charCodeAt","_encode","decode","encode","VERSION","validator","onsubmit","validateDelegate","submitHandler","cancelSubmit","currentForm","pendingRequest","formSubmitted","focusInvalid","removeAttrs","$element","staticRules","existingRules","normalizeRule","filtered","normalizeRules","metadataRules","classRules","attributeRules","blank","filled","unchecked","format","errorClass","validClass","errorElement","errorContainer","errorLabelContainer","ignore","ignoreTitle","onfocusin","lastActive","focusCleanup","blockFocusCleanup","unhighlight","addWrapper","errorsFor","onfocusout","checkable","submitted","optional","onkeyup","elementValue","onclick","highlight","findByName","setDefaults","remote","dateISO","digits","creditcard","equalTo","maxlength","minlength","rangelength","range","autoCreateRanges","labelContainer","errorContext","containers","valueCache","invalid","invalidHandler","checkForm","errorMap","showErrors","prepareForm","currentElements","validationTargetFor","clean","lastElement","prepareElement","numberOfInvalids","toHide","errors","errorList","successList","defaultShowErrors","resetForm","hideErrors","objectLength","findLastActive","rulesCache","toShow","dependencyMismatch","parameters","formatAndAdd","customMetaMessage","metadata","customDataMessage","customMessage","findDefined","defaultMessage","theregex","toToggle","wrapper","showLabel","validElements","invalidElements","idOrName","generated","errorPlacement","getLength","depend","dependTypes","boolean","function","startRequest","stopRequest","previousValue","classRuleSettings","addClassRules","depends","keepRule","parameter","Number","transformed","addMethod","originalMessage","nCheck","nDigit","bEven","cDigit","pendingRequests","_1","Dropdowns","ColorChanger","SearchSelector","QuickHover","setInnerExit","MainNav","DoubleTap","HeightNormalizer","SimpleScrollbar","Expander","ThumbShuffler","AdInItems","Tabs","Gallery","FakeUpload","Comments","Rating","IonRangeSlider","multiply","_siblingHeight","_multiply","_setHeight","_getSiblingHeight","nextElementSibling","clientHeight","helpers_1","cookie_storage_1","cookieStorage","CookieStorage","_attr","_isSet","_htmlElement","getItem","_set","_registerTrigger","setItem","_regenerator","_regenerator2","__awaiter","thisArg","_arguments","generator","fulfilled","rejected","throw","scroll_top_1","postUrl","_postUrl","_scrollTo","commentsContainer","_form","_captchaImg","_captchaImgUrl","_rawUrl","_contentId","_type","_getProps","loadComments","_submitBtn","_textarea","_captcha","_alertBox","_handlePostComments","comment","captcha","serializeData","HttpHelper","Content-Type","responseJson","info","reloadComments","mark","_callee","_context","abrupt","_buildUrl","_callee2","_context2","_list","_parents","_selector","_nhanceDropdown","_nhanceDropdownParent","_unsetOthers","_nhanceDropdownKiller","other","searchFix","nhance_responsive_trigger_1","dom_helper_1","ExpandElement","_isInitialized","_useTimeout","_defaults","useTimeout","_onChange","_generateSettings","hasOpts","_main","canUse","currentHeight","_registry","_triggers","_targets","_triggerSelector","_targetSelector","targetSelector","_btn","modals_1","ajaxGalleryNavigation","btnW","newUrl","cImg","stateTitleNew","stateNew","History","Adapter","getState","pushState","platform_helper_1","srcElemSelector","targetElemSelector","_h","_timeout","_minScreenWidth","_srcElem","_targetElem","_registerListener","_setNewHeight","_getCurrentHeight","onerror","catch","ionRangeSlider","grid","grid_snap","oldUrl","onStart","onFinish","multiplication","df","dt_string","df_string","tempUrlArray","subparamsArray","currentUrl","newParamsUrl","valParams","onUpdate","QuickHoverElement","_timeoutFunc","_className","_registerEnterListener","_registerExitListener","_unsetTimeout","_registy","unsetLevelsUp","levelCount","_msg","_initJRatingModule","_initThumbsModule","_id","_handleVote","_getIterator2","_getIterator3","_toConsumableArray2","_toConsumableArray3","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","timeEnd","currentClasses","newClassesArray","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_step2","rmIndexArray","_len3","_key3","_iteratorNormalCompletion3","_didIteratorError3","_iteratorError3","_step3","_iterator3","_index","_len4","_key4","dom_classes_helper_1","_canUseSelect","_selected","_inputTarget","_divLabelTarget","_registerTriggers","_clearLabel","_clearInputVal","_getSelected","_setSelectedLabel","_setInputVal","searchType","localStorage","htmlCode","attrib","SimpleBar","autoHide","_content","_setFirst","_unsetTrigger","contentEl","Thumb","_thumbs","_limit","_extractFileNames","lastDotIndex","lastIndexOf","_initial","_current","_start","_stop","_incrementCurrent","_interval","_stringify","_stringify2","quote","escapable","lastIndex","gap","rep","indent","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","cx","\b","\t","\n","\f","\r","\"","\\","stringify","reviver","walk","SyntaxError","_uid","extractEventData","onDomLoad","initHtml4","initialized","savedHashes","isLastHash","getHashByIndex","isHashEqual","saveHash","discardedHashes","discardedStates","discardState","getHashByState","discardedState","backState","forwardState","discardHash","discardedHash","recycleState","emulated","hashChange","hashChangeInit","checkerFunction","getHash","isInternetExplorer","escapeHash","back","setHash","intervalList","hashChangeInterval","onHashChange","newURL","getLocationHref","getHashByUrl","busy","doubleCheckComplete","isTraditionalAnchor","extractState","getFullUrl","isLastSavedState","encodeURI","pushQueue","createStateObject","expectedStateId","storeState","setTitle","saveState","getShortUrl","replaceState","getStateByIndex","history","sessionStorage","initCore","safariPollInterval","doubleCheckInterval","disableSuid","storeInterval","busyDelay","initialTitle","html4Mode","delayInit","clearAllIntervals","getInternetExplorerMajorVersion","bugs","safariPoll","ieDoubleCheck","hashEscape","cloneObject","getRootUrl","hostname","host","getBaseHref","getBaseUrl","getBasePageUrl","getPageUrl","URL","idToState","stateToId","urlToId","storedStates","savedStates","normalizeStore","getLastSavedState","cleanUrl","getIdByState","extractId","getStateString","normalizeState","normalized","hashedUrl","hasUrlDuplicate","getStateById","getStateId","getIdByUrl","getLastStoredState","getCurrentIndex","unescapeHash","normalizeHash","queues","fireQueueItem","stateChanged","doubleChecker","doubleCheckClear","doubleCheck","safariStatePoll","go","onPopState","onUnload","DOMException","QUOTA_EXCEEDED_ERR","appCodeName","plugin_count","is_old_ie","bound","searchElement","fromIndex","Infinity","current_plugin","calc_count","update_tm","old_from","old_to","old_min_interval","raf_id","dragging","force_redraw","no_diapason","is_key","is_update","is_start","is_finish","is_active","is_resize","is_click","$cache","cont","single","bar","line","s_single","s_from","s_to","shad_single","shad_from","shad_to","edge","grid_labels","x_gap","x_pointer","w_rs","w_rs_old","w_handle","p_gap","p_gap_left","p_gap_right","p_step","p_pointer","p_handle","p_single_fake","p_single_real","p_from_fake","p_from_real","p_to_fake","p_to_real","p_bar_x","p_bar_w","grid_gap","big_num","big","big_w","big_p","big_x","labels","w_min","w_max","w_from","w_to","w_single","p_min","p_max","p_from_left","p_to_left","p_single_left","config","config_from_data","$inp","min_interval","max_interval","drag_interval","p_values","from_fixed","from_min","from_max","from_shadow","to_fixed","to_min","to_max","to_shadow","prettify_enabled","prettify_separator","prettify","force_edges","keyboard","keyboard_step","grid_margin","grid_num","hide_min_max","hide_from_to","postfix","max_postfix","decorate_both","values_separator","input_values_separator","slider","from_percent","from_value","to_percent","to_value","convertToPercent","toggleInput","setMinMax","calc","callOnUpdate","callOnStart","updateScene","container_html","setTopHandler","appendGrid","appendDisableMask","bindEvents","changeLevel","cancelAnimationFrame","pointerMove","pointerUp","pointerClick","pointerDown","restoreOriginalMinInterval","callOnFinish","setTempMinInterval","calcPointerPercent","moveByKey","decorate","_prettify","update","calcHandlePercent","handle_x","getHandleX","chooseHandle","checkDiapason","convertToFakePercent","convertToRealPercent","calcWithStep","checkMinInterval","checkMaxInterval","real_x","full","half","new_from","new_to","convertToValue","calcMinMax","calcLabels","fake","real","checkEdges","drawHandles","drawLabels","calcGridMargin","calcGridLabels","drawShadow","callOnChange","text_single","text_from","text_to","values_num","single_left","to_left","is_from_min","is_from_max","is_to_min","is_to_max","no_min","diapason","one_percent","min_length","max_length","min_decimals","max_decimals","avg_decimals","rounded","p_current","p_next","p_num","vl","decorated","updateFrom","updateTo","updateResult","local_small_max","small_p","small_max","small_w","cacheGridLabels","$label","calcGridCollision","next_i","lastTime","vendors","currTime","timeToCall","Plugin","_relatedTarget","Modal","DEFAULTS","$dialog","$backdrop","isShown","originalBodyPad","ignoreBackdropClick","TRANSITION_DURATION","BACKDROP_TRANSITION_DURATION","backdrop","checkScrollbar","setScrollbar","resize","transition","adjustDialog","enforceFocus","emulateTransitionEnd","hideModal","handleUpdate","resetAdjustments","resetScrollbar","removeBackdrop","doAnimate","callbackRemove","modalIsOverflowing","paddingLeft","bodyIsOverflowing","paddingRight","fullWindowWidth","documentElementRect","measureScrollbar","bodyPad","scrollDiv","$target","showEvent","arr2","_classCallCheck","_createClass","format_cookie_1","parse_cookies_1","defaultOptions","_defaultOptions","assign","Proxy","CookieStorageHandler","_getCookie","sortedKeys","cookieOptions","formatted","_setCookie","deleteProperty","isExtensible","alreadyExists","ownKeys","getOwnPropertyDescriptor","$JSON","$Object","desc","Promise","forbiddenField","toLength","toAbsoluteIndex","IS_INCLUDES","$defineProperty","getKeys","gOPS","pIE","getSymbols","symbols","isEnum","isArrayIter","getIterFn","BREAK","RETURN","iterable","iterFn","un","META","setDesc","FREEZE","preventExtensions","setMeta","fastKey","getWeak","onFreeze","NEED","KEY","macrotask","Observer","MutationObserver","WebKitMutationObserver","flush","exit","enter","observe","characterData","task","toObject","$assign","aLen","gOPD","gOPN","windowNames","getWindowNames","ObjectProto","fails","exp","DESCRIPTORS","TO_STRING","getIterator","createProperty","arrayLike","mapfn","mapping","addToUnscopables","_k","Arguments","Internal","newGenericPromiseCapability","OwnPromiseCapability","Wrapper","anInstance","forOf","speciesConstructor","microtask","newPromiseCapabilityModule","perform","promiseResolve","$Promise","USE_NATIVE","FakePromise","PromiseRejectionEvent","isThenable","isReject","chain","_c","_v","ok","reaction","onHandleUnhandled","onUnhandled","unhandled","isUnhandled","emit","onunhandledrejection","_a","onrejectionhandled","$reject","_w","$resolve","executor","onFulfilled","onRejected","capability","$index","alreadyCalled","race","$fails","wks","wksDefine","enumKeys","gOPNExt","$GOPD","$DP","HIDDEN","TO_PRIMITIVE","SymbolRegistry","AllSymbols","OPSymbols","QObject","findChild","setSymbolDesc","protoDesc","sym","isSymbol","$defineProperties","$create","$propertyIsEnumerable","$getOwnPropertyDescriptor","$getOwnPropertyNames","$getOwnPropertySymbols","IS_OP","$set","es6Symbols","wellKnownSymbols","keyFor","useSetter","useSimple","replacer","$replacer","finally","onFinally","try","callbackfn","hadRuntime","regeneratorRuntime","oldRuntime","innerFn","outerFn","tryLocsList","protoGenerator","Generator","Context","_invoke","makeInvokeMethod","tryCatch","GeneratorFunction","GeneratorFunctionPrototype","defineIteratorMethods","AsyncIterator","record","__await","unwrapped","enqueue","callInvokeWithMethodAndArg","previousPromise","GenStateSuspendedStart","GenStateExecuting","GenStateCompleted","doneResult","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","GenStateSuspendedYield","resultName","nextLoc","pushTryEntry","locs","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","iteratorMethod","iteratorSymbol","Op","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","inModule","runtime","getProto","NativeIteratorPrototype","Gp","displayName","isGeneratorFunction","genFun","ctor","setPrototypeOf","__proto__","awrap","skipTempReset","rootEntry","rootRecord","rval","loc","caught","hasCatch","hasFinally","finallyEntry","thrown","delegateYield","inspectSource","flashTimeout","scrollContentEl","dragOffset","isVisible","scrollOffsetAttr","sizeAttr","scrollSizeAttr","offsetAttr","globalObserver","mutationObserver","resizeObserver","currentAxis","offsetSize","flashScrollbar","onDragY","onDragX","onScrollY","onScrollX","drag","onEndDrag","onMouseEnter","recalculate","leading","trailing","initDOM","scrollbarX","trackX","scrollbar","scrollbarY","trackY","marginBottom","paddingBottom","initListeners","scrollContent","track","isChildNode","addedNodes","childList","subtree","disconnect","onDrag","contentSizeX","scrollbarXSize","contentSizeY","scrollbarYSize","scrollbarMinSize","resizeScrollbar","showScrollbar","hideScrollbar","removeListeners","initDOMLoadedElements","hasAttribute","getElOptions","removedNodes","unMount","htmlAttributes","initHtmlApi","maxWait","NaN","getBBox","DOMRectReadOnly","some","Map","__entries__","delete","connected_","mutationEventsAdded_","mutationsObserver_","observers_","onTransitionEnd_","addObserver","connect_","removeObserver","disconnect_","updateObservers_","gatherActive","hasActive","broadcastActive","getInstance","instance_","SVGGraphicsElement","SVGElement","broadcastWidth","broadcastHeight","contentRect_","broadcastRect","contentRect","activeObservations_","observations_","callback_","controller_","callbackCtx_","unobserve","clearActive","WeakMap","ResizeObserver"],"mappings":"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","file":"./js/app.min.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \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// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\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, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\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/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 89);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\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 ( true ) {\n\t!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() {\n\t\treturn jQuery;\n\t}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\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\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nexports.default = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n};\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _defineProperty = __webpack_require__(119);\n\nvar _defineProperty2 = _interopRequireDefault(_defineProperty);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = 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      (0, _defineProperty2.default)(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/* 3 */\n/***/ (function(module, exports) {\n\nvar core = module.exports = { version: '2.5.1' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = { \"default\": __webpack_require__(125), __esModule: true };\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports) {\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n  ? window : typeof self != 'undefined' && self.Math == Math ? self\n  // eslint-disable-next-line no-new-func\n  : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar store = __webpack_require__(39)('wks');\nvar uid = __webpack_require__(29);\nvar Symbol = __webpack_require__(5).Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n  return store[name] || (store[name] =\n    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _iterator = __webpack_require__(121);\n\nvar _iterator2 = _interopRequireDefault(_iterator);\n\nvar _symbol = __webpack_require__(120);\n\nvar _symbol2 = _interopRequireDefault(_symbol);\n\nvar _typeof = typeof _symbol2.default === \"function\" && typeof _iterator2.default === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === \"function\" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? \"symbol\" : typeof obj; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = typeof _symbol2.default === \"function\" && _typeof(_iterator2.default) === \"symbol\" ? function (obj) {\n  return typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj);\n} : function (obj) {\n  return obj && typeof _symbol2.default === \"function\" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? \"symbol\" : typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj);\n};\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(5);\nvar core = __webpack_require__(3);\nvar ctx = __webpack_require__(19);\nvar hide = __webpack_require__(14);\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n  var IS_FORCED = type & $export.F;\n  var IS_GLOBAL = type & $export.G;\n  var IS_STATIC = type & $export.S;\n  var IS_PROTO = type & $export.P;\n  var IS_BIND = type & $export.B;\n  var IS_WRAP = type & $export.W;\n  var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n  var expProto = exports[PROTOTYPE];\n  var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];\n  var key, own, out;\n  if (IS_GLOBAL) source = name;\n  for (key in source) {\n    // contains in native\n    own = !IS_FORCED && target && target[key] !== undefined;\n    if (own && key in exports) continue;\n    // export native or passed\n    out = own ? target[key] : source[key];\n    // prevent global pollution for namespaces\n    exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n    // bind timers to global for call from export context\n    : IS_BIND && own ? ctx(out, global)\n    // wrap global constructors for prevent change them in library\n    : IS_WRAP && target[key] == out ? (function (C) {\n      var F = function (a, b, c) {\n        if (this instanceof C) {\n          switch (arguments.length) {\n            case 0: return new C();\n            case 1: return new C(a);\n            case 2: return new C(a, b);\n          } return new C(a, b, c);\n        } return C.apply(this, arguments);\n      };\n      F[PROTOTYPE] = C[PROTOTYPE];\n      return F;\n    // make static versions for prototype methods\n    })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n    // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n    if (IS_PROTO) {\n      (exports.virtual || (exports.virtual = {}))[key] = out;\n      // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n      if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);\n    }\n  }\n};\n// type bitmap\n$export.F = 1;   // forced\n$export.G = 2;   // global\n$export.S = 4;   // static\n$export.P = 8;   // proto\n$export.B = 16;  // bind\n$export.W = 32;  // wrap\n$export.U = 64;  // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction __export(m) {\n    for (var p in m) {\n        if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n    }\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(__webpack_require__(48));\n__export(__webpack_require__(49));\n__export(__webpack_require__(99));\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(16);\nmodule.exports = function (it) {\n  if (!isObject(it)) throw TypeError(it + ' is not an object!');\n  return it;\n};\n\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar anObject = __webpack_require__(10);\nvar IE8_DOM_DEFINE = __webpack_require__(59);\nvar toPrimitive = __webpack_require__(42);\nvar dP = Object.defineProperty;\n\nexports.f = __webpack_require__(12) ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPrimitive(P, true);\n  anObject(Attributes);\n  if (IE8_DOM_DEFINE) try {\n    return dP(O, P, Attributes);\n  } catch (e) { /* empty */ }\n  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n  if ('value' in Attributes) O[P] = Attributes.value;\n  return O;\n};\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !__webpack_require__(15)(function () {\n  return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports) {\n\nvar hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n  return hasOwnProperty.call(it, key);\n};\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar dP = __webpack_require__(11);\nvar createDesc = __webpack_require__(22);\nmodule.exports = __webpack_require__(12) ? function (object, key, value) {\n  return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n  object[key] = value;\n  return object;\n};\n\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports) {\n\nmodule.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (e) {\n    return true;\n  }\n};\n\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports) {\n\nmodule.exports = function (it) {\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = __webpack_require__(60);\nvar defined = __webpack_require__(33);\nmodule.exports = function (it) {\n  return IObject(defined(it));\n};\n\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports) {\n\nvar toString = {}.toString;\n\nmodule.exports = function (it) {\n  return toString.call(it).slice(8, -1);\n};\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// optional / simple context binding\nvar aFunction = __webpack_require__(24);\nmodule.exports = function (fn, that, length) {\n  aFunction(fn);\n  if (that === undefined) return fn;\n  switch (length) {\n    case 1: return function (a) {\n      return fn.call(that, a);\n    };\n    case 2: return function (a, b) {\n      return fn.call(that, a, b);\n    };\n    case 3: return function (a, b, c) {\n      return fn.call(that, a, b, c);\n    };\n  }\n  return function (/* ...args */) {\n    return fn.apply(that, arguments);\n  };\n};\n\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports) {\n\nmodule.exports = {};\n\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = __webpack_require__(67);\nvar enumBugKeys = __webpack_require__(35);\n\nmodule.exports = Object.keys || function keys(O) {\n  return $keys(O, enumBugKeys);\n};\n\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports) {\n\nmodule.exports = function (bitmap, value) {\n  return {\n    enumerable: !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable: !(bitmap & 4),\n    value: value\n  };\n};\n\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = { \"default\": __webpack_require__(132), __esModule: true };\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports) {\n\nmodule.exports = function (it) {\n  if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n  return it;\n};\n\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports) {\n\nmodule.exports = true;\n\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports) {\n\nexports.f = {}.propertyIsEnumerable;\n\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar def = __webpack_require__(11).f;\nvar has = __webpack_require__(13);\nvar TAG = __webpack_require__(6)('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n  if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 7.1.13 ToObject(argument)\nvar defined = __webpack_require__(33);\nmodule.exports = function (it) {\n  return Object(defined(it));\n};\n\n\n/***/ }),\n/* 29 */\n/***/ (function(module, exports) {\n\nvar id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n\n\n/***/ }),\n/* 30 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $at = __webpack_require__(155)(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\n__webpack_require__(63)(String, 'String', function (iterated) {\n  this._t = String(iterated); // target\n  this._i = 0;                // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n  var O = this._t;\n  var index = this._i;\n  var point;\n  if (index >= O.length) return { value: undefined, done: true };\n  point = $at(O, index);\n  this._i += point.length;\n  return { value: point, done: false };\n});\n\n\n/***/ }),\n/* 31 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _typeof2 = __webpack_require__(7);\n\nvar _typeof3 = _interopRequireDefault(_typeof2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__webpack_require__(116);\nvar jQuery = __webpack_require__(0);\n/* THIS SHIT IS COPIED FROM ORIGINAL TUBE2016 */\n/* NO TIME FOR REFACTOR/REWRITE. CONRAD WNATS THIS TPL BY THE END OF NOVEMBER */\nvar $ = jQuery;\n(function ($) {\n    jQuery.modalWindows = function (options) {\n        var defaults = {\n            target: \".modal\",\n            trigger: \"[data-toggle-modal]\",\n            defaultOpen: false,\n            bodyClass: \"modal-open\",\n            \"nh_modalShow\": function nh_modalShow() {},\n            \"nh_modalHide\": function nh_modalHide() {},\n            \"nh_modalTriggerClick\": function nh_modalTriggerClick() {}\n        };\n        var opt = $.extend(true, {}, defaults, options);\n        var keys = { 37: 1, 38: 1, 39: 1, 40: 1 };\n        function preventDefault(e) {\n            e = e || window.event;\n            if (e.preventDefault) e.preventDefault();\n            e.returnValue = false;\n        }\n        function preventDefaultForScrollKeys(e) {\n            if (keys[e.keyCode]) {\n                preventDefault(e);\n                return false;\n            }\n        }\n        function disableScroll() {\n            if (window.addEventListener) window.addEventListener('DOMMouseScroll', preventDefault, false);\n            window.onwheel = preventDefault; // modern standard\n            window.onmousewheel = document.onmousewheel = preventDefault; // older browsers, IE\n            window.ontouchmove = preventDefault; // mobile\n            document.onkeydown = preventDefaultForScrollKeys;\n        }\n        function enableScroll() {\n            if (window.removeEventListener) window.removeEventListener('DOMMouseScroll', preventDefault, false);\n            window.onmousewheel = document.onmousewheel = null;\n            window.onwheel = null;\n            window.ontouchmove = null;\n            document.onkeydown = null;\n        }\n        // SHOW\n        function showModal() {\n            if (opt.bodyClass) {\n                $(\"body\").addClass(opt.bodyClass);\n            }\n            $(opt.target).modal(\"show\");\n            disableScroll();\n            opt.nh_modalShow.call(opt);\n        }\n        // HIDE\n        function hideModal() {\n            $(opt.target).modal(\"hide\");\n            enableScroll();\n            if (opt.bodyClass) {\n                $(opt.target).on(\"hidden.bs.modal\", function (e) {\n                    $(\"body\").removeClass(opt.bodyClass);\n                });\n            }\n            //        opt.nh_modalHide.call(opt);\n        }\n        // TRIGGER FUNCTION\n        function trigger() {\n            $(opt.trigger).click(function (e) {\n                e.preventDefault();\n                showModal();\n                opt.nh_modalTriggerClick.call(opt);\n            });\n        }\n        // DEFAULT\n        function defaultOpen() {\n            if (opt.defaultOpen) {\n                showModal();\n            }\n        }\n        ////////////////////////////////////////////////////\n        ////////////////////////////////////////////////////\n        // INIT\n        defaultOpen();\n        trigger();\n        $(opt.target).on('hidden.bs.modal', function (e) {\n            enableScroll();\n            opt.nh_modalHide.call(opt);\n        });\n        if (opt.bodyClass) {\n            $(opt.target).on(\"hidden.bs.modal\", function (e) {\n                $(\"body\").removeClass(opt.bodyClass);\n            });\n        }\n    };\n})(jQuery);\nexports.getAttributes = function (el) {\n    var attributes = {};\n    if ($(el).length) {\n        $.each($(el)[0].attributes, function (index, attr) {\n            attributes[attr.name] = attr.value;\n        });\n    }\n    return attributes;\n};\nexports.buildNewModal = function (content, options) {\n    var defaults = {};\n    var settings = $.extend(true, {}, defaults, options);\n    var current_modal;\n    var modal_markup = '<div id=\"' + settings.id + '-modal\" class=\"modal fade\" tabindex=\"-1\" role=\"dialog\"><div class=\"modal-dialog\"><div class=\"modal-content\"><div class=\"modal-header\"><button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>' + '<h4 class=\"modal-title\">' + settings.title + '</h4>' + '</div><div class=\"modal-body\">' + content + '</div>' + '<div class=\"modal-footer\"><button class=\"btn btn-default\" data-dismiss=\"modal\" type=\"button\">' + settings.closeTitle + '</button></div>' + '</div></div></div>';\n    $(\"body\").append(modal_markup);\n    if ((typeof content === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(content)) == \"object\") {\n        $(\"#\" + settings.id + \"-modal\").find(\".modal-body\").text(\"\").append(content);\n    }\n    current_modal = $(\"#\" + settings.id + \"-modal\");\n    current_modal.modal(\"show\");\n    // CLOSE MODAL\n    current_modal.on('hidden.bs.modal', function () {\n        current_modal.remove();\n    });\n};\n// report, addToFavs\nexports.modalWindows = function (watIsDis) {\n    var sett = {\n        btn: $(\"[data-mb='modal']\")\n    };\n    sett.btn.on(\"click\", function (e) {\n        e.preventDefault();\n        var aa = exports.getAttributes($(this));\n        var bw = aa[\"data-opt-iframe-width\"] ? aa[\"data-opt-iframe-width\"] : \"100%\";\n        var bh = aa[\"data-opt-iframe-height\"] ? aa[\"data-opt-iframe-height\"] : \"150px\";\n        var modalOptions = {\n            rand: Math.floor(Math.random() * 1000),\n            closeTitle: aa[\"data-opt-close\"] ? aa[\"data-opt-close\"] : \"Close\",\n            id: aa[\"id\"] ? aa[\"id\"] : \"modal-\" + this.rand,\n            title: aa[\"title\"] ? aa[\"title\"] : \"Popup\"\n        };\n        if (aa[\"data-opt-type\"] == \"iframe\") {\n            var content = '<iframe src=\"' + aa[\"href\"] + '\" style=\"width:' + bw + ';height:' + bh + ';\"></iframe>';\n            exports.buildNewModal(content, modalOptions);\n        } else {\n            var xhr;\n            if ((typeof xhr === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(xhr)) == 'object') {\n                xhr.abort();\n            }\n            var cc;\n            xhr = $.ajax({\n                url: aa[\"href\"],\n                type: 'GET',\n                dataType: 'html',\n                cache: false,\n                crossDomain: false,\n                data: {},\n                success: function success(data) {\n                    var decodedStr = $(\"<div/>\").html(data);\n                    if (!data.match(/<body>/)) {\n                        cc = data;\n                    } else {\n                        cc = decodedStr.children().not(\"meta, link\");\n                    }\n                    exports.buildNewModal(cc, modalOptions);\n                },\n                error: function error(data) {\n                    cc = data;\n                }\n            });\n        }\n    });\n};\nvar Modals;\n(function (Modals) {\n    Modals.init = function () {\n        exports.modalWindows();\n    };\n})(Modals = exports.Modals || (exports.Modals = {}));\n\n/***/ }),\n/* 32 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _isNan = __webpack_require__(51);\n\nvar _isNan2 = _interopRequireDefault(_isNan);\n\nvar _typeof2 = __webpack_require__(7);\n\nvar _typeof3 = _interopRequireDefault(_typeof2);\n\nvar _from = __webpack_require__(4);\n\nvar _from2 = _interopRequireDefault(_from);\n\nvar _assign = __webpack_require__(52);\n\nvar _assign2 = _interopRequireDefault(_assign);\n\nvar _keys = __webpack_require__(53);\n\nvar _keys2 = _interopRequireDefault(_keys);\n\nvar _classCallCheck2 = __webpack_require__(1);\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(2);\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__webpack_require__(104);\nvar index_1 = __webpack_require__(108);\n// tslint:disable-next-line:no-namespace\nvar NhanceTools;\n(function (NhanceTools) {\n    var hasClass = index_1.Helpers.hasClass;\n    var addClass = index_1.Helpers.addClass;\n    var removeClass = index_1.Helpers.removeClass;\n    var tempClass = index_1.Helpers.tempClass;\n    var getScreenSize = function getScreenSize() {\n        var windowObject = window;\n        var windowInner = 'inner';\n        if (!('innerWidth' in window)) {\n            windowInner = 'client';\n            windowObject = document.documentElement || document.body;\n        }\n        return { width: windowObject[windowInner + 'Width'], height: windowObject[windowInner + 'Height'] };\n    };\n\n    var ResponsiveTriggerClass = function () {\n        function ResponsiveTriggerClass(options) {\n            var _this = this;\n\n            (0, _classCallCheck3.default)(this, ResponsiveTriggerClass);\n\n            this._defaultSettings = {\n                triggerElement: document.querySelector('#nav-trigger'),\n                targetElement: document.querySelector('.nav-col'),\n                activeToMaxScreenWidth: 768,\n                onWindowResizeTimeout: 100,\n                anywhereActionClose: true,\n                anywhereExcludedElements: \"target\",\n                anywhereActionCloseMaxWindowWidth: true,\n                classes: {\n                    in: 'main-nav-open',\n                    animIn: 'main-nav-opening',\n                    out: 'main-nav-closed',\n                    animOut: 'main-nav-closing',\n                    animProgress: 'main-nav-animating',\n                    triggerActive: 'active',\n                    targetActive: 'active'\n                },\n                setBodyClasses: true,\n                enableEvents: true,\n                events: {\n                    onActivate: 'nrt.onActivate',\n                    onDeactivate: 'nrt.onDeactivate',\n                    onInit: 'nrt.onInit'\n                },\n                eventPrefixName: 'nav.',\n                eventAttachedTo: window,\n                animClasses: true,\n                animTimeout: 500,\n                preventDefaultTrigger: true,\n                stopPropagationTrigger: true,\n                preventDefaultTarget: true,\n                stopPropagationTarget: true,\n                defaultOpen: 100,\n                stateStorage: false,\n                stateStorageName: 'nrt',\n                onInit: function onInit() {},\n                onTriggerClick: function onTriggerClick() {},\n                onElementClick: function onElementClick() {},\n                onAnywhereClick: function onAnywhereClick() {},\n                onChange: function onChange() {},\n                onDestroy: function onDestroy() {},\n                onBeforeHide: function onBeforeHide() {},\n                onAfterHide: function onAfterHide() {},\n                onBeforeShow: function onBeforeShow() {},\n                onAfterShow: function onAfterShow() {}\n            };\n            this.isInitialized = false;\n            this._opts = {};\n            this._target = null;\n            this._trigger = null;\n            this._notBubblingElement = false;\n            this.canUseTrigger = false;\n            this.isActive = false;\n            this.isDisabled = false;\n            this._eventInitAttachedFunction = null; // TODO removeListener\n            this._eventActivateAttachedFunction = null; // TODO removeListener\n            this._eventDeactivateAttachedFunction = null; // TODO removeListener\n            this.api = {\n                deactivate: function deactivate() {\n                    return _this.deactivate();\n                },\n                acivate: function acivate() {\n                    return _this.activate();\n                },\n                destroy: function destroy() {\n                    return _this.destroy();\n                }\n            };\n            var tempOptionsObject = {};\n            var shouldSetNewOptions = options instanceof Object && (0, _keys2.default)(options).length && this.validateInputSettings(options);\n            if (shouldSetNewOptions) {\n                tempOptionsObject = options;\n            }\n            this._opts = (0, _assign2.default)({}, this._defaultSettings, tempOptionsObject);\n            this._setProperties();\n            if (this._trigger) {\n                this._registerEvents();\n                this._onInit();\n            }\n            return this.api;\n        }\n\n        (0, _createClass3.default)(ResponsiveTriggerClass, [{\n            key: \"validateInputSettings\",\n            value: function validateInputSettings(options) {\n                return true;\n            }\n        }, {\n            key: \"_setProperties\",\n            value: function _setProperties() {\n                var setNotBubbleElements = function setNotBubbleElements(elements) {\n                    var isMultiple = elements instanceof NodeList;\n                    var isSingle = elements instanceof Element;\n                    if (isSingle || isMultiple) {\n                        if (isSingle) {\n                            return elements;\n                        }\n                        if (isMultiple) {\n                            return (0, _from2.default)(elements);\n                        }\n                    }\n                };\n                this._trigger = this._opts.triggerElement instanceof NodeList ? (0, _from2.default)(this._opts.triggerElement) : this._opts.triggerElement; /* Handle mutliple elements */\n                this._target = this._opts.targetElement;\n                switch ((0, _typeof3.default)(this._opts.anywhereExcludedElements)) {\n                    case 'string':\n                        this._notBubblingElement = setNotBubbleElements(this._target);\n                        break;\n                    case 'object':\n                        this._notBubblingElement = setNotBubbleElements(this._opts.anywhereExcludedElements);\n                        break;\n                    default:\n                        this._notBubblingElement = false;\n                }\n            }\n        }, {\n            key: \"_registerEvents\",\n            value: function _registerEvents() {\n                var _this2 = this;\n\n                this._registerClickToElements(this._trigger, this._onClickTrigger.bind(this));\n                this._registerClickToElements(this._notBubblingElement, this._onClickTarget.bind(this));\n                window.addEventListener('resize', function (e) {\n                    _this2._onScreenSizeChange();\n                });\n                window.addEventListener('click', function (_ref) {\n                    var target = _ref.target;\n\n                    _this2._onClickWindow(target);\n                });\n                if (this._opts.enableEvents) {\n                    var ev = this._opts.events;\n                    var prefix = this._opts.eventPrefixName;\n                    var attachTo = this._opts.eventAttachedTo;\n                    this.eventInit = new Event(prefix + ev.onInit);\n                    this.eventActivate = new Event(prefix + ev.onActivate);\n                    this.eventDeactivate = new Event(prefix + ev.onDeactivate);\n                    // Testing\n                    attachTo.addEventListener(prefix + ev.onInit, function (e) {\n                        // this._eventInitAttachedFunction = arguments.callee;\n                    }, false);\n                    attachTo.addEventListener(prefix + ev.onDeactivate, function (e) {\n                        //this._eventDeactivateAttachedFunction = arguments.callee;\n                    }, false);\n                    attachTo.addEventListener(prefix + ev.onActivate, function (e) {\n                        //this._eventActivateAttachedFunction = arguments.callee;\n                    }, false);\n                }\n            }\n        }, {\n            key: \"_dispatchEvent\",\n            value: function _dispatchEvent(event) {\n                if (this._opts.enableEvents) {\n                    this._opts.eventAttachedTo.dispatchEvent(event);\n                }\n            }\n        }, {\n            key: \"_registerClickToElements\",\n            value: function _registerClickToElements(elements, callback) {\n                var _setRegister = function _setRegister(element, callback) {\n                    element.addEventListener('click', function (e) {\n                        e.stopPropagation();\n                        callback(e);\n                    });\n                };\n                if (elements !== false) {\n                    if (elements instanceof Array !== true) {\n                        _setRegister(elements, callback.bind(this));\n                    } else if (elements instanceof Array && elements.length > 0) {\n                        elements.forEach(function (singleElement) {\n                            _setRegister(singleElement, callback);\n                        });\n                    }\n                }\n            }\n        }, {\n            key: \"_onInit\",\n            value: function _onInit() {\n                this.isInitialized = true;\n                this._opts.onInit.call();\n                this._dispatchEvent(this.eventInit);\n                this._actionController('initialized'); /* Do shit and delegate rest to controller */\n            }\n        }, {\n            key: \"_onScreenSizeChange\",\n            value: function _onScreenSizeChange() {\n                var _this3 = this;\n\n                setTimeout(function () {\n                    _this3._actionController('resized'); /* TODO - make actions libraries */\n                }, this._opts.onWindowResizeTimeout); /* Do optional shit and delegate rest to controller */\n            }\n        }, {\n            key: \"_actionController\",\n            value: function _actionController(action, options) {\n                var windowWidth = getScreenSize().width;\n                this.canUseTrigger = this._opts.activeToMaxScreenWidth === true || windowWidth <= this._opts.activeToMaxScreenWidth;\n                switch (action) {\n                    case 'resized':\n                        if (!this.canUseTrigger) {\n                            this._setToDisabled();\n                            return;\n                        }\n                        this._setToEnabled();\n                        break;\n                    case 'trigger.clicked':\n                        //\n                        if (this.canUseTrigger) {\n                            if (this.isActive) {\n                                this.deactivate();\n                                return;\n                            }\n                            this.activate();\n                        }\n                        break;\n                    case 'target.clicked':\n                        //\n                        break;\n                    case 'window.clicked':\n                        var maxSizeCondition = true;\n                        var isParamFalseValue = typeof this._opts.anywhereActionCloseMaxWindowWidth === 'boolean' && this._opts.anywhereActionCloseMaxWindowWidth === false;\n                        if (isParamFalseValue) {\n                            maxSizeCondition = false;\n                        } else if (!isParamFalseValue) {\n                            maxSizeCondition = true;\n                        } else {\n                            maxSizeCondition = windowWidth <= this._opts.anywhereActionCloseMaxWindowWidth;\n                        }\n                        var shouldClose = this.isActive === true && this._opts.anywhereActionClose === true && maxSizeCondition && this.canUseTrigger;\n                        if (shouldClose) {\n                            this.deactivate();\n                        }\n                        break;\n                    case 'initialized':\n                        var canSetDefaultOpenState = this._opts.defaultOpen !== false && !(0, _isNan2.default)(parseInt(this._opts.defaultOpen)) && windowWidth >= this._opts.defaultOpen && this.isActive === false;\n                        if (this.canUseTrigger && this._opts.defaultOpen === true) {\n                            this.activate();\n                            break;\n                        }\n                        if (canSetDefaultOpenState && this.canUseTrigger) {\n                            // storage support\n                            var isStorageEnabled = this._opts.stateStorage !== false;\n                            var storageStateIsDisabled = this._getStorageState() == 'false';\n                            if (isStorageEnabled && storageStateIsDisabled) {\n                                this.deactivate();\n                                return;\n                            }\n                            if (this._opts.defaultOpen === false) {\n                                return;\n                            }\n                            if (windowWidth <= this._opts.defaultOpen) {\n                                this.activate();\n                            }\n                        }\n                        break;\n                }\n                if (action === \"initialized\") {\n                    this._opts.onChange.call(this, this.isActive, this.canUseTrigger);\n                }\n            }\n        }, {\n            key: \"_getStorageState\",\n            value: function _getStorageState() {\n                if (this._opts.stateStorage !== false) {\n                    return window[this._opts.stateStorage][this._opts.stateStorageName];\n                }\n            }\n        }, {\n            key: \"_setStorage\",\n            value: function _setStorage(value) {\n                if (this._opts.stateStorage !== false) {\n                    window[this._opts.stateStorage][this._opts.stateStorageName] = value;\n                }\n            }\n        }, {\n            key: \"_purgeStorage\",\n            value: function _purgeStorage() {\n                if (this._opts.stateStorage !== false) {\n                    window[this._opts.stateStorage].removeItem(this._opts.stateStorageName);\n                }\n            }\n        }, {\n            key: \"_setToDisabled\",\n            value: function _setToDisabled() {\n                this.isActive = false;\n                this.isDisabled = true;\n                this._unsetAllClasses();\n                this._opts.onChange(this.isActive, this.canUseTrigger);\n            }\n        }, {\n            key: \"_setToEnabled\",\n            value: function _setToEnabled() {\n                this.isDisabled = false;\n                this._setAllClasses();\n                this._opts.onChange(this.isActive, this.canUseTrigger);\n            }\n        }, {\n            key: \"_unsetAllClasses\",\n            value: function _unsetAllClasses() {\n                if (this._target) {\n                    removeClass(this._target, this._opts.classes.targetActive);\n                }\n                removeClass(document.body, this._opts.classes.in, this._opts.classes.animIn, this._opts.classes.animOut, this._opts.classes.out, this._opts.classes.animProgress);\n                removeClass(this._trigger, this._opts.classes.triggerActive);\n            }\n        }, {\n            key: \"_setAllClasses\",\n            value: function _setAllClasses() {\n                var target = this._target;\n                var trigger = this._trigger;\n                var cls = this._opts.classes;\n                switch (this.isActive) {\n                    case false:\n                        if (target) {\n                            removeClass(target, cls.targetActive);\n                        }\n                        removeClass(trigger, cls.triggerActive);\n                        removeClass(document.body, cls.in, cls.animIn, cls.animProgress, cls.animOut);\n                        addClass(document.body, cls.out);\n                        break;\n                    default:\n                        if (target) {\n                            addClass(target, cls.targetActive);\n                        }\n                        addClass(trigger, cls.triggerActive);\n                        removeClass(document.body, cls.animOut, cls.animIn, cls.animProgress, cls.out);\n                        addClass(document.body, cls.in);\n                }\n            }\n        }, {\n            key: \"_onClickTrigger\",\n            value: function _onClickTrigger(event) {\n                /* What happens when trigger is clicked? */\n                this._opts.onTriggerClick.call();\n                this._actionController('trigger.clicked');\n            }\n        }, {\n            key: \"_onClickTarget\",\n            value: function _onClickTarget(event) {\n                /* What happens when target is clicked */\n                this._opts.onElementClick.call();\n                this._actionController('target.clicked');\n            }\n        }, {\n            key: \"_onClickWindow\",\n            value: function _onClickWindow(target) {\n                /* What happens when window area is clicked? */\n                this._opts.onAnywhereClick.call(target);\n                this._actionController('window.clicked', { element: target });\n            }\n        }, {\n            key: \"deactivate\",\n            value: function deactivate() {\n                //\n                /* Hide procedure */\n                this._opts.onBeforeHide.call();\n                this.isActive = false;\n                //, this._opts.classes.triggerActive, this._opts.classes.triggerActive\n                if (this._target) {\n                    removeClass(this._target, this._opts.classes.in, this._opts.classes.targetActive);\n                }\n                if (this._opts.setBodyClasses) {\n                    removeClass(document.body, this._opts.classes.in, this._opts.classes.animIn);\n                }\n                removeClass(this._trigger, this._opts.classes.triggerActive);\n                if (this._opts.setBodyClasses) {\n                    addClass(document.body, this._opts.classes.out);\n                }\n                var canUseAnimatedClasses = this._opts.animClasses && this._opts.animTimeout && this._opts.classes.animOut !== false;\n                if (canUseAnimatedClasses && this._opts.setBodyClasses) {\n                    tempClass(document.body, this._opts.animTimeout, this._opts.classes.animOut, this._opts.classes.animProgress);\n                }\n                this._opts.onChange(this.isActive, this.canUseTrigger);\n                this._dispatchEvent(this.eventDeactivate);\n                this._opts.onAfterHide.call();\n                this._setStorage('false');\n                //\n            }\n        }, {\n            key: \"activate\",\n            value: function activate() {\n                //\n                /* Show procedure */\n                this._opts.onBeforeShow.call();\n                this.isActive = true;\n                if (this._opts.setBodyClasses) {\n                    removeClass(document.body, this._opts.classes.out, this._opts.classes.animOut);\n                    addClass(document.body, this._opts.classes.in);\n                }\n                if (this._opts.classes.triggerActive) {\n                    addClass(this._trigger, this._opts.classes.triggerActive);\n                }\n                if (this._target && this._opts.classes.targetActive) {\n                    addClass(this._target, this._opts.classes.targetActive);\n                }\n                var canUseAnimatedClasses = this._opts.animClasses && this._opts.animTimeout && this._opts.classes.animIn !== false;\n                if (canUseAnimatedClasses && this._opts.setBodyClasses) {\n                    tempClass(document.body, this._opts.animTimeout, this._opts.classes.animIn, this._opts.classes.animProgress);\n                }\n                this._opts.onChange(this.isActive, this.canUseTrigger);\n                this._dispatchEvent(this.eventActivate);\n                this._opts.onAfterShow.call();\n                this._setStorage('true');\n                //\n            }\n        }, {\n            key: \"destroy\",\n            value: function destroy() {\n                this._unsetAllClasses();\n                this._purgeStorage();\n                this._opts.onDestroy.call();\n                this._opts.onChange.call(this, false, false);\n                this.isInitialized = false;\n                this._target = null;\n                this._trigger = null;\n                this.isActive = false;\n                this.isDisabled = false;\n                this._notBubblingElement = false;\n                this._opts = {};\n            }\n        }]);\n        return ResponsiveTriggerClass;\n    }();\n\n    NhanceTools.ResponsiveTriggerClass = ResponsiveTriggerClass;\n})(NhanceTools = exports.NhanceTools || (exports.NhanceTools = {}));\nvar ResponsiveTrigger = NhanceTools.ResponsiveTriggerClass;\nexports.ResponsiveTrigger = ResponsiveTrigger;\n\n/***/ }),\n/* 33 */\n/***/ (function(module, exports) {\n\n// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n  if (it == undefined) throw TypeError(\"Can't call method on  \" + it);\n  return it;\n};\n\n\n/***/ }),\n/* 34 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(16);\nvar document = __webpack_require__(5).document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n  return is ? document.createElement(it) : {};\n};\n\n\n/***/ }),\n/* 35 */\n/***/ (function(module, exports) {\n\n// IE 8- don't enum bug keys\nmodule.exports = (\n  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n\n\n/***/ }),\n/* 36 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = __webpack_require__(24);\n\nfunction PromiseCapability(C) {\n  var resolve, reject;\n  this.promise = new C(function ($$resolve, $$reject) {\n    if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n    resolve = $$resolve;\n    reject = $$reject;\n  });\n  this.resolve = aFunction(resolve);\n  this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n  return new PromiseCapability(C);\n};\n\n\n/***/ }),\n/* 37 */\n/***/ (function(module, exports) {\n\nexports.f = Object.getOwnPropertySymbols;\n\n\n/***/ }),\n/* 38 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar shared = __webpack_require__(39)('keys');\nvar uid = __webpack_require__(29);\nmodule.exports = function (key) {\n  return shared[key] || (shared[key] = uid(key));\n};\n\n\n/***/ }),\n/* 39 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(5);\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function (key) {\n  return store[key] || (store[key] = {});\n};\n\n\n/***/ }),\n/* 40 */\n/***/ (function(module, exports) {\n\n// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n\n\n/***/ }),\n/* 41 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 7.1.15 ToLength\nvar toInteger = __webpack_require__(40);\nvar min = Math.min;\nmodule.exports = function (it) {\n  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n\n\n/***/ }),\n/* 42 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = __webpack_require__(16);\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n  if (!isObject(it)) return it;\n  var fn, val;\n  if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  throw TypeError(\"Can't convert object to primitive value\");\n};\n\n\n/***/ }),\n/* 43 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(5);\nvar core = __webpack_require__(3);\nvar LIBRARY = __webpack_require__(25);\nvar wksExt = __webpack_require__(44);\nvar defineProperty = __webpack_require__(11).f;\nmodule.exports = function (name) {\n  var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n  if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n\n\n/***/ }),\n/* 44 */\n/***/ (function(module, exports, __webpack_require__) {\n\nexports.f = __webpack_require__(6);\n\n\n/***/ }),\n/* 45 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar classof = __webpack_require__(57);\nvar ITERATOR = __webpack_require__(6)('iterator');\nvar Iterators = __webpack_require__(20);\nmodule.exports = __webpack_require__(3).getIteratorMethod = function (it) {\n  if (it != undefined) return it[ITERATOR]\n    || it['@@iterator']\n    || Iterators[classof(it)];\n};\n\n\n/***/ }),\n/* 46 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(159);\nvar global = __webpack_require__(5);\nvar hide = __webpack_require__(14);\nvar Iterators = __webpack_require__(20);\nvar TO_STRING_TAG = __webpack_require__(6)('toStringTag');\n\nvar DOMIterables = ('CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,' +\n  'DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,' +\n  'MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,' +\n  'SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,' +\n  'TextTrackList,TouchList').split(',');\n\nfor (var i = 0; i < DOMIterables.length; i++) {\n  var NAME = DOMIterables[i];\n  var Collection = global[NAME];\n  var proto = Collection && Collection.prototype;\n  if (proto && !proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n  Iterators[NAME] = Iterators.Array;\n}\n\n\n/***/ }),\n/* 47 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _jquery = __webpack_require__(0);\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar $ = _jquery2.default;\n/************************************************************************\r\n*************************************************************************\r\n@Name :       \tjRating - jQuery Plugin\r\n@Revison :    \t3.0\r\n@Date : \t\t28/01/2013 \r\n@Author:     \t ALPIXEL - (www.myjqueryplugins.com - www.alpixel.fr) \r\n@License :\t\t Open Source - MIT License : http://www.opensource.org/licenses/mit-license.php\r\n \r\n**************************************************************************\r\n*************************************************************************/\n(function ($) {\n\t$.fn.jRating = function (op) {\n\t\tvar defaults = {\n\t\t\t/** String vars **/\n\t\t\tbigStarsPath: _basehttp + '/includes/rating/js/icons/stars.png', // path of the icon stars.png\n\t\t\tsmallStarsPath: _basehttp + '/includes/rating/js/icons/small.png', // path of the icon small.png\n\t\t\tphpPath: _basehttp + '/includes/rating/jRating.php', // path of the php file jRating.php\n\t\t\ttype: 'big', // can be set to 'small' or 'big'\n\n\t\t\t/** Boolean vars **/\n\t\t\tstep: false, // if true,  mouseover binded star by star,\n\t\t\tisDisabled: false,\n\t\t\tshowRateInfo: true,\n\t\t\tcanRateAgain: false,\n\n\t\t\t/** Integer vars **/\n\t\t\tlength: 5, // number of star to display\n\t\t\tdecimalLength: 0, // number of decimals.. Max 3, but you can complete the function 'getNote'\n\t\t\trateMax: 20, // maximal rate - integer from 0 to 9999 (or more)\n\t\t\trateInfosX: -45, // relative position in X axis of the info box when mouseover\n\t\t\trateInfosY: 5, // relative position in Y axis of the info box when mouseover\n\t\t\tnbRates: 1,\n\n\t\t\t/** Functions **/\n\t\t\tonSuccess: null,\n\t\t\tonError: null\n\t\t};\n\n\t\tif (this.length > 0) return this.each(function () {\n\t\t\t/*vars*/\n\t\t\tvar opts = $.extend(defaults, op),\n\t\t\t    newWidth = 0,\n\t\t\t    starWidth = 0,\n\t\t\t    starHeight = 0,\n\t\t\t    bgPath = '',\n\t\t\t    hasRated = false,\n\t\t\t    globalWidth = 0,\n\t\t\t    nbOfRates = opts.nbRates;\n\n\t\t\tif ($(this).hasClass('jDisabled') || opts.isDisabled) var jDisabled = true;else var jDisabled = false;\n\n\t\t\tgetStarWidth();\n\t\t\t$(this).height(starHeight);\n\n\t\t\tvar average = parseFloat($(this).attr('data-average')),\n\t\t\t    // get the average of all rates\n\t\t\tidBox = parseInt($(this).attr('data-id')),\n\t\t\t    // get the id of the box\n\t\t\ttypeBox = parseInt($(this).attr('data-type')),\n\t\t\t    // get the id of the box\n\t\t\twidthRatingContainer = starWidth * opts.length,\n\t\t\t    // Width of the Container\n\t\t\twidthColor = average / opts.rateMax * widthRatingContainer,\n\t\t\t    // Width of the color Container\n\n\t\t\tquotient = $('<div>', {\n\t\t\t\t'class': 'jRatingColor',\n\t\t\t\tcss: {\n\t\t\t\t\twidth: widthColor\n\t\t\t\t}\n\t\t\t}).appendTo($(this)),\n\t\t\t    average = $('<div>', {\n\t\t\t\t'class': 'jRatingAverage',\n\t\t\t\tcss: {\n\t\t\t\t\twidth: 0,\n\t\t\t\t\ttop: -starHeight\n\t\t\t\t}\n\t\t\t}).appendTo($(this)),\n\t\t\t    jstar = $('<div>', {\n\t\t\t\t'class': 'jStar',\n\t\t\t\tcss: {\n\t\t\t\t\twidth: widthRatingContainer,\n\t\t\t\t\theight: starHeight,\n\t\t\t\t\ttop: -(starHeight * 2),\n\t\t\t\t\tbackground: 'url(' + bgPath + ') repeat-x'\n\t\t\t\t}\n\t\t\t}).appendTo($(this));\n\n\t\t\t$(this).css({ width: widthRatingContainer, overflow: 'hidden', zIndex: 1, position: 'relative' });\n\n\t\t\tif (!jDisabled) $(this).unbind().bind({\n\t\t\t\tmouseenter: function mouseenter(e) {\n\t\t\t\t\tvar realOffsetLeft = findRealLeft(this);\n\t\t\t\t\tvar relativeX = e.pageX - realOffsetLeft;\n\t\t\t\t\tif (opts.showRateInfo) var tooltip = $('<p>', {\n\t\t\t\t\t\t'class': 'jRatingInfos',\n\t\t\t\t\t\thtml: getNote(relativeX) + ' <span class=\"maxRate\">/ ' + opts.rateMax + '</span>',\n\t\t\t\t\t\tcss: {\n\t\t\t\t\t\t\ttop: e.pageY + opts.rateInfosY,\n\t\t\t\t\t\t\tleft: e.pageX + opts.rateInfosX\n\t\t\t\t\t\t}\n\t\t\t\t\t}).appendTo('body').show();\n\t\t\t\t},\n\t\t\t\tmouseover: function mouseover(e) {\n\t\t\t\t\t$(this).css('cursor', 'pointer');\n\t\t\t\t},\n\t\t\t\tmouseout: function mouseout() {\n\t\t\t\t\t$(this).css('cursor', 'default');\n\t\t\t\t\tif (hasRated) average.width(globalWidth);else average.width(0);\n\t\t\t\t},\n\t\t\t\tmousemove: function mousemove(e) {\n\t\t\t\t\tvar realOffsetLeft = findRealLeft(this);\n\t\t\t\t\tvar relativeX = e.pageX - realOffsetLeft;\n\t\t\t\t\tif (opts.step) newWidth = Math.floor(relativeX / starWidth) * starWidth + starWidth;else newWidth = relativeX;\n\t\t\t\t\taverage.width(newWidth);\n\t\t\t\t\tif (opts.showRateInfo) $(\"p.jRatingInfos\").css({\n\t\t\t\t\t\tleft: e.pageX + opts.rateInfosX\n\t\t\t\t\t}).html(getNote(newWidth) + ' <span class=\"maxRate\">/ ' + opts.rateMax + '</span>');\n\t\t\t\t},\n\t\t\t\tmouseleave: function mouseleave() {\n\t\t\t\t\t$(\"p.jRatingInfos\").remove();\n\t\t\t\t},\n\t\t\t\tclick: function click(e) {\n\t\t\t\t\tvar element = this;\n\n\t\t\t\t\t/*set vars*/\n\t\t\t\t\thasRated = true;\n\t\t\t\t\tglobalWidth = newWidth;\n\t\t\t\t\tnbOfRates--;\n\n\t\t\t\t\tif (!opts.canRateAgain || parseInt(nbOfRates) <= 0) $(this).unbind().css('cursor', 'default').addClass('jDisabled');\n\n\t\t\t\t\tif (opts.showRateInfo) $(\"p.jRatingInfos\").fadeOut('fast', function () {\n\t\t\t\t\t\t$(this).remove();\n\t\t\t\t\t});\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tvar rate = getNote(newWidth);\n\t\t\t\t\taverage.width(newWidth);\n\n\t\t\t\t\t/** ONLY FOR THE DEMO, YOU CAN REMOVE THIS CODE **/\n\t\t\t\t\t$('.datasSent p').html('<strong>idBox : </strong>' + idBox + '<br /><strong>rate : </strong>' + rate + '<br /><strong>action :</strong> rating');\n\t\t\t\t\t$('.serverResponse p').html('<strong>Loading...</strong>');\n\t\t\t\t\t/** END ONLY FOR THE DEMO **/\n\n\t\t\t\t\t$.post(opts.phpPath, {\n\t\t\t\t\t\tidBox: idBox,\n\t\t\t\t\t\ttype: typeBox,\n\t\t\t\t\t\trate: rate,\n\t\t\t\t\t\taction: 'rating'\n\t\t\t\t\t}, function (data) {\n\t\t\t\t\t\tif (!data.error) {\n\t\t\t\t\t\t\t/** ONLY FOR THE DEMO, YOU CAN REMOVE THIS CODE **/\n\t\t\t\t\t\t\t$('.serverResponse p').html(data.server);\n\t\t\t\t\t\t\t/** END ONLY FOR THE DEMO **/\n\n\t\t\t\t\t\t\t/** Here you can display an alert box, \r\n       \tor use the jNotify Plugin :) http://www.myqjqueryplugins.com/jNotify\r\n       \texemple :\t*/\n\t\t\t\t\t\t\tif (opts.onSuccess) opts.onSuccess(element, rate);\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t/** ONLY FOR THE DEMO, YOU CAN REMOVE THIS CODE **/\n\t\t\t\t\t\t\t$('.serverResponse p').html(data.server);\n\t\t\t\t\t\t\t/** END ONLY FOR THE DEMO **/\n\n\t\t\t\t\t\t\t/** Here you can display an alert box, \r\n       \tor use the jNotify Plugin :) http://www.myqjqueryplugins.com/jNotify\r\n       \texemple :\t*/\n\t\t\t\t\t\t\tif (opts.onError) opts.onError(element, rate);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 'json');\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tfunction getNote(relativeX) {\n\t\t\t\tvar noteBrut = parseFloat(relativeX * 100 / widthRatingContainer * opts.rateMax / 100);\n\t\t\t\tswitch (opts.decimalLength) {\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tvar note = Math.round(noteBrut * 10) / 10;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\tvar note = Math.round(noteBrut * 100) / 100;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\tvar note = Math.round(noteBrut * 1000) / 1000;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tvar note = Math.round(noteBrut * 1) / 1;\n\t\t\t\t}\n\t\t\t\treturn note;\n\t\t\t};\n\n\t\t\tfunction getStarWidth() {\n\t\t\t\tswitch (opts.type) {\n\t\t\t\t\tcase 'small':\n\t\t\t\t\t\tstarWidth = 12; // width of the picture small.png\n\t\t\t\t\t\tstarHeight = 10; // height of the picture small.png\n\t\t\t\t\t\tbgPath = opts.smallStarsPath;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tstarWidth = 23; // width of the picture stars.png\n\t\t\t\t\t\tstarHeight = 20; // height of the picture stars.png\n\t\t\t\t\t\tbgPath = opts.bigStarsPath;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tfunction findRealLeft(obj) {\n\t\t\t\tif (!obj) return 0;\n\t\t\t\treturn obj.offsetLeft + findRealLeft(obj.offsetParent);\n\t\t\t};\n\t\t});\n\t};\n})(_jquery2.default);\n\n/***/ }),\n/* 48 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _promise = __webpack_require__(23);\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _from = __webpack_require__(4);\n\nvar _from2 = _interopRequireDefault(_from);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar DomHelpers;\n(function (DomHelpers) {\n    DomHelpers.addClass = function (elem) {\n        for (var _len = arguments.length, classes = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n            classes[_key - 1] = arguments[_key];\n        }\n\n        classes.forEach(function (className) {\n            if (!(0, _from2.default)(elem.classList).includes(className)) {\n                elem.className = elem.className + \" \" + className;\n            }\n        });\n    };\n    DomHelpers.removeClass = function (elem) {\n        for (var _len2 = arguments.length, classes = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n            classes[_key2 - 1] = arguments[_key2];\n        }\n\n        classes.forEach(function (className) {\n            if ((0, _from2.default)(elem.classList).includes(className)) {\n                elem.className = (0, _from2.default)(elem.classList).filter(function (existingClass) {\n                    return existingClass !== className;\n                }).join(' ');\n            }\n        });\n    };\n    DomHelpers.hasClass = function (elem, className) {\n        return !!(elem.className.indexOf(className) + 1);\n    };\n    DomHelpers.toggleClass = function (elem, className) {\n        if (DomHelpers.hasClass(elem, className)) {\n            DomHelpers.removeClass(elem, className);\n            return false;\n        } else {\n            DomHelpers.addClass(elem, className);\n            return true;\n        }\n    };\n    DomHelpers.tempClass = function (elem, className) {\n        var timeout = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 500;\n\n        return new _promise2.default(function (resolve) {\n            DomHelpers.addClass(elem, className);\n            setTimeout(function () {\n                DomHelpers.removeClass(elem, className);\n                resolve(true);\n            }, timeout);\n        });\n    };\n})(DomHelpers = exports.DomHelpers || (exports.DomHelpers = {}));\n\n/***/ }),\n/* 49 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// tslint:disable-next-line:no-namespace\nvar PlatformHelper;\n(function (PlatformHelper) {\n    PlatformHelper.viewportSize = function () {\n        var win = window;\n        var prop = 'inner';\n        if (!('innerWidth' in window)) {\n            prop = 'client';\n            win = document.documentElement || document.body;\n        }\n        return { width: win[prop + 'Width'], height: win[prop + 'Height'] };\n    };\n    PlatformHelper.windowWidth = function () {\n        return PlatformHelper.viewportSize().width;\n    };\n    PlatformHelper.windowHeight = function () {\n        return PlatformHelper.viewportSize().height;\n    };\n    PlatformHelper.detectMobileDevice = function () {\n        return !!navigator.userAgent.match(/Mobi/);\n    };\n    PlatformHelper.detectIOS = function () {\n        return PlatformHelper.detectMobileDevice() && !!navigator.userAgent.match(/(iPod|iPhone|iPad)/);\n    };\n    PlatformHelper.doubleTap = function (elem) {\n        if (PlatformHelper.detectMobileDevice()) {\n            var touchCount = 0;\n            elem.addEventListener(\"click\", function (e) {\n                if (!touchCount) {\n                    touchCount++;\n                    e.preventDefault();\n                    return false;\n                }\n                touchCount = 0;\n                return true;\n            });\n            document.addEventListener(\"touchstart\", function (e) {\n                if (e.target !== elem && e.target.parentElement !== elem) {\n                    touchCount = 0;\n                }\n            });\n        }\n    };\n})(PlatformHelper = exports.PlatformHelper || (exports.PlatformHelper = {}));\n\n/***/ }),\n/* 50 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _classCallCheck2 = __webpack_require__(1);\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(2);\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar rAnimFrame = void 0;\n// tslint:disable:no-trailing-whitespace\n(function (w, callback, reqFunc) {\n    var window = w;\n    window.requestAnimFrame = rAnimFrame = function (callback) {\n        return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || function (callback) {\n            if (callback) {\n                window.setTimeout(callback, 1000 / 60);\n            }\n        };\n    }();\n})(window, null, rAnimFrame);\n// scroll it!\n//scrollToY(0, 1500, 'easeInOutQuint');\n\nvar ScrollTop = function () {\n    function ScrollTop() {\n        var addListener = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n        (0, _classCallCheck3.default)(this, ScrollTop);\n\n        if (!addListener) {\n            return;\n        }\n        ;\n        this._elem = document.querySelector(\"[data-mb=\\\"scrollup\\\"]\");\n        if (this._elem) {\n            this._init();\n        }\n    }\n\n    (0, _createClass3.default)(ScrollTop, [{\n        key: \"_init\",\n        value: function _init() {\n            var _this = this;\n\n            this._elem.addEventListener(\"click\", function () {\n                _this.scroll(0, 1500, \"easeInOutQuint\");\n            });\n        }\n    }, {\n        key: \"scroll\",\n        value: function scroll(scrollTargetY, speed, easing) {\n            try {\n                // scrollTargetY: the target scrollY property of the window\n                // speed: time in pixels per second\n                // easing: easing equation to use\n                var scrollY = window.scrollY,\n                    scrollTargetY = scrollTargetY || 0,\n                    speed = speed || 2000,\n                    easing = easing || 'easeInOutCubic',\n                    currentTime = 0;\n                // min time .1, max time .8 seconds\n                var time = Math.max(.01, Math.min(Math.abs(scrollY - scrollTargetY) / speed, 8));\n                // easing equations from https://github.com/danro/easing-js/blob/master/easing.js\n                var PI_D2 = Math.PI / 2,\n                    easingEquations = {\n                    easeOutSine: function easeOutSine(pos) {\n                        return Math.sin(pos * (Math.PI / 2));\n                    },\n                    easeInOutSine: function easeInOutSine(pos) {\n                        return -0.5 * (Math.cos(Math.PI * pos) - 1);\n                    },\n                    easeInOutQuint: function easeInOutQuint(pos) {\n                        if ((pos /= 0.5) < 1) {\n                            return 0.5 * Math.pow(pos, 5);\n                        }\n                        return 0.5 * (Math.pow(pos - 2, 5) + 2);\n                    },\n                    easeInOutCubic: function easeInOutCubic(t) {\n                        return t < .5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;\n                    }\n                };\n                // add animation loop\n                var tick = function tick() {\n                    currentTime += 1 / 60;\n                    var p = currentTime / time;\n                    var t = easingEquations[easing](p);\n                    if (p < 1) {\n                        rAnimFrame(tick);\n                        window.scrollTo(0, scrollY + (scrollTargetY - scrollY) * t);\n                    } else {\n                        window.scrollTo(0, scrollTargetY);\n                    }\n                };\n                // call it once to get started\n                tick();\n            } catch (err) {\n                console.warn('scrollToY', err);\n            }\n        }\n    }]);\n    return ScrollTop;\n}();\n\nexports.ScrollTop = ScrollTop;\n\n/***/ }),\n/* 51 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = { \"default\": __webpack_require__(128), __esModule: true };\n\n/***/ }),\n/* 52 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = { \"default\": __webpack_require__(129), __esModule: true };\n\n/***/ }),\n/* 53 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = { \"default\": __webpack_require__(131), __esModule: true };\n\n/***/ }),\n/* 54 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(170);\n\n\n/***/ }),\n/* 55 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar formatOptions = function formatOptions(o) {\n    var path = o.path,\n        domain = o.domain,\n        expires = o.expires,\n        secure = o.secure;\n\n    return [typeof path === 'undefined' || path === null ? '' : ';path=' + path, typeof domain === 'undefined' || domain === null ? '' : ';domain=' + domain, typeof expires === 'undefined' || expires === null ? '' : ';expires=' + expires.toUTCString(), typeof secure === 'undefined' || secure === null || secure === false ? '' : ';secure'].join('');\n};\nvar formatCookie = function formatCookie(k, d, o) {\n    return [encodeURIComponent(k), '=', encodeURIComponent(d), formatOptions(o)].join('');\n};\nexports.formatCookie = formatCookie;\n\n/***/ }),\n/* 56 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar parseCookies = function parseCookies(s) {\n    if (s.length === 0) return {};\n    var parsed = {};\n    var pattern = new RegExp('\\\\s*;\\\\s*');\n    s.split(pattern).forEach(function (i) {\n        var _i$split = i.split('='),\n            _i$split2 = _slicedToArray(_i$split, 2),\n            encodedKey = _i$split2[0],\n            encodedValue = _i$split2[1];\n\n        var key = decodeURIComponent(encodedKey);\n        var value = decodeURIComponent(encodedValue);\n        parsed[key] = value;\n    });\n    return parsed;\n};\nexports.parseCookies = parseCookies;\n\n/***/ }),\n/* 57 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = __webpack_require__(18);\nvar TAG = __webpack_require__(6)('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n  try {\n    return it[key];\n  } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n  var O, T, B;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n    // builtinTag case\n    : ARG ? cof(O)\n    // ES3 arguments fallback\n    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n\n\n/***/ }),\n/* 58 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar document = __webpack_require__(5).document;\nmodule.exports = document && document.documentElement;\n\n\n/***/ }),\n/* 59 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = !__webpack_require__(12) && !__webpack_require__(15)(function () {\n  return Object.defineProperty(__webpack_require__(34)('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n\n\n/***/ }),\n/* 60 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = __webpack_require__(18);\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n  return cof(it) == 'String' ? it.split('') : Object(it);\n};\n\n\n/***/ }),\n/* 61 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// check on default Array iterator\nvar Iterators = __webpack_require__(20);\nvar ITERATOR = __webpack_require__(6)('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n  return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n\n\n/***/ }),\n/* 62 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// call something on iterator step with safe closing on error\nvar anObject = __webpack_require__(10);\nmodule.exports = function (iterator, fn, value, entries) {\n  try {\n    return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n  // 7.4.6 IteratorClose(iterator, completion)\n  } catch (e) {\n    var ret = iterator['return'];\n    if (ret !== undefined) anObject(ret.call(iterator));\n    throw e;\n  }\n};\n\n\n/***/ }),\n/* 63 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar LIBRARY = __webpack_require__(25);\nvar $export = __webpack_require__(8);\nvar redefine = __webpack_require__(70);\nvar hide = __webpack_require__(14);\nvar has = __webpack_require__(13);\nvar Iterators = __webpack_require__(20);\nvar $iterCreate = __webpack_require__(143);\nvar setToStringTag = __webpack_require__(27);\nvar getPrototypeOf = __webpack_require__(151);\nvar ITERATOR = __webpack_require__(6)('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n  $iterCreate(Constructor, NAME, next);\n  var getMethod = function (kind) {\n    if (!BUGGY && kind in proto) return proto[kind];\n    switch (kind) {\n      case KEYS: return function keys() { return new Constructor(this, kind); };\n      case VALUES: return function values() { return new Constructor(this, kind); };\n    } return function entries() { return new Constructor(this, kind); };\n  };\n  var TAG = NAME + ' Iterator';\n  var DEF_VALUES = DEFAULT == VALUES;\n  var VALUES_BUG = false;\n  var proto = Base.prototype;\n  var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n  var $default = $native || getMethod(DEFAULT);\n  var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n  var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n  var methods, key, IteratorPrototype;\n  // Fix native\n  if ($anyNative) {\n    IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n    if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n      // Set @@toStringTag to native iterators\n      setToStringTag(IteratorPrototype, TAG, true);\n      // fix for some old engines\n      if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);\n    }\n  }\n  // fix Array#{values, @@iterator}.name in V8 / FF\n  if (DEF_VALUES && $native && $native.name !== VALUES) {\n    VALUES_BUG = true;\n    $default = function values() { return $native.call(this); };\n  }\n  // Define iterator\n  if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n    hide(proto, ITERATOR, $default);\n  }\n  // Plug for library\n  Iterators[NAME] = $default;\n  Iterators[TAG] = returnThis;\n  if (DEFAULT) {\n    methods = {\n      values: DEF_VALUES ? $default : getMethod(VALUES),\n      keys: IS_SET ? $default : getMethod(KEYS),\n      entries: $entries\n    };\n    if (FORCED) for (key in methods) {\n      if (!(key in proto)) redefine(proto, key, methods[key]);\n    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n  }\n  return methods;\n};\n\n\n/***/ }),\n/* 64 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar ITERATOR = __webpack_require__(6)('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n  var riter = [7][ITERATOR]();\n  riter['return'] = function () { SAFE_CLOSING = true; };\n  // eslint-disable-next-line no-throw-literal\n  Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n  if (!skipClosing && !SAFE_CLOSING) return false;\n  var safe = false;\n  try {\n    var arr = [7];\n    var iter = arr[ITERATOR]();\n    iter.next = function () { return { done: safe = true }; };\n    arr[ITERATOR] = function () { return iter; };\n    exec(arr);\n  } catch (e) { /* empty */ }\n  return safe;\n};\n\n\n/***/ }),\n/* 65 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = __webpack_require__(10);\nvar dPs = __webpack_require__(148);\nvar enumBugKeys = __webpack_require__(35);\nvar IE_PROTO = __webpack_require__(38)('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = __webpack_require__(34)('iframe');\n  var i = enumBugKeys.length;\n  var lt = '<';\n  var gt = '>';\n  var iframeDocument;\n  iframe.style.display = 'none';\n  __webpack_require__(58).appendChild(iframe);\n  iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n  // createDict = iframe.contentWindow.Object;\n  // html.removeChild(iframe);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n  iframeDocument.close();\n  createDict = iframeDocument.F;\n  while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n  return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n  var result;\n  if (O !== null) {\n    Empty[PROTOTYPE] = anObject(O);\n    result = new Empty();\n    Empty[PROTOTYPE] = null;\n    // add \"__proto__\" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = createDict();\n  return Properties === undefined ? result : dPs(result, Properties);\n};\n\n\n/***/ }),\n/* 66 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = __webpack_require__(67);\nvar hiddenKeys = __webpack_require__(35).concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n  return $keys(O, hiddenKeys);\n};\n\n\n/***/ }),\n/* 67 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar has = __webpack_require__(13);\nvar toIObject = __webpack_require__(17);\nvar arrayIndexOf = __webpack_require__(137)(false);\nvar IE_PROTO = __webpack_require__(38)('IE_PROTO');\n\nmodule.exports = function (object, names) {\n  var O = toIObject(object);\n  var i = 0;\n  var result = [];\n  var key;\n  for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (has(O, key = names[i++])) {\n    ~arrayIndexOf(result, key) || result.push(key);\n  }\n  return result;\n};\n\n\n/***/ }),\n/* 68 */\n/***/ (function(module, exports) {\n\nmodule.exports = function (exec) {\n  try {\n    return { e: false, v: exec() };\n  } catch (e) {\n    return { e: true, v: e };\n  }\n};\n\n\n/***/ }),\n/* 69 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar anObject = __webpack_require__(10);\nvar isObject = __webpack_require__(16);\nvar newPromiseCapability = __webpack_require__(36);\n\nmodule.exports = function (C, x) {\n  anObject(C);\n  if (isObject(x) && x.constructor === C) return x;\n  var promiseCapability = newPromiseCapability.f(C);\n  var resolve = promiseCapability.resolve;\n  resolve(x);\n  return promiseCapability.promise;\n};\n\n\n/***/ }),\n/* 70 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(14);\n\n\n/***/ }),\n/* 71 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = __webpack_require__(10);\nvar aFunction = __webpack_require__(24);\nvar SPECIES = __webpack_require__(6)('species');\nmodule.exports = function (O, D) {\n  var C = anObject(O).constructor;\n  var S;\n  return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n\n\n/***/ }),\n/* 72 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar ctx = __webpack_require__(19);\nvar invoke = __webpack_require__(141);\nvar html = __webpack_require__(58);\nvar cel = __webpack_require__(34);\nvar global = __webpack_require__(5);\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n  var id = +this;\n  // eslint-disable-next-line no-prototype-builtins\n  if (queue.hasOwnProperty(id)) {\n    var fn = queue[id];\n    delete queue[id];\n    fn();\n  }\n};\nvar listener = function (event) {\n  run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n  setTask = function setImmediate(fn) {\n    var args = [];\n    var i = 1;\n    while (arguments.length > i) args.push(arguments[i++]);\n    queue[++counter] = function () {\n      // eslint-disable-next-line no-new-func\n      invoke(typeof fn == 'function' ? fn : Function(fn), args);\n    };\n    defer(counter);\n    return counter;\n  };\n  clearTask = function clearImmediate(id) {\n    delete queue[id];\n  };\n  // Node.js 0.8-\n  if (__webpack_require__(18)(process) == 'process') {\n    defer = function (id) {\n      process.nextTick(ctx(run, id, 1));\n    };\n  // Sphere (JS game engine) Dispatch API\n  } else if (Dispatch && Dispatch.now) {\n    defer = function (id) {\n      Dispatch.now(ctx(run, id, 1));\n    };\n  // Browsers with MessageChannel, includes WebWorkers\n  } else if (MessageChannel) {\n    channel = new MessageChannel();\n    port = channel.port2;\n    channel.port1.onmessage = listener;\n    defer = ctx(port.postMessage, port, 1);\n  // Browsers with postMessage, skip WebWorkers\n  // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n  } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n    defer = function (id) {\n      global.postMessage(id + '', '*');\n    };\n    global.addEventListener('message', listener, false);\n  // IE8-\n  } else if (ONREADYSTATECHANGE in cel('script')) {\n    defer = function (id) {\n      html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n        html.removeChild(this);\n        run.call(id);\n      };\n    };\n  // Rest old browsers\n  } else {\n    defer = function (id) {\n      setTimeout(ctx(run, id, 1), 0);\n    };\n  }\n}\nmodule.exports = {\n  set: setTask,\n  clear: clearTask\n};\n\n\n/***/ }),\n/* 73 */\n/***/ (function(module, exports) {\n\n\n\n/***/ }),\n/* 74 */\n/***/ (function(module, exports) {\n\n/* WEBPACK VAR INJECTION */(function(__webpack_amd_options__) {/* globals __webpack_amd_options__ */\r\nmodule.exports = __webpack_amd_options__;\r\n\n/* WEBPACK VAR INJECTION */}.call(exports, {}))\n\n/***/ }),\n/* 75 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction __export(m) {\n    for (var p in m) {\n        if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n    }\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(__webpack_require__(101));\n__export(__webpack_require__(94));\n__export(__webpack_require__(103));\n__export(__webpack_require__(92));\n__export(__webpack_require__(111));\n__export(__webpack_require__(96));\n__export(__webpack_require__(97));\n__export(__webpack_require__(90));\n__export(__webpack_require__(93));\n__export(__webpack_require__(50));\n__export(__webpack_require__(110));\n__export(__webpack_require__(32));\n__export(__webpack_require__(95));\n__export(__webpack_require__(91));\n__export(__webpack_require__(109));\n__export(__webpack_require__(102));\n__export(__webpack_require__(112));\n__export(__webpack_require__(98));\n__export(__webpack_require__(31));\n__export(__webpack_require__(100));\n__export(__webpack_require__(9));\n\n/***/ }),\n/* 76 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _jquery = __webpack_require__(0);\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar $ = _jquery2.default;\n(function ($, undefined) {\n\n\t$.easing['jswing'] = $.easing['swing'];\n\n\t$.extend($.easing, {\n\t\tdef: 'easeOutQuad',\n\t\tswing: function swing(x, t, b, c, d) {\n\t\t\t//alert($.easing.default);\n\t\t\treturn $.easing[$.easing.def](x, t, b, c, d);\n\t\t},\n\t\teaseInQuad: function easeInQuad(x, t, b, c, d) {\n\t\t\treturn c * (t /= d) * t + b;\n\t\t},\n\t\teaseOutQuad: function easeOutQuad(x, t, b, c, d) {\n\t\t\treturn -c * (t /= d) * (t - 2) + b;\n\t\t},\n\t\teaseInOutQuad: function easeInOutQuad(x, t, b, c, d) {\n\t\t\tif ((t /= d / 2) < 1) return c / 2 * t * t + b;\n\t\t\treturn -c / 2 * (--t * (t - 2) - 1) + b;\n\t\t},\n\t\teaseInCubic: function easeInCubic(x, t, b, c, d) {\n\t\t\treturn c * (t /= d) * t * t + b;\n\t\t},\n\t\teaseOutCubic: function easeOutCubic(x, t, b, c, d) {\n\t\t\treturn c * ((t = t / d - 1) * t * t + 1) + b;\n\t\t},\n\t\teaseInOutCubic: function easeInOutCubic(x, t, b, c, d) {\n\t\t\tif ((t /= d / 2) < 1) return c / 2 * t * t * t + b;\n\t\t\treturn c / 2 * ((t -= 2) * t * t + 2) + b;\n\t\t},\n\t\teaseInQuart: function easeInQuart(x, t, b, c, d) {\n\t\t\treturn c * (t /= d) * t * t * t + b;\n\t\t},\n\t\teaseOutQuart: function easeOutQuart(x, t, b, c, d) {\n\t\t\treturn -c * ((t = t / d - 1) * t * t * t - 1) + b;\n\t\t},\n\t\teaseInOutQuart: function easeInOutQuart(x, t, b, c, d) {\n\t\t\tif ((t /= d / 2) < 1) return c / 2 * t * t * t * t + b;\n\t\t\treturn -c / 2 * ((t -= 2) * t * t * t - 2) + b;\n\t\t},\n\t\teaseInQuint: function easeInQuint(x, t, b, c, d) {\n\t\t\treturn c * (t /= d) * t * t * t * t + b;\n\t\t},\n\t\teaseOutQuint: function easeOutQuint(x, t, b, c, d) {\n\t\t\treturn c * ((t = t / d - 1) * t * t * t * t + 1) + b;\n\t\t},\n\t\teaseInOutQuint: function easeInOutQuint(x, t, b, c, d) {\n\t\t\tif ((t /= d / 2) < 1) return c / 2 * t * t * t * t * t + b;\n\t\t\treturn c / 2 * ((t -= 2) * t * t * t * t + 2) + b;\n\t\t},\n\t\teaseInSine: function easeInSine(x, t, b, c, d) {\n\t\t\treturn -c * Math.cos(t / d * (Math.PI / 2)) + c + b;\n\t\t},\n\t\teaseOutSine: function easeOutSine(x, t, b, c, d) {\n\t\t\treturn c * Math.sin(t / d * (Math.PI / 2)) + b;\n\t\t},\n\t\teaseInOutSine: function easeInOutSine(x, t, b, c, d) {\n\t\t\treturn -c / 2 * (Math.cos(Math.PI * t / d) - 1) + b;\n\t\t},\n\t\teaseInExpo: function easeInExpo(x, t, b, c, d) {\n\t\t\treturn t == 0 ? b : c * Math.pow(2, 10 * (t / d - 1)) + b;\n\t\t},\n\t\teaseOutExpo: function easeOutExpo(x, t, b, c, d) {\n\t\t\treturn t == d ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b;\n\t\t},\n\t\teaseInOutExpo: function easeInOutExpo(x, t, b, c, d) {\n\t\t\tif (t == 0) return b;\n\t\t\tif (t == d) return b + c;\n\t\t\tif ((t /= d / 2) < 1) return c / 2 * Math.pow(2, 10 * (t - 1)) + b;\n\t\t\treturn c / 2 * (-Math.pow(2, -10 * --t) + 2) + b;\n\t\t},\n\t\teaseInCirc: function easeInCirc(x, t, b, c, d) {\n\t\t\treturn -c * (Math.sqrt(1 - (t /= d) * t) - 1) + b;\n\t\t},\n\t\teaseOutCirc: function easeOutCirc(x, t, b, c, d) {\n\t\t\treturn c * Math.sqrt(1 - (t = t / d - 1) * t) + b;\n\t\t},\n\t\teaseInOutCirc: function easeInOutCirc(x, t, b, c, d) {\n\t\t\tif ((t /= d / 2) < 1) return -c / 2 * (Math.sqrt(1 - t * t) - 1) + b;\n\t\t\treturn c / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1) + b;\n\t\t},\n\t\teaseInElastic: function easeInElastic(x, t, b, c, d) {\n\t\t\tvar s = 1.70158;var p = 0;var a = c;\n\t\t\tif (t == 0) return b;if ((t /= d) == 1) return b + c;if (!p) p = d * .3;\n\t\t\tif (a < Math.abs(c)) {\n\t\t\t\ta = c;var s = p / 4;\n\t\t\t} else var s = p / (2 * Math.PI) * Math.asin(c / a);\n\t\t\treturn -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b;\n\t\t},\n\t\teaseOutElastic: function easeOutElastic(x, t, b, c, d) {\n\t\t\tvar s = 1.70158;var p = 0;var a = c;\n\t\t\tif (t == 0) return b;if ((t /= d) == 1) return b + c;if (!p) p = d * .3;\n\t\t\tif (a < Math.abs(c)) {\n\t\t\t\ta = c;var s = p / 4;\n\t\t\t} else var s = p / (2 * Math.PI) * Math.asin(c / a);\n\t\t\treturn a * Math.pow(2, -10 * t) * Math.sin((t * d - s) * (2 * Math.PI) / p) + c + b;\n\t\t},\n\t\teaseInOutElastic: function easeInOutElastic(x, t, b, c, d) {\n\t\t\tvar s = 1.70158;var p = 0;var a = c;\n\t\t\tif (t == 0) return b;if ((t /= d / 2) == 2) return b + c;if (!p) p = d * (.3 * 1.5);\n\t\t\tif (a < Math.abs(c)) {\n\t\t\t\ta = c;var s = p / 4;\n\t\t\t} else var s = p / (2 * Math.PI) * Math.asin(c / a);\n\t\t\tif (t < 1) return -.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b;\n\t\t\treturn a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p) * .5 + c + b;\n\t\t},\n\t\teaseInBack: function easeInBack(x, t, b, c, d, s) {\n\t\t\tif (s == undefined) s = 1.70158;\n\t\t\treturn c * (t /= d) * t * ((s + 1) * t - s) + b;\n\t\t},\n\t\teaseOutBack: function easeOutBack(x, t, b, c, d, s) {\n\t\t\tif (s == undefined) s = 1.70158;\n\t\t\treturn c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;\n\t\t},\n\t\teaseInOutBack: function easeInOutBack(x, t, b, c, d, s) {\n\t\t\tif (s == undefined) s = 1.70158;\n\t\t\tif ((t /= d / 2) < 1) return c / 2 * (t * t * (((s *= 1.525) + 1) * t - s)) + b;\n\t\t\treturn c / 2 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2) + b;\n\t\t},\n\t\teaseInBounce: function easeInBounce(x, t, b, c, d) {\n\t\t\treturn c - $.easing.easeOutBounce(x, d - t, 0, c, d) + b;\n\t\t},\n\t\teaseOutBounce: function easeOutBounce(x, t, b, c, d) {\n\t\t\tif ((t /= d) < 1 / 2.75) {\n\t\t\t\treturn c * (7.5625 * t * t) + b;\n\t\t\t} else if (t < 2 / 2.75) {\n\t\t\t\treturn c * (7.5625 * (t -= 1.5 / 2.75) * t + .75) + b;\n\t\t\t} else if (t < 2.5 / 2.75) {\n\t\t\t\treturn c * (7.5625 * (t -= 2.25 / 2.75) * t + .9375) + b;\n\t\t\t} else {\n\t\t\t\treturn c * (7.5625 * (t -= 2.625 / 2.75) * t + .984375) + b;\n\t\t\t}\n\t\t},\n\t\teaseInOutBounce: function easeInOutBounce(x, t, b, c, d) {\n\t\t\tif (t < d / 2) return $.easing.easeInBounce(x, t * 2, 0, c, d) * .5 + b;\n\t\t\treturn $.easing.easeOutBounce(x, t * 2 - d, 0, c, d) * .5 + c * .5 + b;\n\t\t}\n\t});\n})(_jquery2.default);\n/*\r\n *\r\n * TERMS OF USE - EASING EQUATIONS\r\n * \r\n * Open source under the BSD License. \r\n * \r\n * Copyright Š 2001 Robert Penner\r\n * All rights reserved.\r\n * \r\n * Redistribution and use in source and binary forms, with or without modification, \r\n * are permitted provided that the following conditions are met:\r\n * \r\n * Redistributions of source code must retain the above copyright notice, this list of \r\n * conditions and the following disclaimer.\r\n * Redistributions in binary form must reproduce the above copyright notice, this list \r\n * of conditions and the following disclaimer in the documentation and/or other materials \r\n * provided with the distribution.\r\n * \r\n * Neither the name of the author nor the names of contributors may be used to endorse \r\n * or promote products derived from this software without specific prior written permission.\r\n * \r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY \r\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r\n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\r\n *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\r\n *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\r\n *  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED \r\n * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r\n *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED \r\n * OF THE POSSIBILITY OF SUCH DAMAGE. \r\n *\r\n */\n\n/***/ }),\n/* 77 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;\n\nvar _jquery = __webpack_require__(0);\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar $ = _jquery2.default;\n(function (factory) {\n\tif (true) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\t!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(0)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory(_jquery2.default);\n\t}\n})(function ($) {\n\t/*!\r\n  * jQuery UI Core 1.11.4\r\n  * http://jqueryui.com\r\n  *\r\n  * Copyright jQuery Foundation and other contributors\r\n  * Released under the MIT license.\r\n  * http://jquery.org/license\r\n  *\r\n  * http://api.jqueryui.com/category/ui-core/\r\n  */\n\n\t// $.ui might exist from components with no dependencies, e.g., $.ui.position\n\t$.ui = $.ui || {};\n\n\t$.extend($.ui, {\n\t\tversion: \"1.11.4\",\n\n\t\tkeyCode: {\n\t\t\tBACKSPACE: 8,\n\t\t\tCOMMA: 188,\n\t\t\tDELETE: 46,\n\t\t\tDOWN: 40,\n\t\t\tEND: 35,\n\t\t\tENTER: 13,\n\t\t\tESCAPE: 27,\n\t\t\tHOME: 36,\n\t\t\tLEFT: 37,\n\t\t\tPAGE_DOWN: 34,\n\t\t\tPAGE_UP: 33,\n\t\t\tPERIOD: 190,\n\t\t\tRIGHT: 39,\n\t\t\tSPACE: 32,\n\t\t\tTAB: 9,\n\t\t\tUP: 38\n\t\t}\n\t});\n\n\t// plugins\n\t$.fn.extend({\n\t\tscrollParent: function scrollParent(includeHidden) {\n\t\t\tvar position = this.css(\"position\"),\n\t\t\t    excludeStaticParent = position === \"absolute\",\n\t\t\t    overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/,\n\t\t\t    scrollParent = this.parents().filter(function () {\n\t\t\t\tvar parent = $(this);\n\t\t\t\tif (excludeStaticParent && parent.css(\"position\") === \"static\") {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn overflowRegex.test(parent.css(\"overflow\") + parent.css(\"overflow-y\") + parent.css(\"overflow-x\"));\n\t\t\t}).eq(0);\n\n\t\t\treturn position === \"fixed\" || !scrollParent.length ? $(this[0].ownerDocument || document) : scrollParent;\n\t\t},\n\n\t\tuniqueId: function () {\n\t\t\tvar uuid = 0;\n\n\t\t\treturn function () {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tif (!this.id) {\n\t\t\t\t\t\tthis.id = \"ui-id-\" + ++uuid;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t};\n\t\t}(),\n\n\t\tremoveUniqueId: function removeUniqueId() {\n\t\t\treturn this.each(function () {\n\t\t\t\tif (/^ui-id-\\d+$/.test(this.id)) {\n\t\t\t\t\t$(this).removeAttr(\"id\");\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\n\t// selectors\n\tfunction _focusable(element, isTabIndexNotNaN) {\n\t\tvar map,\n\t\t    mapName,\n\t\t    img,\n\t\t    nodeName = element.nodeName.toLowerCase();\n\t\tif (\"area\" === nodeName) {\n\t\t\tmap = element.parentNode;\n\t\t\tmapName = map.name;\n\t\t\tif (!element.href || !mapName || map.nodeName.toLowerCase() !== \"map\") {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\timg = $(\"img[usemap='#\" + mapName + \"']\")[0];\n\t\t\treturn !!img && visible(img);\n\t\t}\n\t\treturn (/^(input|select|textarea|button|object)$/.test(nodeName) ? !element.disabled : \"a\" === nodeName ? element.href || isTabIndexNotNaN : isTabIndexNotNaN) &&\n\t\t// the element and all of its ancestors must be visible\n\t\tvisible(element);\n\t}\n\n\tfunction visible(element) {\n\t\treturn $.expr.filters.visible(element) && !$(element).parents().addBack().filter(function () {\n\t\t\treturn $.css(this, \"visibility\") === \"hidden\";\n\t\t}).length;\n\t}\n\n\t$.extend($.expr[\":\"], {\n\t\tdata: $.expr.createPseudo ? $.expr.createPseudo(function (dataName) {\n\t\t\treturn function (elem) {\n\t\t\t\treturn !!$.data(elem, dataName);\n\t\t\t};\n\t\t}) :\n\t\t// support: jQuery <1.8\n\t\tfunction (elem, i, match) {\n\t\t\treturn !!$.data(elem, match[3]);\n\t\t},\n\n\t\tfocusable: function focusable(element) {\n\t\t\treturn _focusable(element, !isNaN($.attr(element, \"tabindex\")));\n\t\t},\n\n\t\ttabbable: function tabbable(element) {\n\t\t\tvar tabIndex = $.attr(element, \"tabindex\"),\n\t\t\t    isTabIndexNaN = isNaN(tabIndex);\n\t\t\treturn (isTabIndexNaN || tabIndex >= 0) && _focusable(element, !isTabIndexNaN);\n\t\t}\n\t});\n\n\t// support: jQuery <1.8\n\tif (!$(\"<a>\").outerWidth(1).jquery) {\n\t\t$.each([\"Width\", \"Height\"], function (i, name) {\n\t\t\tvar side = name === \"Width\" ? [\"Left\", \"Right\"] : [\"Top\", \"Bottom\"],\n\t\t\t    type = name.toLowerCase(),\n\t\t\t    orig = {\n\t\t\t\tinnerWidth: $.fn.innerWidth,\n\t\t\t\tinnerHeight: $.fn.innerHeight,\n\t\t\t\touterWidth: $.fn.outerWidth,\n\t\t\t\touterHeight: $.fn.outerHeight\n\t\t\t};\n\n\t\t\tfunction reduce(elem, size, border, margin) {\n\t\t\t\t$.each(side, function () {\n\t\t\t\t\tsize -= parseFloat($.css(elem, \"padding\" + this)) || 0;\n\t\t\t\t\tif (border) {\n\t\t\t\t\t\tsize -= parseFloat($.css(elem, \"border\" + this + \"Width\")) || 0;\n\t\t\t\t\t}\n\t\t\t\t\tif (margin) {\n\t\t\t\t\t\tsize -= parseFloat($.css(elem, \"margin\" + this)) || 0;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn size;\n\t\t\t}\n\n\t\t\t$.fn[\"inner\" + name] = function (size) {\n\t\t\t\tif (size === undefined) {\n\t\t\t\t\treturn orig[\"inner\" + name].call(this);\n\t\t\t\t}\n\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\t$(this).css(type, reduce(this, size) + \"px\");\n\t\t\t\t});\n\t\t\t};\n\n\t\t\t$.fn[\"outer\" + name] = function (size, margin) {\n\t\t\t\tif (typeof size !== \"number\") {\n\t\t\t\t\treturn orig[\"outer\" + name].call(this, size);\n\t\t\t\t}\n\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\t$(this).css(type, reduce(this, size, true, margin) + \"px\");\n\t\t\t\t});\n\t\t\t};\n\t\t});\n\t}\n\n\t// support: jQuery <1.8\n\tif (!$.fn.addBack) {\n\t\t$.fn.addBack = function (selector) {\n\t\t\treturn this.add(selector == null ? this.prevObject : this.prevObject.filter(selector));\n\t\t};\n\t}\n\n\t// support: jQuery 1.6.1, 1.6.2 (http://bugs.jquery.com/ticket/9413)\n\tif ($(\"<a>\").data(\"a-b\", \"a\").removeData(\"a-b\").data(\"a-b\")) {\n\t\t$.fn.removeData = function (removeData) {\n\t\t\treturn function (key) {\n\t\t\t\tif (arguments.length) {\n\t\t\t\t\treturn removeData.call(this, $.camelCase(key));\n\t\t\t\t} else {\n\t\t\t\t\treturn removeData.call(this);\n\t\t\t\t}\n\t\t\t};\n\t\t}($.fn.removeData);\n\t}\n\n\t// deprecated\n\t$.ui.ie = !!/msie [\\w.]+/.exec(navigator.userAgent.toLowerCase());\n\n\t$.fn.extend({\n\t\tfocus: function (orig) {\n\t\t\treturn function (delay, fn) {\n\t\t\t\treturn typeof delay === \"number\" ? this.each(function () {\n\t\t\t\t\tvar elem = this;\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t$(elem).focus();\n\t\t\t\t\t\tif (fn) {\n\t\t\t\t\t\t\tfn.call(elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, delay);\n\t\t\t\t}) : orig.apply(this, arguments);\n\t\t\t};\n\t\t}($.fn.focus),\n\n\t\tdisableSelection: function () {\n\t\t\tvar eventType = \"onselectstart\" in document.createElement(\"div\") ? \"selectstart\" : \"mousedown\";\n\n\t\t\treturn function () {\n\t\t\t\treturn this.bind(eventType + \".ui-disableSelection\", function (event) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t});\n\t\t\t};\n\t\t}(),\n\n\t\tenableSelection: function enableSelection() {\n\t\t\treturn this.unbind(\".ui-disableSelection\");\n\t\t},\n\n\t\tzIndex: function zIndex(_zIndex) {\n\t\t\tif (_zIndex !== undefined) {\n\t\t\t\treturn this.css(\"zIndex\", _zIndex);\n\t\t\t}\n\n\t\t\tif (this.length) {\n\t\t\t\tvar elem = $(this[0]),\n\t\t\t\t    position,\n\t\t\t\t    value;\n\t\t\t\twhile (elem.length && elem[0] !== document) {\n\t\t\t\t\t// Ignore z-index if position is set to a value where z-index is ignored by the browser\n\t\t\t\t\t// This makes behavior of this function consistent across browsers\n\t\t\t\t\t// WebKit always returns auto if the element is positioned\n\t\t\t\t\tposition = elem.css(\"position\");\n\t\t\t\t\tif (position === \"absolute\" || position === \"relative\" || position === \"fixed\") {\n\t\t\t\t\t\t// IE returns 0 when zIndex is not specified\n\t\t\t\t\t\t// other browsers return a string\n\t\t\t\t\t\t// we ignore the case of nested elements with an explicit value of 0\n\t\t\t\t\t\t// <div style=\"z-index: -10;\"><div style=\"z-index: 0;\"></div></div>\n\t\t\t\t\t\tvalue = parseInt(elem.css(\"zIndex\"), 10);\n\t\t\t\t\t\tif (!isNaN(value) && value !== 0) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telem = elem.parent();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t}\n\t});\n\n\t// $.ui.plugin is deprecated. Use $.widget() extensions instead.\n\t$.ui.plugin = {\n\t\tadd: function add(module, option, set) {\n\t\t\tvar i,\n\t\t\t    proto = $.ui[module].prototype;\n\t\t\tfor (i in set) {\n\t\t\t\tproto.plugins[i] = proto.plugins[i] || [];\n\t\t\t\tproto.plugins[i].push([option, set[i]]);\n\t\t\t}\n\t\t},\n\t\tcall: function call(instance, name, args, allowDisconnected) {\n\t\t\tvar i,\n\t\t\t    set = instance.plugins[name];\n\n\t\t\tif (!set) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!allowDisconnected && (!instance.element[0].parentNode || instance.element[0].parentNode.nodeType === 11)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (i = 0; i < set.length; i++) {\n\t\t\t\tif (instance.options[set[i][0]]) {\n\t\t\t\t\tset[i][1].apply(instance.element, args);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t/*!\r\n  * jQuery UI Widget 1.11.4\r\n  * http://jqueryui.com\r\n  *\r\n  * Copyright jQuery Foundation and other contributors\r\n  * Released under the MIT license.\r\n  * http://jquery.org/license\r\n  *\r\n  * http://api.jqueryui.com/jQuery.widget/\r\n  */\n\n\tvar widget_uuid = 0,\n\t    widget_slice = Array.prototype.slice;\n\n\t$.cleanData = function (orig) {\n\t\treturn function (elems) {\n\t\t\tvar events, elem, i;\n\t\t\tfor (i = 0; (elem = elems[i]) != null; i++) {\n\t\t\t\ttry {\n\n\t\t\t\t\t// Only trigger remove when necessary to save time\n\t\t\t\t\tevents = $._data(elem, \"events\");\n\t\t\t\t\tif (events && events.remove) {\n\t\t\t\t\t\t$(elem).triggerHandler(\"remove\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// http://bugs.jquery.com/ticket/8235\n\t\t\t\t} catch (e) {}\n\t\t\t}\n\t\t\torig(elems);\n\t\t};\n\t}($.cleanData);\n\n\t$.widget = function (name, base, prototype) {\n\t\tvar fullName,\n\t\t    existingConstructor,\n\t\t    constructor,\n\t\t    basePrototype,\n\n\t\t// proxiedPrototype allows the provided prototype to remain unmodified\n\t\t// so that it can be used as a mixin for multiple widgets (#8876)\n\t\tproxiedPrototype = {},\n\t\t    namespace = name.split(\".\")[0];\n\n\t\tname = name.split(\".\")[1];\n\t\tfullName = namespace + \"-\" + name;\n\n\t\tif (!prototype) {\n\t\t\tprototype = base;\n\t\t\tbase = $.Widget;\n\t\t}\n\n\t\t// create selector for plugin\n\t\t$.expr[\":\"][fullName.toLowerCase()] = function (elem) {\n\t\t\treturn !!$.data(elem, fullName);\n\t\t};\n\n\t\t$[namespace] = $[namespace] || {};\n\t\texistingConstructor = $[namespace][name];\n\t\tconstructor = $[namespace][name] = function (options, element) {\n\t\t\t// allow instantiation without \"new\" keyword\n\t\t\tif (!this._createWidget) {\n\t\t\t\treturn new constructor(options, element);\n\t\t\t}\n\n\t\t\t// allow instantiation without initializing for simple inheritance\n\t\t\t// must use \"new\" keyword (the code above always passes args)\n\t\t\tif (arguments.length) {\n\t\t\t\tthis._createWidget(options, element);\n\t\t\t}\n\t\t};\n\t\t// extend with the existing constructor to carry over any static properties\n\t\t$.extend(constructor, existingConstructor, {\n\t\t\tversion: prototype.version,\n\t\t\t// copy the object used to create the prototype in case we need to\n\t\t\t// redefine the widget later\n\t\t\t_proto: $.extend({}, prototype),\n\t\t\t// track widgets that inherit from this widget in case this widget is\n\t\t\t// redefined after a widget inherits from it\n\t\t\t_childConstructors: []\n\t\t});\n\n\t\tbasePrototype = new base();\n\t\t// we need to make the options hash a property directly on the new instance\n\t\t// otherwise we'll modify the options hash on the prototype that we're\n\t\t// inheriting from\n\t\tbasePrototype.options = $.widget.extend({}, basePrototype.options);\n\t\t$.each(prototype, function (prop, value) {\n\t\t\tif (!$.isFunction(value)) {\n\t\t\t\tproxiedPrototype[prop] = value;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tproxiedPrototype[prop] = function () {\n\t\t\t\tvar _super = function _super() {\n\t\t\t\t\treturn base.prototype[prop].apply(this, arguments);\n\t\t\t\t},\n\t\t\t\t    _superApply = function _superApply(args) {\n\t\t\t\t\treturn base.prototype[prop].apply(this, args);\n\t\t\t\t};\n\t\t\t\treturn function () {\n\t\t\t\t\tvar __super = this._super,\n\t\t\t\t\t    __superApply = this._superApply,\n\t\t\t\t\t    returnValue;\n\n\t\t\t\t\tthis._super = _super;\n\t\t\t\t\tthis._superApply = _superApply;\n\n\t\t\t\t\treturnValue = value.apply(this, arguments);\n\n\t\t\t\t\tthis._super = __super;\n\t\t\t\t\tthis._superApply = __superApply;\n\n\t\t\t\t\treturn returnValue;\n\t\t\t\t};\n\t\t\t}();\n\t\t});\n\t\tconstructor.prototype = $.widget.extend(basePrototype, {\n\t\t\t// TODO: remove support for widgetEventPrefix\n\t\t\t// always use the name + a colon as the prefix, e.g., draggable:start\n\t\t\t// don't prefix for widgets that aren't DOM-based\n\t\t\twidgetEventPrefix: existingConstructor ? basePrototype.widgetEventPrefix || name : name\n\t\t}, proxiedPrototype, {\n\t\t\tconstructor: constructor,\n\t\t\tnamespace: namespace,\n\t\t\twidgetName: name,\n\t\t\twidgetFullName: fullName\n\t\t});\n\n\t\t// If this widget is being redefined then we need to find all widgets that\n\t\t// are inheriting from it and redefine all of them so that they inherit from\n\t\t// the new version of this widget. We're essentially trying to replace one\n\t\t// level in the prototype chain.\n\t\tif (existingConstructor) {\n\t\t\t$.each(existingConstructor._childConstructors, function (i, child) {\n\t\t\t\tvar childPrototype = child.prototype;\n\n\t\t\t\t// redefine the child widget using the same prototype that was\n\t\t\t\t// originally used, but inherit from the new version of the base\n\t\t\t\t$.widget(childPrototype.namespace + \".\" + childPrototype.widgetName, constructor, child._proto);\n\t\t\t});\n\t\t\t// remove the list of existing child constructors from the old constructor\n\t\t\t// so the old child constructors can be garbage collected\n\t\t\tdelete existingConstructor._childConstructors;\n\t\t} else {\n\t\t\tbase._childConstructors.push(constructor);\n\t\t}\n\n\t\t$.widget.bridge(name, constructor);\n\n\t\treturn constructor;\n\t};\n\n\t$.widget.extend = function (target) {\n\t\tvar input = widget_slice.call(arguments, 1),\n\t\t    inputIndex = 0,\n\t\t    inputLength = input.length,\n\t\t    key,\n\t\t    value;\n\t\tfor (; inputIndex < inputLength; inputIndex++) {\n\t\t\tfor (key in input[inputIndex]) {\n\t\t\t\tvalue = input[inputIndex][key];\n\t\t\t\tif (input[inputIndex].hasOwnProperty(key) && value !== undefined) {\n\t\t\t\t\t// Clone objects\n\t\t\t\t\tif ($.isPlainObject(value)) {\n\t\t\t\t\t\ttarget[key] = $.isPlainObject(target[key]) ? $.widget.extend({}, target[key], value) :\n\t\t\t\t\t\t// Don't extend strings, arrays, etc. with objects\n\t\t\t\t\t\t$.widget.extend({}, value);\n\t\t\t\t\t\t// Copy everything else by reference\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttarget[key] = value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn target;\n\t};\n\n\t$.widget.bridge = function (name, object) {\n\t\tvar fullName = object.prototype.widgetFullName || name;\n\t\t$.fn[name] = function (options) {\n\t\t\tvar isMethodCall = typeof options === \"string\",\n\t\t\t    args = widget_slice.call(arguments, 1),\n\t\t\t    returnValue = this;\n\n\t\t\tif (isMethodCall) {\n\t\t\t\tthis.each(function () {\n\t\t\t\t\tvar methodValue,\n\t\t\t\t\t    instance = $.data(this, fullName);\n\t\t\t\t\tif (options === \"instance\") {\n\t\t\t\t\t\treturnValue = instance;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif (!instance) {\n\t\t\t\t\t\treturn $.error(\"cannot call methods on \" + name + \" prior to initialization; \" + \"attempted to call method '\" + options + \"'\");\n\t\t\t\t\t}\n\t\t\t\t\tif (!$.isFunction(instance[options]) || options.charAt(0) === \"_\") {\n\t\t\t\t\t\treturn $.error(\"no such method '\" + options + \"' for \" + name + \" widget instance\");\n\t\t\t\t\t}\n\t\t\t\t\tmethodValue = instance[options].apply(instance, args);\n\t\t\t\t\tif (methodValue !== instance && methodValue !== undefined) {\n\t\t\t\t\t\treturnValue = methodValue && methodValue.jquery ? returnValue.pushStack(methodValue.get()) : methodValue;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\n\t\t\t\t// Allow multiple hashes to be passed on init\n\t\t\t\tif (args.length) {\n\t\t\t\t\toptions = $.widget.extend.apply(null, [options].concat(args));\n\t\t\t\t}\n\n\t\t\t\tthis.each(function () {\n\t\t\t\t\tvar instance = $.data(this, fullName);\n\t\t\t\t\tif (instance) {\n\t\t\t\t\t\tinstance.option(options || {});\n\t\t\t\t\t\tif (instance._init) {\n\t\t\t\t\t\t\tinstance._init();\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$.data(this, fullName, new object(options, this));\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn returnValue;\n\t\t};\n\t};\n\n\t$.Widget = function () /* options, element */{};\n\t$.Widget._childConstructors = [];\n\n\t$.Widget.prototype = {\n\t\twidgetName: \"widget\",\n\t\twidgetEventPrefix: \"\",\n\t\tdefaultElement: \"<div>\",\n\t\toptions: {\n\t\t\tdisabled: false,\n\n\t\t\t// callbacks\n\t\t\tcreate: null\n\t\t},\n\t\t_createWidget: function _createWidget(options, element) {\n\t\t\telement = $(element || this.defaultElement || this)[0];\n\t\t\tthis.element = $(element);\n\t\t\tthis.uuid = widget_uuid++;\n\t\t\tthis.eventNamespace = \".\" + this.widgetName + this.uuid;\n\n\t\t\tthis.bindings = $();\n\t\t\tthis.hoverable = $();\n\t\t\tthis.focusable = $();\n\n\t\t\tif (element !== this) {\n\t\t\t\t$.data(element, this.widgetFullName, this);\n\t\t\t\tthis._on(true, this.element, {\n\t\t\t\t\tremove: function remove(event) {\n\t\t\t\t\t\tif (event.target === element) {\n\t\t\t\t\t\t\tthis.destroy();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tthis.document = $(element.style ?\n\t\t\t\t// element within the document\n\t\t\t\telement.ownerDocument :\n\t\t\t\t// element is window or document\n\t\t\t\telement.document || element);\n\t\t\t\tthis.window = $(this.document[0].defaultView || this.document[0].parentWindow);\n\t\t\t}\n\n\t\t\tthis.options = $.widget.extend({}, this.options, this._getCreateOptions(), options);\n\n\t\t\tthis._create();\n\t\t\tthis._trigger(\"create\", null, this._getCreateEventData());\n\t\t\tthis._init();\n\t\t},\n\t\t_getCreateOptions: $.noop,\n\t\t_getCreateEventData: $.noop,\n\t\t_create: $.noop,\n\t\t_init: $.noop,\n\n\t\tdestroy: function destroy() {\n\t\t\tthis._destroy();\n\t\t\t// we can probably remove the unbind calls in 2.0\n\t\t\t// all event bindings should go through this._on()\n\t\t\tthis.element.unbind(this.eventNamespace).removeData(this.widgetFullName)\n\t\t\t// support: jquery <1.6.3\n\t\t\t// http://bugs.jquery.com/ticket/9413\n\t\t\t.removeData($.camelCase(this.widgetFullName));\n\t\t\tthis.widget().unbind(this.eventNamespace).removeAttr(\"aria-disabled\").removeClass(this.widgetFullName + \"-disabled \" + \"ui-state-disabled\");\n\n\t\t\t// clean up events and states\n\t\t\tthis.bindings.unbind(this.eventNamespace);\n\t\t\tthis.hoverable.removeClass(\"ui-state-hover\");\n\t\t\tthis.focusable.removeClass(\"ui-state-focus\");\n\t\t},\n\t\t_destroy: $.noop,\n\n\t\twidget: function widget() {\n\t\t\treturn this.element;\n\t\t},\n\n\t\toption: function option(key, value) {\n\t\t\tvar options = key,\n\t\t\t    parts,\n\t\t\t    curOption,\n\t\t\t    i;\n\n\t\t\tif (arguments.length === 0) {\n\t\t\t\t// don't return a reference to the internal hash\n\t\t\t\treturn $.widget.extend({}, this.options);\n\t\t\t}\n\n\t\t\tif (typeof key === \"string\") {\n\t\t\t\t// handle nested keys, e.g., \"foo.bar\" => { foo: { bar: ___ } }\n\t\t\t\toptions = {};\n\t\t\t\tparts = key.split(\".\");\n\t\t\t\tkey = parts.shift();\n\t\t\t\tif (parts.length) {\n\t\t\t\t\tcurOption = options[key] = $.widget.extend({}, this.options[key]);\n\t\t\t\t\tfor (i = 0; i < parts.length - 1; i++) {\n\t\t\t\t\t\tcurOption[parts[i]] = curOption[parts[i]] || {};\n\t\t\t\t\t\tcurOption = curOption[parts[i]];\n\t\t\t\t\t}\n\t\t\t\t\tkey = parts.pop();\n\t\t\t\t\tif (arguments.length === 1) {\n\t\t\t\t\t\treturn curOption[key] === undefined ? null : curOption[key];\n\t\t\t\t\t}\n\t\t\t\t\tcurOption[key] = value;\n\t\t\t\t} else {\n\t\t\t\t\tif (arguments.length === 1) {\n\t\t\t\t\t\treturn this.options[key] === undefined ? null : this.options[key];\n\t\t\t\t\t}\n\t\t\t\t\toptions[key] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis._setOptions(options);\n\n\t\t\treturn this;\n\t\t},\n\t\t_setOptions: function _setOptions(options) {\n\t\t\tvar key;\n\n\t\t\tfor (key in options) {\n\t\t\t\tthis._setOption(key, options[key]);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\t\t_setOption: function _setOption(key, value) {\n\t\t\tthis.options[key] = value;\n\n\t\t\tif (key === \"disabled\") {\n\t\t\t\tthis.widget().toggleClass(this.widgetFullName + \"-disabled\", !!value);\n\n\t\t\t\t// If the widget is becoming disabled, then nothing is interactive\n\t\t\t\tif (value) {\n\t\t\t\t\tthis.hoverable.removeClass(\"ui-state-hover\");\n\t\t\t\t\tthis.focusable.removeClass(\"ui-state-focus\");\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\tenable: function enable() {\n\t\t\treturn this._setOptions({ disabled: false });\n\t\t},\n\t\tdisable: function disable() {\n\t\t\treturn this._setOptions({ disabled: true });\n\t\t},\n\n\t\t_on: function _on(suppressDisabledCheck, element, handlers) {\n\t\t\tvar delegateElement,\n\t\t\t    instance = this;\n\n\t\t\t// no suppressDisabledCheck flag, shuffle arguments\n\t\t\tif (typeof suppressDisabledCheck !== \"boolean\") {\n\t\t\t\thandlers = element;\n\t\t\t\telement = suppressDisabledCheck;\n\t\t\t\tsuppressDisabledCheck = false;\n\t\t\t}\n\n\t\t\t// no element argument, shuffle and use this.element\n\t\t\tif (!handlers) {\n\t\t\t\thandlers = element;\n\t\t\t\telement = this.element;\n\t\t\t\tdelegateElement = this.widget();\n\t\t\t} else {\n\t\t\t\telement = delegateElement = $(element);\n\t\t\t\tthis.bindings = this.bindings.add(element);\n\t\t\t}\n\n\t\t\t$.each(handlers, function (event, handler) {\n\t\t\t\tfunction handlerProxy() {\n\t\t\t\t\t// allow widgets to customize the disabled handling\n\t\t\t\t\t// - disabled as an array instead of boolean\n\t\t\t\t\t// - disabled class as method for disabling individual parts\n\t\t\t\t\tif (!suppressDisabledCheck && (instance.options.disabled === true || $(this).hasClass(\"ui-state-disabled\"))) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\treturn (typeof handler === \"string\" ? instance[handler] : handler).apply(instance, arguments);\n\t\t\t\t}\n\n\t\t\t\t// copy the guid so direct unbinding works\n\t\t\t\tif (typeof handler !== \"string\") {\n\t\t\t\t\thandlerProxy.guid = handler.guid = handler.guid || handlerProxy.guid || $.guid++;\n\t\t\t\t}\n\n\t\t\t\tvar match = event.match(/^([\\w:-]*)\\s*(.*)$/),\n\t\t\t\t    eventName = match[1] + instance.eventNamespace,\n\t\t\t\t    selector = match[2];\n\t\t\t\tif (selector) {\n\t\t\t\t\tdelegateElement.delegate(selector, eventName, handlerProxy);\n\t\t\t\t} else {\n\t\t\t\t\telement.bind(eventName, handlerProxy);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\t_off: function _off(element, eventName) {\n\t\t\teventName = (eventName || \"\").split(\" \").join(this.eventNamespace + \" \") + this.eventNamespace;\n\t\t\telement.unbind(eventName).undelegate(eventName);\n\n\t\t\t// Clear the stack to avoid memory leaks (#10056)\n\t\t\tthis.bindings = $(this.bindings.not(element).get());\n\t\t\tthis.focusable = $(this.focusable.not(element).get());\n\t\t\tthis.hoverable = $(this.hoverable.not(element).get());\n\t\t},\n\n\t\t_delay: function _delay(handler, delay) {\n\t\t\tfunction handlerProxy() {\n\t\t\t\treturn (typeof handler === \"string\" ? instance[handler] : handler).apply(instance, arguments);\n\t\t\t}\n\t\t\tvar instance = this;\n\t\t\treturn setTimeout(handlerProxy, delay || 0);\n\t\t},\n\n\t\t_hoverable: function _hoverable(element) {\n\t\t\tthis.hoverable = this.hoverable.add(element);\n\t\t\tthis._on(element, {\n\t\t\t\tmouseenter: function mouseenter(event) {\n\t\t\t\t\t$(event.currentTarget).addClass(\"ui-state-hover\");\n\t\t\t\t},\n\t\t\t\tmouseleave: function mouseleave(event) {\n\t\t\t\t\t$(event.currentTarget).removeClass(\"ui-state-hover\");\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\t_focusable: function _focusable(element) {\n\t\t\tthis.focusable = this.focusable.add(element);\n\t\t\tthis._on(element, {\n\t\t\t\tfocusin: function focusin(event) {\n\t\t\t\t\t$(event.currentTarget).addClass(\"ui-state-focus\");\n\t\t\t\t},\n\t\t\t\tfocusout: function focusout(event) {\n\t\t\t\t\t$(event.currentTarget).removeClass(\"ui-state-focus\");\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\t_trigger: function _trigger(type, event, data) {\n\t\t\tvar prop,\n\t\t\t    orig,\n\t\t\t    callback = this.options[type];\n\n\t\t\tdata = data || {};\n\t\t\tevent = $.Event(event);\n\t\t\tevent.type = (type === this.widgetEventPrefix ? type : this.widgetEventPrefix + type).toLowerCase();\n\t\t\t// the original event may come from any element\n\t\t\t// so we need to reset the target on the new event\n\t\t\tevent.target = this.element[0];\n\n\t\t\t// copy original event properties over to the new event\n\t\t\torig = event.originalEvent;\n\t\t\tif (orig) {\n\t\t\t\tfor (prop in orig) {\n\t\t\t\t\tif (!(prop in event)) {\n\t\t\t\t\t\tevent[prop] = orig[prop];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.element.trigger(event, data);\n\t\t\treturn !($.isFunction(callback) && callback.apply(this.element[0], [event].concat(data)) === false || event.isDefaultPrevented());\n\t\t}\n\t};\n\n\t$.each({ show: \"fadeIn\", hide: \"fadeOut\" }, function (method, defaultEffect) {\n\t\t$.Widget.prototype[\"_\" + method] = function (element, options, callback) {\n\t\t\tif (typeof options === \"string\") {\n\t\t\t\toptions = { effect: options };\n\t\t\t}\n\t\t\tvar hasOptions,\n\t\t\t    effectName = !options ? method : options === true || typeof options === \"number\" ? defaultEffect : options.effect || defaultEffect;\n\t\t\toptions = options || {};\n\t\t\tif (typeof options === \"number\") {\n\t\t\t\toptions = { duration: options };\n\t\t\t}\n\t\t\thasOptions = !$.isEmptyObject(options);\n\t\t\toptions.complete = callback;\n\t\t\tif (options.delay) {\n\t\t\t\telement.delay(options.delay);\n\t\t\t}\n\t\t\tif (hasOptions && $.effects && $.effects.effect[effectName]) {\n\t\t\t\telement[method](options);\n\t\t\t} else if (effectName !== method && element[effectName]) {\n\t\t\t\telement[effectName](options.duration, options.easing, callback);\n\t\t\t} else {\n\t\t\t\telement.queue(function (next) {\n\t\t\t\t\t$(this)[method]();\n\t\t\t\t\tif (callback) {\n\t\t\t\t\t\tcallback.call(element[0]);\n\t\t\t\t\t}\n\t\t\t\t\tnext();\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t});\n\n\tvar widget = $.widget;\n\n\t/*!\r\n  * jQuery UI Mouse 1.11.4\r\n  * http://jqueryui.com\r\n  *\r\n  * Copyright jQuery Foundation and other contributors\r\n  * Released under the MIT license.\r\n  * http://jquery.org/license\r\n  *\r\n  * http://api.jqueryui.com/mouse/\r\n  */\n\n\tvar mouseHandled = false;\n\t$(document).mouseup(function () {\n\t\tmouseHandled = false;\n\t});\n\n\tvar mouse = $.widget(\"ui.mouse\", {\n\t\tversion: \"1.11.4\",\n\t\toptions: {\n\t\t\tcancel: \"input,textarea,button,select,option\",\n\t\t\tdistance: 1,\n\t\t\tdelay: 0\n\t\t},\n\t\t_mouseInit: function _mouseInit() {\n\t\t\tvar that = this;\n\n\t\t\tthis.element.bind(\"mousedown.\" + this.widgetName, function (event) {\n\t\t\t\treturn that._mouseDown(event);\n\t\t\t}).bind(\"click.\" + this.widgetName, function (event) {\n\t\t\t\tif (true === $.data(event.target, that.widgetName + \".preventClickEvent\")) {\n\t\t\t\t\t$.removeData(event.target, that.widgetName + \".preventClickEvent\");\n\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.started = false;\n\t\t},\n\n\t\t// TODO: make sure destroying one instance of mouse doesn't mess with\n\t\t// other instances of mouse\n\t\t_mouseDestroy: function _mouseDestroy() {\n\t\t\tthis.element.unbind(\".\" + this.widgetName);\n\t\t\tif (this._mouseMoveDelegate) {\n\t\t\t\tthis.document.unbind(\"mousemove.\" + this.widgetName, this._mouseMoveDelegate).unbind(\"mouseup.\" + this.widgetName, this._mouseUpDelegate);\n\t\t\t}\n\t\t},\n\n\t\t_mouseDown: function _mouseDown(event) {\n\t\t\t// don't let more than one widget handle mouseStart\n\t\t\tif (mouseHandled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._mouseMoved = false;\n\n\t\t\t// we may have missed mouseup (out of window)\n\t\t\tthis._mouseStarted && this._mouseUp(event);\n\n\t\t\tthis._mouseDownEvent = event;\n\n\t\t\tvar that = this,\n\t\t\t    btnIsLeft = event.which === 1,\n\n\t\t\t// event.target.nodeName works around a bug in IE 8 with\n\t\t\t// disabled inputs (#7620)\n\t\t\telIsCancel = typeof this.options.cancel === \"string\" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false;\n\t\t\tif (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tthis.mouseDelayMet = !this.options.delay;\n\t\t\tif (!this.mouseDelayMet) {\n\t\t\t\tthis._mouseDelayTimer = setTimeout(function () {\n\t\t\t\t\tthat.mouseDelayMet = true;\n\t\t\t\t}, this.options.delay);\n\t\t\t}\n\n\t\t\tif (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {\n\t\t\t\tthis._mouseStarted = this._mouseStart(event) !== false;\n\t\t\t\tif (!this._mouseStarted) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Click event may never have fired (Gecko & Opera)\n\t\t\tif (true === $.data(event.target, this.widgetName + \".preventClickEvent\")) {\n\t\t\t\t$.removeData(event.target, this.widgetName + \".preventClickEvent\");\n\t\t\t}\n\n\t\t\t// these delegates are required to keep context\n\t\t\tthis._mouseMoveDelegate = function (event) {\n\t\t\t\treturn that._mouseMove(event);\n\t\t\t};\n\t\t\tthis._mouseUpDelegate = function (event) {\n\t\t\t\treturn that._mouseUp(event);\n\t\t\t};\n\n\t\t\tthis.document.bind(\"mousemove.\" + this.widgetName, this._mouseMoveDelegate).bind(\"mouseup.\" + this.widgetName, this._mouseUpDelegate);\n\n\t\t\tevent.preventDefault();\n\n\t\t\tmouseHandled = true;\n\t\t\treturn true;\n\t\t},\n\n\t\t_mouseMove: function _mouseMove(event) {\n\t\t\t// Only check for mouseups outside the document if you've moved inside the document\n\t\t\t// at least once. This prevents the firing of mouseup in the case of IE<9, which will\n\t\t\t// fire a mousemove event if content is placed under the cursor. See #7778\n\t\t\t// Support: IE <9\n\t\t\tif (this._mouseMoved) {\n\t\t\t\t// IE mouseup check - mouseup happened when mouse was out of window\n\t\t\t\tif ($.ui.ie && (!document.documentMode || document.documentMode < 9) && !event.button) {\n\t\t\t\t\treturn this._mouseUp(event);\n\n\t\t\t\t\t// Iframe mouseup check - mouseup occurred in another document\n\t\t\t\t} else if (!event.which) {\n\t\t\t\t\treturn this._mouseUp(event);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (event.which || event.button) {\n\t\t\t\tthis._mouseMoved = true;\n\t\t\t}\n\n\t\t\tif (this._mouseStarted) {\n\t\t\t\tthis._mouseDrag(event);\n\t\t\t\treturn event.preventDefault();\n\t\t\t}\n\n\t\t\tif (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {\n\t\t\t\tthis._mouseStarted = this._mouseStart(this._mouseDownEvent, event) !== false;\n\t\t\t\tthis._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event);\n\t\t\t}\n\n\t\t\treturn !this._mouseStarted;\n\t\t},\n\n\t\t_mouseUp: function _mouseUp(event) {\n\t\t\tthis.document.unbind(\"mousemove.\" + this.widgetName, this._mouseMoveDelegate).unbind(\"mouseup.\" + this.widgetName, this._mouseUpDelegate);\n\n\t\t\tif (this._mouseStarted) {\n\t\t\t\tthis._mouseStarted = false;\n\n\t\t\t\tif (event.target === this._mouseDownEvent.target) {\n\t\t\t\t\t$.data(event.target, this.widgetName + \".preventClickEvent\", true);\n\t\t\t\t}\n\n\t\t\t\tthis._mouseStop(event);\n\t\t\t}\n\n\t\t\tmouseHandled = false;\n\t\t\treturn false;\n\t\t},\n\n\t\t_mouseDistanceMet: function _mouseDistanceMet(event) {\n\t\t\treturn Math.max(Math.abs(this._mouseDownEvent.pageX - event.pageX), Math.abs(this._mouseDownEvent.pageY - event.pageY)) >= this.options.distance;\n\t\t},\n\n\t\t_mouseDelayMet: function _mouseDelayMet() /* event */{\n\t\t\treturn this.mouseDelayMet;\n\t\t},\n\n\t\t// These are placeholder methods, to be overriden by extending plugin\n\t\t_mouseStart: function _mouseStart() /* event */{},\n\t\t_mouseDrag: function _mouseDrag() /* event */{},\n\t\t_mouseStop: function _mouseStop() /* event */{},\n\t\t_mouseCapture: function _mouseCapture() /* event */{\n\t\t\treturn true;\n\t\t}\n\t});\n\n\t/*!\r\n  * jQuery UI Position 1.11.4\r\n  * http://jqueryui.com\r\n  *\r\n  * Copyright jQuery Foundation and other contributors\r\n  * Released under the MIT license.\r\n  * http://jquery.org/license\r\n  *\r\n  * http://api.jqueryui.com/position/\r\n  */\n\n\t(function () {\n\n\t\t$.ui = $.ui || {};\n\n\t\tvar cachedScrollbarWidth,\n\t\t    supportsOffsetFractions,\n\t\t    max = Math.max,\n\t\t    abs = Math.abs,\n\t\t    round = Math.round,\n\t\t    rhorizontal = /left|center|right/,\n\t\t    rvertical = /top|center|bottom/,\n\t\t    roffset = /[\\+\\-]\\d+(\\.[\\d]+)?%?/,\n\t\t    rposition = /^\\w+/,\n\t\t    rpercent = /%$/,\n\t\t    _position = $.fn.position;\n\n\t\tfunction getOffsets(offsets, width, height) {\n\t\t\treturn [parseFloat(offsets[0]) * (rpercent.test(offsets[0]) ? width / 100 : 1), parseFloat(offsets[1]) * (rpercent.test(offsets[1]) ? height / 100 : 1)];\n\t\t}\n\n\t\tfunction parseCss(element, property) {\n\t\t\treturn parseInt($.css(element, property), 10) || 0;\n\t\t}\n\n\t\tfunction getDimensions(elem) {\n\t\t\tvar raw = elem[0];\n\t\t\tif (raw.nodeType === 9) {\n\t\t\t\treturn {\n\t\t\t\t\twidth: elem.width(),\n\t\t\t\t\theight: elem.height(),\n\t\t\t\t\toffset: { top: 0, left: 0 }\n\t\t\t\t};\n\t\t\t}\n\t\t\tif ($.isWindow(raw)) {\n\t\t\t\treturn {\n\t\t\t\t\twidth: elem.width(),\n\t\t\t\t\theight: elem.height(),\n\t\t\t\t\toffset: { top: elem.scrollTop(), left: elem.scrollLeft() }\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (raw.preventDefault) {\n\t\t\t\treturn {\n\t\t\t\t\twidth: 0,\n\t\t\t\t\theight: 0,\n\t\t\t\t\toffset: { top: raw.pageY, left: raw.pageX }\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn {\n\t\t\t\twidth: elem.outerWidth(),\n\t\t\t\theight: elem.outerHeight(),\n\t\t\t\toffset: elem.offset()\n\t\t\t};\n\t\t}\n\n\t\t$.position = {\n\t\t\tscrollbarWidth: function scrollbarWidth() {\n\t\t\t\tif (cachedScrollbarWidth !== undefined) {\n\t\t\t\t\treturn cachedScrollbarWidth;\n\t\t\t\t}\n\t\t\t\tvar w1,\n\t\t\t\t    w2,\n\t\t\t\t    div = $(\"<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>\"),\n\t\t\t\t    innerDiv = div.children()[0];\n\n\t\t\t\t$(\"body\").append(div);\n\t\t\t\tw1 = innerDiv.offsetWidth;\n\t\t\t\tdiv.css(\"overflow\", \"scroll\");\n\n\t\t\t\tw2 = innerDiv.offsetWidth;\n\n\t\t\t\tif (w1 === w2) {\n\t\t\t\t\tw2 = div[0].clientWidth;\n\t\t\t\t}\n\n\t\t\t\tdiv.remove();\n\n\t\t\t\treturn cachedScrollbarWidth = w1 - w2;\n\t\t\t},\n\t\t\tgetScrollInfo: function getScrollInfo(within) {\n\t\t\t\tvar overflowX = within.isWindow || within.isDocument ? \"\" : within.element.css(\"overflow-x\"),\n\t\t\t\t    overflowY = within.isWindow || within.isDocument ? \"\" : within.element.css(\"overflow-y\"),\n\t\t\t\t    hasOverflowX = overflowX === \"scroll\" || overflowX === \"auto\" && within.width < within.element[0].scrollWidth,\n\t\t\t\t    hasOverflowY = overflowY === \"scroll\" || overflowY === \"auto\" && within.height < within.element[0].scrollHeight;\n\t\t\t\treturn {\n\t\t\t\t\twidth: hasOverflowY ? $.position.scrollbarWidth() : 0,\n\t\t\t\t\theight: hasOverflowX ? $.position.scrollbarWidth() : 0\n\t\t\t\t};\n\t\t\t},\n\t\t\tgetWithinInfo: function getWithinInfo(element) {\n\t\t\t\tvar withinElement = $(element || window),\n\t\t\t\t    isWindow = $.isWindow(withinElement[0]),\n\t\t\t\t    isDocument = !!withinElement[0] && withinElement[0].nodeType === 9;\n\t\t\t\treturn {\n\t\t\t\t\telement: withinElement,\n\t\t\t\t\tisWindow: isWindow,\n\t\t\t\t\tisDocument: isDocument,\n\t\t\t\t\toffset: withinElement.offset() || { left: 0, top: 0 },\n\t\t\t\t\tscrollLeft: withinElement.scrollLeft(),\n\t\t\t\t\tscrollTop: withinElement.scrollTop(),\n\n\t\t\t\t\t// support: jQuery 1.6.x\n\t\t\t\t\t// jQuery 1.6 doesn't support .outerWidth/Height() on documents or windows\n\t\t\t\t\twidth: isWindow || isDocument ? withinElement.width() : withinElement.outerWidth(),\n\t\t\t\t\theight: isWindow || isDocument ? withinElement.height() : withinElement.outerHeight()\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\n\t\t$.fn.position = function (options) {\n\t\t\tif (!options || !options.of) {\n\t\t\t\treturn _position.apply(this, arguments);\n\t\t\t}\n\n\t\t\t// make a copy, we don't want to modify arguments\n\t\t\toptions = $.extend({}, options);\n\n\t\t\tvar atOffset,\n\t\t\t    targetWidth,\n\t\t\t    targetHeight,\n\t\t\t    targetOffset,\n\t\t\t    basePosition,\n\t\t\t    dimensions,\n\t\t\t    target = $(options.of),\n\t\t\t    within = $.position.getWithinInfo(options.within),\n\t\t\t    scrollInfo = $.position.getScrollInfo(within),\n\t\t\t    collision = (options.collision || \"flip\").split(\" \"),\n\t\t\t    offsets = {};\n\n\t\t\tdimensions = getDimensions(target);\n\t\t\tif (target[0].preventDefault) {\n\t\t\t\t// force left top to allow flipping\n\t\t\t\toptions.at = \"left top\";\n\t\t\t}\n\t\t\ttargetWidth = dimensions.width;\n\t\t\ttargetHeight = dimensions.height;\n\t\t\ttargetOffset = dimensions.offset;\n\t\t\t// clone to reuse original targetOffset later\n\t\t\tbasePosition = $.extend({}, targetOffset);\n\n\t\t\t// force my and at to have valid horizontal and vertical positions\n\t\t\t// if a value is missing or invalid, it will be converted to center\n\t\t\t$.each([\"my\", \"at\"], function () {\n\t\t\t\tvar pos = (options[this] || \"\").split(\" \"),\n\t\t\t\t    horizontalOffset,\n\t\t\t\t    verticalOffset;\n\n\t\t\t\tif (pos.length === 1) {\n\t\t\t\t\tpos = rhorizontal.test(pos[0]) ? pos.concat([\"center\"]) : rvertical.test(pos[0]) ? [\"center\"].concat(pos) : [\"center\", \"center\"];\n\t\t\t\t}\n\t\t\t\tpos[0] = rhorizontal.test(pos[0]) ? pos[0] : \"center\";\n\t\t\t\tpos[1] = rvertical.test(pos[1]) ? pos[1] : \"center\";\n\n\t\t\t\t// calculate offsets\n\t\t\t\thorizontalOffset = roffset.exec(pos[0]);\n\t\t\t\tverticalOffset = roffset.exec(pos[1]);\n\t\t\t\toffsets[this] = [horizontalOffset ? horizontalOffset[0] : 0, verticalOffset ? verticalOffset[0] : 0];\n\n\t\t\t\t// reduce to just the positions without the offsets\n\t\t\t\toptions[this] = [rposition.exec(pos[0])[0], rposition.exec(pos[1])[0]];\n\t\t\t});\n\n\t\t\t// normalize collision option\n\t\t\tif (collision.length === 1) {\n\t\t\t\tcollision[1] = collision[0];\n\t\t\t}\n\n\t\t\tif (options.at[0] === \"right\") {\n\t\t\t\tbasePosition.left += targetWidth;\n\t\t\t} else if (options.at[0] === \"center\") {\n\t\t\t\tbasePosition.left += targetWidth / 2;\n\t\t\t}\n\n\t\t\tif (options.at[1] === \"bottom\") {\n\t\t\t\tbasePosition.top += targetHeight;\n\t\t\t} else if (options.at[1] === \"center\") {\n\t\t\t\tbasePosition.top += targetHeight / 2;\n\t\t\t}\n\n\t\t\tatOffset = getOffsets(offsets.at, targetWidth, targetHeight);\n\t\t\tbasePosition.left += atOffset[0];\n\t\t\tbasePosition.top += atOffset[1];\n\n\t\t\treturn this.each(function () {\n\t\t\t\tvar collisionPosition,\n\t\t\t\t    using,\n\t\t\t\t    elem = $(this),\n\t\t\t\t    elemWidth = elem.outerWidth(),\n\t\t\t\t    elemHeight = elem.outerHeight(),\n\t\t\t\t    marginLeft = parseCss(this, \"marginLeft\"),\n\t\t\t\t    marginTop = parseCss(this, \"marginTop\"),\n\t\t\t\t    collisionWidth = elemWidth + marginLeft + parseCss(this, \"marginRight\") + scrollInfo.width,\n\t\t\t\t    collisionHeight = elemHeight + marginTop + parseCss(this, \"marginBottom\") + scrollInfo.height,\n\t\t\t\t    position = $.extend({}, basePosition),\n\t\t\t\t    myOffset = getOffsets(offsets.my, elem.outerWidth(), elem.outerHeight());\n\n\t\t\t\tif (options.my[0] === \"right\") {\n\t\t\t\t\tposition.left -= elemWidth;\n\t\t\t\t} else if (options.my[0] === \"center\") {\n\t\t\t\t\tposition.left -= elemWidth / 2;\n\t\t\t\t}\n\n\t\t\t\tif (options.my[1] === \"bottom\") {\n\t\t\t\t\tposition.top -= elemHeight;\n\t\t\t\t} else if (options.my[1] === \"center\") {\n\t\t\t\t\tposition.top -= elemHeight / 2;\n\t\t\t\t}\n\n\t\t\t\tposition.left += myOffset[0];\n\t\t\t\tposition.top += myOffset[1];\n\n\t\t\t\t// if the browser doesn't support fractions, then round for consistent results\n\t\t\t\tif (!supportsOffsetFractions) {\n\t\t\t\t\tposition.left = round(position.left);\n\t\t\t\t\tposition.top = round(position.top);\n\t\t\t\t}\n\n\t\t\t\tcollisionPosition = {\n\t\t\t\t\tmarginLeft: marginLeft,\n\t\t\t\t\tmarginTop: marginTop\n\t\t\t\t};\n\n\t\t\t\t$.each([\"left\", \"top\"], function (i, dir) {\n\t\t\t\t\tif ($.ui.position[collision[i]]) {\n\t\t\t\t\t\t$.ui.position[collision[i]][dir](position, {\n\t\t\t\t\t\t\ttargetWidth: targetWidth,\n\t\t\t\t\t\t\ttargetHeight: targetHeight,\n\t\t\t\t\t\t\telemWidth: elemWidth,\n\t\t\t\t\t\t\telemHeight: elemHeight,\n\t\t\t\t\t\t\tcollisionPosition: collisionPosition,\n\t\t\t\t\t\t\tcollisionWidth: collisionWidth,\n\t\t\t\t\t\t\tcollisionHeight: collisionHeight,\n\t\t\t\t\t\t\toffset: [atOffset[0] + myOffset[0], atOffset[1] + myOffset[1]],\n\t\t\t\t\t\t\tmy: options.my,\n\t\t\t\t\t\t\tat: options.at,\n\t\t\t\t\t\t\twithin: within,\n\t\t\t\t\t\t\telem: elem\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif (options.using) {\n\t\t\t\t\t// adds feedback as second argument to using callback, if present\n\t\t\t\t\tusing = function using(props) {\n\t\t\t\t\t\tvar left = targetOffset.left - position.left,\n\t\t\t\t\t\t    right = left + targetWidth - elemWidth,\n\t\t\t\t\t\t    top = targetOffset.top - position.top,\n\t\t\t\t\t\t    bottom = top + targetHeight - elemHeight,\n\t\t\t\t\t\t    feedback = {\n\t\t\t\t\t\t\ttarget: {\n\t\t\t\t\t\t\t\telement: target,\n\t\t\t\t\t\t\t\tleft: targetOffset.left,\n\t\t\t\t\t\t\t\ttop: targetOffset.top,\n\t\t\t\t\t\t\t\twidth: targetWidth,\n\t\t\t\t\t\t\t\theight: targetHeight\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\telement: {\n\t\t\t\t\t\t\t\telement: elem,\n\t\t\t\t\t\t\t\tleft: position.left,\n\t\t\t\t\t\t\t\ttop: position.top,\n\t\t\t\t\t\t\t\twidth: elemWidth,\n\t\t\t\t\t\t\t\theight: elemHeight\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\thorizontal: right < 0 ? \"left\" : left > 0 ? \"right\" : \"center\",\n\t\t\t\t\t\t\tvertical: bottom < 0 ? \"top\" : top > 0 ? \"bottom\" : \"middle\"\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (targetWidth < elemWidth && abs(left + right) < targetWidth) {\n\t\t\t\t\t\t\tfeedback.horizontal = \"center\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (targetHeight < elemHeight && abs(top + bottom) < targetHeight) {\n\t\t\t\t\t\t\tfeedback.vertical = \"middle\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (max(abs(left), abs(right)) > max(abs(top), abs(bottom))) {\n\t\t\t\t\t\t\tfeedback.important = \"horizontal\";\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tfeedback.important = \"vertical\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\toptions.using.call(this, props, feedback);\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\telem.offset($.extend(position, { using: using }));\n\t\t\t});\n\t\t};\n\n\t\t$.ui.position = {\n\t\t\tfit: {\n\t\t\t\tleft: function left(position, data) {\n\t\t\t\t\tvar within = data.within,\n\t\t\t\t\t    withinOffset = within.isWindow ? within.scrollLeft : within.offset.left,\n\t\t\t\t\t    outerWidth = within.width,\n\t\t\t\t\t    collisionPosLeft = position.left - data.collisionPosition.marginLeft,\n\t\t\t\t\t    overLeft = withinOffset - collisionPosLeft,\n\t\t\t\t\t    overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,\n\t\t\t\t\t    newOverRight;\n\n\t\t\t\t\t// element is wider than within\n\t\t\t\t\tif (data.collisionWidth > outerWidth) {\n\t\t\t\t\t\t// element is initially over the left side of within\n\t\t\t\t\t\tif (overLeft > 0 && overRight <= 0) {\n\t\t\t\t\t\t\tnewOverRight = position.left + overLeft + data.collisionWidth - outerWidth - withinOffset;\n\t\t\t\t\t\t\tposition.left += overLeft - newOverRight;\n\t\t\t\t\t\t\t// element is initially over right side of within\n\t\t\t\t\t\t} else if (overRight > 0 && overLeft <= 0) {\n\t\t\t\t\t\t\tposition.left = withinOffset;\n\t\t\t\t\t\t\t// element is initially over both left and right sides of within\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (overLeft > overRight) {\n\t\t\t\t\t\t\t\tposition.left = withinOffset + outerWidth - data.collisionWidth;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tposition.left = withinOffset;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// too far left -> align with left edge\n\t\t\t\t\t} else if (overLeft > 0) {\n\t\t\t\t\t\tposition.left += overLeft;\n\t\t\t\t\t\t// too far right -> align with right edge\n\t\t\t\t\t} else if (overRight > 0) {\n\t\t\t\t\t\tposition.left -= overRight;\n\t\t\t\t\t\t// adjust based on position and margin\n\t\t\t\t\t} else {\n\t\t\t\t\t\tposition.left = max(position.left - collisionPosLeft, position.left);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\ttop: function top(position, data) {\n\t\t\t\t\tvar within = data.within,\n\t\t\t\t\t    withinOffset = within.isWindow ? within.scrollTop : within.offset.top,\n\t\t\t\t\t    outerHeight = data.within.height,\n\t\t\t\t\t    collisionPosTop = position.top - data.collisionPosition.marginTop,\n\t\t\t\t\t    overTop = withinOffset - collisionPosTop,\n\t\t\t\t\t    overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,\n\t\t\t\t\t    newOverBottom;\n\n\t\t\t\t\t// element is taller than within\n\t\t\t\t\tif (data.collisionHeight > outerHeight) {\n\t\t\t\t\t\t// element is initially over the top of within\n\t\t\t\t\t\tif (overTop > 0 && overBottom <= 0) {\n\t\t\t\t\t\t\tnewOverBottom = position.top + overTop + data.collisionHeight - outerHeight - withinOffset;\n\t\t\t\t\t\t\tposition.top += overTop - newOverBottom;\n\t\t\t\t\t\t\t// element is initially over bottom of within\n\t\t\t\t\t\t} else if (overBottom > 0 && overTop <= 0) {\n\t\t\t\t\t\t\tposition.top = withinOffset;\n\t\t\t\t\t\t\t// element is initially over both top and bottom of within\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (overTop > overBottom) {\n\t\t\t\t\t\t\t\tposition.top = withinOffset + outerHeight - data.collisionHeight;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tposition.top = withinOffset;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// too far up -> align with top\n\t\t\t\t\t} else if (overTop > 0) {\n\t\t\t\t\t\tposition.top += overTop;\n\t\t\t\t\t\t// too far down -> align with bottom edge\n\t\t\t\t\t} else if (overBottom > 0) {\n\t\t\t\t\t\tposition.top -= overBottom;\n\t\t\t\t\t\t// adjust based on position and margin\n\t\t\t\t\t} else {\n\t\t\t\t\t\tposition.top = max(position.top - collisionPosTop, position.top);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tflip: {\n\t\t\t\tleft: function left(position, data) {\n\t\t\t\t\tvar within = data.within,\n\t\t\t\t\t    withinOffset = within.offset.left + within.scrollLeft,\n\t\t\t\t\t    outerWidth = within.width,\n\t\t\t\t\t    offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,\n\t\t\t\t\t    collisionPosLeft = position.left - data.collisionPosition.marginLeft,\n\t\t\t\t\t    overLeft = collisionPosLeft - offsetLeft,\n\t\t\t\t\t    overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,\n\t\t\t\t\t    myOffset = data.my[0] === \"left\" ? -data.elemWidth : data.my[0] === \"right\" ? data.elemWidth : 0,\n\t\t\t\t\t    atOffset = data.at[0] === \"left\" ? data.targetWidth : data.at[0] === \"right\" ? -data.targetWidth : 0,\n\t\t\t\t\t    offset = -2 * data.offset[0],\n\t\t\t\t\t    newOverRight,\n\t\t\t\t\t    newOverLeft;\n\n\t\t\t\t\tif (overLeft < 0) {\n\t\t\t\t\t\tnewOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - outerWidth - withinOffset;\n\t\t\t\t\t\tif (newOverRight < 0 || newOverRight < abs(overLeft)) {\n\t\t\t\t\t\t\tposition.left += myOffset + atOffset + offset;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (overRight > 0) {\n\t\t\t\t\t\tnewOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + atOffset + offset - offsetLeft;\n\t\t\t\t\t\tif (newOverLeft > 0 || abs(newOverLeft) < overRight) {\n\t\t\t\t\t\t\tposition.left += myOffset + atOffset + offset;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\ttop: function top(position, data) {\n\t\t\t\t\tvar within = data.within,\n\t\t\t\t\t    withinOffset = within.offset.top + within.scrollTop,\n\t\t\t\t\t    outerHeight = within.height,\n\t\t\t\t\t    offsetTop = within.isWindow ? within.scrollTop : within.offset.top,\n\t\t\t\t\t    collisionPosTop = position.top - data.collisionPosition.marginTop,\n\t\t\t\t\t    overTop = collisionPosTop - offsetTop,\n\t\t\t\t\t    overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,\n\t\t\t\t\t    top = data.my[1] === \"top\",\n\t\t\t\t\t    myOffset = top ? -data.elemHeight : data.my[1] === \"bottom\" ? data.elemHeight : 0,\n\t\t\t\t\t    atOffset = data.at[1] === \"top\" ? data.targetHeight : data.at[1] === \"bottom\" ? -data.targetHeight : 0,\n\t\t\t\t\t    offset = -2 * data.offset[1],\n\t\t\t\t\t    newOverTop,\n\t\t\t\t\t    newOverBottom;\n\t\t\t\t\tif (overTop < 0) {\n\t\t\t\t\t\tnewOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - outerHeight - withinOffset;\n\t\t\t\t\t\tif (newOverBottom < 0 || newOverBottom < abs(overTop)) {\n\t\t\t\t\t\t\tposition.top += myOffset + atOffset + offset;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (overBottom > 0) {\n\t\t\t\t\t\tnewOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset + offset - offsetTop;\n\t\t\t\t\t\tif (newOverTop > 0 || abs(newOverTop) < overBottom) {\n\t\t\t\t\t\t\tposition.top += myOffset + atOffset + offset;\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\tflipfit: {\n\t\t\t\tleft: function left() {\n\t\t\t\t\t$.ui.position.flip.left.apply(this, arguments);\n\t\t\t\t\t$.ui.position.fit.left.apply(this, arguments);\n\t\t\t\t},\n\t\t\t\ttop: function top() {\n\t\t\t\t\t$.ui.position.flip.top.apply(this, arguments);\n\t\t\t\t\t$.ui.position.fit.top.apply(this, arguments);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// fraction support test\n\t\t(function () {\n\t\t\tvar testElement,\n\t\t\t    testElementParent,\n\t\t\t    testElementStyle,\n\t\t\t    offsetLeft,\n\t\t\t    i,\n\t\t\t    body = document.getElementsByTagName(\"body\")[0],\n\t\t\t    div = document.createElement(\"div\");\n\n\t\t\t//Create a \"fake body\" for testing based on method used in jQuery.support\n\t\t\ttestElement = document.createElement(body ? \"div\" : \"body\");\n\t\t\ttestElementStyle = {\n\t\t\t\tvisibility: \"hidden\",\n\t\t\t\twidth: 0,\n\t\t\t\theight: 0,\n\t\t\t\tborder: 0,\n\t\t\t\tmargin: 0,\n\t\t\t\tbackground: \"none\"\n\t\t\t};\n\t\t\tif (body) {\n\t\t\t\t$.extend(testElementStyle, {\n\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\tleft: \"-1000px\",\n\t\t\t\t\ttop: \"-1000px\"\n\t\t\t\t});\n\t\t\t}\n\t\t\tfor (i in testElementStyle) {\n\t\t\t\ttestElement.style[i] = testElementStyle[i];\n\t\t\t}\n\t\t\ttestElement.appendChild(div);\n\t\t\ttestElementParent = body || document.documentElement;\n\t\t\ttestElementParent.insertBefore(testElement, testElementParent.firstChild);\n\n\t\t\tdiv.style.cssText = \"position: absolute; left: 10.7432222px;\";\n\n\t\t\toffsetLeft = $(div).offset().left;\n\t\t\tsupportsOffsetFractions = offsetLeft > 10 && offsetLeft < 11;\n\n\t\t\ttestElement.innerHTML = \"\";\n\t\t\ttestElementParent.removeChild(testElement);\n\t\t})();\n\t})();\n\n\tvar position = $.ui.position;\n\n\t/*!\r\n  * jQuery UI Menu 1.11.4\r\n  * http://jqueryui.com\r\n  *\r\n  * Copyright jQuery Foundation and other contributors\r\n  * Released under the MIT license.\r\n  * http://jquery.org/license\r\n  *\r\n  * http://api.jqueryui.com/menu/\r\n  */\n\n\tvar menu = $.widget(\"ui.menu\", {\n\t\tversion: \"1.11.4\",\n\t\tdefaultElement: \"<ul>\",\n\t\tdelay: 300,\n\t\toptions: {\n\t\t\ticons: {\n\t\t\t\tsubmenu: \"ui-icon-carat-1-e\"\n\t\t\t},\n\t\t\titems: \"> *\",\n\t\t\tmenus: \"ul\",\n\t\t\tposition: {\n\t\t\t\tmy: \"left-1 top\",\n\t\t\t\tat: \"right top\"\n\t\t\t},\n\t\t\trole: \"menu\",\n\n\t\t\t// callbacks\n\t\t\tblur: null,\n\t\t\tfocus: null,\n\t\t\tselect: null\n\t\t},\n\n\t\t_create: function _create() {\n\t\t\tthis.activeMenu = this.element;\n\n\t\t\t// Flag used to prevent firing of the click handler\n\t\t\t// as the event bubbles up through nested menus\n\t\t\tthis.mouseHandled = false;\n\t\t\tthis.element.uniqueId().addClass(\"ui-menu ui-widget ui-widget-content\").toggleClass(\"ui-menu-icons\", !!this.element.find(\".ui-icon\").length).attr({\n\t\t\t\trole: this.options.role,\n\t\t\t\ttabIndex: 0\n\t\t\t});\n\n\t\t\tif (this.options.disabled) {\n\t\t\t\tthis.element.addClass(\"ui-state-disabled\").attr(\"aria-disabled\", \"true\");\n\t\t\t}\n\n\t\t\tthis._on({\n\t\t\t\t// Prevent focus from sticking to links inside menu after clicking\n\t\t\t\t// them (focus should always stay on UL during navigation).\n\t\t\t\t\"mousedown .ui-menu-item\": function mousedownUiMenuItem(event) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t},\n\t\t\t\t\"click .ui-menu-item\": function clickUiMenuItem(event) {\n\t\t\t\t\tvar target = $(event.target);\n\t\t\t\t\tif (!this.mouseHandled && target.not(\".ui-state-disabled\").length) {\n\t\t\t\t\t\tthis.select(event);\n\n\t\t\t\t\t\t// Only set the mouseHandled flag if the event will bubble, see #9469.\n\t\t\t\t\t\tif (!event.isPropagationStopped()) {\n\t\t\t\t\t\t\tthis.mouseHandled = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Open submenu on click\n\t\t\t\t\t\tif (target.has(\".ui-menu\").length) {\n\t\t\t\t\t\t\tthis.expand(event);\n\t\t\t\t\t\t} else if (!this.element.is(\":focus\") && $(this.document[0].activeElement).closest(\".ui-menu\").length) {\n\n\t\t\t\t\t\t\t// Redirect focus to the menu\n\t\t\t\t\t\t\tthis.element.trigger(\"focus\", [true]);\n\n\t\t\t\t\t\t\t// If the active item is on the top level, let it stay active.\n\t\t\t\t\t\t\t// Otherwise, blur the active item since it is no longer visible.\n\t\t\t\t\t\t\tif (this.active && this.active.parents(\".ui-menu\").length === 1) {\n\t\t\t\t\t\t\t\tclearTimeout(this.timer);\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\t\"mouseenter .ui-menu-item\": function mouseenterUiMenuItem(event) {\n\t\t\t\t\t// Ignore mouse events while typeahead is active, see #10458.\n\t\t\t\t\t// Prevents focusing the wrong item when typeahead causes a scroll while the mouse\n\t\t\t\t\t// is over an item in the menu\n\t\t\t\t\tif (this.previousFilter) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tvar target = $(event.currentTarget);\n\t\t\t\t\t// Remove ui-state-active class from siblings of the newly focused menu item\n\t\t\t\t\t// to avoid a jump caused by adjacent elements both having a class with a border\n\t\t\t\t\ttarget.siblings(\".ui-state-active\").removeClass(\"ui-state-active\");\n\t\t\t\t\tthis.focus(event, target);\n\t\t\t\t},\n\t\t\t\tmouseleave: \"collapseAll\",\n\t\t\t\t\"mouseleave .ui-menu\": \"collapseAll\",\n\t\t\t\tfocus: function focus(event, keepActiveItem) {\n\t\t\t\t\t// If there's already an active item, keep it active\n\t\t\t\t\t// If not, activate the first item\n\t\t\t\t\tvar item = this.active || this.element.find(this.options.items).eq(0);\n\n\t\t\t\t\tif (!keepActiveItem) {\n\t\t\t\t\t\tthis.focus(event, item);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tblur: function blur(event) {\n\t\t\t\t\tthis._delay(function () {\n\t\t\t\t\t\tif (!$.contains(this.element[0], this.document[0].activeElement)) {\n\t\t\t\t\t\t\tthis.collapseAll(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tkeydown: \"_keydown\"\n\t\t\t});\n\n\t\t\tthis.refresh();\n\n\t\t\t// Clicks outside of a menu collapse any open menus\n\t\t\tthis._on(this.document, {\n\t\t\t\tclick: function click(event) {\n\t\t\t\t\tif (this._closeOnDocumentClick(event)) {\n\t\t\t\t\t\tthis.collapseAll(event);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Reset the mouseHandled flag\n\t\t\t\t\tthis.mouseHandled = false;\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\t_destroy: function _destroy() {\n\t\t\t// Destroy (sub)menus\n\t\t\tthis.element.removeAttr(\"aria-activedescendant\").find(\".ui-menu\").addBack().removeClass(\"ui-menu ui-widget ui-widget-content ui-menu-icons ui-front\").removeAttr(\"role\").removeAttr(\"tabIndex\").removeAttr(\"aria-labelledby\").removeAttr(\"aria-expanded\").removeAttr(\"aria-hidden\").removeAttr(\"aria-disabled\").removeUniqueId().show();\n\n\t\t\t// Destroy menu items\n\t\t\tthis.element.find(\".ui-menu-item\").removeClass(\"ui-menu-item\").removeAttr(\"role\").removeAttr(\"aria-disabled\").removeUniqueId().removeClass(\"ui-state-hover\").removeAttr(\"tabIndex\").removeAttr(\"role\").removeAttr(\"aria-haspopup\").children().each(function () {\n\t\t\t\tvar elem = $(this);\n\t\t\t\tif (elem.data(\"ui-menu-submenu-carat\")) {\n\t\t\t\t\telem.remove();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Destroy menu dividers\n\t\t\tthis.element.find(\".ui-menu-divider\").removeClass(\"ui-menu-divider ui-widget-content\");\n\t\t},\n\n\t\t_keydown: function _keydown(event) {\n\t\t\tvar match,\n\t\t\t    prev,\n\t\t\t    character,\n\t\t\t    skip,\n\t\t\t    preventDefault = true;\n\n\t\t\tswitch (event.keyCode) {\n\t\t\t\tcase $.ui.keyCode.PAGE_UP:\n\t\t\t\t\tthis.previousPage(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.PAGE_DOWN:\n\t\t\t\t\tthis.nextPage(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.HOME:\n\t\t\t\t\tthis._move(\"first\", \"first\", event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.END:\n\t\t\t\t\tthis._move(\"last\", \"last\", event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.UP:\n\t\t\t\t\tthis.previous(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.DOWN:\n\t\t\t\t\tthis.next(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.LEFT:\n\t\t\t\t\tthis.collapse(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.RIGHT:\n\t\t\t\t\tif (this.active && !this.active.is(\".ui-state-disabled\")) {\n\t\t\t\t\t\tthis.expand(event);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.ENTER:\n\t\t\t\tcase $.ui.keyCode.SPACE:\n\t\t\t\t\tthis._activate(event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.ESCAPE:\n\t\t\t\t\tthis.collapse(event);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tpreventDefault = false;\n\t\t\t\t\tprev = this.previousFilter || \"\";\n\t\t\t\t\tcharacter = String.fromCharCode(event.keyCode);\n\t\t\t\t\tskip = false;\n\n\t\t\t\t\tclearTimeout(this.filterTimer);\n\n\t\t\t\t\tif (character === prev) {\n\t\t\t\t\t\tskip = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcharacter = prev + character;\n\t\t\t\t\t}\n\n\t\t\t\t\tmatch = this._filterMenuItems(character);\n\t\t\t\t\tmatch = skip && match.index(this.active.next()) !== -1 ? this.active.nextAll(\".ui-menu-item\") : match;\n\n\t\t\t\t\t// If no matches on the current filter, reset to the last character pressed\n\t\t\t\t\t// to move down the menu to the first item that starts with that character\n\t\t\t\t\tif (!match.length) {\n\t\t\t\t\t\tcharacter = String.fromCharCode(event.keyCode);\n\t\t\t\t\t\tmatch = this._filterMenuItems(character);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (match.length) {\n\t\t\t\t\t\tthis.focus(event, match);\n\t\t\t\t\t\tthis.previousFilter = character;\n\t\t\t\t\t\tthis.filterTimer = this._delay(function () {\n\t\t\t\t\t\t\tdelete this.previousFilter;\n\t\t\t\t\t\t}, 1000);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdelete this.previousFilter;\n\t\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (preventDefault) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t},\n\n\t\t_activate: function _activate(event) {\n\t\t\tif (!this.active.is(\".ui-state-disabled\")) {\n\t\t\t\tif (this.active.is(\"[aria-haspopup='true']\")) {\n\t\t\t\t\tthis.expand(event);\n\t\t\t\t} else {\n\t\t\t\t\tthis.select(event);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\trefresh: function refresh() {\n\t\t\tvar menus,\n\t\t\t    items,\n\t\t\t    that = this,\n\t\t\t    icon = this.options.icons.submenu,\n\t\t\t    submenus = this.element.find(this.options.menus);\n\n\t\t\tthis.element.toggleClass(\"ui-menu-icons\", !!this.element.find(\".ui-icon\").length);\n\n\t\t\t// Initialize nested menus\n\t\t\tsubmenus.filter(\":not(.ui-menu)\").addClass(\"ui-menu ui-widget ui-widget-content ui-front\").hide().attr({\n\t\t\t\trole: this.options.role,\n\t\t\t\t\"aria-hidden\": \"true\",\n\t\t\t\t\"aria-expanded\": \"false\"\n\t\t\t}).each(function () {\n\t\t\t\tvar menu = $(this),\n\t\t\t\t    item = menu.parent(),\n\t\t\t\t    submenuCarat = $(\"<span>\").addClass(\"ui-menu-icon ui-icon \" + icon).data(\"ui-menu-submenu-carat\", true);\n\n\t\t\t\titem.attr(\"aria-haspopup\", \"true\").prepend(submenuCarat);\n\t\t\t\tmenu.attr(\"aria-labelledby\", item.attr(\"id\"));\n\t\t\t});\n\n\t\t\tmenus = submenus.add(this.element);\n\t\t\titems = menus.find(this.options.items);\n\n\t\t\t// Initialize menu-items containing spaces and/or dashes only as dividers\n\t\t\titems.not(\".ui-menu-item\").each(function () {\n\t\t\t\tvar item = $(this);\n\t\t\t\tif (that._isDivider(item)) {\n\t\t\t\t\titem.addClass(\"ui-widget-content ui-menu-divider\");\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Don't refresh list items that are already adapted\n\t\t\titems.not(\".ui-menu-item, .ui-menu-divider\").addClass(\"ui-menu-item\").uniqueId().attr({\n\t\t\t\ttabIndex: -1,\n\t\t\t\trole: this._itemRole()\n\t\t\t});\n\n\t\t\t// Add aria-disabled attribute to any disabled menu item\n\t\t\titems.filter(\".ui-state-disabled\").attr(\"aria-disabled\", \"true\");\n\n\t\t\t// If the active item has been removed, blur the menu\n\t\t\tif (this.active && !$.contains(this.element[0], this.active[0])) {\n\t\t\t\tthis.blur();\n\t\t\t}\n\t\t},\n\n\t\t_itemRole: function _itemRole() {\n\t\t\treturn {\n\t\t\t\tmenu: \"menuitem\",\n\t\t\t\tlistbox: \"option\"\n\t\t\t}[this.options.role];\n\t\t},\n\n\t\t_setOption: function _setOption(key, value) {\n\t\t\tif (key === \"icons\") {\n\t\t\t\tthis.element.find(\".ui-menu-icon\").removeClass(this.options.icons.submenu).addClass(value.submenu);\n\t\t\t}\n\t\t\tif (key === \"disabled\") {\n\t\t\t\tthis.element.toggleClass(\"ui-state-disabled\", !!value).attr(\"aria-disabled\", value);\n\t\t\t}\n\t\t\tthis._super(key, value);\n\t\t},\n\n\t\tfocus: function focus(event, item) {\n\t\t\tvar nested, focused;\n\t\t\tthis.blur(event, event && event.type === \"focus\");\n\n\t\t\tthis._scrollIntoView(item);\n\n\t\t\tthis.active = item.first();\n\t\t\tfocused = this.active.addClass(\"ui-state-focus\").removeClass(\"ui-state-active\");\n\t\t\t// Only update aria-activedescendant if there's a role\n\t\t\t// otherwise we assume focus is managed elsewhere\n\t\t\tif (this.options.role) {\n\t\t\t\tthis.element.attr(\"aria-activedescendant\", focused.attr(\"id\"));\n\t\t\t}\n\n\t\t\t// Highlight active parent menu item, if any\n\t\t\tthis.active.parent().closest(\".ui-menu-item\").addClass(\"ui-state-active\");\n\n\t\t\tif (event && event.type === \"keydown\") {\n\t\t\t\tthis._close();\n\t\t\t} else {\n\t\t\t\tthis.timer = this._delay(function () {\n\t\t\t\t\tthis._close();\n\t\t\t\t}, this.delay);\n\t\t\t}\n\n\t\t\tnested = item.children(\".ui-menu\");\n\t\t\tif (nested.length && event && /^mouse/.test(event.type)) {\n\t\t\t\tthis._startOpening(nested);\n\t\t\t}\n\t\t\tthis.activeMenu = item.parent();\n\n\t\t\tthis._trigger(\"focus\", event, { item: item });\n\t\t},\n\n\t\t_scrollIntoView: function _scrollIntoView(item) {\n\t\t\tvar borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;\n\t\t\tif (this._hasScroll()) {\n\t\t\t\tborderTop = parseFloat($.css(this.activeMenu[0], \"borderTopWidth\")) || 0;\n\t\t\t\tpaddingTop = parseFloat($.css(this.activeMenu[0], \"paddingTop\")) || 0;\n\t\t\t\toffset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;\n\t\t\t\tscroll = this.activeMenu.scrollTop();\n\t\t\t\telementHeight = this.activeMenu.height();\n\t\t\t\titemHeight = item.outerHeight();\n\n\t\t\t\tif (offset < 0) {\n\t\t\t\t\tthis.activeMenu.scrollTop(scroll + offset);\n\t\t\t\t} else if (offset + itemHeight > elementHeight) {\n\t\t\t\t\tthis.activeMenu.scrollTop(scroll + offset - elementHeight + itemHeight);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tblur: function blur(event, fromFocus) {\n\t\t\tif (!fromFocus) {\n\t\t\t\tclearTimeout(this.timer);\n\t\t\t}\n\n\t\t\tif (!this.active) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.active.removeClass(\"ui-state-focus\");\n\t\t\tthis.active = null;\n\n\t\t\tthis._trigger(\"blur\", event, { item: this.active });\n\t\t},\n\n\t\t_startOpening: function _startOpening(submenu) {\n\t\t\tclearTimeout(this.timer);\n\n\t\t\t// Don't open if already open fixes a Firefox bug that caused a .5 pixel\n\t\t\t// shift in the submenu position when mousing over the carat icon\n\t\t\tif (submenu.attr(\"aria-hidden\") !== \"true\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.timer = this._delay(function () {\n\t\t\t\tthis._close();\n\t\t\t\tthis._open(submenu);\n\t\t\t}, this.delay);\n\t\t},\n\n\t\t_open: function _open(submenu) {\n\t\t\tvar position = $.extend({\n\t\t\t\tof: this.active\n\t\t\t}, this.options.position);\n\n\t\t\tclearTimeout(this.timer);\n\t\t\tthis.element.find(\".ui-menu\").not(submenu.parents(\".ui-menu\")).hide().attr(\"aria-hidden\", \"true\");\n\n\t\t\tsubmenu.show().removeAttr(\"aria-hidden\").attr(\"aria-expanded\", \"true\").position(position);\n\t\t},\n\n\t\tcollapseAll: function collapseAll(event, all) {\n\t\t\tclearTimeout(this.timer);\n\t\t\tthis.timer = this._delay(function () {\n\t\t\t\t// If we were passed an event, look for the submenu that contains the event\n\t\t\t\tvar currentMenu = all ? this.element : $(event && event.target).closest(this.element.find(\".ui-menu\"));\n\n\t\t\t\t// If we found no valid submenu ancestor, use the main menu to close all sub menus anyway\n\t\t\t\tif (!currentMenu.length) {\n\t\t\t\t\tcurrentMenu = this.element;\n\t\t\t\t}\n\n\t\t\t\tthis._close(currentMenu);\n\n\t\t\t\tthis.blur(event);\n\t\t\t\tthis.activeMenu = currentMenu;\n\t\t\t}, this.delay);\n\t\t},\n\n\t\t// With no arguments, closes the currently active menu - if nothing is active\n\t\t// it closes all menus.  If passed an argument, it will search for menus BELOW\n\t\t_close: function _close(startMenu) {\n\t\t\tif (!startMenu) {\n\t\t\t\tstartMenu = this.active ? this.active.parent() : this.element;\n\t\t\t}\n\n\t\t\tstartMenu.find(\".ui-menu\").hide().attr(\"aria-hidden\", \"true\").attr(\"aria-expanded\", \"false\").end().find(\".ui-state-active\").not(\".ui-state-focus\").removeClass(\"ui-state-active\");\n\t\t},\n\n\t\t_closeOnDocumentClick: function _closeOnDocumentClick(event) {\n\t\t\treturn !$(event.target).closest(\".ui-menu\").length;\n\t\t},\n\n\t\t_isDivider: function _isDivider(item) {\n\n\t\t\t// Match hyphen, em dash, en dash\n\t\t\treturn !/[^\\-\\u2014\\u2013\\s]/.test(item.text());\n\t\t},\n\n\t\tcollapse: function collapse(event) {\n\t\t\tvar newItem = this.active && this.active.parent().closest(\".ui-menu-item\", this.element);\n\t\t\tif (newItem && newItem.length) {\n\t\t\t\tthis._close();\n\t\t\t\tthis.focus(event, newItem);\n\t\t\t}\n\t\t},\n\n\t\texpand: function expand(event) {\n\t\t\tvar newItem = this.active && this.active.children(\".ui-menu \").find(this.options.items).first();\n\n\t\t\tif (newItem && newItem.length) {\n\t\t\t\tthis._open(newItem.parent());\n\n\t\t\t\t// Delay so Firefox will not hide activedescendant change in expanding submenu from AT\n\t\t\t\tthis._delay(function () {\n\t\t\t\t\tthis.focus(event, newItem);\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\n\t\tnext: function next(event) {\n\t\t\tthis._move(\"next\", \"first\", event);\n\t\t},\n\n\t\tprevious: function previous(event) {\n\t\t\tthis._move(\"prev\", \"last\", event);\n\t\t},\n\n\t\tisFirstItem: function isFirstItem() {\n\t\t\treturn this.active && !this.active.prevAll(\".ui-menu-item\").length;\n\t\t},\n\n\t\tisLastItem: function isLastItem() {\n\t\t\treturn this.active && !this.active.nextAll(\".ui-menu-item\").length;\n\t\t},\n\n\t\t_move: function _move(direction, filter, event) {\n\t\t\tvar next;\n\t\t\tif (this.active) {\n\t\t\t\tif (direction === \"first\" || direction === \"last\") {\n\t\t\t\t\tnext = this.active[direction === \"first\" ? \"prevAll\" : \"nextAll\"](\".ui-menu-item\").eq(-1);\n\t\t\t\t} else {\n\t\t\t\t\tnext = this.active[direction + \"All\"](\".ui-menu-item\").eq(0);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!next || !next.length || !this.active) {\n\t\t\t\tnext = this.activeMenu.find(this.options.items)[filter]();\n\t\t\t}\n\n\t\t\tthis.focus(event, next);\n\t\t},\n\n\t\tnextPage: function nextPage(event) {\n\t\t\tvar item, base, height;\n\n\t\t\tif (!this.active) {\n\t\t\t\tthis.next(event);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (this.isLastItem()) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (this._hasScroll()) {\n\t\t\t\tbase = this.active.offset().top;\n\t\t\t\theight = this.element.height();\n\t\t\t\tthis.active.nextAll(\".ui-menu-item\").each(function () {\n\t\t\t\t\titem = $(this);\n\t\t\t\t\treturn item.offset().top - base - height < 0;\n\t\t\t\t});\n\n\t\t\t\tthis.focus(event, item);\n\t\t\t} else {\n\t\t\t\tthis.focus(event, this.activeMenu.find(this.options.items)[!this.active ? \"first\" : \"last\"]());\n\t\t\t}\n\t\t},\n\n\t\tpreviousPage: function previousPage(event) {\n\t\t\tvar item, base, height;\n\t\t\tif (!this.active) {\n\t\t\t\tthis.next(event);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (this.isFirstItem()) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (this._hasScroll()) {\n\t\t\t\tbase = this.active.offset().top;\n\t\t\t\theight = this.element.height();\n\t\t\t\tthis.active.prevAll(\".ui-menu-item\").each(function () {\n\t\t\t\t\titem = $(this);\n\t\t\t\t\treturn item.offset().top - base + height > 0;\n\t\t\t\t});\n\n\t\t\t\tthis.focus(event, item);\n\t\t\t} else {\n\t\t\t\tthis.focus(event, this.activeMenu.find(this.options.items).first());\n\t\t\t}\n\t\t},\n\n\t\t_hasScroll: function _hasScroll() {\n\t\t\treturn this.element.outerHeight() < this.element.prop(\"scrollHeight\");\n\t\t},\n\n\t\tselect: function select(event) {\n\t\t\t// TODO: It should never be possible to not have an active item at this\n\t\t\t// point, but the tests don't trigger mouseenter before click.\n\t\t\tthis.active = this.active || $(event.target).closest(\".ui-menu-item\");\n\t\t\tvar ui = { item: this.active };\n\t\t\tif (!this.active.has(\".ui-menu\").length) {\n\t\t\t\tthis.collapseAll(event, true);\n\t\t\t}\n\t\t\tthis._trigger(\"select\", event, ui);\n\t\t},\n\n\t\t_filterMenuItems: function _filterMenuItems(character) {\n\t\t\tvar escapedCharacter = character.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\"),\n\t\t\t    regex = new RegExp(\"^\" + escapedCharacter, \"i\");\n\n\t\t\treturn this.activeMenu.find(this.options.items)\n\n\t\t\t// Only match on items, not dividers or other content (#10571)\n\t\t\t.filter(\".ui-menu-item\").filter(function () {\n\t\t\t\treturn regex.test($.trim($(this).text()));\n\t\t\t});\n\t\t}\n\t});\n\n\t/*!\r\n  * jQuery UI Autocomplete 1.11.4\r\n  * http://jqueryui.com\r\n  *\r\n  * Copyright jQuery Foundation and other contributors\r\n  * Released under the MIT license.\r\n  * http://jquery.org/license\r\n  *\r\n  * http://api.jqueryui.com/autocomplete/\r\n  */\n\n\t$.widget(\"ui.autocomplete\", {\n\t\tversion: \"1.11.4\",\n\t\tdefaultElement: \"<input>\",\n\t\toptions: {\n\t\t\tappendTo: null,\n\t\t\tautoFocus: false,\n\t\t\tdelay: 300,\n\t\t\tminLength: 1,\n\t\t\tposition: {\n\t\t\t\tmy: \"left top\",\n\t\t\t\tat: \"left bottom\",\n\t\t\t\tcollision: \"none\"\n\t\t\t},\n\t\t\tsource: null,\n\n\t\t\t// callbacks\n\t\t\tchange: null,\n\t\t\tclose: null,\n\t\t\tfocus: null,\n\t\t\topen: null,\n\t\t\tresponse: null,\n\t\t\tsearch: null,\n\t\t\tselect: null\n\t\t},\n\n\t\trequestIndex: 0,\n\t\tpending: 0,\n\n\t\t_create: function _create() {\n\t\t\t// Some browsers only repeat keydown events, not keypress events,\n\t\t\t// so we use the suppressKeyPress flag to determine if we've already\n\t\t\t// handled the keydown event. #7269\n\t\t\t// Unfortunately the code for & in keypress is the same as the up arrow,\n\t\t\t// so we use the suppressKeyPressRepeat flag to avoid handling keypress\n\t\t\t// events when we know the keydown event was used to modify the\n\t\t\t// search term. #7799\n\t\t\tvar suppressKeyPress,\n\t\t\t    suppressKeyPressRepeat,\n\t\t\t    suppressInput,\n\t\t\t    nodeName = this.element[0].nodeName.toLowerCase(),\n\t\t\t    isTextarea = nodeName === \"textarea\",\n\t\t\t    isInput = nodeName === \"input\";\n\n\t\t\tthis.isMultiLine =\n\t\t\t// Textareas are always multi-line\n\t\t\tisTextarea ? true :\n\t\t\t// Inputs are always single-line, even if inside a contentEditable element\n\t\t\t// IE also treats inputs as contentEditable\n\t\t\tisInput ? false :\n\t\t\t// All other element types are determined by whether or not they're contentEditable\n\t\t\tthis.element.prop(\"isContentEditable\");\n\n\t\t\tthis.valueMethod = this.element[isTextarea || isInput ? \"val\" : \"text\"];\n\t\t\tthis.isNewMenu = true;\n\n\t\t\tthis.element.addClass(\"ui-autocomplete-input\").attr(\"autocomplete\", \"off\");\n\n\t\t\tthis._on(this.element, {\n\t\t\t\tkeydown: function keydown(event) {\n\t\t\t\t\tif (this.element.prop(\"readOnly\")) {\n\t\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\t\tsuppressInput = true;\n\t\t\t\t\t\tsuppressKeyPressRepeat = true;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tsuppressKeyPress = false;\n\t\t\t\t\tsuppressInput = false;\n\t\t\t\t\tsuppressKeyPressRepeat = false;\n\t\t\t\t\tvar keyCode = $.ui.keyCode;\n\t\t\t\t\tswitch (event.keyCode) {\n\t\t\t\t\t\tcase keyCode.PAGE_UP:\n\t\t\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\t\t\tthis._move(\"previousPage\", event);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase keyCode.PAGE_DOWN:\n\t\t\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\t\t\tthis._move(\"nextPage\", event);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase keyCode.UP:\n\t\t\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\t\t\tthis._keyEvent(\"previous\", event);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase keyCode.DOWN:\n\t\t\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\t\t\tthis._keyEvent(\"next\", event);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase keyCode.ENTER:\n\t\t\t\t\t\t\t// when menu is open and has focus\n\t\t\t\t\t\t\tif (this.menu.active) {\n\t\t\t\t\t\t\t\t// #6055 - Opera still allows the keypress to occur\n\t\t\t\t\t\t\t\t// which causes forms to submit\n\t\t\t\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\tthis.menu.select(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase keyCode.TAB:\n\t\t\t\t\t\t\tif (this.menu.active) {\n\t\t\t\t\t\t\t\tthis.menu.select(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase keyCode.ESCAPE:\n\t\t\t\t\t\t\tif (this.menu.element.is(\":visible\")) {\n\t\t\t\t\t\t\t\tif (!this.isMultiLine) {\n\t\t\t\t\t\t\t\t\tthis._value(this.term);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tthis.close(event);\n\t\t\t\t\t\t\t\t// Different browsers have different default behavior for escape\n\t\t\t\t\t\t\t\t// Single press can mean undo or clear\n\t\t\t\t\t\t\t\t// Double press in IE means clear the whole form\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tsuppressKeyPressRepeat = true;\n\t\t\t\t\t\t\t// search timeout should be triggered before the input value is changed\n\t\t\t\t\t\t\tthis._searchTimeout(event);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tkeypress: function keypress(event) {\n\t\t\t\t\tif (suppressKeyPress) {\n\t\t\t\t\t\tsuppressKeyPress = false;\n\t\t\t\t\t\tif (!this.isMultiLine || this.menu.element.is(\":visible\")) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (suppressKeyPressRepeat) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// replicate some key handlers to allow them to repeat in Firefox and Opera\n\t\t\t\t\tvar keyCode = $.ui.keyCode;\n\t\t\t\t\tswitch (event.keyCode) {\n\t\t\t\t\t\tcase keyCode.PAGE_UP:\n\t\t\t\t\t\t\tthis._move(\"previousPage\", event);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase keyCode.PAGE_DOWN:\n\t\t\t\t\t\t\tthis._move(\"nextPage\", event);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase keyCode.UP:\n\t\t\t\t\t\t\tthis._keyEvent(\"previous\", event);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase keyCode.DOWN:\n\t\t\t\t\t\t\tthis._keyEvent(\"next\", event);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tinput: function input(event) {\n\t\t\t\t\tif (suppressInput) {\n\t\t\t\t\t\tsuppressInput = false;\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tthis._searchTimeout(event);\n\t\t\t\t},\n\t\t\t\tfocus: function focus() {\n\t\t\t\t\tthis.selectedItem = null;\n\t\t\t\t\tthis.previous = this._value();\n\t\t\t\t},\n\t\t\t\tblur: function blur(event) {\n\t\t\t\t\tif (this.cancelBlur) {\n\t\t\t\t\t\tdelete this.cancelBlur;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tclearTimeout(this.searching);\n\t\t\t\t\tthis.close(event);\n\t\t\t\t\tthis._change(event);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis._initSource();\n\t\t\tthis.menu = $(\"<ul>\").addClass(\"ui-autocomplete ui-front\").appendTo(this._appendTo()).menu({\n\t\t\t\t// disable ARIA support, the live region takes care of that\n\t\t\t\trole: null\n\t\t\t}).hide().menu(\"instance\");\n\n\t\t\tthis._on(this.menu.element, {\n\t\t\t\tmousedown: function mousedown(event) {\n\t\t\t\t\t// prevent moving focus out of the text field\n\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t// IE doesn't prevent moving focus even with event.preventDefault()\n\t\t\t\t\t// so we set a flag to know when we should ignore the blur event\n\t\t\t\t\tthis.cancelBlur = true;\n\t\t\t\t\tthis._delay(function () {\n\t\t\t\t\t\tdelete this.cancelBlur;\n\t\t\t\t\t});\n\n\t\t\t\t\t// clicking on the scrollbar causes focus to shift to the body\n\t\t\t\t\t// but we can't detect a mouseup or a click immediately afterward\n\t\t\t\t\t// so we have to track the next mousedown and close the menu if\n\t\t\t\t\t// the user clicks somewhere outside of the autocomplete\n\t\t\t\t\tvar menuElement = this.menu.element[0];\n\t\t\t\t\tif (!$(event.target).closest(\".ui-menu-item\").length) {\n\t\t\t\t\t\tthis._delay(function () {\n\t\t\t\t\t\t\tvar that = this;\n\t\t\t\t\t\t\tthis.document.one(\"mousedown\", function (event) {\n\t\t\t\t\t\t\t\tif (event.target !== that.element[0] && event.target !== menuElement && !$.contains(menuElement, event.target)) {\n\t\t\t\t\t\t\t\t\tthat.close();\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\t\t\t\tmenufocus: function menufocus(event, ui) {\n\t\t\t\t\tvar label, item;\n\t\t\t\t\t// support: Firefox\n\t\t\t\t\t// Prevent accidental activation of menu items in Firefox (#7024 #9118)\n\t\t\t\t\tif (this.isNewMenu) {\n\t\t\t\t\t\tthis.isNewMenu = false;\n\t\t\t\t\t\tif (event.originalEvent && /^mouse/.test(event.originalEvent.type)) {\n\t\t\t\t\t\t\tthis.menu.blur();\n\n\t\t\t\t\t\t\tthis.document.one(\"mousemove\", function () {\n\t\t\t\t\t\t\t\t$(event.target).trigger(event.originalEvent);\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\titem = ui.item.data(\"ui-autocomplete-item\");\n\t\t\t\t\tif (false !== this._trigger(\"focus\", event, { item: item })) {\n\t\t\t\t\t\t// use value to match what will end up in the input, if it was a key event\n\t\t\t\t\t\tif (event.originalEvent && /^key/.test(event.originalEvent.type)) {\n\t\t\t\t\t\t\tthis._value(item.value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Announce the value in the liveRegion\n\t\t\t\t\tlabel = ui.item.attr(\"aria-label\") || item.value;\n\t\t\t\t\tif (label && $.trim(label).length) {\n\t\t\t\t\t\tthis.liveRegion.children().hide();\n\t\t\t\t\t\t$(\"<div>\").text(label).appendTo(this.liveRegion);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tmenuselect: function menuselect(event, ui) {\n\t\t\t\t\tvar item = ui.item.data(\"ui-autocomplete-item\"),\n\t\t\t\t\t    previous = this.previous;\n\n\t\t\t\t\t// only trigger when focus was lost (click on menu)\n\t\t\t\t\tif (this.element[0] !== this.document[0].activeElement) {\n\t\t\t\t\t\tthis.element.focus();\n\t\t\t\t\t\tthis.previous = previous;\n\t\t\t\t\t\t// #6109 - IE triggers two focus events and the second\n\t\t\t\t\t\t// is asynchronous, so we need to reset the previous\n\t\t\t\t\t\t// term synchronously and asynchronously :-(\n\t\t\t\t\t\tthis._delay(function () {\n\t\t\t\t\t\t\tthis.previous = previous;\n\t\t\t\t\t\t\tthis.selectedItem = item;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tif (false !== this._trigger(\"select\", event, { item: item })) {\n\t\t\t\t\t\tthis._value(item.value);\n\t\t\t\t\t}\n\t\t\t\t\t// reset the term after the select event\n\t\t\t\t\t// this allows custom select handling to work properly\n\t\t\t\t\tthis.term = this._value();\n\n\t\t\t\t\tthis.close(event);\n\t\t\t\t\tthis.selectedItem = item;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.liveRegion = $(\"<span>\", {\n\t\t\t\trole: \"status\",\n\t\t\t\t\"aria-live\": \"assertive\",\n\t\t\t\t\"aria-relevant\": \"additions\"\n\t\t\t}).addClass(\"ui-helper-hidden-accessible\").appendTo(this.document[0].body);\n\n\t\t\t// turning off autocomplete prevents the browser from remembering the\n\t\t\t// value when navigating through history, so we re-enable autocomplete\n\t\t\t// if the page is unloaded before the widget is destroyed. #7790\n\t\t\tthis._on(this.window, {\n\t\t\t\tbeforeunload: function beforeunload() {\n\t\t\t\t\tthis.element.removeAttr(\"autocomplete\");\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\t_destroy: function _destroy() {\n\t\t\tclearTimeout(this.searching);\n\t\t\tthis.element.removeClass(\"ui-autocomplete-input\").removeAttr(\"autocomplete\");\n\t\t\tthis.menu.element.remove();\n\t\t\tthis.liveRegion.remove();\n\t\t},\n\n\t\t_setOption: function _setOption(key, value) {\n\t\t\tthis._super(key, value);\n\t\t\tif (key === \"source\") {\n\t\t\t\tthis._initSource();\n\t\t\t}\n\t\t\tif (key === \"appendTo\") {\n\t\t\t\tthis.menu.element.appendTo(this._appendTo());\n\t\t\t}\n\t\t\tif (key === \"disabled\" && value && this.xhr) {\n\t\t\t\tthis.xhr.abort();\n\t\t\t}\n\t\t},\n\n\t\t_appendTo: function _appendTo() {\n\t\t\tvar element = this.options.appendTo;\n\n\t\t\tif (element) {\n\t\t\t\telement = element.jquery || element.nodeType ? $(element) : this.document.find(element).eq(0);\n\t\t\t}\n\n\t\t\tif (!element || !element[0]) {\n\t\t\t\telement = this.element.closest(\".ui-front\");\n\t\t\t}\n\n\t\t\tif (!element.length) {\n\t\t\t\telement = this.document[0].body;\n\t\t\t}\n\n\t\t\treturn element;\n\t\t},\n\n\t\t_initSource: function _initSource() {\n\t\t\tvar array,\n\t\t\t    url,\n\t\t\t    that = this;\n\t\t\tif ($.isArray(this.options.source)) {\n\t\t\t\tarray = this.options.source;\n\t\t\t\tthis.source = function (request, response) {\n\t\t\t\t\tresponse($.ui.autocomplete.filter(array, request.term));\n\t\t\t\t};\n\t\t\t} else if (typeof this.options.source === \"string\") {\n\t\t\t\turl = this.options.source;\n\t\t\t\tthis.source = function (request, response) {\n\t\t\t\t\tif (that.xhr) {\n\t\t\t\t\t\tthat.xhr.abort();\n\t\t\t\t\t}\n\t\t\t\t\tthat.xhr = $.ajax({\n\t\t\t\t\t\turl: url,\n\t\t\t\t\t\tdata: request,\n\t\t\t\t\t\tdataType: \"json\",\n\t\t\t\t\t\tsuccess: function success(data) {\n\t\t\t\t\t\t\tresponse(data);\n\t\t\t\t\t\t},\n\t\t\t\t\t\terror: function error() {\n\t\t\t\t\t\t\tresponse([]);\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\tthis.source = this.options.source;\n\t\t\t}\n\t\t},\n\n\t\t_searchTimeout: function _searchTimeout(event) {\n\t\t\tclearTimeout(this.searching);\n\t\t\tthis.searching = this._delay(function () {\n\n\t\t\t\t// Search if the value has changed, or if the user retypes the same value (see #7434)\n\t\t\t\tvar equalValues = this.term === this._value(),\n\t\t\t\t    menuVisible = this.menu.element.is(\":visible\"),\n\t\t\t\t    modifierKey = event.altKey || event.ctrlKey || event.metaKey || event.shiftKey;\n\n\t\t\t\tif (!equalValues || equalValues && !menuVisible && !modifierKey) {\n\t\t\t\t\tthis.selectedItem = null;\n\t\t\t\t\tthis.search(null, event);\n\t\t\t\t}\n\t\t\t}, this.options.delay);\n\t\t},\n\n\t\tsearch: function search(value, event) {\n\t\t\tvalue = value != null ? value : this._value();\n\n\t\t\t// always save the actual value, not the one passed as an argument\n\t\t\tthis.term = this._value();\n\n\t\t\tif (value.length < this.options.minLength) {\n\t\t\t\treturn this.close(event);\n\t\t\t}\n\n\t\t\tif (this._trigger(\"search\", event) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\treturn this._search(value);\n\t\t},\n\n\t\t_search: function _search(value) {\n\t\t\tthis.pending++;\n\t\t\tthis.element.addClass(\"ui-autocomplete-loading\");\n\t\t\tthis.cancelSearch = false;\n\n\t\t\tthis.source({ term: value }, this._response());\n\t\t},\n\n\t\t_response: function _response() {\n\t\t\tvar index = ++this.requestIndex;\n\n\t\t\treturn $.proxy(function (content) {\n\t\t\t\tif (index === this.requestIndex) {\n\t\t\t\t\tthis.__response(content);\n\t\t\t\t}\n\n\t\t\t\tthis.pending--;\n\t\t\t\tif (!this.pending) {\n\t\t\t\t\tthis.element.removeClass(\"ui-autocomplete-loading\");\n\t\t\t\t}\n\t\t\t}, this);\n\t\t},\n\n\t\t__response: function __response(content) {\n\t\t\tif (content) {\n\t\t\t\tcontent = this._normalize(content);\n\t\t\t}\n\t\t\tthis._trigger(\"response\", null, { content: content });\n\t\t\tif (!this.options.disabled && content && content.length && !this.cancelSearch) {\n\t\t\t\tthis._suggest(content);\n\t\t\t\tthis._trigger(\"open\");\n\t\t\t} else {\n\t\t\t\t// use ._close() instead of .close() so we don't cancel future searches\n\t\t\t\tthis._close();\n\t\t\t}\n\t\t},\n\n\t\tclose: function close(event) {\n\t\t\tthis.cancelSearch = true;\n\t\t\tthis._close(event);\n\t\t},\n\n\t\t_close: function _close(event) {\n\t\t\tif (this.menu.element.is(\":visible\")) {\n\t\t\t\tthis.menu.element.hide();\n\t\t\t\tthis.menu.blur();\n\t\t\t\tthis.isNewMenu = true;\n\t\t\t\tthis._trigger(\"close\", event);\n\t\t\t}\n\t\t},\n\n\t\t_change: function _change(event) {\n\t\t\tif (this.previous !== this._value()) {\n\t\t\t\tthis._trigger(\"change\", event, { item: this.selectedItem });\n\t\t\t}\n\t\t},\n\n\t\t_normalize: function _normalize(items) {\n\t\t\t// assume all items have the right format when the first item is complete\n\t\t\tif (items.length && items[0].label && items[0].value) {\n\t\t\t\treturn items;\n\t\t\t}\n\t\t\treturn $.map(items, function (item) {\n\t\t\t\tif (typeof item === \"string\") {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tlabel: item,\n\t\t\t\t\t\tvalue: item\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn $.extend({}, item, {\n\t\t\t\t\tlabel: item.label || item.value,\n\t\t\t\t\tvalue: item.value || item.label\n\t\t\t\t});\n\t\t\t});\n\t\t},\n\n\t\t_suggest: function _suggest(items) {\n\t\t\tvar ul = this.menu.element.empty();\n\t\t\tthis._renderMenu(ul, items);\n\t\t\tthis.isNewMenu = true;\n\t\t\tthis.menu.refresh();\n\n\t\t\t// size and position menu\n\t\t\tul.show();\n\t\t\tthis._resizeMenu();\n\t\t\tul.position($.extend({\n\t\t\t\tof: this.element\n\t\t\t}, this.options.position));\n\n\t\t\tif (this.options.autoFocus) {\n\t\t\t\tthis.menu.next();\n\t\t\t}\n\t\t},\n\n\t\t_resizeMenu: function _resizeMenu() {\n\t\t\tvar ul = this.menu.element;\n\t\t\tul.outerWidth(Math.max(\n\t\t\t// Firefox wraps long text (possibly a rounding bug)\n\t\t\t// so we add 1px to avoid the wrapping (#7513)\n\t\t\tul.width(\"\").outerWidth() + 1, this.element.outerWidth()));\n\t\t},\n\n\t\t_renderMenu: function _renderMenu(ul, items) {\n\t\t\tvar that = this;\n\t\t\t$.each(items, function (index, item) {\n\t\t\t\tthat._renderItemData(ul, item);\n\t\t\t});\n\t\t},\n\n\t\t_renderItemData: function _renderItemData(ul, item) {\n\t\t\treturn this._renderItem(ul, item).data(\"ui-autocomplete-item\", item);\n\t\t},\n\n\t\t_renderItem: function _renderItem(ul, item) {\n\t\t\treturn $(\"<li>\").text(item.label).appendTo(ul);\n\t\t},\n\n\t\t_move: function _move(direction, event) {\n\t\t\tif (!this.menu.element.is(\":visible\")) {\n\t\t\t\tthis.search(null, event);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (this.menu.isFirstItem() && /^previous/.test(direction) || this.menu.isLastItem() && /^next/.test(direction)) {\n\n\t\t\t\tif (!this.isMultiLine) {\n\t\t\t\t\tthis._value(this.term);\n\t\t\t\t}\n\n\t\t\t\tthis.menu.blur();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.menu[direction](event);\n\t\t},\n\n\t\twidget: function widget() {\n\t\t\treturn this.menu.element;\n\t\t},\n\n\t\t_value: function _value() {\n\t\t\treturn this.valueMethod.apply(this.element, arguments);\n\t\t},\n\n\t\t_keyEvent: function _keyEvent(keyEvent, event) {\n\t\t\tif (!this.isMultiLine || this.menu.element.is(\":visible\")) {\n\t\t\t\tthis._move(keyEvent, event);\n\n\t\t\t\t// prevents moving cursor to beginning/end of the text field in some browsers\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t}\n\t});\n\n\t$.extend($.ui.autocomplete, {\n\t\tescapeRegex: function escapeRegex(value) {\n\t\t\treturn value.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\");\n\t\t},\n\t\tfilter: function filter(array, term) {\n\t\t\tvar matcher = new RegExp($.ui.autocomplete.escapeRegex(term), \"i\");\n\t\t\treturn $.grep(array, function (value) {\n\t\t\t\treturn matcher.test(value.label || value.value || value);\n\t\t\t});\n\t\t}\n\t});\n\n\t// live region extension, adding a `messages` option\n\t// NOTE: This is an experimental API. We are still investigating\n\t// a full solution for string manipulation and internationalization.\n\t$.widget(\"ui.autocomplete\", $.ui.autocomplete, {\n\t\toptions: {\n\t\t\tmessages: {\n\t\t\t\tnoResults: \"No search results.\",\n\t\t\t\tresults: function results(amount) {\n\t\t\t\t\treturn amount + (amount > 1 ? \" results are\" : \" result is\") + \" available, use up and down arrow keys to navigate.\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t__response: function __response(content) {\n\t\t\tvar message;\n\t\t\tthis._superApply(arguments);\n\t\t\tif (this.options.disabled || this.cancelSearch) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (content && content.length) {\n\t\t\t\tmessage = this.options.messages.results(content.length);\n\t\t\t} else {\n\t\t\t\tmessage = this.options.messages.noResults;\n\t\t\t}\n\t\t\tthis.liveRegion.children().hide();\n\t\t\t$(\"<div>\").text(message).appendTo(this.liveRegion);\n\t\t}\n\t});\n\n\tvar autocomplete = $.ui.autocomplete;\n});\n\n/***/ }),\n/* 78 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _typeof2 = __webpack_require__(7);\n\nvar _typeof3 = _interopRequireDefault(_typeof2);\n\nvar _jquery = __webpack_require__(0);\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar $ = _jquery2.default;\nvar qq = function qq(element) {\n    \"use strict\";\n\n    return {\n        hide: function hide() {\n            element.style.display = 'none';\n            return this;\n        },\n\n        /** Returns the function which detaches attached event */\n        attach: function attach(type, fn) {\n            if (element.addEventListener) {\n                element.addEventListener(type, fn, false);\n            } else if (element.attachEvent) {\n                element.attachEvent('on' + type, fn);\n            }\n            return function () {\n                qq(element).detach(type, fn);\n            };\n        },\n\n        detach: function detach(type, fn) {\n            if (element.removeEventListener) {\n                element.removeEventListener(type, fn, false);\n            } else if (element.attachEvent) {\n                element.detachEvent('on' + type, fn);\n            }\n            return this;\n        },\n\n        contains: function contains(descendant) {\n            // compareposition returns false in this case\n            if (element === descendant) {\n                return true;\n            }\n\n            if (element.contains) {\n                return element.contains(descendant);\n            } else {\n                /*jslint bitwise: true*/\n                return !!(descendant.compareDocumentPosition(element) & 8);\n            }\n        },\n\n        /**\r\n         * Insert this element before elementB.\r\n         */\n        insertBefore: function insertBefore(elementB) {\n            elementB.parentNode.insertBefore(element, elementB);\n            return this;\n        },\n\n        remove: function remove() {\n            element.parentNode.removeChild(element);\n            return this;\n        },\n\n        /**\r\n         * Sets styles for an element.\r\n         * Fixes opacity in IE6-8.\r\n         */\n        css: function css(styles) {\n            if (styles.opacity !== null) {\n                if (typeof element.style.opacity !== 'string' && typeof element.filters !== 'undefined') {\n                    styles.filter = 'alpha(opacity=' + Math.round(100 * styles.opacity) + ')';\n                }\n            }\n            qq.extend(element.style, styles);\n\n            return this;\n        },\n\n        hasClass: function hasClass(name) {\n            var re = new RegExp('(^| )' + name + '( |$)');\n            return re.test(element.className);\n        },\n\n        addClass: function addClass(name) {\n            if (!qq(element).hasClass(name)) {\n                element.className += ' ' + name;\n            }\n            return this;\n        },\n\n        removeClass: function removeClass(name) {\n            var re = new RegExp('(^| )' + name + '( |$)');\n            element.className = element.className.replace(re, ' ').replace(/^\\s+|\\s+$/g, \"\");\n            return this;\n        },\n\n        getByClass: function getByClass(className) {\n            var candidates,\n                result = [];\n\n            if (element.querySelectorAll) {\n                return element.querySelectorAll('.' + className);\n            }\n\n            candidates = element.getElementsByTagName(\"*\");\n\n            qq.each(candidates, function (idx, val) {\n                if (qq(val).hasClass(className)) {\n                    result.push(val);\n                }\n            });\n            return result;\n        },\n\n        children: function children() {\n            var children = [],\n                child = element.firstChild;\n\n            while (child) {\n                if (child.nodeType === 1) {\n                    children.push(child);\n                }\n                child = child.nextSibling;\n            }\n\n            return children;\n        },\n\n        setText: function setText(text) {\n            element.innerText = text;\n            element.textContent = text;\n            return this;\n        },\n\n        clearText: function clearText() {\n            return qq(element).setText(\"\");\n        }\n    };\n};\n\nqq.log = function (message, level) {\n    \"use strict\";\n\n    if (window.console) {\n        if (!level || level === 'info') {\n            window.console.log(message);\n        } else {\n            if (window.console[level]) {\n                window.console[level](message);\n            } else {\n                window.console.log('<' + level + '> ' + message);\n            }\n        }\n    }\n};\n\nqq.isObject = function (variable) {\n    \"use strict\";\n\n    return variable !== null && variable && (typeof variable === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(variable)) === \"object\" && variable.constructor === Object;\n};\n\nqq.isFunction = function (variable) {\n    \"use strict\";\n\n    return typeof variable === \"function\";\n};\n\nqq.isFileOrInput = function (maybeFileOrInput) {\n    \"use strict\";\n\n    if (window.File && maybeFileOrInput instanceof File) {\n        return true;\n    } else if (window.HTMLInputElement) {\n        if (maybeFileOrInput instanceof HTMLInputElement) {\n            if (maybeFileOrInput.type && maybeFileOrInput.type.toLowerCase() === 'file') {\n                return true;\n            }\n        }\n    } else if (maybeFileOrInput.tagName) {\n        if (maybeFileOrInput.tagName.toLowerCase() === 'input') {\n            if (maybeFileOrInput.type && maybeFileOrInput.type.toLowerCase() === 'file') {\n                return true;\n            }\n        }\n    }\n\n    return false;\n};\n\nqq.isXhrUploadSupported = function () {\n    \"use strict\";\n\n    var input = document.createElement('input');\n    input.type = 'file';\n\n    return input.multiple !== undefined && typeof File !== \"undefined\" && typeof FormData !== \"undefined\" && typeof new XMLHttpRequest().upload !== \"undefined\";\n};\n\nqq.isFolderDropSupported = function (dataTransfer) {\n    \"use strict\";\n\n    return dataTransfer.items && dataTransfer.items[0].webkitGetAsEntry;\n};\n\nqq.isFileChunkingSupported = function () {\n    \"use strict\";\n\n    return !qq.android() && //android's impl of Blob.slice is broken\n    qq.isXhrUploadSupported() && (File.prototype.slice || File.prototype.webkitSlice || File.prototype.mozSlice);\n};\n\nqq.extend = function (first, second, extendNested) {\n    \"use strict\";\n\n    qq.each(second, function (prop, val) {\n        if (extendNested && qq.isObject(val)) {\n            if (first[prop] === undefined) {\n                first[prop] = {};\n            }\n            qq.extend(first[prop], val, true);\n        } else {\n            first[prop] = val;\n        }\n    });\n};\n\n/**\r\n * Searches for a given element in the array, returns -1 if it is not present.\r\n * @param {Number} [from] The index at which to begin the search\r\n */\nqq.indexOf = function (arr, elt, from) {\n    \"use strict\";\n\n    if (arr.indexOf) {\n        return arr.indexOf(elt, from);\n    }\n\n    from = from || 0;\n    var len = arr.length;\n\n    if (from < 0) {\n        from += len;\n    }\n\n    for (; from < len; from += 1) {\n        if (arr.hasOwnProperty(from) && arr[from] === elt) {\n            return from;\n        }\n    }\n    return -1;\n};\n\n//this is a version 4 UUID\nqq.getUniqueId = function () {\n    \"use strict\";\n\n    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n        /*jslint eqeq: true, bitwise: true*/\n        var r = Math.random() * 16 | 0,\n            v = c == 'x' ? r : r & 0x3 | 0x8;\n        return v.toString(16);\n    });\n};\n\n//\n// Browsers and platforms detection\n\nqq.ie = function () {\n    \"use strict\";\n\n    return navigator.userAgent.indexOf('MSIE') !== -1;\n};\nqq.ie10 = function () {\n    \"use strict\";\n\n    return navigator.userAgent.indexOf('MSIE 10') !== -1;\n};\nqq.safari = function () {\n    \"use strict\";\n\n    return navigator.vendor !== undefined && navigator.vendor.indexOf(\"Apple\") !== -1;\n};\nqq.chrome = function () {\n    \"use strict\";\n\n    return navigator.vendor !== undefined && navigator.vendor.indexOf('Google') !== -1;\n};\nqq.firefox = function () {\n    \"use strict\";\n\n    return navigator.userAgent.indexOf('Mozilla') !== -1 && navigator.vendor !== undefined && navigator.vendor === '';\n};\nqq.windows = function () {\n    \"use strict\";\n\n    return navigator.platform === \"Win32\";\n};\nqq.android = function () {\n    \"use strict\";\n\n    return navigator.userAgent.toLowerCase().indexOf('android') !== -1;\n};\n\n//\n// Events\n\nqq.preventDefault = function (e) {\n    \"use strict\";\n\n    if (e.preventDefault) {\n        e.preventDefault();\n    } else {\n        e.returnValue = false;\n    }\n};\n\n/**\r\n * Creates and returns element from html string\r\n * Uses innerHTML to create an element\r\n */\nqq.toElement = function () {\n    \"use strict\";\n\n    var div = document.createElement('div');\n    return function (html) {\n        div.innerHTML = html;\n        var element = div.firstChild;\n        div.removeChild(element);\n        return element;\n    };\n}();\n\n//key and value are passed to callback for each item in the object or array\nqq.each = function (obj, callback) {\n    \"use strict\";\n\n    var key, retVal;\n    if (obj) {\n        for (key in obj) {\n            if (Object.prototype.hasOwnProperty.call(obj, key)) {\n                retVal = callback(key, obj[key]);\n                if (retVal === false) {\n                    break;\n                }\n            }\n        }\n    }\n};\n\n/**\r\n * obj2url() takes a json-object as argument and generates\r\n * a querystring. pretty much like jQuery.param()\r\n *\r\n * how to use:\r\n *\r\n *    `qq.obj2url({a:'b',c:'d'},'http://any.url/upload?otherParam=value');`\r\n *\r\n * will result in:\r\n *\r\n *    `http://any.url/upload?otherParam=value&a=b&c=d`\r\n *\r\n * @param  Object JSON-Object\r\n * @param  String current querystring-part\r\n * @return String encoded querystring\r\n */\nqq.obj2url = function (obj, temp, prefixDone) {\n    \"use strict\";\n    /*jshint laxbreak: true*/\n\n    var i,\n        len,\n        uristrings = [],\n        prefix = '&',\n        add = function add(nextObj, i) {\n        var nextTemp = temp ? /\\[\\]$/.test(temp) ? // prevent double-encoding\n        temp : temp + '[' + i + ']' : i;\n        if (nextTemp !== 'undefined' && i !== 'undefined') {\n            uristrings.push((typeof nextObj === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(nextObj)) === 'object' ? qq.obj2url(nextObj, nextTemp, true) : Object.prototype.toString.call(nextObj) === '[object Function]' ? encodeURIComponent(nextTemp) + '=' + encodeURIComponent(nextObj()) : encodeURIComponent(nextTemp) + '=' + encodeURIComponent(nextObj));\n        }\n    };\n\n    if (!prefixDone && temp) {\n        prefix = /\\?/.test(temp) ? /\\?$/.test(temp) ? '' : '&' : '?';\n        uristrings.push(temp);\n        uristrings.push(qq.obj2url(obj));\n    } else if (Object.prototype.toString.call(obj) === '[object Array]' && typeof obj !== 'undefined') {\n        // we wont use a for-in-loop on an array (performance)\n        for (i = -1, len = obj.length; i < len; i += 1) {\n            add(obj[i], i);\n        }\n    } else if (typeof obj !== 'undefined' && obj !== null && (typeof obj === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(obj)) === \"object\") {\n        // for anything else but a scalar, we will use for-in-loop\n        for (i in obj) {\n            if (obj.hasOwnProperty(i)) {\n                add(obj[i], i);\n            }\n        }\n    } else {\n        uristrings.push(encodeURIComponent(temp) + '=' + encodeURIComponent(obj));\n    }\n\n    if (temp) {\n        return uristrings.join(prefix);\n    } else {\n        return uristrings.join(prefix).replace(/^&/, '').replace(/%20/g, '+');\n    }\n};\n\nqq.obj2FormData = function (obj, formData, arrayKeyName) {\n    \"use strict\";\n\n    if (!formData) {\n        formData = new FormData();\n    }\n\n    qq.each(obj, function (key, val) {\n        key = arrayKeyName ? arrayKeyName + '[' + key + ']' : key;\n\n        if (qq.isObject(val)) {\n            qq.obj2FormData(val, formData, key);\n        } else if (qq.isFunction(val)) {\n            formData.append(encodeURIComponent(key), encodeURIComponent(val()));\n        } else {\n            formData.append(encodeURIComponent(key), encodeURIComponent(val));\n        }\n    });\n\n    return formData;\n};\n\nqq.obj2Inputs = function (obj, form) {\n    \"use strict\";\n\n    var input;\n\n    if (!form) {\n        form = document.createElement('form');\n    }\n\n    qq.obj2FormData(obj, {\n        append: function append(key, val) {\n            input = document.createElement('input');\n            input.setAttribute('name', key);\n            input.setAttribute('value', val);\n            form.appendChild(input);\n        }\n    });\n\n    return form;\n};\n\nqq.setCookie = function (name, value, days) {\n    var date = new Date(),\n        expires = \"\";\n\n    if (days) {\n        date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n        expires = \"; expires=\" + date.toGMTString();\n    }\n\n    document.cookie = name + \"=\" + value + expires + \"; path=/\";\n};\n\nqq.getCookie = function (name) {\n    var nameEQ = name + \"=\",\n        ca = document.cookie.split(';'),\n        c;\n\n    for (var i = 0; i < ca.length; i++) {\n        c = ca[i];\n        while (c.charAt(0) == ' ') {\n            c = c.substring(1, c.length);\n        }\n        if (c.indexOf(nameEQ) === 0) {\n            return c.substring(nameEQ.length, c.length);\n        }\n    }\n};\n\nqq.getCookieNames = function (regexp) {\n    var cookies = document.cookie.split(';'),\n        cookieNames = [];\n\n    qq.each(cookies, function (idx, cookie) {\n        cookie = cookie.trim();\n\n        var equalsIdx = cookie.indexOf(\"=\");\n\n        if (cookie.match(regexp)) {\n            cookieNames.push(cookie.substr(0, equalsIdx));\n        }\n    });\n\n    return cookieNames;\n};\n\nqq.deleteCookie = function (name) {\n    qq.setCookie(name, \"\", -1);\n};\n\nqq.areCookiesEnabled = function () {\n    var randNum = Math.random() * 100000,\n        name = \"qqCookieTest:\" + randNum;\n    qq.setCookie(name, 1);\n\n    if (qq.getCookie(name)) {\n        qq.deleteCookie(name);\n        return true;\n    }\n    return false;\n};\n\n/**\r\n * Not recommended for use outside of Fine Uploader since this falls back to an unchecked eval if JSON.parse is not\r\n * implemented.  For a more secure JSON.parse polyfill, use Douglas Crockford's json2.js.\r\n */\nqq.parseJson = function (json) {\n    /*jshint evil: true*/\n    if (typeof JSON.parse === \"function\") {\n        return JSON.parse(json);\n    } else {\n        return eval(\"(\" + json + \")\");\n    }\n};\n\n/**\r\n * A generic module which supports object disposing in dispose() method.\r\n * */\nqq.DisposeSupport = function () {\n    \"use strict\";\n\n    var disposers = [];\n\n    return {\n        /** Run all registered disposers */\n        dispose: function dispose() {\n            var disposer;\n            do {\n                disposer = disposers.shift();\n                if (disposer) {\n                    disposer();\n                }\n            } while (disposer);\n        },\n\n        /** Attach event handler and register de-attacher as a disposer */\n        attach: function attach() {\n            var args = arguments;\n            /*jslint undef:true*/\n            this.addDisposer(qq(args[0]).attach.apply(this, Array.prototype.slice.call(arguments, 1)));\n        },\n\n        /** Add disposer to the collection */\n        addDisposer: function addDisposer(disposeFunction) {\n            disposers.push(disposeFunction);\n        }\n    };\n};\nqq.UploadButton = function (o) {\n    this._options = {\n        element: null,\n        // if set to true adds multiple attribute to file input\n        multiple: false,\n        acceptFiles: null,\n        // name attribute of file input\n        name: 'file',\n        onChange: function onChange(input) {},\n        hoverClass: 'qq-upload-button-hover',\n        focusClass: 'qq-upload-button-focus'\n    };\n\n    qq.extend(this._options, o);\n    this._disposeSupport = new qq.DisposeSupport();\n\n    this._element = this._options.element;\n\n    // make button suitable container for input\n    qq(this._element).css({\n        position: 'relative',\n        overflow: 'hidden',\n        // Make sure browse button is in the right side\n        // in Internet Explorer\n        direction: 'ltr'\n    });\n\n    this._input = this._createInput();\n};\n\nqq.UploadButton.prototype = {\n    /* returns file input element */\n    getInput: function getInput() {\n        return this._input;\n    },\n    /* cleans/recreates the file input */\n    reset: function reset() {\n        if (this._input.parentNode) {\n            qq(this._input).remove();\n        }\n\n        qq(this._element).removeClass(this._options.focusClass);\n        this._input = this._createInput();\n    },\n    _createInput: function _createInput() {\n        var input = document.createElement(\"input\");\n\n        if (this._options.multiple) {\n            input.setAttribute(\"multiple\", \"multiple\");\n        }\n\n        if (this._options.acceptFiles) input.setAttribute(\"accept\", this._options.acceptFiles);\n\n        input.setAttribute(\"type\", \"file\");\n        //input.setAttribute(\"class\", \"validate[required]\");\n        input.setAttribute(\"id\", \"fileInput\");\n        input.setAttribute(\"name\", this._options.name);\n\n        qq(input).css({\n            position: 'absolute',\n            // in Opera only 'browse' button\n            // is clickable and it is located at\n            // the right side of the input\n            right: 0,\n            top: 0,\n            fontFamily: 'Arial',\n            // 4 persons reported this, the max values that worked for them were 243, 236, 236, 118\n            fontSize: '118px',\n            margin: 0,\n            padding: 0,\n            cursor: 'pointer',\n            opacity: 0\n        });\n\n        this._element.appendChild(input);\n\n        var self = this;\n        this._disposeSupport.attach(input, 'change', function () {\n            self._options.onChange(input);\n        });\n\n        this._disposeSupport.attach(input, 'mouseover', function () {\n            qq(self._element).addClass(self._options.hoverClass);\n        });\n        this._disposeSupport.attach(input, 'mouseout', function () {\n            qq(self._element).removeClass(self._options.hoverClass);\n        });\n        this._disposeSupport.attach(input, 'focus', function () {\n            qq(self._element).addClass(self._options.focusClass);\n        });\n        this._disposeSupport.attach(input, 'blur', function () {\n            qq(self._element).removeClass(self._options.focusClass);\n        });\n\n        // IE and Opera, unfortunately have 2 tab stops on file input\n        // which is unacceptable in our case, disable keyboard access\n        if (window.attachEvent) {\n            // it is IE or Opera\n            input.setAttribute('tabIndex', \"-1\");\n        }\n\n        return input;\n    }\n};\nqq.FineUploaderBasic = function (o) {\n    var that = this;\n    this._options = {\n        debug: false,\n        button: null,\n        multiple: true,\n        maxConnections: 3,\n        disableCancelForFormUploads: false,\n        autoUpload: true,\n        request: {\n            endpoint: '/server/upload',\n            params: {},\n            paramsInBody: false,\n            customHeaders: {},\n            forceMultipart: true,\n            inputName: 'qqfile',\n            uuidName: 'qquuid',\n            totalFileSizeName: 'qqtotalfilesize'\n        },\n        validation: {\n            allowedExtensions: [],\n            sizeLimit: 0,\n            minSizeLimit: 0,\n            stopOnFirstInvalidFile: true\n        },\n        callbacks: {\n            onSubmit: function onSubmit(id, fileName) {},\n            onComplete: function onComplete(id, fileName, responseJSON) {},\n            onCancel: function onCancel(id, fileName) {},\n            onUpload: function onUpload(id, fileName) {},\n            onUploadChunk: function onUploadChunk(id, fileName, chunkData) {},\n            onResume: function onResume(id, fileName, chunkData) {},\n            onProgress: function onProgress(id, fileName, loaded, total) {},\n            onError: function onError(id, fileName, reason) {},\n            onAutoRetry: function onAutoRetry(id, fileName, attemptNumber) {},\n            onManualRetry: function onManualRetry(id, fileName) {},\n            onValidateBatch: function onValidateBatch(fileData) {},\n            onValidate: function onValidate(fileData) {}\n        },\n        messages: {\n            typeError: \"{file} has an invalid extension. Valid extension(s): {extensions}.\",\n            sizeError: \"{file} is too large, maximum file size is {sizeLimit}.\",\n            minSizeError: \"{file} is too small, minimum file size is {minSizeLimit}.\",\n            emptyError: \"{file} is empty, please select files again without it.\",\n            noFilesError: \"No files to upload.\",\n            onLeave: \"The files are being uploaded, if you leave now the upload will be cancelled.\"\n        },\n        retry: {\n            enableAuto: false,\n            maxAutoAttempts: 3,\n            autoAttemptDelay: 5,\n            preventRetryResponseProperty: 'preventRetry'\n        },\n        classes: {\n            buttonHover: 'qq-upload-button-hover',\n            buttonFocus: 'qq-upload-button-focus'\n        },\n        chunking: {\n            enabled: false,\n            partSize: 2000000,\n            paramNames: {\n                partIndex: 'qqpartindex',\n                partByteOffset: 'qqpartbyteoffset',\n                chunkSize: 'qqchunksize',\n                totalFileSize: 'qqtotalfilesize',\n                totalParts: 'qqtotalparts',\n                filename: 'qqfilename'\n            }\n        },\n        resume: {\n            enabled: false,\n            id: null,\n            cookiesExpireIn: 7, //days\n            paramNames: {\n                resuming: \"qqresume\"\n            }\n        },\n        formatFileName: function formatFileName(fileName) {\n            if (fileName.length > 33) {\n                fileName = fileName.slice(0, 19) + '...' + fileName.slice(-14);\n            }\n            return fileName;\n        },\n        text: {\n            sizeSymbols: ['kB', 'MB', 'GB', 'TB', 'PB', 'EB']\n        }\n    };\n\n    qq.extend(this._options, o, true);\n    this._wrapCallbacks();\n    this._disposeSupport = new qq.DisposeSupport();\n\n    // number of files being uploaded\n    this._filesInProgress = [];\n\n    this._storedFileIds = [];\n\n    this._autoRetries = [];\n    this._retryTimeouts = [];\n    this._preventRetries = [];\n\n    this._paramsStore = this._createParamsStore();\n    this._endpointStore = this._createEndpointStore();\n\n    this._handler = this._createUploadHandler();\n\n    if (this._options.button) {\n        this._button = this._createUploadButton(this._options.button);\n    }\n\n    this._preventLeaveInProgress();\n};\n\nqq.FineUploaderBasic.prototype = {\n    log: function log(str, level) {\n        if (this._options.debug && (!level || level === 'info')) {\n            qq.log('[FineUploader] ' + str);\n        } else if (level && level !== 'info') {\n            qq.log('[FineUploader] ' + str, level);\n        }\n    },\n    setParams: function setParams(params, fileId) {\n        /*jshint eqeqeq: true, eqnull: true*/\n        if (fileId == null) {\n            this._options.request.params = params;\n        } else {\n            this._paramsStore.setParams(params, fileId);\n        }\n    },\n    setEndpoint: function setEndpoint(endpoint, fileId) {\n        /*jshint eqeqeq: true, eqnull: true*/\n        if (fileId == null) {\n            this._options.request.endpoint = endpoint;\n        } else {\n            this._endpointStore.setEndpoint(endpoint, fileId);\n        }\n    },\n    getInProgress: function getInProgress() {\n        return this._filesInProgress.length;\n    },\n    uploadStoredFiles: function uploadStoredFiles() {\n        \"use strict\";\n\n        var idToUpload;\n\n        while (this._storedFileIds.length) {\n            idToUpload = this._storedFileIds.shift();\n            this._filesInProgress.push(idToUpload);\n            this._handler.upload(idToUpload);\n        }\n    },\n    clearStoredFiles: function clearStoredFiles() {\n        this._storedFileIds = [];\n    },\n    retry: function retry(id) {\n        if (this._onBeforeManualRetry(id)) {\n            this._handler.retry(id);\n            return true;\n        } else {\n            return false;\n        }\n    },\n    cancel: function cancel(fileId) {\n        this._handler.cancel(fileId);\n    },\n    reset: function reset() {\n        this.log(\"Resetting uploader...\");\n        this._handler.reset();\n        this._filesInProgress = [];\n        this._storedFileIds = [];\n        this._autoRetries = [];\n        this._retryTimeouts = [];\n        this._preventRetries = [];\n        this._button.reset();\n        this._paramsStore.reset();\n        this._endpointStore.reset();\n    },\n    addFiles: function addFiles(filesOrInputs) {\n        var self = this,\n            verifiedFilesOrInputs = [],\n            index,\n            fileOrInput;\n\n        if (filesOrInputs) {\n            if (!window.FileList || !(filesOrInputs instanceof FileList)) {\n                filesOrInputs = [].concat(filesOrInputs);\n            }\n\n            for (index = 0; index < filesOrInputs.length; index += 1) {\n                fileOrInput = filesOrInputs[index];\n\n                if (qq.isFileOrInput(fileOrInput)) {\n                    verifiedFilesOrInputs.push(fileOrInput);\n                } else {\n                    self.log(fileOrInput + ' is not a File or INPUT element!  Ignoring!', 'warn');\n                }\n            }\n\n            this.log('Processing ' + verifiedFilesOrInputs.length + ' files or inputs...');\n            this._uploadFileList(verifiedFilesOrInputs);\n        }\n    },\n    getUuid: function getUuid(fileId) {\n        return this._handler.getUuid(fileId);\n    },\n    getResumableFilesData: function getResumableFilesData() {\n        return this._handler.getResumableFilesData();\n    },\n    getSize: function getSize(fileId) {\n        return this._handler.getSize(fileId);\n    },\n    getFile: function getFile(fileId) {\n        return this._handler.getFile(fileId);\n    },\n    _createUploadButton: function _createUploadButton(element) {\n        var self = this;\n\n        var button = new qq.UploadButton({\n            element: element,\n            multiple: this._options.multiple && qq.isXhrUploadSupported(),\n            acceptFiles: this._options.validation.acceptFiles,\n            onChange: function onChange(input) {\n                self._onInputChange(input);\n            },\n            hoverClass: this._options.classes.buttonHover,\n            focusClass: this._options.classes.buttonFocus\n        });\n\n        this._disposeSupport.addDisposer(function () {\n            button.dispose();\n        });\n        return button;\n    },\n    _createUploadHandler: function _createUploadHandler() {\n        var self = this;\n\n        return new qq.UploadHandler({\n            debug: this._options.debug,\n            forceMultipart: this._options.request.forceMultipart,\n            maxConnections: this._options.maxConnections,\n            customHeaders: this._options.request.customHeaders,\n            inputName: this._options.request.inputName,\n            uuidParamName: this._options.request.uuidName,\n            totalFileSizeParamName: this._options.request.totalFileSizeName,\n            demoMode: this._options.demoMode,\n            paramsInBody: this._options.request.paramsInBody,\n            paramsStore: this._paramsStore,\n            endpointStore: this._endpointStore,\n            chunking: this._options.chunking,\n            resume: this._options.resume,\n            log: function log(str, level) {\n                self.log(str, level);\n            },\n            onProgress: function onProgress(id, fileName, loaded, total) {\n                self._onProgress(id, fileName, loaded, total);\n                self._options.callbacks.onProgress(id, fileName, loaded, total);\n            },\n            onComplete: function onComplete(id, fileName, result, xhr) {\n                self._onComplete(id, fileName, result, xhr);\n                self._options.callbacks.onComplete(id, fileName, result);\n            },\n            onCancel: function onCancel(id, fileName) {\n                self._onCancel(id, fileName);\n                self._options.callbacks.onCancel(id, fileName);\n            },\n            onUpload: function onUpload(id, fileName) {\n                self._onUpload(id, fileName);\n                self._options.callbacks.onUpload(id, fileName);\n            },\n            onUploadChunk: function onUploadChunk(id, fileName, chunkData) {\n                self._options.callbacks.onUploadChunk(id, fileName, chunkData);\n            },\n            onResume: function onResume(id, fileName, chunkData) {\n                return self._options.callbacks.onResume(id, fileName, chunkData);\n            },\n            onAutoRetry: function onAutoRetry(id, fileName, responseJSON, xhr) {\n                self._preventRetries[id] = responseJSON[self._options.retry.preventRetryResponseProperty];\n\n                if (self._shouldAutoRetry(id, fileName, responseJSON)) {\n                    self._maybeParseAndSendUploadError(id, fileName, responseJSON, xhr);\n                    self._options.callbacks.onAutoRetry(id, fileName, self._autoRetries[id] + 1);\n                    self._onBeforeAutoRetry(id, fileName);\n\n                    self._retryTimeouts[id] = setTimeout(function () {\n                        self._onAutoRetry(id, fileName, responseJSON);\n                    }, self._options.retry.autoAttemptDelay * 1000);\n\n                    return true;\n                } else {\n                    return false;\n                }\n            }\n        });\n    },\n    _preventLeaveInProgress: function _preventLeaveInProgress() {\n        var self = this;\n\n        this._disposeSupport.attach(window, 'beforeunload', function (e) {\n            if (!self._filesInProgress.length) {\n                return;\n            }\n\n            var e = e || window.event;\n            // for ie, ff\n            e.returnValue = self._options.messages.onLeave;\n            // for webkit\n            return self._options.messages.onLeave;\n        });\n    },\n    _onSubmit: function _onSubmit(id, fileName) {\n        if (this._options.autoUpload) {\n            this._filesInProgress.push(id);\n        }\n    },\n    _onProgress: function _onProgress(id, fileName, loaded, total) {},\n    _onComplete: function _onComplete(id, fileName, result, xhr) {\n        this._removeFromFilesInProgress(id);\n        this._maybeParseAndSendUploadError(id, fileName, result, xhr);\n    },\n    _onCancel: function _onCancel(id, fileName) {\n        this._removeFromFilesInProgress(id);\n\n        clearTimeout(this._retryTimeouts[id]);\n\n        var storedFileIndex = qq.indexOf(this._storedFileIds, id);\n        if (!this._options.autoUpload && storedFileIndex >= 0) {\n            this._storedFileIds.splice(storedFileIndex, 1);\n        }\n    },\n    _removeFromFilesInProgress: function _removeFromFilesInProgress(id) {\n        var index = qq.indexOf(this._filesInProgress, id);\n        if (index >= 0) {\n            this._filesInProgress.splice(index, 1);\n        }\n    },\n    _onUpload: function _onUpload(id, fileName) {},\n    _onInputChange: function _onInputChange(input) {\n        if (qq.isXhrUploadSupported()) {\n            this.addFiles(input.files);\n        } else {\n            this.addFiles(input);\n        }\n        this._button.reset();\n    },\n    _onBeforeAutoRetry: function _onBeforeAutoRetry(id, fileName) {\n        this.log(\"Waiting \" + this._options.retry.autoAttemptDelay + \" seconds before retrying \" + fileName + \"...\");\n    },\n    _onAutoRetry: function _onAutoRetry(id, fileName, responseJSON) {\n        this.log(\"Retrying \" + fileName + \"...\");\n        this._autoRetries[id]++;\n        this._handler.retry(id);\n    },\n    _shouldAutoRetry: function _shouldAutoRetry(id, fileName, responseJSON) {\n        if (!this._preventRetries[id] && this._options.retry.enableAuto) {\n            if (this._autoRetries[id] === undefined) {\n                this._autoRetries[id] = 0;\n            }\n\n            return this._autoRetries[id] < this._options.retry.maxAutoAttempts;\n        }\n\n        return false;\n    },\n    //return false if we should not attempt the requested retry\n    _onBeforeManualRetry: function _onBeforeManualRetry(id) {\n        if (this._preventRetries[id]) {\n            this.log(\"Retries are forbidden for id \" + id, 'warn');\n            return false;\n        } else if (this._handler.isValid(id)) {\n            var fileName = this._handler.getName(id);\n\n            if (this._options.callbacks.onManualRetry(id, fileName) === false) {\n                return false;\n            }\n\n            this.log(\"Retrying upload for '\" + fileName + \"' (id: \" + id + \")...\");\n            this._filesInProgress.push(id);\n            return true;\n        } else {\n            this.log(\"'\" + id + \"' is not a valid file ID\", 'error');\n            return false;\n        }\n    },\n    _maybeParseAndSendUploadError: function _maybeParseAndSendUploadError(id, fileName, response, xhr) {\n        //assuming no one will actually set the response code to something other than 200 and still set 'success' to true\n        if (!response.success) {\n            if (xhr && xhr.status !== 200 && !response.error) {\n                this._options.callbacks.onError(id, fileName, \"XHR returned response code \" + xhr.status);\n            } else {\n                var errorReason = response.error ? response.error : \"Upload failure reason unknown\";\n                this._options.callbacks.onError(id, fileName, errorReason);\n            }\n        }\n    },\n    _uploadFileList: function _uploadFileList(files) {\n        var validationDescriptors, index, batchInvalid;\n\n        validationDescriptors = this._getValidationDescriptors(files);\n        batchInvalid = this._options.callbacks.onValidateBatch(validationDescriptors) === false;\n\n        if (!batchInvalid) {\n            if (files.length > 0) {\n                for (index = 0; index < files.length; index++) {\n                    if (this._validateFile(files[index])) {\n                        this._uploadFile(files[index]);\n                    } else {\n                        if (this._options.validation.stopOnFirstInvalidFile) {\n                            return;\n                        }\n                    }\n                }\n            } else {\n                this._error('noFilesError', \"\");\n            }\n        }\n    },\n    _uploadFile: function _uploadFile(fileContainer) {\n        var id = this._handler.add(fileContainer);\n        var fileName = this._handler.getName(id);\n\n        if (this._options.callbacks.onSubmit(id, fileName) !== false) {\n            this._onSubmit(id, fileName);\n            if (this._options.autoUpload) {\n                this._handler.upload(id);\n            } else {\n                this._storeFileForLater(id);\n            }\n        }\n    },\n    _storeFileForLater: function _storeFileForLater(id) {\n        this._storedFileIds.push(id);\n    },\n    _validateFile: function _validateFile(file) {\n        var validationDescriptor, name, size;\n\n        validationDescriptor = this._getValidationDescriptor(file);\n        name = validationDescriptor.name;\n        size = validationDescriptor.size;\n\n        if (this._options.callbacks.onValidate(validationDescriptor) === false) {\n            return false;\n        }\n\n        if (!this._isAllowedExtension(name)) {\n            this._error('typeError', name);\n            return false;\n        } else if (size === 0) {\n            this._error('emptyError', name);\n            return false;\n        } else if (size && this._options.validation.sizeLimit && size > this._options.validation.sizeLimit) {\n            this._error('sizeError', name);\n            return false;\n        } else if (size && size < this._options.validation.minSizeLimit) {\n            this._error('minSizeError', name);\n            return false;\n        }\n\n        return true;\n    },\n    _error: function _error(code, fileName) {\n        var message = this._options.messages[code];\n        function r(name, replacement) {\n            message = message.replace(name, replacement);\n        }\n\n        var extensions = this._options.validation.allowedExtensions.join(', ').toLowerCase();\n\n        r('{file}', this._options.formatFileName(fileName));\n        r('{extensions}', extensions);\n        r('{sizeLimit}', this._formatSize(this._options.validation.sizeLimit));\n        r('{minSizeLimit}', this._formatSize(this._options.validation.minSizeLimit));\n\n        this._options.callbacks.onError(null, fileName, message);\n\n        return message;\n    },\n    _isAllowedExtension: function _isAllowedExtension(fileName) {\n        var allowed = this._options.validation.allowedExtensions,\n            valid = false;\n\n        if (!allowed.length) {\n            return true;\n        }\n\n        qq.each(allowed, function (idx, allowedExt) {\n            /*jshint eqeqeq: true, eqnull: true*/\n            var extRegex = new RegExp('\\\\.' + allowedExt + \"$\", 'i');\n\n            if (fileName.match(extRegex) != null) {\n                valid = true;\n                return false;\n            }\n        });\n\n        return valid;\n    },\n    _formatSize: function _formatSize(bytes) {\n        var i = -1;\n        do {\n            bytes = bytes / 1024;\n            i++;\n        } while (bytes > 99);\n\n        return Math.max(bytes, 0.1).toFixed(1) + this._options.text.sizeSymbols[i];\n    },\n    _wrapCallbacks: function _wrapCallbacks() {\n        var self, safeCallback;\n\n        self = this;\n\n        safeCallback = function safeCallback(name, callback, args) {\n            try {\n                return callback.apply(self, args);\n            } catch (exception) {\n                self.log(\"Caught exception in '\" + name + \"' callback - \" + exception.message, 'error');\n            }\n        };\n\n        for (var prop in this._options.callbacks) {\n            (function () {\n                var callbackName, callbackFunc;\n                callbackName = prop;\n                callbackFunc = self._options.callbacks[callbackName];\n                self._options.callbacks[callbackName] = function () {\n                    return safeCallback(callbackName, callbackFunc, arguments);\n                };\n            })();\n        }\n    },\n    _parseFileName: function _parseFileName(file) {\n        var name;\n\n        if (file.value) {\n            // it is a file input\n            // get input value and remove path to normalize\n            name = file.value.replace(/.*(\\/|\\\\)/, \"\");\n        } else {\n            // fix missing properties in Safari 4 and firefox 11.0a2\n            name = file.fileName !== null && file.fileName !== undefined ? file.fileName : file.name;\n        }\n\n        return name;\n    },\n    _parseFileSize: function _parseFileSize(file) {\n        var size;\n\n        if (!file.value) {\n            // fix missing properties in Safari 4 and firefox 11.0a2\n            size = file.fileSize !== null && file.fileSize !== undefined ? file.fileSize : file.size;\n        }\n\n        return size;\n    },\n    _getValidationDescriptor: function _getValidationDescriptor(file) {\n        var name, size, fileDescriptor;\n\n        fileDescriptor = {};\n        name = this._parseFileName(file);\n        size = this._parseFileSize(file);\n\n        fileDescriptor.name = name;\n        if (size) {\n            fileDescriptor.size = size;\n        }\n\n        return fileDescriptor;\n    },\n    _getValidationDescriptors: function _getValidationDescriptors(files) {\n        var self = this,\n            fileDescriptors = [];\n\n        qq.each(files, function (idx, file) {\n            fileDescriptors.push(self._getValidationDescriptor(file));\n        });\n\n        return fileDescriptors;\n    },\n    _createParamsStore: function _createParamsStore() {\n        var paramsStore = {},\n            self = this;\n\n        return {\n            setParams: function setParams(params, fileId) {\n                var paramsCopy = {};\n                qq.extend(paramsCopy, params);\n                paramsStore[fileId] = paramsCopy;\n            },\n\n            getParams: function getParams(fileId) {\n                /*jshint eqeqeq: true, eqnull: true*/\n                var paramsCopy = {};\n\n                if (fileId != null && paramsStore[fileId]) {\n                    qq.extend(paramsCopy, paramsStore[fileId]);\n                } else {\n                    qq.extend(paramsCopy, self._options.request.params);\n                }\n\n                return paramsCopy;\n            },\n\n            remove: function remove(fileId) {\n                return delete paramsStore[fileId];\n            },\n\n            reset: function reset() {\n                paramsStore = {};\n            }\n        };\n    },\n    _createEndpointStore: function _createEndpointStore() {\n        var endpointStore = {},\n            self = this;\n\n        return {\n            setEndpoint: function setEndpoint(endpoint, fileId) {\n                endpointStore[fileId] = endpoint;\n            },\n\n            getEndpoint: function getEndpoint(fileId) {\n                /*jshint eqeqeq: true, eqnull: true*/\n                if (fileId != null && endpointStore[fileId]) {\n                    return endpointStore[fileId];\n                }\n\n                return self._options.request.endpoint;\n            },\n\n            remove: function remove(fileId) {\n                return delete endpointStore[fileId];\n            },\n\n            reset: function reset() {\n                endpointStore = {};\n            }\n        };\n    }\n};\n/*globals qq, document*/\nqq.DragAndDrop = function (o) {\n    \"use strict\";\n\n    var options,\n        dz,\n        dirPending,\n        droppedFiles = [],\n        droppedEntriesCount = 0,\n        droppedEntriesParsedCount = 0,\n        disposeSupport = new qq.DisposeSupport();\n\n    options = {\n        dropArea: null,\n        extraDropzones: [],\n        hideDropzones: true,\n        multiple: true,\n        classes: {\n            dropActive: null\n        },\n        callbacks: {\n            dropProcessing: function dropProcessing(isProcessing, files) {},\n            error: function error(code, filename) {},\n            log: function log(message, level) {}\n        }\n    };\n\n    qq.extend(options, o);\n\n    function maybeUploadDroppedFiles() {\n        if (droppedEntriesCount === droppedEntriesParsedCount && !dirPending) {\n            options.callbacks.log('Grabbed ' + droppedFiles.length + \" files after tree traversal.\");\n            dz.dropDisabled(false);\n            options.callbacks.dropProcessing(false, droppedFiles);\n        }\n    }\n    function addDroppedFile(file) {\n        droppedFiles.push(file);\n        droppedEntriesParsedCount += 1;\n        maybeUploadDroppedFiles();\n    }\n\n    function traverseFileTree(entry) {\n        var dirReader, i;\n\n        droppedEntriesCount += 1;\n\n        if (entry.isFile) {\n            entry.file(function (file) {\n                addDroppedFile(file);\n            });\n        } else if (entry.isDirectory) {\n            dirPending = true;\n            dirReader = entry.createReader();\n            dirReader.readEntries(function (entries) {\n                droppedEntriesParsedCount += 1;\n                for (i = 0; i < entries.length; i += 1) {\n                    traverseFileTree(entries[i]);\n                }\n\n                dirPending = false;\n\n                if (!entries.length) {\n                    maybeUploadDroppedFiles();\n                }\n            });\n        }\n    }\n\n    function handleDataTransfer(dataTransfer) {\n        var i, items, entry;\n\n        options.callbacks.dropProcessing(true);\n        dz.dropDisabled(true);\n\n        if (dataTransfer.files.length > 1 && !options.multiple) {\n            options.callbacks.dropProcessing(false);\n            options.callbacks.error('tooManyFilesError', \"\");\n            dz.dropDisabled(false);\n        } else {\n            droppedFiles = [];\n            droppedEntriesCount = 0;\n            droppedEntriesParsedCount = 0;\n\n            if (qq.isFolderDropSupported(dataTransfer)) {\n                items = dataTransfer.items;\n\n                for (i = 0; i < items.length; i += 1) {\n                    entry = items[i].webkitGetAsEntry();\n                    if (entry) {\n                        //due to a bug in Chrome's File System API impl - #149735\n                        if (entry.isFile) {\n                            droppedFiles.push(items[i].getAsFile());\n                            if (i === items.length - 1) {\n                                maybeUploadDroppedFiles();\n                            }\n                        } else {\n                            traverseFileTree(entry);\n                        }\n                    }\n                }\n            } else {\n                options.callbacks.dropProcessing(false, dataTransfer.files);\n                dz.dropDisabled(false);\n            }\n        }\n    }\n\n    function setupDropzone(dropArea) {\n        dz = new qq.UploadDropZone({\n            element: dropArea,\n            onEnter: function onEnter(e) {\n                qq(dropArea).addClass(options.classes.dropActive);\n                e.stopPropagation();\n            },\n            onLeaveNotDescendants: function onLeaveNotDescendants(e) {\n                qq(dropArea).removeClass(options.classes.dropActive);\n            },\n            onDrop: function onDrop(e) {\n                if (options.hideDropzones) {\n                    qq(dropArea).hide();\n                }\n                qq(dropArea).removeClass(options.classes.dropActive);\n\n                handleDataTransfer(e.dataTransfer);\n            }\n        });\n\n        disposeSupport.addDisposer(function () {\n            dz.dispose();\n        });\n\n        if (options.hideDropzones) {\n            qq(dropArea).hide();\n        }\n    }\n\n    function isFileDrag(dragEvent) {\n        var fileDrag;\n\n        qq.each(dragEvent.dataTransfer.types, function (key, val) {\n            if (val === 'Files') {\n                fileDrag = true;\n                return false;\n            }\n        });\n\n        return fileDrag;\n    }\n\n    function setupDragDrop() {\n        if (options.dropArea) {\n            options.extraDropzones.push(options.dropArea);\n        }\n\n        var i,\n            dropzones = options.extraDropzones;\n\n        for (i = 0; i < dropzones.length; i += 1) {\n            setupDropzone(dropzones[i]);\n        }\n\n        // IE <= 9 does not support the File API used for drag+drop uploads\n        if (options.dropArea && (!qq.ie() || qq.ie10())) {\n            disposeSupport.attach(document, 'dragenter', function (e) {\n                if (!dz.dropDisabled() && isFileDrag(e)) {\n                    if (qq(options.dropArea).hasClass(options.classes.dropDisabled)) {\n                        return;\n                    }\n\n                    options.dropArea.style.display = 'block';\n                    for (i = 0; i < dropzones.length; i += 1) {\n                        dropzones[i].style.display = 'block';\n                    }\n                }\n            });\n        }\n        disposeSupport.attach(document, 'dragleave', function (e) {\n            if (options.hideDropzones && qq.FineUploader.prototype._leaving_document_out(e)) {\n                for (i = 0; i < dropzones.length; i += 1) {\n                    qq(dropzones[i]).hide();\n                }\n            }\n        });\n        disposeSupport.attach(document, 'drop', function (e) {\n            if (options.hideDropzones) {\n                for (i = 0; i < dropzones.length; i += 1) {\n                    qq(dropzones[i]).hide();\n                }\n            }\n            e.preventDefault();\n        });\n    }\n\n    return {\n        setup: function setup() {\n            setupDragDrop();\n        },\n\n        setupExtraDropzone: function setupExtraDropzone(element) {\n            options.extraDropzones.push(element);\n            setupDropzone(element);\n        },\n\n        removeExtraDropzone: function removeExtraDropzone(element) {\n            var i,\n                dzs = options.extraDropzones;\n            for (i in dzs) {\n                if (dzs[i] === element) {\n                    return dzs.splice(i, 1);\n                }\n            }\n        },\n\n        dispose: function dispose() {\n            disposeSupport.dispose();\n            dz.dispose();\n        }\n    };\n};\n\nqq.UploadDropZone = function (o) {\n    \"use strict\";\n\n    var options,\n        element,\n        preventDrop,\n        dropOutsideDisabled,\n        disposeSupport = new qq.DisposeSupport();\n\n    options = {\n        element: null,\n        onEnter: function onEnter(e) {},\n        onLeave: function onLeave(e) {},\n        // is not fired when leaving element by hovering descendants\n        onLeaveNotDescendants: function onLeaveNotDescendants(e) {},\n        onDrop: function onDrop(e) {}\n    };\n\n    qq.extend(options, o);\n    element = options.element;\n\n    function dragover_should_be_canceled() {\n        return qq.safari() || qq.firefox() && qq.windows();\n    }\n\n    function disableDropOutside(e) {\n        // run only once for all instances\n        if (!dropOutsideDisabled) {\n\n            // for these cases we need to catch onDrop to reset dropArea\n            if (dragover_should_be_canceled) {\n                disposeSupport.attach(document, 'dragover', function (e) {\n                    e.preventDefault();\n                });\n            } else {\n                disposeSupport.attach(document, 'dragover', function (e) {\n                    if (e.dataTransfer) {\n                        e.dataTransfer.dropEffect = 'none';\n                        e.preventDefault();\n                    }\n                });\n            }\n\n            dropOutsideDisabled = true;\n        }\n    }\n\n    function isValidFileDrag(e) {\n        // e.dataTransfer currently causing IE errors\n        // IE9 does NOT support file API, so drag-and-drop is not possible\n        if (qq.ie() && !qq.ie10()) {\n            return false;\n        }\n\n        var effectTest,\n            dt = e.dataTransfer,\n\n        // do not check dt.types.contains in webkit, because it crashes safari 4\n        isSafari = qq.safari();\n\n        // dt.effectAllowed is none in Safari 5\n        // dt.types.contains check is for firefox\n        effectTest = qq.ie10() ? true : dt.effectAllowed !== 'none';\n        return dt && effectTest && (dt.files || !isSafari && dt.types.contains && dt.types.contains('Files'));\n    }\n\n    function isOrSetDropDisabled(isDisabled) {\n        if (isDisabled !== undefined) {\n            preventDrop = isDisabled;\n        }\n        return preventDrop;\n    }\n\n    function attachEvents() {\n        disposeSupport.attach(element, 'dragover', function (e) {\n            if (!isValidFileDrag(e)) {\n                return;\n            }\n\n            var effect = qq.ie() ? null : e.dataTransfer.effectAllowed;\n            if (effect === 'move' || effect === 'linkMove') {\n                e.dataTransfer.dropEffect = 'move'; // for FF (only move allowed)\n            } else {\n                e.dataTransfer.dropEffect = 'copy'; // for Chrome\n            }\n\n            e.stopPropagation();\n            e.preventDefault();\n        });\n\n        disposeSupport.attach(element, 'dragenter', function (e) {\n            if (!isOrSetDropDisabled()) {\n                if (!isValidFileDrag(e)) {\n                    return;\n                }\n                options.onEnter(e);\n            }\n        });\n\n        disposeSupport.attach(element, 'dragleave', function (e) {\n            if (!isValidFileDrag(e)) {\n                return;\n            }\n\n            options.onLeave(e);\n\n            var relatedTarget = document.elementFromPoint(e.clientX, e.clientY);\n            // do not fire when moving a mouse over a descendant\n            if (qq(this).contains(relatedTarget)) {\n                return;\n            }\n\n            options.onLeaveNotDescendants(e);\n        });\n\n        disposeSupport.attach(element, 'drop', function (e) {\n            if (!isOrSetDropDisabled()) {\n                if (!isValidFileDrag(e)) {\n                    return;\n                }\n\n                e.preventDefault();\n                options.onDrop(e);\n            }\n        });\n    }\n\n    disableDropOutside();\n    attachEvents();\n\n    return {\n        dropDisabled: function dropDisabled(isDisabled) {\n            return isOrSetDropDisabled(isDisabled);\n        },\n\n        dispose: function dispose() {\n            disposeSupport.dispose();\n        }\n    };\n};\n/**\r\n * Class that creates upload widget with drag-and-drop and file list\r\n * @inherits qq.FineUploaderBasic\r\n */\nqq.FineUploader = function (o) {\n    // call parent constructor\n    qq.FineUploaderBasic.apply(this, arguments);\n\n    // additional options\n    qq.extend(this._options, {\n        element: null,\n        listElement: null,\n        dragAndDrop: {\n            extraDropzones: [],\n            hideDropzones: true,\n            disableDefaultDropzone: false\n        },\n        text: {\n            uploadButton: 'Upload a file',\n            cancelButton: 'Cancel',\n            retryButton: 'Retry',\n            failUpload: 'Upload failed',\n            dragZone: 'Drop files here to upload',\n            dropProcessing: 'Processing dropped files...',\n            formatProgress: \"{percent}% of {total_size}\",\n            waitingForResponse: \"Processing...\"\n        },\n        template: '<div class=\"qq-uploader\">' + (!this._options.dragAndDrop || !this._options.dragAndDrop.disableDefaultDropzone ? '<div class=\"qq-upload-drop-area\"><span>{dragZoneText}</span></div>' : '') + (!this._options.button ? '<div class=\"qq-upload-button\"><div>{uploadButtonText}</div></div>' : '') + '<span class=\"qq-drop-processing\"><span>{dropProcessingText}</span><span class=\"qq-drop-processing-spinner\"></span></span>' + (!this._options.listElement ? '<ul class=\"qq-upload-list\"></ul>' : '') + '</div>',\n\n        // template for one item in file list\n        fileTemplate: '<li>' + '<div class=\"qq-progress-bar\"></div>' + '<span class=\"qq-upload-spinner\"></span>' + '<span class=\"qq-upload-finished\"></span>' + '<span class=\"qq-upload-file\"></span>' + '<span class=\"qq-upload-size\"></span>' + '<a class=\"qq-upload-cancel\" href=\"#\">{cancelButtonText}</a>' + '<a class=\"qq-upload-retry\" href=\"#\">{retryButtonText}</a>' + '<span class=\"qq-upload-status-text\">{statusText}</span>' + '</li>',\n        classes: {\n            button: 'qq-upload-button',\n            drop: 'qq-upload-drop-area',\n            dropActive: 'qq-upload-drop-area-active',\n            dropDisabled: 'qq-upload-drop-area-disabled',\n            list: 'qq-upload-list',\n            progressBar: 'qq-progress-bar',\n            file: 'qq-upload-file',\n            spinner: 'qq-upload-spinner',\n            finished: 'qq-upload-finished',\n            retrying: 'qq-upload-retrying',\n            retryable: 'qq-upload-retryable',\n            size: 'qq-upload-size',\n            cancel: 'qq-upload-cancel',\n            retry: 'qq-upload-retry',\n            statusText: 'qq-upload-status-text',\n\n            success: 'qq-upload-success',\n            fail: 'qq-upload-fail',\n\n            successIcon: null,\n            failIcon: null,\n\n            dropProcessing: 'qq-drop-processing',\n            dropProcessingSpinner: 'qq-drop-processing-spinner'\n        },\n        failedUploadTextDisplay: {\n            mode: 'default', //default, custom, or none\n            maxChars: 50,\n            responseProperty: 'error',\n            enableTooltip: true\n        },\n        messages: {\n            tooManyFilesError: \"You may only drop one file\"\n        },\n        retry: {\n            showAutoRetryNote: true,\n            autoRetryNote: \"Retrying {retryNum}/{maxAuto}...\",\n            showButton: false\n        },\n        showMessage: function showMessage(message) {\n            setTimeout(function () {\n                alert(message);\n            }, 0);\n        }\n    }, true);\n\n    // overwrite options with user supplied\n    qq.extend(this._options, o, true);\n    this._wrapCallbacks();\n\n    // overwrite the upload button text if any\n    // same for the Cancel button and Fail message text\n    this._options.template = this._options.template.replace(/\\{dragZoneText\\}/g, this._options.text.dragZone);\n    this._options.template = this._options.template.replace(/\\{uploadButtonText\\}/g, this._options.text.uploadButton);\n    this._options.template = this._options.template.replace(/\\{dropProcessingText\\}/g, this._options.text.dropProcessing);\n    this._options.fileTemplate = this._options.fileTemplate.replace(/\\{cancelButtonText\\}/g, this._options.text.cancelButton);\n    this._options.fileTemplate = this._options.fileTemplate.replace(/\\{retryButtonText\\}/g, this._options.text.retryButton);\n    this._options.fileTemplate = this._options.fileTemplate.replace(/\\{statusText\\}/g, \"\");\n\n    this._element = this._options.element;\n    this._element.innerHTML = this._options.template;\n    this._listElement = this._options.listElement || this._find(this._element, 'list');\n\n    this._classes = this._options.classes;\n\n    if (!this._button) {\n        this._button = this._createUploadButton(this._find(this._element, 'button'));\n    }\n\n    this._bindCancelAndRetryEvents();\n\n    this._dnd = this._setupDragAndDrop();\n};\n\n// inherit from Basic Uploader\nqq.extend(qq.FineUploader.prototype, qq.FineUploaderBasic.prototype);\n\nqq.extend(qq.FineUploader.prototype, {\n    clearStoredFiles: function clearStoredFiles() {\n        qq.FineUploaderBasic.prototype.clearStoredFiles.apply(this, arguments);\n        this._listElement.innerHTML = \"\";\n    },\n    addExtraDropzone: function addExtraDropzone(element) {\n        this._dnd.setupExtraDropzone(element);\n    },\n    removeExtraDropzone: function removeExtraDropzone(element) {\n        return this._dnd.removeExtraDropzone(element);\n    },\n    getItemByFileId: function getItemByFileId(id) {\n        var item = this._listElement.firstChild;\n\n        // there can't be txt nodes in dynamically created list\n        // and we can  use nextSibling\n        while (item) {\n            if (item.qqFileId == id) return item;\n            item = item.nextSibling;\n        }\n    },\n    cancel: function cancel(fileId) {\n        qq.FineUploaderBasic.prototype.cancel.apply(this, arguments);\n        var item = this.getItemByFileId(fileId);\n        qq(item).remove();\n    },\n    reset: function reset() {\n        qq.FineUploaderBasic.prototype.reset.apply(this, arguments);\n        this._element.innerHTML = this._options.template;\n        this._listElement = this._options.listElement || this._find(this._element, 'list');\n        if (!this._options.button) {\n            this._button = this._createUploadButton(this._find(this._element, 'button'));\n        }\n        this._bindCancelAndRetryEvents();\n        this._dnd.dispose();\n        this._dnd = this._setupDragAndDrop();\n    },\n    _setupDragAndDrop: function _setupDragAndDrop() {\n        var self = this,\n            dropProcessingEl = this._find(this._element, 'dropProcessing'),\n            dnd,\n            preventSelectFiles,\n            defaultDropAreaEl;\n\n        preventSelectFiles = function preventSelectFiles(event) {\n            event.preventDefault();\n        };\n\n        if (!this._options.dragAndDrop.disableDefaultDropzone) {\n            defaultDropAreaEl = this._find(this._options.element, 'drop');\n        }\n\n        dnd = new qq.DragAndDrop({\n            dropArea: defaultDropAreaEl,\n            extraDropzones: this._options.dragAndDrop.extraDropzones,\n            hideDropzones: this._options.dragAndDrop.hideDropzones,\n            multiple: this._options.multiple,\n            classes: {\n                dropActive: this._options.classes.dropActive\n            },\n            callbacks: {\n                dropProcessing: function dropProcessing(isProcessing, files) {\n                    var input = self._button.getInput();\n\n                    if (isProcessing) {\n                        qq(dropProcessingEl).css({ display: 'block' });\n                        qq(input).attach('click', preventSelectFiles);\n                    } else {\n                        qq(dropProcessingEl).hide();\n                        qq(input).detach('click', preventSelectFiles);\n                    }\n\n                    if (files) {\n                        self.addFiles(files);\n                    }\n                },\n                error: function error(code, filename) {\n                    self._error(code, filename);\n                },\n                log: function log(message, level) {\n                    self.log(message, level);\n                }\n            }\n        });\n\n        dnd.setup();\n\n        return dnd;\n    },\n    _leaving_document_out: function _leaving_document_out(e) {\n        return (qq.chrome() || qq.safari() && qq.windows()) && e.clientX == 0 && e.clientY == 0 || // null coords for Chrome and Safari Windows\n        qq.firefox() && !e.relatedTarget; // null e.relatedTarget for Firefox\n    },\n    _storeFileForLater: function _storeFileForLater(id) {\n        qq.FineUploaderBasic.prototype._storeFileForLater.apply(this, arguments);\n        var item = this.getItemByFileId(id);\n        qq(this._find(item, 'spinner')).hide();\n    },\n    /**\r\n     * Gets one of the elements listed in this._options.classes\r\n     **/\n    _find: function _find(parent, type) {\n        var element = qq(parent).getByClass(this._options.classes[type])[0];\n        if (!element) {\n            throw new Error('element not found ' + type);\n        }\n\n        return element;\n    },\n    _onSubmit: function _onSubmit(id, fileName) {\n        qq.FineUploaderBasic.prototype._onSubmit.apply(this, arguments);\n        this._addToList(id, fileName);\n    },\n    // Update the progress bar & percentage as the file is uploaded\n    _onProgress: function _onProgress(id, fileName, loaded, total) {\n        qq.FineUploaderBasic.prototype._onProgress.apply(this, arguments);\n\n        var item, progressBar, text, percent, cancelLink, size;\n\n        item = this.getItemByFileId(id);\n        progressBar = this._find(item, 'progressBar');\n        percent = Math.round(loaded / total * 100);\n\n        if (loaded === total) {\n            cancelLink = this._find(item, 'cancel');\n            qq(cancelLink).hide();\n\n            qq(progressBar).hide();\n            qq(this._find(item, 'statusText')).setText(this._options.text.waitingForResponse);\n\n            // If last byte was sent, just display final size\n            text = this._formatSize(total);\n        } else {\n            // If still uploading, display percentage\n            text = this._formatProgress(loaded, total);\n\n            qq(progressBar).css({ display: 'block' });\n        }\n\n        // Update progress bar element\n        qq(progressBar).css({ width: percent + '%' });\n\n        size = this._find(item, 'size');\n        qq(size).css({ display: 'inline' });\n        qq(size).setText(text);\n    },\n    _onComplete: function _onComplete(id, fileName, result, xhr) {\n        qq.FineUploaderBasic.prototype._onComplete.apply(this, arguments);\n\n        var item = this.getItemByFileId(id);\n\n        qq(this._find(item, 'statusText')).clearText();\n\n        qq(item).removeClass(this._classes.retrying);\n        qq(this._find(item, 'progressBar')).hide();\n\n        if (!this._options.disableCancelForFormUploads || qq.isXhrUploadSupported()) {\n            qq(this._find(item, 'cancel')).hide();\n        }\n        qq(this._find(item, 'spinner')).hide();\n\n        if (result.success) {\n            qq(item).addClass(this._classes.success);\n            if (this._classes.successIcon) {\n                this._find(item, 'finished').style.display = \"inline-block\";\n                qq(item).addClass(this._classes.successIcon);\n            }\n        } else {\n            qq(item).addClass(this._classes.fail);\n            if (this._classes.failIcon) {\n                this._find(item, 'finished').style.display = \"inline-block\";\n                qq(item).addClass(this._classes.failIcon);\n            }\n            if (this._options.retry.showButton && !this._preventRetries[id]) {\n                qq(item).addClass(this._classes.retryable);\n            }\n            this._controlFailureTextDisplay(item, result);\n        }\n    },\n    _onUpload: function _onUpload(id, fileName) {\n        qq.FineUploaderBasic.prototype._onUpload.apply(this, arguments);\n\n        var item = this.getItemByFileId(id);\n        this._showSpinner(item);\n    },\n    _onBeforeAutoRetry: function _onBeforeAutoRetry(id) {\n        var item, progressBar, cancelLink, failTextEl, retryNumForDisplay, maxAuto, retryNote;\n\n        qq.FineUploaderBasic.prototype._onBeforeAutoRetry.apply(this, arguments);\n\n        item = this.getItemByFileId(id);\n        progressBar = this._find(item, 'progressBar');\n\n        this._showCancelLink(item);\n        progressBar.style.width = 0;\n        qq(progressBar).hide();\n\n        if (this._options.retry.showAutoRetryNote) {\n            failTextEl = this._find(item, 'statusText');\n            retryNumForDisplay = this._autoRetries[id] + 1;\n            maxAuto = this._options.retry.maxAutoAttempts;\n\n            retryNote = this._options.retry.autoRetryNote.replace(/\\{retryNum\\}/g, retryNumForDisplay);\n            retryNote = retryNote.replace(/\\{maxAuto\\}/g, maxAuto);\n\n            qq(failTextEl).setText(retryNote);\n            if (retryNumForDisplay === 1) {\n                qq(item).addClass(this._classes.retrying);\n            }\n        }\n    },\n    //return false if we should not attempt the requested retry\n    _onBeforeManualRetry: function _onBeforeManualRetry(id) {\n        if (qq.FineUploaderBasic.prototype._onBeforeManualRetry.apply(this, arguments)) {\n            var item = this.getItemByFileId(id);\n            this._find(item, 'progressBar').style.width = 0;\n            qq(item).removeClass(this._classes.fail);\n            qq(this._find(item, 'statusText')).clearText();\n            this._showSpinner(item);\n            this._showCancelLink(item);\n            return true;\n        }\n        return false;\n    },\n    _addToList: function _addToList(id, fileName) {\n        var item = qq.toElement(this._options.fileTemplate);\n        if (this._options.disableCancelForFormUploads && !qq.isXhrUploadSupported()) {\n            var cancelLink = this._find(item, 'cancel');\n            qq(cancelLink).remove();\n        }\n\n        item.qqFileId = id;\n\n        var fileElement = this._find(item, 'file');\n        qq(fileElement).setText(this._options.formatFileName(fileName));\n        qq(this._find(item, 'size')).hide();\n        if (!this._options.multiple) this._clearList();\n        this._listElement.appendChild(item);\n    },\n    _clearList: function _clearList() {\n        this._listElement.innerHTML = '';\n        this.clearStoredFiles();\n    },\n    /**\r\n     * delegate click event for cancel & retry links\r\n     **/\n    _bindCancelAndRetryEvents: function _bindCancelAndRetryEvents() {\n        var self = this,\n            list = this._listElement;\n\n        this._disposeSupport.attach(list, 'click', function (e) {\n            e = e || window.event;\n            var target = e.target || e.srcElement;\n\n            if (qq(target).hasClass(self._classes.cancel) || qq(target).hasClass(self._classes.retry)) {\n                qq.preventDefault(e);\n\n                var item = target.parentNode;\n                while (item.qqFileId == undefined) {\n                    item = target = target.parentNode;\n                }\n\n                if (qq(target).hasClass(self._classes.cancel)) {\n                    self.cancel(item.qqFileId);\n                } else {\n                    qq(item).removeClass(self._classes.retryable);\n                    self.retry(item.qqFileId);\n                }\n            }\n        });\n    },\n    _formatProgress: function _formatProgress(uploadedSize, totalSize) {\n        var message = this._options.text.formatProgress;\n        function r(name, replacement) {\n            message = message.replace(name, replacement);\n        }\n\n        r('{percent}', Math.round(uploadedSize / totalSize * 100));\n        r('{total_size}', this._formatSize(totalSize));\n        return message;\n    },\n    _controlFailureTextDisplay: function _controlFailureTextDisplay(item, response) {\n        var mode, maxChars, responseProperty, failureReason, shortFailureReason;\n\n        mode = this._options.failedUploadTextDisplay.mode;\n        maxChars = this._options.failedUploadTextDisplay.maxChars;\n        responseProperty = this._options.failedUploadTextDisplay.responseProperty;\n\n        if (mode === 'custom') {\n            failureReason = response[responseProperty];\n            if (failureReason) {\n                if (failureReason.length > maxChars) {\n                    shortFailureReason = failureReason.substring(0, maxChars) + '...';\n                }\n            } else {\n                failureReason = this._options.text.failUpload;\n                this.log(\"'\" + responseProperty + \"' is not a valid property on the server response.\", 'warn');\n            }\n\n            qq(this._find(item, 'statusText')).setText(shortFailureReason || failureReason);\n\n            if (this._options.failedUploadTextDisplay.enableTooltip) {\n                this._showTooltip(item, failureReason);\n            }\n        } else if (mode === 'default') {\n            qq(this._find(item, 'statusText')).setText(this._options.text.failUpload);\n        } else if (mode !== 'none') {\n            this.log(\"failedUploadTextDisplay.mode value of '\" + mode + \"' is not valid\", 'warn');\n        }\n    },\n    //TODO turn this into a real tooltip, with click trigger (so it is usable on mobile devices).  See case #355 for details.\n    _showTooltip: function _showTooltip(item, text) {\n        item.title = text;\n    },\n    _showSpinner: function _showSpinner(item) {\n        var spinnerEl = this._find(item, 'spinner');\n        spinnerEl.style.display = \"inline-block\";\n    },\n    _showCancelLink: function _showCancelLink(item) {\n        if (!this._options.disableCancelForFormUploads || qq.isXhrUploadSupported()) {\n            var cancelLink = this._find(item, 'cancel');\n            cancelLink.style.display = 'inline';\n        }\n    },\n    _error: function _error(code, fileName) {\n        var message = qq.FineUploaderBasic.prototype._error.apply(this, arguments);\n        this._options.showMessage(message);\n    }\n});\n/**\r\n * Class for uploading files, uploading itself is handled by child classes\r\n */\n/*globals qq*/\nqq.UploadHandler = function (o) {\n    \"use strict\";\n\n    var queue = [],\n        options,\n        log,\n        dequeue,\n        handlerImpl;\n\n    // Default options, can be overridden by the user\n    options = {\n        debug: false,\n        forceMultipart: true,\n        paramsInBody: false,\n        paramsStore: {},\n        endpointStore: {},\n        maxConnections: 3, // maximum number of concurrent uploads\n        uuidParamName: 'qquuid',\n        totalFileSizeParamName: 'qqtotalfilesize',\n        chunking: {\n            enabled: false,\n            partSize: 2000000, //bytes\n            paramNames: {\n                partIndex: 'qqpartindex',\n                partByteOffset: 'qqpartbyteoffset',\n                chunkSize: 'qqchunksize',\n                totalParts: 'qqtotalparts',\n                filename: 'qqfilename'\n            }\n        },\n        resume: {\n            enabled: false,\n            id: null,\n            cookiesExpireIn: 7, //days\n            paramNames: {\n                resuming: \"qqresume\"\n            }\n        },\n        log: function log(str, level) {},\n        onProgress: function onProgress(id, fileName, loaded, total) {},\n        onComplete: function onComplete(id, fileName, response, xhr) {},\n        onCancel: function onCancel(id, fileName) {},\n        onUpload: function onUpload(id, fileName) {},\n        onUploadChunk: function onUploadChunk(id, fileName, chunkData) {},\n        onAutoRetry: function onAutoRetry(id, fileName, response, xhr) {},\n        onResume: function onResume(id, fileName, chunkData) {}\n\n    };\n    qq.extend(options, o);\n\n    log = options.log;\n\n    /**\r\n     * Removes element from queue, starts upload of next\r\n     */\n    dequeue = function dequeue(id) {\n        var i = qq.indexOf(queue, id),\n            max = options.maxConnections,\n            nextId;\n\n        queue.splice(i, 1);\n\n        if (queue.length >= max && i < max) {\n            nextId = queue[max - 1];\n            handlerImpl.upload(nextId);\n        }\n    };\n\n    if (qq.isXhrUploadSupported()) {\n        handlerImpl = new qq.UploadHandlerXhr(options, dequeue, log);\n    } else {\n        handlerImpl = new qq.UploadHandlerForm(options, dequeue, log);\n    }\n\n    return {\n        /**\r\n         * Adds file or file input to the queue\r\n         * @returns id\r\n         **/\n        add: function add(file) {\n            return handlerImpl.add(file);\n        },\n        /**\r\n         * Sends the file identified by id\r\n         */\n        upload: function upload(id) {\n            var len = queue.push(id);\n\n            // if too many active uploads, wait...\n            if (len <= options.maxConnections) {\n                return handlerImpl.upload(id);\n            }\n        },\n        retry: function retry(id) {\n            var i = qq.indexOf(queue, id);\n            if (i >= 0) {\n                return handlerImpl.upload(id, true);\n            } else {\n                return this.upload(id);\n            }\n        },\n        /**\r\n         * Cancels file upload by id\r\n         */\n        cancel: function cancel(id) {\n            log('Cancelling ' + id);\n            options.paramsStore.remove(id);\n            handlerImpl.cancel(id);\n            dequeue(id);\n        },\n        /**\r\n         * Cancels all uploads\r\n         */\n        cancelAll: function cancelAll() {\n            qq.each(queue, function (idx, fileId) {\n                this.cancel(fileId);\n            });\n\n            queue = [];\n        },\n        /**\r\n         * Returns name of the file identified by id\r\n         */\n        getName: function getName(id) {\n            return handlerImpl.getName(id);\n        },\n        /**\r\n         * Returns size of the file identified by id\r\n         */\n        getSize: function getSize(id) {\n            if (handlerImpl.getSize) {\n                return handlerImpl.getSize(id);\n            }\n        },\n        getFile: function getFile(id) {\n            if (handlerImpl.getFile) {\n                return handlerImpl.getFile(id);\n            }\n        },\n        /**\r\n         * Returns id of files being uploaded or\r\n         * waiting for their turn\r\n         */\n        getQueue: function getQueue() {\n            return queue;\n        },\n        reset: function reset() {\n            log('Resetting upload handler');\n            queue = [];\n            handlerImpl.reset();\n        },\n        getUuid: function getUuid(id) {\n            return handlerImpl.getUuid(id);\n        },\n        /**\r\n         * Determine if the file exists.\r\n         */\n        isValid: function isValid(id) {\n            return handlerImpl.isValid(id);\n        },\n        getResumableFilesData: function getResumableFilesData() {\n            if (handlerImpl.getResumableFilesData) {\n                return handlerImpl.getResumableFilesData();\n            }\n            return [];\n        }\n    };\n};\n/*globals qq, document, setTimeout*/\n/*jslint white: true*/\nqq.UploadHandlerForm = function (o, uploadCompleteCallback, logCallback) {\n    \"use strict\";\n\n    var options = o,\n        inputs = [],\n        uuids = [],\n        detachLoadEvents = {},\n        uploadComplete = uploadCompleteCallback,\n        log = logCallback,\n        api;\n\n    function attachLoadEvent(iframe, callback) {\n        /*jslint eqeq: true*/\n\n        detachLoadEvents[iframe.id] = qq(iframe).attach('load', function () {\n            log('Received response for ' + iframe.id);\n\n            // when we remove iframe from dom\n            // the request stops, but in IE load\n            // event fires\n            if (!iframe.parentNode) {\n                return;\n            }\n\n            try {\n                // fixing Opera 10.53\n                if (iframe.contentDocument && iframe.contentDocument.body && iframe.contentDocument.body.innerHTML == \"false\") {\n                    // In Opera event is fired second time\n                    // when body.innerHTML changed from false\n                    // to server response approx. after 1 sec\n                    // when we upload file with iframe\n                    return;\n                }\n            } catch (error) {\n                //IE may throw an \"access is denied\" error when attempting to access contentDocument on the iframe in some cases\n                log('Error when attempting to access iframe during handling of upload response (' + error + \")\", 'error');\n            }\n\n            callback();\n        });\n    }\n\n    /**\r\n     * Returns json object received by iframe from server.\r\n     */\n    function getIframeContentJson(iframe) {\n        /*jshint evil: true*/\n\n        var response;\n\n        //IE may throw an \"access is denied\" error when attempting to access contentDocument on the iframe in some cases\n        try {\n            // iframe.contentWindow.document - for IE<7\n            var doc = iframe.contentDocument || iframe.contentWindow.document,\n                innerHTML = doc.body.innerHTML;\n\n            log(\"converting iframe's innerHTML to JSON\");\n            log(\"innerHTML = \" + innerHTML);\n            //plain text response may be wrapped in <pre> tag\n            if (innerHTML && innerHTML.match(/^<pre/i)) {\n                innerHTML = doc.body.firstChild.firstChild.nodeValue;\n            }\n            response = eval(\"(\" + innerHTML + \")\");\n        } catch (error) {\n            log('Error when attempting to parse form upload response (' + error + \")\", 'error');\n            response = { success: false };\n        }\n\n        return response;\n    }\n\n    /**\r\n     * Creates iframe with unique name\r\n     */\n    function createIframe(id) {\n        // We can't use following code as the name attribute\n        // won't be properly registered in IE6, and new window\n        // on form submit will open\n        // var iframe = document.createElement('iframe');\n        // iframe.setAttribute('name', id);\n\n        var iframe = qq.toElement('<iframe src=\"javascript:false;\" name=\"' + id + '\" />');\n        // src=\"javascript:false;\" removes ie6 prompt on https\n\n        iframe.setAttribute('id', id);\n\n        iframe.style.display = 'none';\n        document.body.appendChild(iframe);\n\n        return iframe;\n    }\n\n    /**\r\n     * Creates form, that will be submitted to iframe\r\n     */\n    function createForm(id, iframe) {\n        var params = options.paramsStore.getParams(id),\n            protocol = options.demoMode ? \"GET\" : \"POST\",\n            form = qq.toElement('<form method=\"' + protocol + '\" enctype=\"multipart/form-data\"></form>'),\n            endpoint = options.endpointStore.getEndpoint(id),\n            url = endpoint;\n\n        params[options.uuidParamName] = uuids[id];\n\n        if (!options.paramsInBody) {\n            url = qq.obj2url(params, endpoint);\n        } else {\n            qq.obj2Inputs(params, form);\n        }\n\n        form.setAttribute('action', url);\n        form.setAttribute('target', iframe.name);\n        form.style.display = 'none';\n        document.body.appendChild(form);\n\n        return form;\n    }\n\n    api = {\n        add: function add(fileInput) {\n            fileInput.setAttribute('name', options.inputName);\n\n            var id = inputs.push(fileInput) - 1;\n            uuids[id] = qq.getUniqueId();\n\n            // remove file input from DOM\n            if (fileInput.parentNode) {\n                qq(fileInput).remove();\n            }\n\n            return id;\n        },\n        getName: function getName(id) {\n            /*jslint regexp: true*/\n\n            // get input value and remove path to normalize\n            return inputs[id].value.replace(/.*(\\/|\\\\)/, \"\");\n        },\n        isValid: function isValid(id) {\n            return inputs[id] !== undefined;\n        },\n        reset: function reset() {\n            qq.UploadHandler.prototype.reset.apply(this, arguments);\n            inputs = [];\n            uuids = [];\n            detachLoadEvents = {};\n        },\n        getUuid: function getUuid(id) {\n            return uuids[id];\n        },\n        cancel: function cancel(id) {\n            options.onCancel(id, this.getName(id));\n\n            delete inputs[id];\n            delete uuids[id];\n            delete detachLoadEvents[id];\n\n            var iframe = document.getElementById(id);\n            if (iframe) {\n                // to cancel request set src to something else\n                // we use src=\"javascript:false;\" because it doesn't\n                // trigger ie6 prompt on https\n                iframe.setAttribute('src', 'java' + String.fromCharCode(115) + 'cript:false;'); //deal with \"JSLint: javascript URL\" warning, which apparently cannot be turned off\n\n                qq(iframe).remove();\n            }\n        },\n        upload: function upload(id) {\n            var input = inputs[id],\n                fileName = api.getName(id),\n                iframe = createIframe(id),\n                form = createForm(id, iframe);\n\n            if (!input) {\n                throw new Error('file with passed id was not added, or already uploaded or cancelled');\n            }\n\n            options.onUpload(id, this.getName(id));\n\n            form.appendChild(input);\n\n            attachLoadEvent(iframe, function () {\n                log('iframe loaded');\n\n                var response = getIframeContentJson(iframe);\n\n                // timeout added to fix busy state in FF3.6\n                setTimeout(function () {\n                    detachLoadEvents[id]();\n                    delete detachLoadEvents[id];\n                    qq(iframe).remove();\n                }, 1);\n\n                if (!response.success) {\n                    if (options.onAutoRetry(id, fileName, response)) {\n                        return;\n                    }\n                }\n                options.onComplete(id, fileName, response);\n                uploadComplete(id);\n            });\n\n            log('Sending upload request for ' + id);\n            form.submit();\n            qq(form).remove();\n\n            return id;\n        }\n    };\n\n    return api;\n};\n/*globals qq, File, XMLHttpRequest, FormData*/\nqq.UploadHandlerXhr = function (o, uploadCompleteCallback, logCallback) {\n    \"use strict\";\n\n    var options = o,\n        uploadComplete = uploadCompleteCallback,\n        log = logCallback,\n        fileState = [],\n        cookieItemDelimiter = \"|\",\n        chunkFiles = options.chunking.enabled && qq.isFileChunkingSupported(),\n        resumeEnabled = options.resume.enabled && chunkFiles && qq.areCookiesEnabled(),\n        resumeId = getResumeId(),\n        multipart = options.forceMultipart || options.paramsInBody,\n        api;\n\n    function addChunkingSpecificParams(id, params, chunkData) {\n        var size = api.getSize(id),\n            name = api.getName(id);\n\n        params[options.chunking.paramNames.partIndex] = chunkData.part;\n        params[options.chunking.paramNames.partByteOffset] = chunkData.start;\n        params[options.chunking.paramNames.chunkSize] = chunkData.end - chunkData.start;\n        params[options.chunking.paramNames.totalParts] = chunkData.count;\n        params[options.totalFileSizeParamName] = size;\n\n        /**\r\n         * When a Blob is sent in a multipart request, the filename value in the content-disposition header is either \"blob\"\r\n         * or an empty string.  So, we will need to include the actual file name as a param in this case.\r\n         */\n        if (multipart) {\n            params[options.chunking.paramNames.filename] = name;\n        }\n    }\n\n    function addResumeSpecificParams(params) {\n        params[options.resume.paramNames.resuming] = true;\n    }\n\n    function getChunk(file, startByte, endByte) {\n        if (file.slice) {\n            return file.slice(startByte, endByte);\n        } else if (file.mozSlice) {\n            return file.mozSlice(startByte, endByte);\n        } else if (file.webkitSlice) {\n            return file.webkitSlice(startByte, endByte);\n        }\n    }\n\n    function getChunkData(id, chunkIndex) {\n        var chunkSize = options.chunking.partSize,\n            fileSize = api.getSize(id),\n            file = fileState[id].file,\n            startBytes = chunkSize * chunkIndex,\n            endBytes = startBytes + chunkSize >= fileSize ? fileSize : startBytes + chunkSize,\n            totalChunks = getTotalChunks(id);\n\n        return {\n            part: chunkIndex,\n            start: startBytes,\n            end: endBytes,\n            count: totalChunks,\n            blob: getChunk(file, startBytes, endBytes)\n        };\n    }\n\n    function getTotalChunks(id) {\n        var fileSize = api.getSize(id),\n            chunkSize = options.chunking.partSize;\n\n        return Math.ceil(fileSize / chunkSize);\n    }\n\n    function createXhr(id) {\n        fileState[id].xhr = new XMLHttpRequest();\n        return fileState[id].xhr;\n    }\n\n    function setParamsAndGetEntityToSend(params, xhr, fileOrBlob, id) {\n        var formData = new FormData(),\n            protocol = options.demoMode ? \"GET\" : \"POST\",\n            endpoint = options.endpointStore.getEndpoint(id),\n            url = endpoint,\n            name = api.getName(id),\n            size = api.getSize(id);\n\n        params[options.uuidParamName] = fileState[id].uuid;\n\n        if (multipart) {\n            params[options.totalFileSizeParamName] = size;\n        }\n\n        //build query string\n        if (!options.paramsInBody) {\n            params[options.inputName] = name;\n            url = qq.obj2url(params, endpoint);\n        }\n\n        xhr.open(protocol, url, true);\n        if (multipart) {\n            if (options.paramsInBody) {\n                qq.obj2FormData(params, formData);\n            }\n\n            formData.append(options.inputName, fileOrBlob);\n            return formData;\n        }\n\n        return fileOrBlob;\n    }\n\n    function setHeaders(id, xhr) {\n        var extraHeaders = options.customHeaders,\n            name = api.getName(id),\n            file = fileState[id].file;\n\n        xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n        xhr.setRequestHeader(\"Cache-Control\", \"no-cache\");\n\n        if (!multipart) {\n            xhr.setRequestHeader(\"Content-Type\", \"application/octet-stream\");\n            //NOTE: return mime type in xhr works on chrome 16.0.9 firefox 11.0a2\n            xhr.setRequestHeader(\"X-Mime-Type\", file.type);\n        }\n\n        qq.each(extraHeaders, function (name, val) {\n            xhr.setRequestHeader(name, val);\n        });\n    }\n\n    function handleCompletedFile(id, response, xhr) {\n        var name = api.getName(id),\n            size = api.getSize(id);\n\n        fileState[id].attemptingResume = false;\n\n        options.onProgress(id, name, size, size);\n\n        options.onComplete(id, name, response, xhr);\n        delete fileState[id].xhr;\n        uploadComplete(id);\n    }\n\n    function uploadNextChunk(id) {\n        var chunkData = getChunkData(id, fileState[id].remainingChunkIdxs[0]),\n            xhr = createXhr(id),\n            size = api.getSize(id),\n            name = api.getName(id),\n            toSend,\n            params;\n\n        if (fileState[id].loaded === undefined) {\n            fileState[id].loaded = 0;\n        }\n\n        persistChunkData(id, chunkData);\n\n        xhr.onreadystatechange = getReadyStateChangeHandler(id, xhr);\n\n        xhr.upload.onprogress = function (e) {\n            if (e.lengthComputable) {\n                if (fileState[id].loaded < size) {\n                    var totalLoaded = e.loaded + fileState[id].loaded;\n                    options.onProgress(id, name, totalLoaded, size);\n                }\n            }\n        };\n\n        options.onUploadChunk(id, name, getChunkDataForCallback(chunkData));\n\n        params = options.paramsStore.getParams(id);\n        addChunkingSpecificParams(id, params, chunkData);\n\n        if (fileState[id].attemptingResume) {\n            addResumeSpecificParams(params);\n        }\n\n        toSend = setParamsAndGetEntityToSend(params, xhr, chunkData.blob, id);\n        setHeaders(id, xhr);\n\n        log('Sending chunked upload request for ' + id + \": bytes \" + (chunkData.start + 1) + \"-\" + chunkData.end + \" of \" + size);\n        xhr.send(toSend);\n    }\n\n    function handleSuccessfullyCompletedChunk(id, response, xhr) {\n        var chunkIdx = fileState[id].remainingChunkIdxs.shift(),\n            chunkData = getChunkData(id, chunkIdx);\n\n        fileState[id].attemptingResume = false;\n        fileState[id].loaded += chunkData.end - chunkData.start;\n\n        if (fileState[id].remainingChunkIdxs.length > 0) {\n            uploadNextChunk(id);\n        } else {\n            deletePersistedChunkData(id);\n            handleCompletedFile(id, response, xhr);\n        }\n    }\n\n    function isErrorResponse(xhr, response) {\n        return xhr.status !== 200 || !response.success || response.reset;\n    }\n\n    function parseResponse(xhr) {\n        var response;\n\n        try {\n            response = qq.parseJson(xhr.responseText);\n        } catch (error) {\n            log('Error when attempting to parse xhr response text (' + error + ')', 'error');\n            response = {};\n        }\n\n        return response;\n    }\n\n    function handleResetResponse(id) {\n        log('Server has ordered chunking effort to be restarted on next attempt for file ID ' + id, 'error');\n\n        if (resumeEnabled) {\n            deletePersistedChunkData(id);\n        }\n        fileState[id].remainingChunkIdxs = [];\n        delete fileState[id].loaded;\n    }\n\n    function handleResetResponseOnResumeAttempt(id) {\n        fileState[id].attemptingResume = false;\n        log(\"Server has declared that it cannot handle resume for file ID \" + id + \" - starting from the first chunk\", 'error');\n        api.upload(id, true);\n    }\n\n    function handleNonResetErrorResponse(id, response, xhr) {\n        var name = api.getName(id);\n\n        if (options.onAutoRetry(id, name, response, xhr)) {\n            return;\n        } else {\n            handleCompletedFile(id, response, xhr);\n        }\n    }\n\n    function onComplete(id, xhr) {\n        var response;\n\n        // the request was aborted/cancelled\n        if (!fileState[id]) {\n            return;\n        }\n\n        log(\"xhr - server response received for \" + id);\n        log(\"responseText = \" + xhr.responseText);\n        response = parseResponse(xhr);\n\n        if (isErrorResponse(xhr, response)) {\n            if (response.reset) {\n                handleResetResponse(id);\n            }\n\n            if (fileState[id].attemptingResume && response.reset) {\n                handleResetResponseOnResumeAttempt(id);\n            } else {\n                handleNonResetErrorResponse(id, response, xhr);\n            }\n        } else if (chunkFiles) {\n            handleSuccessfullyCompletedChunk(id, response, xhr);\n        } else {\n            handleCompletedFile(id, response, xhr);\n        }\n    }\n\n    function getChunkDataForCallback(chunkData) {\n        return {\n            partIndex: chunkData.part,\n            startByte: chunkData.start + 1,\n            endByte: chunkData.end,\n            totalParts: chunkData.count\n        };\n    }\n\n    function getReadyStateChangeHandler(id, xhr) {\n        return function () {\n            if (xhr.readyState === 4) {\n                onComplete(id, xhr);\n            }\n        };\n    }\n\n    function persistChunkData(id, chunkData) {\n        var fileUuid = api.getUuid(id),\n            cookieName = getChunkDataCookieName(id),\n            cookieValue = fileUuid + cookieItemDelimiter + chunkData.part,\n            cookieExpDays = options.resume.cookiesExpireIn;\n\n        qq.setCookie(cookieName, cookieValue, cookieExpDays);\n    }\n\n    function deletePersistedChunkData(id) {\n        var cookieName = getChunkDataCookieName(id);\n\n        qq.deleteCookie(cookieName);\n    }\n\n    function getPersistedChunkData(id) {\n        var chunkCookieValue = qq.getCookie(getChunkDataCookieName(id)),\n            delimiterIndex,\n            uuid,\n            partIndex;\n\n        if (chunkCookieValue) {\n            delimiterIndex = chunkCookieValue.indexOf(cookieItemDelimiter);\n            uuid = chunkCookieValue.substr(0, delimiterIndex);\n            partIndex = parseInt(chunkCookieValue.substr(delimiterIndex + 1, chunkCookieValue.length - delimiterIndex), 10);\n\n            return {\n                uuid: uuid,\n                part: partIndex\n            };\n        }\n    }\n\n    function getChunkDataCookieName(id) {\n        var filename = api.getName(id),\n            fileSize = api.getSize(id),\n            maxChunkSize = options.chunking.partSize,\n            cookieName;\n\n        cookieName = \"qqfilechunk\" + cookieItemDelimiter + encodeURIComponent(filename) + cookieItemDelimiter + fileSize + cookieItemDelimiter + maxChunkSize;\n\n        if (resumeId !== undefined) {\n            cookieName += cookieItemDelimiter + resumeId;\n        }\n\n        return cookieName;\n    }\n\n    function getResumeId() {\n        if (options.resume.id !== null && options.resume.id !== undefined && !qq.isFunction(options.resume.id) && !qq.isObject(options.resume.id)) {\n\n            return options.resume.id;\n        }\n    }\n\n    function handleFileChunkingUpload(id, retry) {\n        var name = api.getName(id),\n            firstChunkIndex = 0,\n            persistedChunkInfoForResume,\n            firstChunkDataForResume,\n            currentChunkIndex;\n\n        if (!fileState[id].remainingChunkIdxs || fileState[id].remainingChunkIdxs.length === 0) {\n            fileState[id].remainingChunkIdxs = [];\n\n            if (resumeEnabled && !retry) {\n                persistedChunkInfoForResume = getPersistedChunkData(id);\n                if (persistedChunkInfoForResume) {\n                    firstChunkDataForResume = getChunkData(id, persistedChunkInfoForResume.part);\n                    if (options.onResume(id, name, getChunkDataForCallback(firstChunkDataForResume)) !== false) {\n                        firstChunkIndex = persistedChunkInfoForResume.part;\n                        fileState[id].uuid = persistedChunkInfoForResume.uuid;\n                        fileState[id].loaded = firstChunkDataForResume.start;\n                        fileState[id].attemptingResume = true;\n                        log('Resuming ' + name + \" at partition index \" + firstChunkIndex);\n                    }\n                }\n            }\n\n            for (currentChunkIndex = getTotalChunks(id) - 1; currentChunkIndex >= firstChunkIndex; currentChunkIndex -= 1) {\n                fileState[id].remainingChunkIdxs.unshift(currentChunkIndex);\n            }\n        }\n\n        uploadNextChunk(id);\n    }\n\n    function handleStandardFileUpload(id) {\n        var file = fileState[id].file,\n            name = api.getName(id),\n            xhr,\n            params,\n            toSend;\n\n        fileState[id].loaded = 0;\n\n        xhr = createXhr(id);\n\n        xhr.upload.onprogress = function (e) {\n            if (e.lengthComputable) {\n                fileState[id].loaded = e.loaded;\n                options.onProgress(id, name, e.loaded, e.total);\n            }\n        };\n\n        xhr.onreadystatechange = getReadyStateChangeHandler(id, xhr);\n\n        params = options.paramsStore.getParams(id);\n        toSend = setParamsAndGetEntityToSend(params, xhr, file, id);\n        setHeaders(id, xhr);\n\n        log('Sending upload request for ' + id);\n        xhr.send(toSend);\n    }\n\n    api = {\n        /**\r\n         * Adds file to the queue\r\n         * Returns id to use with upload, cancel\r\n         **/\n        add: function add(file) {\n            if (!(file instanceof File)) {\n                throw new Error('Passed obj in not a File (in qq.UploadHandlerXhr)');\n            }\n\n            var id = fileState.push({ file: file }) - 1;\n            fileState[id].uuid = qq.getUniqueId();\n\n            return id;\n        },\n        getName: function getName(id) {\n            var file = fileState[id].file;\n            // fix missing name in Safari 4\n            //NOTE: fixed missing name firefox 11.0a2 file.fileName is actually undefined\n            return file.fileName !== null && file.fileName !== undefined ? file.fileName : file.name;\n        },\n        getSize: function getSize(id) {\n            /*jshint eqnull: true*/\n            var file = fileState[id].file;\n            return file.fileSize != null ? file.fileSize : file.size;\n        },\n        getFile: function getFile(id) {\n            if (fileState[id]) {\n                return fileState[id].file;\n            }\n        },\n        /**\r\n         * Returns uploaded bytes for file identified by id\r\n         */\n        getLoaded: function getLoaded(id) {\n            return fileState[id].loaded || 0;\n        },\n        isValid: function isValid(id) {\n            return fileState[id] !== undefined;\n        },\n        reset: function reset() {\n            fileState = [];\n        },\n        getUuid: function getUuid(id) {\n            return fileState[id].uuid;\n        },\n        /**\r\n         * Sends the file identified by id to the server\r\n         */\n        upload: function upload(id, retry) {\n            var name = this.getName(id);\n\n            options.onUpload(id, name);\n\n            if (chunkFiles) {\n                handleFileChunkingUpload(id, retry);\n            } else {\n                handleStandardFileUpload(id);\n            }\n        },\n        cancel: function cancel(id) {\n            options.onCancel(id, this.getName(id));\n\n            if (fileState[id].xhr) {\n                fileState[id].xhr.abort();\n            }\n\n            if (resumeEnabled) {\n                deletePersistedChunkData(id);\n            }\n\n            delete fileState[id];\n        },\n        getResumableFilesData: function getResumableFilesData() {\n            var matchingCookieNames = [],\n                resumableFilesData = [];\n\n            if (chunkFiles && resumeEnabled) {\n                if (resumeId === undefined) {\n                    matchingCookieNames = qq.getCookieNames(new RegExp(\"^qqfilechunk\\\\\" + cookieItemDelimiter + \".+\\\\\" + cookieItemDelimiter + \"\\\\d+\\\\\" + cookieItemDelimiter + options.chunking.partSize + \"=\"));\n                } else {\n                    matchingCookieNames = qq.getCookieNames(new RegExp(\"^qqfilechunk\\\\\" + cookieItemDelimiter + \".+\\\\\" + cookieItemDelimiter + \"\\\\d+\\\\\" + cookieItemDelimiter + options.chunking.partSize + \"\\\\\" + cookieItemDelimiter + resumeId + \"=\"));\n                }\n\n                qq.each(matchingCookieNames, function (idx, cookieName) {\n                    var cookiesNameParts = cookieName.split(cookieItemDelimiter);\n                    var cookieValueParts = qq.getCookie(cookieName).split(cookieItemDelimiter);\n\n                    resumableFilesData.push({\n                        name: decodeURIComponent(cookiesNameParts[1]),\n                        size: cookiesNameParts[2],\n                        uuid: cookieValueParts[0],\n                        partIdx: cookieValueParts[1]\n                    });\n                });\n\n                return resumableFilesData;\n            }\n            return [];\n        }\n    };\n\n    return api;\n};\n/*globals jQuery, qq*/\n(function ($) {\n    \"use strict\";\n\n    var uploader, $el, init, dataStore, pluginOption, pluginOptions, addCallbacks, _transformVariables, isValidCommand, delegateCommand;\n\n    pluginOptions = ['uploaderType'];\n\n    init = function init(options) {\n        if (options) {\n            var xformedOpts = _transformVariables(options);\n            addCallbacks(xformedOpts);\n\n            if (pluginOption('uploaderType') === 'basic') {\n                uploader(new qq.FineUploaderBasic(xformedOpts));\n            } else {\n                uploader(new qq.FineUploader(xformedOpts));\n            }\n        }\n\n        return $el;\n    };\n\n    dataStore = function dataStore(key, val) {\n        var data = $el.data('fineuploader');\n\n        if (val) {\n            if (data === undefined) {\n                data = {};\n            }\n            data[key] = val;\n            $el.data('fineuploader', data);\n        } else {\n            if (data === undefined) {\n                return null;\n            }\n            return data[key];\n        }\n    };\n\n    //the underlying Fine Uploader instance is stored in jQuery's data stored, associated with the element\n    // tied to this instance of the plug-in\n    uploader = function uploader(instanceToStore) {\n        return dataStore('uploader', instanceToStore);\n    };\n\n    pluginOption = function pluginOption(option, optionVal) {\n        return dataStore(option, optionVal);\n    };\n\n    //implement all callbacks defined in Fine Uploader as functions that trigger appropriately names events and\n    // return the result of executing the bound handler back to Fine Uploader\n    addCallbacks = function addCallbacks(transformedOpts) {\n        var callbacks = transformedOpts.callbacks = {};\n\n        $.each(new qq.FineUploaderBasic()._options.callbacks, function (prop, func) {\n            var name, $callbackEl;\n\n            name = /^on(\\w+)/.exec(prop)[1];\n            name = name.substring(0, 1).toLowerCase() + name.substring(1);\n            $callbackEl = $el;\n\n            callbacks[prop] = function () {\n                var args = Array.prototype.slice.call(arguments);\n                return $callbackEl.triggerHandler(name, args);\n            };\n        });\n    };\n\n    //transform jQuery objects into HTMLElements, and pass along all other option properties\n    _transformVariables = function transformVariables(source, dest) {\n        var xformed, arrayVals;\n\n        if (dest === undefined) {\n            if (source.uploaderType !== 'basic') {\n                xformed = { element: $el[0] };\n            } else {\n                xformed = {};\n            }\n        } else {\n            xformed = dest;\n        }\n\n        $.each(source, function (prop, val) {\n            if ($.inArray(prop, pluginOptions) >= 0) {\n                pluginOption(prop, val);\n            } else if (val instanceof $) {\n                xformed[prop] = val[0];\n            } else if ($.isPlainObject(val)) {\n                xformed[prop] = {};\n                _transformVariables(val, xformed[prop]);\n            } else if ($.isArray(val)) {\n                arrayVals = [];\n                $.each(val, function (idx, arrayVal) {\n                    if (arrayVal instanceof $) {\n                        $.merge(arrayVals, arrayVal);\n                    } else {\n                        arrayVals.push(arrayVal);\n                    }\n                });\n                xformed[prop] = arrayVals;\n            } else {\n                xformed[prop] = val;\n            }\n        });\n\n        if (dest === undefined) {\n            return xformed;\n        }\n    };\n\n    isValidCommand = function isValidCommand(command) {\n        return $.type(command) === \"string\" && !command.match(/^_/) && //enforce private methods convention\n        uploader()[command] !== undefined;\n    };\n\n    //assuming we have already verified that this is a valid command, call the associated function in the underlying\n    // Fine Uploader instance (passing along the arguments from the caller) and return the result of the call back to the caller\n    delegateCommand = function delegateCommand(command) {\n        var xformedArgs = [],\n            origArgs = Array.prototype.slice.call(arguments, 1);\n\n        _transformVariables(origArgs, xformedArgs);\n\n        return uploader()[command].apply(uploader(), xformedArgs);\n    };\n\n    $.fn.fineUploader = function (optionsOrCommand) {\n        var self = this,\n            selfArgs = arguments,\n            retVals = [];\n\n        this.each(function (index, el) {\n            $el = $(el);\n\n            if (uploader() && isValidCommand(optionsOrCommand)) {\n                retVals.push(delegateCommand.apply(self, selfArgs));\n\n                if (self.length === 1) {\n                    return false;\n                }\n            } else if ((typeof optionsOrCommand === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(optionsOrCommand)) === 'object' || !optionsOrCommand) {\n                init.apply(self, selfArgs);\n            } else {\n                $.error('Method ' + optionsOrCommand + ' does not exist on jQuery.fineUploader');\n            }\n        });\n\n        if (retVals.length === 1) {\n            return retVals[0];\n        } else if (retVals.length > 1) {\n            return retVals;\n        }\n\n        return this;\n    };\n})(_jquery2.default);\n\n/***/ }),\n/* 79 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _jquery = __webpack_require__(0);\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar $ = _jquery2.default;\n(function (jQuery) {\n\n    /**\r\n     * Sets or gets the fullscreen state.\r\n     * \r\n     * @param {boolean=} state\r\n     *            True to enable fullscreen mode, false to disable it. If not\r\n     *            specified then the current fullscreen state is returned.\r\n     * @return {boolean|Element|jQuery|null}\r\n     *            When querying the fullscreen state then the current fullscreen\r\n     *            element (or true if browser doesn't support it) is returned\r\n     *            when browser is currently in full screen mode. False is returned\r\n     *            if browser is not in full screen mode. Null is returned if \r\n     *            browser doesn't support fullscreen mode at all. When setting \r\n     *            the fullscreen state then the current jQuery selection is \r\n     *            returned for chaining.\r\n     * @this {jQuery}\r\n     */\n    function fullScreen(state) {\n        var e, func, doc;\n\n        // Do nothing when nothing was selected\n        if (!this.length) return this;\n\n        // We only use the first selected element because it doesn't make sense\n        // to fullscreen multiple elements.\n        e = /** @type {Element} */this[0];\n\n        // Find the real element and the document (Depends on whether the\n        // document itself or a HTML element was selected)\n        if (e.ownerDocument) {\n            doc = e.ownerDocument;\n        } else {\n            doc = e;\n            e = doc.documentElement;\n        }\n\n        // When no state was specified then return the current state.\n        if (state == null) {\n            // When fullscreen mode is not supported then return null\n            if (!( /** @type {?Function} */doc[\"exitFullscreen\"] || /** @type {?Function} */doc[\"webkitExitFullscreen\"] || /** @type {?Function} */doc[\"webkitCancelFullScreen\"] || /** @type {?Function} */doc[\"msExitFullscreen\"] || /** @type {?Function} */doc[\"mozCancelFullScreen\"])) {\n                return null;\n            }\n\n            // Check fullscreen state\n            state = !!doc[\"fullscreenElement\"] || !!doc[\"msFullscreenElement\"] || !!doc[\"webkitIsFullScreen\"] || !!doc[\"mozFullScreen\"];\n            if (!state) return state;\n\n            // Return current fullscreen element or \"true\" if browser doesn't\n            // support this\n            return (/** @type {?Element} */doc[\"fullscreenElement\"] || /** @type {?Element} */doc[\"webkitFullscreenElement\"] || /** @type {?Element} */doc[\"webkitCurrentFullScreenElement\"] || /** @type {?Element} */doc[\"msFullscreenElement\"] || /** @type {?Element} */doc[\"mozFullScreenElement\"] || state\n            );\n        }\n\n        // When state was specified then enter or exit fullscreen mode.\n        if (state) {\n            // Enter fullscreen\n            func = /** @type {?Function} */e[\"requestFullscreen\"] || /** @type {?Function} */e[\"webkitRequestFullscreen\"] || /** @type {?Function} */e[\"webkitRequestFullScreen\"] || /** @type {?Function} */e[\"msRequestFullscreen\"] || /** @type {?Function} */e[\"mozRequestFullScreen\"];\n            if (func) {\n                func.call(e);\n            }\n            return this;\n        } else {\n            // Exit fullscreen\n            func = /** @type {?Function} */doc[\"exitFullscreen\"] || /** @type {?Function} */doc[\"webkitExitFullscreen\"] || /** @type {?Function} */doc[\"webkitCancelFullScreen\"] || /** @type {?Function} */doc[\"msExitFullscreen\"] || /** @type {?Function} */doc[\"mozCancelFullScreen\"];\n            if (func) func.call(doc);\n            return this;\n        }\n    }\n\n    /**\r\n     * Toggles the fullscreen mode.\r\n     * \r\n     * @return {!jQuery}\r\n     *            The jQuery selection for chaining.\r\n     * @this {jQuery}\r\n     */\n    function toggleFullScreen() {\n        return (/** @type {!jQuery} */fullScreen.call(this, !fullScreen.call(this))\n        );\n    }\n\n    /**\r\n     * Handles the browser-specific fullscreenchange event and triggers\r\n     * a jquery event for it.\r\n     *\r\n     * @param {?Event} event\r\n     *            The fullscreenchange event.\r\n     */\n    function fullScreenChangeHandler(event) {\n        jQuery(document).trigger(new jQuery.Event(\"fullscreenchange\"));\n    }\n\n    /**\r\n     * Handles the browser-specific fullscreenerror event and triggers\r\n     * a jquery event for it.\r\n     *\r\n     * @param {?Event} event\r\n     *            The fullscreenerror event.\r\n     */\n    function fullScreenErrorHandler(event) {\n        jQuery(document).trigger(new jQuery.Event(\"fullscreenerror\"));\n    }\n\n    /**\r\n     * Installs the fullscreenchange event handler.\r\n     */\n    function installFullScreenHandlers() {\n        var e, change, error;\n\n        // Determine event name\n        e = document;\n        if (e[\"webkitCancelFullScreen\"]) {\n            change = \"webkitfullscreenchange\";\n            error = \"webkitfullscreenerror\";\n        } else if (e[\"msExitFullscreen\"]) {\n            change = \"MSFullscreenChange\";\n            error = \"MSFullscreenError\";\n        } else if (e[\"mozCancelFullScreen\"]) {\n            change = \"mozfullscreenchange\";\n            error = \"mozfullscreenerror\";\n        } else {\n            change = \"fullscreenchange\";\n            error = \"fullscreenerror\";\n        }\n\n        // Install the event handlers\n        jQuery(document).bind(change, fullScreenChangeHandler);\n        jQuery(document).bind(error, fullScreenErrorHandler);\n    }\n\n    jQuery.fn[\"fullScreen\"] = fullScreen;\n    jQuery.fn[\"toggleFullScreen\"] = toggleFullScreen;\n    installFullScreenHandlers();\n})(_jquery2.default);\n\n/***/ }),\n/* 80 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _jquery = __webpack_require__(0);\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar $ = _jquery2.default;\n(function ($) {\n  $.fn.pajinate = function (options) {\n    var current_page = \"current_page\";var items_per_page = \"items_per_page\";var meta;var defaults = { item_container_id: \".content\", items_per_page: 10, nav_panel_id: \".page_navigation\", nav_info_id: \".info_text\", num_page_links_to_display: 20, start_page: 0, wrap_around: false, nav_label_first: \"First\", nav_label_prev: \"Prev\", nav_label_next: \"Next\", nav_label_last: \"Last\", nav_order: [\"first\", \"prev\", \"num\", \"next\", \"last\"], nav_label_info: \"Showing {0}-{1} of {2} results\", show_first_last: true, abort_on_small_lists: false, jquery_ui: false, jquery_ui_active: \"ui-state-highlight\", jquery_ui_default: \"ui-state-default\", jquery_ui_disabled: \"ui-state-disabled\" };var options = $.extend(defaults, options);var $item_container;var $page_container;var $items;var $nav_panels;var total_page_no_links;var jquery_ui_default_class = options.jquery_ui ? options.jquery_ui_default : \"\";var jquery_ui_active_class = options.jquery_ui ? options.jquery_ui_active : \"\";var jquery_ui_disabled_class = options.jquery_ui ? options.jquery_ui_disabled : \"\";return this.each(function () {\n      $page_container = $(this);$item_container = $(this).find(options.item_container_id);$items = $page_container.find(options.item_container_id).children();if (options.abort_on_small_lists && options.items_per_page >= $items.size()) return $page_container;meta = $page_container;meta.data(current_page, 0);meta.data(items_per_page, options.items_per_page);var total_items = $item_container.children().size();var number_of_pages = Math.ceil(total_items / options.items_per_page);var more = '<span class=\"ellipse more\">...</span>';var less = '<span class=\"ellipse less\">...</span>';var first = !options.show_first_last ? \"\" : '<a class=\"first_link ' + jquery_ui_default_class + '\" href=\"\">' + options.nav_label_first + \"</a>\";var last = !options.show_first_last ? \"\" : '<a class=\"last_link ' + jquery_ui_default_class + '\" href=\"\">' + options.nav_label_last + \"</a>\";var navigation_html = \"\";for (var i = 0; i < options.nav_order.length; i++) {\n        switch (options.nav_order[i]) {case \"first\":\n            navigation_html += first;break;case \"last\":\n            navigation_html += last;break;case \"next\":\n            navigation_html += '<a class=\"next_link ' + jquery_ui_default_class + '\" href=\"\">' + options.nav_label_next + \"</a>\";break;case \"prev\":\n            navigation_html += '<a class=\"previous_link ' + jquery_ui_default_class + '\" href=\"\">' + options.nav_label_prev + \"</a>\";break;case \"num\":\n            navigation_html += less;var current_link = 0;while (number_of_pages > current_link) {\n              navigation_html += '<a class=\"page_link ' + jquery_ui_default_class + '\" href=\"\" longdesc=\"' + current_link + '\">' + (current_link + 1) + \"</a>\";current_link++;\n            }navigation_html += more;break;default:\n            break;}\n      }$nav_panels = $page_container.find(options.nav_panel_id);$nav_panels.html(navigation_html).each(function () {\n        $(this).find(\".page_link:first\").addClass(\"first\");$(this).find(\".page_link:last\").addClass(\"last\");\n      });$nav_panels.children(\".ellipse\").hide();$nav_panels.find(\".previous_link\").next().next().addClass(\"active_page \" + jquery_ui_active_class);$items.hide();$items.slice(0, meta.data(items_per_page)).show();total_page_no_links = $page_container.find(options.nav_panel_id + \":first\").children(\".page_link\").size();options.num_page_links_to_display = Math.min(options.num_page_links_to_display, total_page_no_links);$nav_panels.children(\".page_link\").hide();$nav_panels.each(function () {\n        $(this).children(\".page_link\").slice(0, options.num_page_links_to_display).show();\n      });$page_container.find(\".first_link\").click(function (e) {\n        e.preventDefault();movePageNumbersRight($(this), 0);gotopage(0);\n      });$page_container.find(\".last_link\").click(function (e) {\n        e.preventDefault();var lastPage = total_page_no_links - 1;movePageNumbersLeft($(this), lastPage);gotopage(lastPage);\n      });$page_container.find(\".previous_link\").click(function (e) {\n        e.preventDefault();showPrevPage($(this));\n      });$page_container.find(\".next_link\").click(function (e) {\n        e.preventDefault();showNextPage($(this));\n      });$page_container.find(\".page_link\").click(function (e) {\n        e.preventDefault();gotopage($(this).attr(\"longdesc\"));\n      });gotopage(parseInt(options.start_page));toggleMoreLess();if (!options.wrap_around) tagNextPrev();\n    });function showPrevPage(e) {\n      new_page = parseInt(meta.data(current_page)) - 1;if ($(e).siblings(\".active_page\").prev(\".page_link\").length == true) {\n        movePageNumbersRight(e, new_page);gotopage(new_page);\n      } else if (options.wrap_around) {\n        gotopage(total_page_no_links - 1);\n      }\n    }function showNextPage(e) {\n      new_page = parseInt(meta.data(current_page)) + 1;if ($(e).siblings(\".active_page\").next(\".page_link\").length == true) {\n        movePageNumbersLeft(e, new_page);gotopage(new_page);\n      } else if (options.wrap_around) {\n        gotopage(0);\n      }\n    }function gotopage(page_num) {\n      page_num = parseInt(page_num, 10);var ipp = parseInt(meta.data(items_per_page));start_from = page_num * ipp;end_on = start_from + ipp;var items = $items.hide().slice(start_from, end_on);items.show();$page_container.find(options.nav_panel_id).children(\".page_link[longdesc=\" + page_num + \"]\").addClass(\"active_page \" + jquery_ui_active_class).siblings(\".active_page\").removeClass(\"active_page \" + jquery_ui_active_class);meta.data(current_page, page_num);var $current_page = parseInt(meta.data(current_page) + 1);var total_items = $item_container.children().size();var $number_of_pages = Math.ceil(total_items / options.items_per_page);$page_container.find(options.nav_info_id).html(options.nav_label_info.replace(\"{0}\", start_from + 1).replace(\"{1}\", start_from + items.length).replace(\"{2}\", $items.length).replace(\"{3}\", $current_page).replace(\"{4}\", $number_of_pages));toggleMoreLess();tagNextPrev();if (typeof options.onPageDisplayed !== \"undefined\") {\n        options.onPageDisplayed.call(this, page_num + 1);\n      }\n    }function movePageNumbersLeft(e, new_p) {\n      var new_page = new_p;var $current_active_link = $(e).siblings(\".active_page\");if ($current_active_link.siblings(\".page_link[longdesc=\" + new_page + \"]\").css(\"display\") == \"none\") {\n        $nav_panels.each(function () {\n          $(this).children(\".page_link\").hide().slice(parseInt(new_page - options.num_page_links_to_display + 1), new_page + 1).show();\n        });\n      }\n    }function movePageNumbersRight(e, new_p) {\n      var new_page = new_p;var $current_active_link = $(e).siblings(\".active_page\");if ($current_active_link.siblings(\".page_link[longdesc=\" + new_page + \"]\").css(\"display\") == \"none\") {\n        $nav_panels.each(function () {\n          $(this).children(\".page_link\").hide().slice(new_page, new_page + parseInt(options.num_page_links_to_display)).show();\n        });\n      }\n    }function toggleMoreLess() {\n      if (!$nav_panels.children(\".page_link:visible\").hasClass(\"last\")) {\n        $nav_panels.children(\".more\").show();\n      } else {\n        $nav_panels.children(\".more\").hide();\n      }if (!$nav_panels.children(\".page_link:visible\").hasClass(\"first\")) {\n        $nav_panels.children(\".less\").show();\n      } else {\n        $nav_panels.children(\".less\").hide();\n      }\n    }function tagNextPrev() {\n      if ($nav_panels.children(\".last\").hasClass(\"active_page\")) {\n        $nav_panels.children(\".next_link\").add(\".last_link\").addClass(\"no_more \" + jquery_ui_disabled_class);\n      } else {\n        $nav_panels.children(\".next_link\").add(\".last_link\").removeClass(\"no_more \" + jquery_ui_disabled_class);\n      }if ($nav_panels.children(\".first\").hasClass(\"active_page\")) {\n        $nav_panels.children(\".previous_link\").add(\".first_link\").addClass(\"no_more \" + jquery_ui_disabled_class);\n      } else {\n        $nav_panels.children(\".previous_link\").add(\".first_link\").removeClass(\"no_more \" + jquery_ui_disabled_class);\n      }\n    }\n  };\n})(_jquery2.default);\n\n/***/ }),\n/* 81 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;\n\nvar _typeof2 = __webpack_require__(7);\n\nvar _typeof3 = _interopRequireDefault(_typeof2);\n\nvar _jquery = __webpack_require__(0);\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar $ = _jquery2.default;\n;(function (factory) {\n\t'use strict';\n\n\tif (true) {\n\t\t// AMD\n\t\t!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(0)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t} else if (typeof module !== 'undefined' && module.exports) {\n\t\t// CommonJS\n\t\tmodule.exports = factory(require('jquery'));\n\t} else {\n\t\t// Global\n\t\tfactory(_jquery2.default);\n\t}\n})(function ($) {\n\t'use strict';\n\n\tvar $scrollTo = $.scrollTo = function (target, duration, settings) {\n\t\treturn $(window).scrollTo(target, duration, settings);\n\t};\n\n\t$scrollTo.defaults = {\n\t\taxis: 'xy',\n\t\tduration: 0,\n\t\tlimit: true\n\t};\n\n\tfunction isWin(elem) {\n\t\treturn !elem.nodeName || $.inArray(elem.nodeName.toLowerCase(), ['iframe', '#document', 'html', 'body']) !== -1;\n\t}\n\n\t$.fn.scrollTo = function (target, duration, settings) {\n\t\tif ((typeof duration === 'undefined' ? 'undefined' : (0, _typeof3.default)(duration)) === 'object') {\n\t\t\tsettings = duration;\n\t\t\tduration = 0;\n\t\t}\n\t\tif (typeof settings === 'function') {\n\t\t\tsettings = { onAfter: settings };\n\t\t}\n\t\tif (target === 'max') {\n\t\t\ttarget = 9e9;\n\t\t}\n\n\t\tsettings = $.extend({}, $scrollTo.defaults, settings);\n\t\t// Speed is still recognized for backwards compatibility\n\t\tduration = duration || settings.duration;\n\t\t// Make sure the settings are given right\n\t\tvar queue = settings.queue && settings.axis.length > 1;\n\t\tif (queue) {\n\t\t\t// Let's keep the overall duration\n\t\t\tduration /= 2;\n\t\t}\n\t\tsettings.offset = both(settings.offset);\n\t\tsettings.over = both(settings.over);\n\n\t\treturn this.each(function () {\n\t\t\t// Null target yields nothing, just like jQuery does\n\t\t\tif (target === null) return;\n\n\t\t\tvar win = isWin(this),\n\t\t\t    elem = win ? this.contentWindow || window : this,\n\t\t\t    $elem = $(elem),\n\t\t\t    targ = target,\n\t\t\t    attr = {},\n\t\t\t    toff;\n\n\t\t\tswitch (typeof targ === 'undefined' ? 'undefined' : (0, _typeof3.default)(targ)) {\n\t\t\t\t// A number will pass the regex\n\t\t\t\tcase 'number':\n\t\t\t\tcase 'string':\n\t\t\t\t\tif (/^([+-]=?)?\\d+(\\.\\d+)?(px|%)?$/.test(targ)) {\n\t\t\t\t\t\ttarg = both(targ);\n\t\t\t\t\t\t// We are done\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t// Relative/Absolute selector\n\t\t\t\t\ttarg = win ? $(targ) : $(targ, elem);\n\t\t\t\t/* falls through */\n\t\t\t\tcase 'object':\n\t\t\t\t\tif (targ.length === 0) return;\n\t\t\t\t\t// DOMElement / jQuery\n\t\t\t\t\tif (targ.is || targ.style) {\n\t\t\t\t\t\t// Get the real position of the target\n\t\t\t\t\t\ttoff = (targ = $(targ)).offset();\n\t\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar offset = $.isFunction(settings.offset) && settings.offset(elem, targ) || settings.offset;\n\n\t\t\t$.each(settings.axis.split(''), function (i, axis) {\n\t\t\t\tvar Pos = axis === 'x' ? 'Left' : 'Top',\n\t\t\t\t    pos = Pos.toLowerCase(),\n\t\t\t\t    key = 'scroll' + Pos,\n\t\t\t\t    prev = $elem[key](),\n\t\t\t\t    max = $scrollTo.max(elem, axis);\n\n\t\t\t\tif (toff) {\n\t\t\t\t\t// jQuery / DOMElement\n\t\t\t\t\tattr[key] = toff[pos] + (win ? 0 : prev - $elem.offset()[pos]);\n\n\t\t\t\t\t// If it's a dom element, reduce the margin\n\t\t\t\t\tif (settings.margin) {\n\t\t\t\t\t\tattr[key] -= parseInt(targ.css('margin' + Pos), 10) || 0;\n\t\t\t\t\t\tattr[key] -= parseInt(targ.css('border' + Pos + 'Width'), 10) || 0;\n\t\t\t\t\t}\n\n\t\t\t\t\tattr[key] += offset[pos] || 0;\n\n\t\t\t\t\tif (settings.over[pos]) {\n\t\t\t\t\t\t// Scroll to a fraction of its width/height\n\t\t\t\t\t\tattr[key] += targ[axis === 'x' ? 'width' : 'height']() * settings.over[pos];\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tvar val = targ[pos];\n\t\t\t\t\t// Handle percentage values\n\t\t\t\t\tattr[key] = val.slice && val.slice(-1) === '%' ? parseFloat(val) / 100 * max : val;\n\t\t\t\t}\n\n\t\t\t\t// Number or 'number'\n\t\t\t\tif (settings.limit && /^\\d+$/.test(attr[key])) {\n\t\t\t\t\t// Check the limits\n\t\t\t\t\tattr[key] = attr[key] <= 0 ? 0 : Math.min(attr[key], max);\n\t\t\t\t}\n\n\t\t\t\t// Don't waste time animating, if there's no need.\n\t\t\t\tif (!i && settings.axis.length > 1) {\n\t\t\t\t\tif (prev === attr[key]) {\n\t\t\t\t\t\t// No animation needed\n\t\t\t\t\t\tattr = {};\n\t\t\t\t\t} else if (queue) {\n\t\t\t\t\t\t// Intermediate animation\n\t\t\t\t\t\tanimate(settings.onAfterFirst);\n\t\t\t\t\t\t// Don't animate this axis again in the next iteration.\n\t\t\t\t\t\tattr = {};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tanimate(settings.onAfter);\n\n\t\t\tfunction animate(callback) {\n\t\t\t\tvar opts = $.extend({}, settings, {\n\t\t\t\t\t// The queue setting conflicts with animate()\n\t\t\t\t\t// Force it to always be true\n\t\t\t\t\tqueue: true,\n\t\t\t\t\tduration: duration,\n\t\t\t\t\tcomplete: callback && function () {\n\t\t\t\t\t\tcallback.call(elem, targ, settings);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t$elem.animate(attr, opts);\n\t\t\t}\n\t\t});\n\t};\n\n\t// Max scrolling position, works on quirks mode\n\t// It only fails (not too badly) on IE, quirks mode.\n\t$scrollTo.max = function (elem, axis) {\n\t\tvar Dim = axis === 'x' ? 'Width' : 'Height',\n\t\t    scroll = 'scroll' + Dim;\n\n\t\tif (!isWin(elem)) return elem[scroll] - $(elem)[Dim.toLowerCase()]();\n\n\t\tvar size = 'client' + Dim,\n\t\t    doc = elem.ownerDocument || elem.document,\n\t\t    html = doc.documentElement,\n\t\t    body = doc.body;\n\n\t\treturn Math.max(html[scroll], body[scroll]) - Math.min(html[size], body[size]);\n\t};\n\n\tfunction both(val) {\n\t\treturn $.isFunction(val) || $.isPlainObject(val) ? val : { top: val, left: val };\n\t}\n\n\t// Add special hooks so that window scroll properties can be animated\n\t$.Tween.propHooks.scrollLeft = $.Tween.propHooks.scrollTop = {\n\t\tget: function get(t) {\n\t\t\treturn $(t.elem)[t.prop]();\n\t\t},\n\t\tset: function set(t) {\n\t\t\tvar curr = this.get(t);\n\t\t\t// If interrupt is true and user scrolled, stop animating\n\t\t\tif (t.options.interrupt && t._last && t._last !== curr) {\n\t\t\t\treturn $(t.elem).stop();\n\t\t\t}\n\t\t\tvar next = Math.round(t.now);\n\t\t\t// Don't waste CPU\n\t\t\t// Browsers don't render floating point scroll\n\t\t\tif (curr !== next) {\n\t\t\t\t$(t.elem)[t.prop](next);\n\t\t\t\tt._last = this.get(t);\n\t\t\t}\n\t\t}\n\t};\n\n\t// AMD requirement\n\treturn $scrollTo;\n});\n\n/***/ }),\n/* 82 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _jquery = __webpack_require__(0);\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar $ = _jquery2.default;\n(function ($, window, document) {\n    'use strict';\n\n    // Main function\n\n    $.fn.scrollUp = function (options) {\n\n        // Ensure that only one scrollUp exists\n        if (!$.data(document.body, 'scrollUp')) {\n            $.data(document.body, 'scrollUp', true);\n            $.fn.scrollUp.init(options);\n        }\n    };\n\n    // Init\n    $.fn.scrollUp.init = function (options) {\n\n        // Define vars\n        var o = $.fn.scrollUp.settings = $.extend({}, $.fn.scrollUp.defaults, options),\n            triggerVisible = false,\n            animIn,\n            animOut,\n            animSpeed,\n            scrollDis,\n            scrollEvent,\n            scrollTarget,\n            $self;\n\n        // Create element\n        if (o.scrollTrigger) {\n            $self = $(o.scrollTrigger);\n        } else {\n            $self = $('<a/>', {\n                id: o.scrollName,\n                href: '#top'\n            });\n        }\n\n        // Set scrollTitle if there is one\n        if (o.scrollTitle) {\n            $self.attr('title', o.scrollTitle);\n        }\n\n        $self.appendTo('body');\n\n        // If not using an image display text\n        if (!(o.scrollImg || o.scrollTrigger)) {\n            $self.html(o.scrollText);\n        }\n\n        // Minimum CSS to make the magic happen\n        $self.css({\n            display: 'none',\n            position: 'fixed',\n            zIndex: o.zIndex\n        });\n\n        // Active point overlay\n        if (o.activeOverlay) {\n            $('<div/>', {\n                id: o.scrollName + '-active'\n            }).css({\n                position: 'absolute',\n                'top': o.scrollDistance + 'px',\n                width: '100%',\n                borderTop: '1px dotted' + o.activeOverlay,\n                zIndex: o.zIndex\n            }).appendTo('body');\n        }\n\n        // Switch animation type\n        switch (o.animation) {\n            case 'fade':\n                animIn = 'fadeIn';\n                animOut = 'fadeOut';\n                animSpeed = o.animationSpeed;\n                break;\n\n            case 'slide':\n                animIn = 'slideDown';\n                animOut = 'slideUp';\n                animSpeed = o.animationSpeed;\n                break;\n\n            default:\n                animIn = 'show';\n                animOut = 'hide';\n                animSpeed = 0;\n        }\n\n        // If from top or bottom\n        if (o.scrollFrom === 'top') {\n            scrollDis = o.scrollDistance;\n        } else {\n            scrollDis = $(document).height() - $(window).height() - o.scrollDistance;\n        }\n\n        // Scroll function\n        scrollEvent = $(window).scroll(function () {\n            if ($(window).scrollTop() > scrollDis) {\n                if (!triggerVisible) {\n                    $self[animIn](animSpeed);\n                    triggerVisible = true;\n                }\n            } else {\n                if (triggerVisible) {\n                    $self[animOut](animSpeed);\n                    triggerVisible = false;\n                }\n            }\n        });\n\n        if (o.scrollTarget) {\n            if (typeof o.scrollTarget === 'number') {\n                scrollTarget = o.scrollTarget;\n            } else if (typeof o.scrollTarget === 'string') {\n                scrollTarget = Math.floor($(o.scrollTarget).offset().top);\n            }\n        } else {\n            scrollTarget = 0;\n        }\n\n        // To the top\n        $self.click(function (e) {\n            e.preventDefault();\n\n            $('html, body').animate({\n                scrollTop: scrollTarget\n            }, o.scrollSpeed, o.easingType);\n        });\n    };\n\n    // Defaults\n    $.fn.scrollUp.defaults = {\n        scrollName: 'scrollUp', // Element ID\n        scrollDistance: 300, // Distance from top/bottom before showing element (px)\n        scrollFrom: 'top', // 'top' or 'bottom'\n        scrollSpeed: 300, // Speed back to top (ms)\n        easingType: 'linear', // Scroll to top easing (see http://easings.net/)\n        animation: 'fade', // Fade, slide, none\n        animationSpeed: 200, // Animation in speed (ms)\n        scrollTrigger: false, // Set a custom triggering element. Can be an HTML string or jQuery object\n        scrollTarget: false, // Set a custom target element for scrolling to. Can be element or number\n        scrollText: 'Scroll to top', // Text for element, can contain HTML\n        scrollTitle: false, // Set a custom <a> title if required. Defaults to scrollText\n        scrollImg: false, // Set true to use image\n        activeOverlay: false, // Set CSS color to display scrollUp active point, e.g '#00FFFF'\n        zIndex: 2147483647 // Z-Index for the overlay\n    };\n\n    // Destroy scrollUp plugin and clean all modifications to the DOM\n    $.fn.scrollUp.destroy = function (scrollEvent) {\n        $.removeData(document.body, 'scrollUp');\n        $('#' + $.fn.scrollUp.settings.scrollName).remove();\n        $('#' + $.fn.scrollUp.settings.scrollName + '-active').remove();\n\n        // If 1.7 or above use the new .off()\n        if ($.fn.jquery.split('.')[1] >= 7) {\n            $(window).off('scroll', scrollEvent);\n\n            // Else use the old .unbind()\n        } else {\n            $(window).unbind('scroll', scrollEvent);\n        }\n    };\n\n    $.scrollUp = $.fn.scrollUp;\n})(_jquery2.default, window, document);\n\n/***/ }),\n/* 83 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;\n\nvar _typeof2 = __webpack_require__(7);\n\nvar _typeof3 = _interopRequireDefault(_typeof2);\n\nvar _jquery = __webpack_require__(0);\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar $ = _jquery2.default;\n(function (a) {\n  if (\"function\" === \"function\" && __webpack_require__(74) && __webpack_require__(74).jQuery) {\n    !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(0)], __WEBPACK_AMD_DEFINE_FACTORY__ = (a),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n  } else {\n    a(_jquery2.default);\n  }\n})(function (f) {\n  var p = \"left\",\n      o = \"right\",\n      e = \"up\",\n      x = \"down\",\n      c = \"in\",\n      z = \"out\",\n      m = \"none\",\n      s = \"auto\",\n      l = \"swipe\",\n      t = \"pinch\",\n      A = \"tap\",\n      j = \"doubletap\",\n      b = \"longtap\",\n      y = \"hold\",\n      D = \"horizontal\",\n      u = \"vertical\",\n      i = \"all\",\n      r = 10,\n      g = \"start\",\n      k = \"move\",\n      h = \"end\",\n      q = \"cancel\",\n      a = \"ontouchstart\" in window,\n      v = window.navigator.msPointerEnabled && !window.navigator.pointerEnabled,\n      d = window.navigator.pointerEnabled || window.navigator.msPointerEnabled,\n      B = \"TouchSwipe\";var n = { fingers: 1, threshold: 75, cancelThreshold: null, pinchThreshold: 20, maxTimeThreshold: null, fingerReleaseThreshold: 250, longTapThreshold: 500, doubleTapThreshold: 200, swipe: null, swipeLeft: null, swipeRight: null, swipeUp: null, swipeDown: null, swipeStatus: null, pinchIn: null, pinchOut: null, pinchStatus: null, click: null, tap: null, doubleTap: null, longTap: null, hold: null, triggerOnTouchEnd: true, triggerOnTouchLeave: false, allowPageScroll: \"auto\", fallbackToMouseEvents: true, excludedElements: \"label, button, input, select, textarea, a, .noSwipe\" };f.fn.swipe = function (G) {\n    var F = f(this),\n        E = F.data(B);if (E && typeof G === \"string\") {\n      if (E[G]) {\n        return E[G].apply(this, Array.prototype.slice.call(arguments, 1));\n      } else {\n        f.error(\"Method \" + G + \" does not exist on jQuery.swipe\");\n      }\n    } else {\n      if (!E && ((typeof G === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(G)) === \"object\" || !G)) {\n        return w.apply(this, arguments);\n      }\n    }return F;\n  };f.fn.swipe.defaults = n;f.fn.swipe.phases = { PHASE_START: g, PHASE_MOVE: k, PHASE_END: h, PHASE_CANCEL: q };f.fn.swipe.directions = { LEFT: p, RIGHT: o, UP: e, DOWN: x, IN: c, OUT: z };f.fn.swipe.pageScroll = { NONE: m, HORIZONTAL: D, VERTICAL: u, AUTO: s };f.fn.swipe.fingers = { ONE: 1, TWO: 2, THREE: 3, ALL: i };function w(E) {\n    if (E && E.allowPageScroll === undefined && (E.swipe !== undefined || E.swipeStatus !== undefined)) {\n      E.allowPageScroll = m;\n    }if (E.click !== undefined && E.tap === undefined) {\n      E.tap = E.click;\n    }if (!E) {\n      E = {};\n    }E = f.extend({}, f.fn.swipe.defaults, E);return this.each(function () {\n      var G = f(this);var F = G.data(B);if (!F) {\n        F = new C(this, E);G.data(B, F);\n      }\n    });\n  }function C(a4, av) {\n    var az = a || d || !av.fallbackToMouseEvents,\n        J = az ? d ? v ? \"MSPointerDown\" : \"pointerdown\" : \"touchstart\" : \"mousedown\",\n        ay = az ? d ? v ? \"MSPointerMove\" : \"pointermove\" : \"touchmove\" : \"mousemove\",\n        U = az ? d ? v ? \"MSPointerUp\" : \"pointerup\" : \"touchend\" : \"mouseup\",\n        S = az ? null : \"mouseleave\",\n        aD = d ? v ? \"MSPointerCancel\" : \"pointercancel\" : \"touchcancel\";var ag = 0,\n        aP = null,\n        ab = 0,\n        a1 = 0,\n        aZ = 0,\n        G = 1,\n        aq = 0,\n        aJ = 0,\n        M = null;var aR = f(a4);var Z = \"start\";var W = 0;var aQ = null;var T = 0,\n        a2 = 0,\n        a5 = 0,\n        ad = 0,\n        N = 0;var aW = null,\n        af = null;try {\n      aR.bind(J, aN);aR.bind(aD, a9);\n    } catch (ak) {\n      f.error(\"events not supported \" + J + \",\" + aD + \" on jQuery.swipe\");\n    }this.enable = function () {\n      aR.bind(J, aN);aR.bind(aD, a9);return aR;\n    };this.disable = function () {\n      aK();return aR;\n    };this.destroy = function () {\n      aK();aR.data(B, null);return aR;\n    };this.option = function (bc, bb) {\n      if (av[bc] !== undefined) {\n        if (bb === undefined) {\n          return av[bc];\n        } else {\n          av[bc] = bb;\n        }\n      } else {\n        f.error(\"Option \" + bc + \" does not exist on jQuery.swipe.options\");\n      }return null;\n    };function aN(bd) {\n      if (aB()) {\n        return;\n      }if (f(bd.target).closest(av.excludedElements, aR).length > 0) {\n        return;\n      }var be = bd.originalEvent ? bd.originalEvent : bd;var bc,\n          bb = a ? be.touches[0] : be;Z = g;if (a) {\n        W = be.touches.length;\n      } else {\n        bd.preventDefault();\n      }ag = 0;aP = null;aJ = null;ab = 0;a1 = 0;aZ = 0;G = 1;aq = 0;aQ = aj();M = aa();R();if (!a || W === av.fingers || av.fingers === i || aX()) {\n        ai(0, bb);T = at();if (W == 2) {\n          ai(1, be.touches[1]);a1 = aZ = au(aQ[0].start, aQ[1].start);\n        }if (av.swipeStatus || av.pinchStatus) {\n          bc = O(be, Z);\n        }\n      } else {\n        bc = false;\n      }if (bc === false) {\n        Z = q;O(be, Z);return bc;\n      } else {\n        if (av.hold) {\n          af = setTimeout(f.proxy(function () {\n            aR.trigger(\"hold\", [be.target]);if (av.hold) {\n              bc = av.hold.call(aR, be, be.target);\n            }\n          }, this), av.longTapThreshold);\n        }ao(true);\n      }return null;\n    }function a3(be) {\n      var bh = be.originalEvent ? be.originalEvent : be;if (Z === h || Z === q || am()) {\n        return;\n      }var bd,\n          bc = a ? bh.touches[0] : bh;var bf = aH(bc);a2 = at();if (a) {\n        W = bh.touches.length;\n      }if (av.hold) {\n        clearTimeout(af);\n      }Z = k;if (W == 2) {\n        if (a1 == 0) {\n          ai(1, bh.touches[1]);a1 = aZ = au(aQ[0].start, aQ[1].start);\n        } else {\n          aH(bh.touches[1]);aZ = au(aQ[0].end, aQ[1].end);aJ = ar(aQ[0].end, aQ[1].end);\n        }G = a7(a1, aZ);aq = Math.abs(a1 - aZ);\n      }if (W === av.fingers || av.fingers === i || !a || aX()) {\n        aP = aL(bf.start, bf.end);al(be, aP);ag = aS(bf.start, bf.end);ab = aM();aI(aP, ag);if (av.swipeStatus || av.pinchStatus) {\n          bd = O(bh, Z);\n        }if (!av.triggerOnTouchEnd || av.triggerOnTouchLeave) {\n          var bb = true;if (av.triggerOnTouchLeave) {\n            var bg = aY(this);bb = E(bf.end, bg);\n          }if (!av.triggerOnTouchEnd && bb) {\n            Z = aC(k);\n          } else {\n            if (av.triggerOnTouchLeave && !bb) {\n              Z = aC(h);\n            }\n          }if (Z == q || Z == h) {\n            O(bh, Z);\n          }\n        }\n      } else {\n        Z = q;O(bh, Z);\n      }if (bd === false) {\n        Z = q;O(bh, Z);\n      }\n    }function L(bb) {\n      var bc = bb.originalEvent;if (a) {\n        if (bc.touches.length > 0) {\n          F();return true;\n        }\n      }if (am()) {\n        W = ad;\n      }a2 = at();ab = aM();if (ba() || !an()) {\n        Z = q;O(bc, Z);\n      } else {\n        if (av.triggerOnTouchEnd || av.triggerOnTouchEnd == false && Z === k) {\n          bb.preventDefault();Z = h;O(bc, Z);\n        } else {\n          if (!av.triggerOnTouchEnd && a6()) {\n            Z = h;aF(bc, Z, A);\n          } else {\n            if (Z === k) {\n              Z = q;O(bc, Z);\n            }\n          }\n        }\n      }ao(false);return null;\n    }function a9() {\n      W = 0;a2 = 0;T = 0;a1 = 0;aZ = 0;G = 1;R();ao(false);\n    }function K(bb) {\n      var bc = bb.originalEvent;if (av.triggerOnTouchLeave) {\n        Z = aC(h);O(bc, Z);\n      }\n    }function aK() {\n      aR.unbind(J, aN);aR.unbind(aD, a9);aR.unbind(ay, a3);aR.unbind(U, L);if (S) {\n        aR.unbind(S, K);\n      }ao(false);\n    }function aC(bf) {\n      var be = bf;var bd = aA();var bc = an();var bb = ba();if (!bd || bb) {\n        be = q;\n      } else {\n        if (bc && bf == k && (!av.triggerOnTouchEnd || av.triggerOnTouchLeave)) {\n          be = h;\n        } else {\n          if (!bc && bf == h && av.triggerOnTouchLeave) {\n            be = q;\n          }\n        }\n      }return be;\n    }function O(bd, bb) {\n      var bc = undefined;if (I() || V()) {\n        bc = aF(bd, bb, l);\n      } else {\n        if ((P() || aX()) && bc !== false) {\n          bc = aF(bd, bb, t);\n        }\n      }if (aG() && bc !== false) {\n        bc = aF(bd, bb, j);\n      } else {\n        if (ap() && bc !== false) {\n          bc = aF(bd, bb, b);\n        } else {\n          if (ah() && bc !== false) {\n            bc = aF(bd, bb, A);\n          }\n        }\n      }if (bb === q) {\n        a9(bd);\n      }if (bb === h) {\n        if (a) {\n          if (bd.touches.length == 0) {\n            a9(bd);\n          }\n        } else {\n          a9(bd);\n        }\n      }return bc;\n    }function aF(be, bb, bd) {\n      var bc = undefined;if (bd == l) {\n        aR.trigger(\"swipeStatus\", [bb, aP || null, ag || 0, ab || 0, W, aQ]);if (av.swipeStatus) {\n          bc = av.swipeStatus.call(aR, be, bb, aP || null, ag || 0, ab || 0, W, aQ);if (bc === false) {\n            return false;\n          }\n        }if (bb == h && aV()) {\n          aR.trigger(\"swipe\", [aP, ag, ab, W, aQ]);if (av.swipe) {\n            bc = av.swipe.call(aR, be, aP, ag, ab, W, aQ);if (bc === false) {\n              return false;\n            }\n          }switch (aP) {case p:\n              aR.trigger(\"swipeLeft\", [aP, ag, ab, W, aQ]);if (av.swipeLeft) {\n                bc = av.swipeLeft.call(aR, be, aP, ag, ab, W, aQ);\n              }break;case o:\n              aR.trigger(\"swipeRight\", [aP, ag, ab, W, aQ]);if (av.swipeRight) {\n                bc = av.swipeRight.call(aR, be, aP, ag, ab, W, aQ);\n              }break;case e:\n              aR.trigger(\"swipeUp\", [aP, ag, ab, W, aQ]);if (av.swipeUp) {\n                bc = av.swipeUp.call(aR, be, aP, ag, ab, W, aQ);\n              }break;case x:\n              aR.trigger(\"swipeDown\", [aP, ag, ab, W, aQ]);if (av.swipeDown) {\n                bc = av.swipeDown.call(aR, be, aP, ag, ab, W, aQ);\n              }break;}\n        }\n      }if (bd == t) {\n        aR.trigger(\"pinchStatus\", [bb, aJ || null, aq || 0, ab || 0, W, G, aQ]);if (av.pinchStatus) {\n          bc = av.pinchStatus.call(aR, be, bb, aJ || null, aq || 0, ab || 0, W, G, aQ);if (bc === false) {\n            return false;\n          }\n        }if (bb == h && a8()) {\n          switch (aJ) {case c:\n              aR.trigger(\"pinchIn\", [aJ || null, aq || 0, ab || 0, W, G, aQ]);if (av.pinchIn) {\n                bc = av.pinchIn.call(aR, be, aJ || null, aq || 0, ab || 0, W, G, aQ);\n              }break;case z:\n              aR.trigger(\"pinchOut\", [aJ || null, aq || 0, ab || 0, W, G, aQ]);if (av.pinchOut) {\n                bc = av.pinchOut.call(aR, be, aJ || null, aq || 0, ab || 0, W, G, aQ);\n              }break;}\n        }\n      }if (bd == A) {\n        if (bb === q || bb === h) {\n          clearTimeout(aW);clearTimeout(af);if (Y() && !H()) {\n            N = at();aW = setTimeout(f.proxy(function () {\n              N = null;aR.trigger(\"tap\", [be.target]);if (av.tap) {\n                bc = av.tap.call(aR, be, be.target);\n              }\n            }, this), av.doubleTapThreshold);\n          } else {\n            N = null;aR.trigger(\"tap\", [be.target]);if (av.tap) {\n              bc = av.tap.call(aR, be, be.target);\n            }\n          }\n        }\n      } else {\n        if (bd == j) {\n          if (bb === q || bb === h) {\n            clearTimeout(aW);N = null;aR.trigger(\"doubletap\", [be.target]);if (av.doubleTap) {\n              bc = av.doubleTap.call(aR, be, be.target);\n            }\n          }\n        } else {\n          if (bd == b) {\n            if (bb === q || bb === h) {\n              clearTimeout(aW);N = null;aR.trigger(\"longtap\", [be.target]);if (av.longTap) {\n                bc = av.longTap.call(aR, be, be.target);\n              }\n            }\n          }\n        }\n      }return bc;\n    }function an() {\n      var bb = true;if (av.threshold !== null) {\n        bb = ag >= av.threshold;\n      }return bb;\n    }function ba() {\n      var bb = false;if (av.cancelThreshold !== null && aP !== null) {\n        bb = aT(aP) - ag >= av.cancelThreshold;\n      }return bb;\n    }function ae() {\n      if (av.pinchThreshold !== null) {\n        return aq >= av.pinchThreshold;\n      }return true;\n    }function aA() {\n      var bb;if (av.maxTimeThreshold) {\n        if (ab >= av.maxTimeThreshold) {\n          bb = false;\n        } else {\n          bb = true;\n        }\n      } else {\n        bb = true;\n      }return bb;\n    }function al(bb, bc) {\n      if (av.allowPageScroll === m || aX()) {\n        bb.preventDefault();\n      } else {\n        var bd = av.allowPageScroll === s;switch (bc) {case p:\n            if (av.swipeLeft && bd || !bd && av.allowPageScroll != D) {\n              bb.preventDefault();\n            }break;case o:\n            if (av.swipeRight && bd || !bd && av.allowPageScroll != D) {\n              bb.preventDefault();\n            }break;case e:\n            if (av.swipeUp && bd || !bd && av.allowPageScroll != u) {\n              bb.preventDefault();\n            }break;case x:\n            if (av.swipeDown && bd || !bd && av.allowPageScroll != u) {\n              bb.preventDefault();\n            }break;}\n      }\n    }function a8() {\n      var bc = aO();var bb = X();var bd = ae();return bc && bb && bd;\n    }function aX() {\n      return !!(av.pinchStatus || av.pinchIn || av.pinchOut);\n    }function P() {\n      return !!(a8() && aX());\n    }function aV() {\n      var be = aA();var bg = an();var bd = aO();var bb = X();var bc = ba();var bf = !bc && bb && bd && bg && be;return bf;\n    }function V() {\n      return !!(av.swipe || av.swipeStatus || av.swipeLeft || av.swipeRight || av.swipeUp || av.swipeDown);\n    }function I() {\n      return !!(aV() && V());\n    }function aO() {\n      return W === av.fingers || av.fingers === i || !a;\n    }function X() {\n      return aQ[0].end.x !== 0;\n    }function a6() {\n      return !!av.tap;\n    }function Y() {\n      return !!av.doubleTap;\n    }function aU() {\n      return !!av.longTap;\n    }function Q() {\n      if (N == null) {\n        return false;\n      }var bb = at();return Y() && bb - N <= av.doubleTapThreshold;\n    }function H() {\n      return Q();\n    }function ax() {\n      return (W === 1 || !a) && (isNaN(ag) || ag < av.threshold);\n    }function a0() {\n      return ab > av.longTapThreshold && ag < r;\n    }function ah() {\n      return !!(ax() && a6());\n    }function aG() {\n      return !!(Q() && Y());\n    }function ap() {\n      return !!(a0() && aU());\n    }function F() {\n      a5 = at();ad = event.touches.length + 1;\n    }function R() {\n      a5 = 0;ad = 0;\n    }function am() {\n      var bb = false;if (a5) {\n        var bc = at() - a5;if (bc <= av.fingerReleaseThreshold) {\n          bb = true;\n        }\n      }return bb;\n    }function aB() {\n      return !!(aR.data(B + \"_intouch\") === true);\n    }function ao(bb) {\n      if (bb === true) {\n        aR.bind(ay, a3);aR.bind(U, L);if (S) {\n          aR.bind(S, K);\n        }\n      } else {\n        aR.unbind(ay, a3, false);aR.unbind(U, L, false);if (S) {\n          aR.unbind(S, K, false);\n        }\n      }aR.data(B + \"_intouch\", bb === true);\n    }function ai(bc, bb) {\n      var bd = bb.identifier !== undefined ? bb.identifier : 0;aQ[bc].identifier = bd;aQ[bc].start.x = aQ[bc].end.x = bb.pageX || bb.clientX;aQ[bc].start.y = aQ[bc].end.y = bb.pageY || bb.clientY;return aQ[bc];\n    }function aH(bb) {\n      var bd = bb.identifier !== undefined ? bb.identifier : 0;var bc = ac(bd);bc.end.x = bb.pageX || bb.clientX;bc.end.y = bb.pageY || bb.clientY;return bc;\n    }function ac(bc) {\n      for (var bb = 0; bb < aQ.length; bb++) {\n        if (aQ[bb].identifier == bc) {\n          return aQ[bb];\n        }\n      }\n    }function aj() {\n      var bb = [];for (var bc = 0; bc <= 5; bc++) {\n        bb.push({ start: { x: 0, y: 0 }, end: { x: 0, y: 0 }, identifier: 0 });\n      }return bb;\n    }function aI(bb, bc) {\n      bc = Math.max(bc, aT(bb));M[bb].distance = bc;\n    }function aT(bb) {\n      if (M[bb]) {\n        return M[bb].distance;\n      }return undefined;\n    }function aa() {\n      var bb = {};bb[p] = aw(p);bb[o] = aw(o);bb[e] = aw(e);bb[x] = aw(x);return bb;\n    }function aw(bb) {\n      return { direction: bb, distance: 0 };\n    }function aM() {\n      return a2 - T;\n    }function au(be, bd) {\n      var bc = Math.abs(be.x - bd.x);var bb = Math.abs(be.y - bd.y);return Math.round(Math.sqrt(bc * bc + bb * bb));\n    }function a7(bb, bc) {\n      var bd = bc / bb * 1;return bd.toFixed(2);\n    }function ar() {\n      if (G < 1) {\n        return z;\n      } else {\n        return c;\n      }\n    }function aS(bc, bb) {\n      return Math.round(Math.sqrt(Math.pow(bb.x - bc.x, 2) + Math.pow(bb.y - bc.y, 2)));\n    }function aE(be, bc) {\n      var bb = be.x - bc.x;var bg = bc.y - be.y;var bd = Math.atan2(bg, bb);var bf = Math.round(bd * 180 / Math.PI);if (bf < 0) {\n        bf = 360 - Math.abs(bf);\n      }return bf;\n    }function aL(bc, bb) {\n      var bd = aE(bc, bb);if (bd <= 45 && bd >= 0) {\n        return p;\n      } else {\n        if (bd <= 360 && bd >= 315) {\n          return p;\n        } else {\n          if (bd >= 135 && bd <= 225) {\n            return o;\n          } else {\n            if (bd > 45 && bd < 135) {\n              return x;\n            } else {\n              return e;\n            }\n          }\n        }\n      }\n    }function at() {\n      var bb = new Date();return bb.getTime();\n    }function aY(bb) {\n      bb = f(bb);var bd = bb.offset();var bc = { left: bd.left, right: bd.left + bb.outerWidth(), top: bd.top, bottom: bd.top + bb.outerHeight() };return bc;\n    }function E(bb, bc) {\n      return bb.x > bc.left && bb.x < bc.right && bb.y > bc.top && bb.y < bc.bottom;\n    }\n  }\n});\n\n/***/ }),\n/* 84 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _jquery = __webpack_require__(0);\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar $ = _jquery2.default;\n(function ($) {\n    $.fn.validationEngineLanguage = function () {};\n    $.validationEngineLanguage = {\n        newLang: function newLang() {\n            $.validationEngineLanguage.allRules = {\n                \"required\": { // Add your regex rules here, you can take telephone as an example\n                    \"regex\": \"none\",\n                    \"alertText\": \"* This field is required\",\n                    \"alertTextCheckboxMultiple\": \"* Please select an option\",\n                    \"alertTextCheckboxe\": \"* This checkbox is required\",\n                    \"alertTextDateRange\": \"* Both date range fields are required\"\n                },\n                \"requiredInFunction\": {\n                    \"func\": function func(field, rules, i, options) {\n                        return field.val() == \"test\" ? true : false;\n                    },\n                    \"alertText\": \"* Field must equal test\"\n                },\n                \"dateRange\": {\n                    \"regex\": \"none\",\n                    \"alertText\": \"* Invalid \",\n                    \"alertText2\": \"Date Range\"\n                },\n                \"dateTimeRange\": {\n                    \"regex\": \"none\",\n                    \"alertText\": \"* Invalid \",\n                    \"alertText2\": \"Date Time Range\"\n                },\n                \"minSize\": {\n                    \"regex\": \"none\",\n                    \"alertText\": \"* Minimum \",\n                    \"alertText2\": \" characters allowed\"\n                },\n                \"maxSize\": {\n                    \"regex\": \"none\",\n                    \"alertText\": \"* Maximum \",\n                    \"alertText2\": \" characters allowed\"\n                },\n                \"groupRequired\": {\n                    \"regex\": \"none\",\n                    \"alertText\": \"* You must fill one of the following fields\"\n                },\n                \"min\": {\n                    \"regex\": \"none\",\n                    \"alertText\": \"* Minimum value is \"\n                },\n                \"max\": {\n                    \"regex\": \"none\",\n                    \"alertText\": \"* Maximum value is \"\n                },\n                \"past\": {\n                    \"regex\": \"none\",\n                    \"alertText\": \"* Date prior to \"\n                },\n                \"future\": {\n                    \"regex\": \"none\",\n                    \"alertText\": \"* Date past \"\n                },\n                \"maxCheckbox\": {\n                    \"regex\": \"none\",\n                    \"alertText\": \"* Maximum \",\n                    \"alertText2\": \" options allowed\"\n                },\n                \"minCheckbox\": {\n                    \"regex\": \"none\",\n                    \"alertText\": \"* Please select \",\n                    \"alertText2\": \" options\"\n                },\n                \"equals\": {\n                    \"regex\": \"none\",\n                    \"alertText\": \"* Fields do not match\"\n                },\n                \"creditCard\": {\n                    \"regex\": \"none\",\n                    \"alertText\": \"* Invalid credit card number\"\n                },\n                \"phone\": {\n                    // credit: jquery.h5validate.js / orefalo\n                    \"regex\": /^([\\+][0-9]{1,3}[\\ \\.\\-])?([\\(]{1}[0-9]{2,6}[\\)])?([0-9\\ \\.\\-\\/]{3,20})((x|ext|extension)[\\ ]?[0-9]{1,4})?$/,\n                    \"alertText\": \"* Invalid phone number\"\n                },\n                \"email\": {\n                    // HTML5 compatible email regex ( http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html#    e-mail-state-%28type=email%29 )\n                    \"regex\": /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/,\n                    \"alertText\": \"* Invalid email address\"\n                },\n                \"integer\": {\n                    \"regex\": /^[\\-\\+]?\\d+$/,\n                    \"alertText\": \"* Not a valid integer\"\n                },\n                \"number\": {\n                    // Number, including positive, negative, and floating decimal. credit: orefalo\n                    \"regex\": /^[\\-\\+]?((([0-9]{1,3})([,][0-9]{3})*)|([0-9]+))?([\\.]([0-9]+))?$/,\n                    \"alertText\": \"* Invalid floating decimal number\"\n                },\n                \"date\": {\n                    //\tCheck if date is valid by leap year\n                    \"func\": function func(field) {\n                        var pattern = new RegExp(/^(\\d{4})[\\/\\-\\.](0?[1-9]|1[012])[\\/\\-\\.](0?[1-9]|[12][0-9]|3[01])$/);\n                        var match = pattern.exec(field.val());\n                        if (match == null) return false;\n\n                        var year = match[1];\n                        var month = match[2] * 1;\n                        var day = match[3] * 1;\n                        var date = new Date(year, month - 1, day); // because months starts from 0.\n\n                        return date.getFullYear() == year && date.getMonth() == month - 1 && date.getDate() == day;\n                    },\n                    \"alertText\": \"* Invalid date, must be in YYYY-MM-DD format\"\n                },\n                \"ipv4\": {\n                    \"regex\": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/,\n                    \"alertText\": \"* Invalid IP address\"\n                },\n                \"url\": {\n                    \"regex\": /^(https?|ftp):\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i,\n                    \"alertText\": \"* Invalid URL\"\n                },\n                \"onlyNumberSp\": {\n                    \"regex\": /^[0-9\\ ]+$/,\n                    \"alertText\": \"* Numbers only\"\n                },\n                \"onlyLetterSp\": {\n                    \"regex\": /^[a-zA-Z\\ \\']+$/,\n                    \"alertText\": \"* Letters only\"\n                },\n                \"onlyLetterNumber\": {\n                    \"regex\": /^[0-9a-zA-Z]+$/,\n                    \"alertText\": \"* No special characters allowed\"\n                },\n                // --- CUSTOM RULES -- Those are specific to the demos, they can be removed or changed to your likings\n                \"ajaxUserCall\": {\n                    \"url\": \"ajaxValidateFieldUser\",\n                    // you may want to pass extra data on the ajax call\n                    \"extraData\": \"name=eric\",\n                    \"alertText\": \"* This user is already taken\",\n                    \"alertTextLoad\": \"* Validating, please wait\"\n                },\n                \"ajaxUserCallPhp\": {\n                    \"url\": \"phpajax/ajaxValidateFieldUser.php\",\n                    // you may want to pass extra data on the ajax call\n                    \"extraData\": \"name=eric\",\n                    // if you provide an \"alertTextOk\", it will show as a green prompt when the field validates\n                    \"alertTextOk\": \"* This username is available\",\n                    \"alertText\": \"* This user is already taken\",\n                    \"alertTextLoad\": \"* Validating, please wait\"\n                },\n                \"ajaxNameCall\": {\n                    // remote json service location\n                    \"url\": \"ajaxValidateFieldName\",\n                    // error\n                    \"alertText\": \"* This name is already taken\",\n                    // if you provide an \"alertTextOk\", it will show as a green prompt when the field validates\n                    \"alertTextOk\": \"* This name is available\",\n                    // speaks by itself\n                    \"alertTextLoad\": \"* Validating, please wait\"\n                },\n                \"ajaxNameCallPhp\": {\n                    // remote json service location\n                    \"url\": \"phpajax/ajaxValidateFieldName.php\",\n                    // error\n                    \"alertText\": \"* This name is already taken\",\n                    // speaks by itself\n                    \"alertTextLoad\": \"* Validating, please wait\"\n                },\n                \"validate2fields\": {\n                    \"alertText\": \"* Please input HELLO\"\n                },\n                //tls warning:homegrown not fielded \n                \"dateFormat\": {\n                    \"regex\": /^\\d{4}[\\/\\-](0?[1-9]|1[012])[\\/\\-](0?[1-9]|[12][0-9]|3[01])$|^(?:(?:(?:0?[13578]|1[02])(\\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\\/|-)(?:29|30)))(\\/|-)(?:[1-9]\\d\\d\\d|\\d[1-9]\\d\\d|\\d\\d[1-9]\\d|\\d\\d\\d[1-9])$|^(?:(?:0?[1-9]|1[0-2])(\\/|-)(?:0?[1-9]|1\\d|2[0-8]))(\\/|-)(?:[1-9]\\d\\d\\d|\\d[1-9]\\d\\d|\\d\\d[1-9]\\d|\\d\\d\\d[1-9])$|^(0?2(\\/|-)29)(\\/|-)(?:(?:0[48]00|[13579][26]00|[2468][048]00)|(?:\\d\\d)?(?:0[48]|[2468][048]|[13579][26]))$/,\n                    \"alertText\": \"* Invalid Date\"\n                },\n                //tls warning:homegrown not fielded \n                \"dateTimeFormat\": {\n                    \"regex\": /^\\d{4}[\\/\\-](0?[1-9]|1[012])[\\/\\-](0?[1-9]|[12][0-9]|3[01])\\s+(1[012]|0?[1-9]){1}:(0?[1-5]|[0-6][0-9]){1}:(0?[0-6]|[0-6][0-9]){1}\\s+(am|pm|AM|PM){1}$|^(?:(?:(?:0?[13578]|1[02])(\\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\\/|-)(?:29|30)))(\\/|-)(?:[1-9]\\d\\d\\d|\\d[1-9]\\d\\d|\\d\\d[1-9]\\d|\\d\\d\\d[1-9])$|^((1[012]|0?[1-9]){1}\\/(0?[1-9]|[12][0-9]|3[01]){1}\\/\\d{2,4}\\s+(1[012]|0?[1-9]){1}:(0?[1-5]|[0-6][0-9]){1}:(0?[0-6]|[0-6][0-9]){1}\\s+(am|pm|AM|PM){1})$/,\n                    \"alertText\": \"* Invalid Date or Date Format\",\n                    \"alertText2\": \"Expected Format: \",\n                    \"alertText3\": \"mm/dd/yyyy hh:mm:ss AM|PM or \",\n                    \"alertText4\": \"yyyy-mm-dd hh:mm:ss AM|PM\"\n                }\n            };\n        }\n    };\n\n    $.validationEngineLanguage.newLang();\n})(_jquery2.default);\n\n/***/ }),\n/* 85 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _typeof2 = __webpack_require__(7);\n\nvar _typeof3 = _interopRequireDefault(_typeof2);\n\nvar _jquery = __webpack_require__(0);\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar $ = _jquery2.default;\n/*\r\n * Inline Form Validation Engine 2.6.2, jQuery plugin\r\n *\r\n * Copyright(c) 2010, Cedric Dugas\r\n * http://www.position-absolute.com\r\n *\r\n * 2.0 Rewrite by Olivier Refalo\r\n * http://www.crionics.com\r\n *\r\n * Form validation engine allowing custom regex rules to be added.\r\n * Licensed under the MIT License\r\n */\n(function ($) {\n\n\t\"use strict\";\n\n\tvar methods = {\n\n\t\t/**\r\n  * Kind of the constructor, called before any action\r\n  * @param {Map} user options\r\n  */\n\t\tinit: function init(options) {\n\t\t\tvar form = this;\n\t\t\tif (!form.data('jqv') || form.data('jqv') == null) {\n\t\t\t\toptions = methods._saveOptions(form, options);\n\t\t\t\t// bind all formError elements to close on click\n\t\t\t\t$(\".formError\").on(\"click\", function () {\n\t\t\t\t\t$(this).fadeOut(150, function () {\n\t\t\t\t\t\t// remove prompt once invisible\n\t\t\t\t\t\t$(this).parent('.formErrorOuter').remove();\n\t\t\t\t\t\t$(this).remove();\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\t\t/**\r\n  * Attachs jQuery.validationEngine to form.submit and field.blur events\r\n  * Takes an optional params: a list of options\r\n  * ie. jQuery(\"#formID1\").validationEngine('attach', {promptPosition : \"centerRight\"});\r\n  */\n\t\tattach: function attach(userOptions) {\n\n\t\t\tvar form = this;\n\t\t\tvar options;\n\n\t\t\tif (userOptions) options = methods._saveOptions(form, userOptions);else options = form.data('jqv');\n\n\t\t\toptions.validateAttribute = form.find(\"[data-validation-engine*=validate]\").length ? \"data-validation-engine\" : \"class\";\n\t\t\tif (options.binded) {\n\n\t\t\t\t// delegate fields\n\t\t\t\tform.on(options.validationEventTrigger, \"[\" + options.validateAttribute + \"*=validate]:not([type=checkbox]):not([type=radio]):not(.datepicker)\", methods._onFieldEvent);\n\t\t\t\tform.on(\"click\", \"[\" + options.validateAttribute + \"*=validate][type=checkbox],[\" + options.validateAttribute + \"*=validate][type=radio]\", methods._onFieldEvent);\n\t\t\t\tform.on(options.validationEventTrigger, \"[\" + options.validateAttribute + \"*=validate][class*=datepicker]\", { \"delay\": 300 }, methods._onFieldEvent);\n\t\t\t}\n\t\t\tif (options.autoPositionUpdate) {\n\t\t\t\t$(window).bind(\"resize\", {\n\t\t\t\t\t\"noAnimation\": true,\n\t\t\t\t\t\"formElem\": form\n\t\t\t\t}, methods.updatePromptsPosition);\n\t\t\t}\n\t\t\tform.on(\"click\", \"a[data-validation-engine-skip], a[class*='validate-skip'], button[data-validation-engine-skip], button[class*='validate-skip'], input[data-validation-engine-skip], input[class*='validate-skip']\", methods._submitButtonClick);\n\t\t\tform.removeData('jqv_submitButton');\n\n\t\t\t// bind form.submit\n\t\t\tform.on(\"submit\", methods._onSubmitEvent);\n\t\t\treturn this;\n\t\t},\n\t\t/**\r\n  * Unregisters any bindings that may point to jQuery.validaitonEngine\r\n  */\n\t\tdetach: function detach() {\n\n\t\t\tvar form = this;\n\t\t\tvar options = form.data('jqv');\n\n\t\t\t// unbind fields\n\t\t\tform.find(\"[\" + options.validateAttribute + \"*=validate]\").not(\"[type=checkbox]\").off(options.validationEventTrigger, methods._onFieldEvent);\n\t\t\tform.find(\"[\" + options.validateAttribute + \"*=validate][type=checkbox],[class*=validate][type=radio]\").off(\"click\", methods._onFieldEvent);\n\n\t\t\t// unbind form.submit\n\t\t\tform.off(\"submit\", methods.onAjaxFormComplete);\n\n\t\t\t// unbind form.submit\n\t\t\tform.die(\"submit\", methods.onAjaxFormComplete);\n\t\t\tform.removeData('jqv');\n\n\t\t\tform.off(\"click\", \"a[data-validation-engine-skip], a[class*='validate-skip'], button[data-validation-engine-skip], button[class*='validate-skip'], input[data-validation-engine-skip], input[class*='validate-skip']\", methods._submitButtonClick);\n\t\t\tform.removeData('jqv_submitButton');\n\n\t\t\tif (options.autoPositionUpdate) $(window).unbind(\"resize\", methods.updatePromptsPosition);\n\n\t\t\treturn this;\n\t\t},\n\t\t/**\r\n  * Validates either a form or a list of fields, shows prompts accordingly.\r\n  * Note: There is no ajax form validation with this method, only field ajax validation are evaluated\r\n  *\r\n  * @return true if the form validates, false if it fails\r\n  */\n\t\tvalidate: function validate() {\n\t\t\tvar element = $(this);\n\t\t\tvar valid = null;\n\n\t\t\tif ((element.is(\"form\") || element.hasClass(\"validationEngineContainer\")) && !element.hasClass('validating')) {\n\t\t\t\telement.addClass('validating');\n\t\t\t\tvar options = element.data('jqv');\n\t\t\t\tvar valid = methods._validateFields(this);\n\n\t\t\t\t// If the form doesn't validate, clear the 'validating' class before the user has a chance to submit again\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\telement.removeClass('validating');\n\t\t\t\t}, 100);\n\t\t\t\tif (valid && options.onSuccess) {\n\t\t\t\t\toptions.onSuccess();\n\t\t\t\t} else if (!valid && options.onFailure) {\n\t\t\t\t\toptions.onFailure();\n\t\t\t\t}\n\t\t\t} else if (element.is('form') || element.hasClass('validationEngineContainer')) {\n\t\t\t\telement.removeClass('validating');\n\t\t\t} else {\n\t\t\t\t// field validation\n\t\t\t\tvar form = element.closest('form, .validationEngineContainer'),\n\t\t\t\t    options = form.data('jqv') ? form.data('jqv') : $.validationEngine.defaults,\n\t\t\t\t    valid = methods._validateField(element, options);\n\n\t\t\t\tif (valid && options.onFieldSuccess) options.onFieldSuccess();else if (options.onFieldFailure && options.InvalidFields.length > 0) {\n\t\t\t\t\toptions.onFieldFailure();\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (options.onValidationComplete) {\n\t\t\t\t// !! ensures that an undefined return is interpreted as return false but allows a onValidationComplete() to possibly return true and have form continue processing\n\t\t\t\treturn !!options.onValidationComplete(form, valid);\n\t\t\t}\n\t\t\treturn valid;\n\t\t},\n\t\t/**\r\n  *  Redraw prompts position, useful when you change the DOM state when validating\r\n  */\n\t\tupdatePromptsPosition: function updatePromptsPosition(event) {\n\n\t\t\tif (event && this == window) {\n\t\t\t\tvar form = event.data.formElem;\n\t\t\t\tvar noAnimation = event.data.noAnimation;\n\t\t\t} else var form = $(this.closest('form, .validationEngineContainer'));\n\n\t\t\tvar options = form.data('jqv');\n\t\t\t// No option, take default one\n\t\t\tform.find('[' + options.validateAttribute + '*=validate]').not(\":disabled\").each(function () {\n\t\t\t\tvar field = $(this);\n\t\t\t\tif (options.prettySelect && field.is(\":hidden\")) field = form.find(\"#\" + options.usePrefix + field.attr('id') + options.useSuffix);\n\t\t\t\tvar prompt = methods._getPrompt(field);\n\t\t\t\tvar promptText = $(prompt).find(\".formErrorContent\").html();\n\n\t\t\t\tif (prompt) methods._updatePrompt(field, $(prompt), promptText, undefined, false, options, noAnimation);\n\t\t\t});\n\t\t\treturn this;\n\t\t},\n\t\t/**\r\n  * Displays a prompt on a element.\r\n  * Note that the element needs an id!\r\n  *\r\n  * @param {String} promptText html text to display type\r\n  * @param {String} type the type of bubble: 'pass' (green), 'load' (black) anything else (red)\r\n  * @param {String} possible values topLeft, topRight, bottomLeft, centerRight, bottomRight\r\n  */\n\t\tshowPrompt: function showPrompt(promptText, type, promptPosition, showArrow) {\n\t\t\tvar form = this.closest('form, .validationEngineContainer');\n\t\t\tvar options = form.data('jqv');\n\t\t\t// No option, take default one\n\t\t\tif (!options) options = methods._saveOptions(this, options);\n\t\t\tif (promptPosition) options.promptPosition = promptPosition;\n\t\t\toptions.showArrow = showArrow == true;\n\n\t\t\tmethods._showPrompt(this, promptText, type, false, options);\n\t\t\treturn this;\n\t\t},\n\t\t/**\r\n  * Closes form error prompts, CAN be invidual\r\n  */\n\t\thide: function hide() {\n\t\t\tvar form = $(this).closest('form, .validationEngineContainer');\n\t\t\tvar options = form.data('jqv');\n\t\t\tvar fadeDuration = options && options.fadeDuration ? options.fadeDuration : 0.3;\n\t\t\tvar closingtag;\n\n\t\t\tif ($(this).is(\"form\") || $(this).hasClass(\"validationEngineContainer\")) {\n\t\t\t\tclosingtag = \"parentForm\" + methods._getClassName($(this).attr(\"id\"));\n\t\t\t} else {\n\t\t\t\tclosingtag = methods._getClassName($(this).attr(\"id\")) + \"formError\";\n\t\t\t}\n\t\t\t$('.' + closingtag).fadeTo(fadeDuration, 0.3, function () {\n\t\t\t\t$(this).parent('.formErrorOuter').remove();\n\t\t\t\t$(this).remove();\n\t\t\t});\n\t\t\treturn this;\n\t\t},\n\t\t/**\r\n  * Closes all error prompts on the page\r\n  */\n\t\thideAll: function hideAll() {\n\n\t\t\tvar form = this;\n\t\t\tvar options = form.data('jqv');\n\t\t\tvar duration = options ? options.fadeDuration : 0.3;\n\t\t\t$('.formError').fadeTo(duration, 0.3, function () {\n\t\t\t\t$(this).parent('.formErrorOuter').remove();\n\t\t\t\t$(this).remove();\n\t\t\t});\n\t\t\treturn this;\n\t\t},\n\t\t/**\r\n  * Typically called when user exists a field using tab or a mouse click, triggers a field\r\n  * validation\r\n  */\n\t\t_onFieldEvent: function _onFieldEvent(event) {\n\t\t\tvar field = $(this);\n\t\t\tvar form = field.closest('form, .validationEngineContainer');\n\t\t\tvar options = form.data('jqv');\n\t\t\toptions.eventTrigger = \"field\";\n\t\t\t// validate the current field\n\t\t\twindow.setTimeout(function () {\n\t\t\t\tmethods._validateField(field, options);\n\t\t\t\tif (options.InvalidFields.length == 0 && options.onFieldSuccess) {\n\t\t\t\t\toptions.onFieldSuccess();\n\t\t\t\t} else if (options.InvalidFields.length > 0 && options.onFieldFailure) {\n\t\t\t\t\toptions.onFieldFailure();\n\t\t\t\t}\n\t\t\t}, event.data ? event.data.delay : 0);\n\t\t},\n\t\t/**\r\n  * Called when the form is submited, shows prompts accordingly\r\n  *\r\n  * @param {jqObject}\r\n  *            form\r\n  * @return false if form submission needs to be cancelled\r\n  */\n\t\t_onSubmitEvent: function _onSubmitEvent() {\n\t\t\tvar form = $(this);\n\t\t\tvar options = form.data('jqv');\n\n\t\t\t//check if it is trigger from skipped button\n\t\t\tif (form.data(\"jqv_submitButton\")) {\n\t\t\t\tvar submitButton = $(\"#\" + form.data(\"jqv_submitButton\"));\n\t\t\t\tif (submitButton) {\n\t\t\t\t\tif (submitButton.length > 0) {\n\t\t\t\t\t\tif (submitButton.hasClass(\"validate-skip\") || submitButton.attr(\"data-validation-engine-skip\") == \"true\") return true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\toptions.eventTrigger = \"submit\";\n\n\t\t\t// validate each field \n\t\t\t// (- skip field ajax validation, not necessary IF we will perform an ajax form validation)\n\t\t\tvar r = methods._validateFields(form);\n\n\t\t\tif (r && options.ajaxFormValidation) {\n\t\t\t\tmethods._validateFormWithAjax(form, options);\n\t\t\t\t// cancel form auto-submission - process with async call onAjaxFormComplete\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (options.onValidationComplete) {\n\t\t\t\t// !! ensures that an undefined return is interpreted as return false but allows a onValidationComplete() to possibly return true and have form continue processing\n\t\t\t\treturn !!options.onValidationComplete(form, r);\n\t\t\t}\n\t\t\treturn r;\n\t\t},\n\t\t/**\r\n  * Return true if the ajax field validations passed so far\r\n  * @param {Object} options\r\n  * @return true, is all ajax validation passed so far (remember ajax is async)\r\n  */\n\t\t_checkAjaxStatus: function _checkAjaxStatus(options) {\n\t\t\tvar status = true;\n\t\t\t$.each(options.ajaxValidCache, function (key, value) {\n\t\t\t\tif (!value) {\n\t\t\t\t\tstatus = false;\n\t\t\t\t\t// break the each\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn status;\n\t\t},\n\n\t\t/**\r\n  * Return true if the ajax field is validated\r\n  * @param {String} fieldid\r\n  * @param {Object} options\r\n  * @return true, if validation passed, false if false or doesn't exist\r\n  */\n\t\t_checkAjaxFieldStatus: function _checkAjaxFieldStatus(fieldid, options) {\n\t\t\treturn options.ajaxValidCache[fieldid] == true;\n\t\t},\n\t\t/**\r\n  * Validates form fields, shows prompts accordingly\r\n  *\r\n  * @param {jqObject}\r\n  *            form\r\n  * @param {skipAjaxFieldValidation}\r\n  *            boolean - when set to true, ajax field validation is skipped, typically used when the submit button is clicked\r\n  *\r\n  * @return true if form is valid, false if not, undefined if ajax form validation is done\r\n  */\n\t\t_validateFields: function _validateFields(form) {\n\t\t\tvar options = form.data('jqv');\n\n\t\t\t// this variable is set to true if an error is found\n\t\t\tvar errorFound = false;\n\n\t\t\t// Trigger hook, start validation\n\t\t\tform.trigger(\"jqv.form.validating\");\n\t\t\t// first, evaluate status of non ajax fields\n\t\t\tvar first_err = null;\n\t\t\tform.find('[' + options.validateAttribute + '*=validate]').not(\":disabled\").each(function () {\n\t\t\t\tvar field = $(this);\n\t\t\t\tvar names = [];\n\t\t\t\tif ($.inArray(field.attr('name'), names) < 0) {\n\t\t\t\t\terrorFound |= methods._validateField(field, options);\n\t\t\t\t\tif (errorFound && first_err == null) if (field.is(\":hidden\") && options.prettySelect) first_err = field = form.find(\"#\" + options.usePrefix + methods._jqSelector(field.attr('id')) + options.useSuffix);else first_err = field;\n\t\t\t\t\tif (options.doNotShowAllErrosOnSubmit) return false;\n\t\t\t\t\tnames.push(field.attr('name'));\n\n\t\t\t\t\t//if option set, stop checking validation rules after one error is found\n\t\t\t\t\tif (options.showOneMessage == true && errorFound) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// second, check to see if all ajax calls completed ok\n\t\t\t// errorFound |= !methods._checkAjaxStatus(options);\n\n\t\t\t// third, check status and scroll the container accordingly\n\t\t\tform.trigger(\"jqv.form.result\", [errorFound]);\n\n\t\t\tif (errorFound) {\n\t\t\t\tif (options.scroll) {\n\t\t\t\t\tvar destination = first_err.offset().top;\n\t\t\t\t\tvar fixleft = first_err.offset().left;\n\n\t\t\t\t\t//prompt positioning adjustment support. Usage: positionType:Xshift,Yshift (for ex.: bottomLeft:+20 or bottomLeft:-20,+10)\n\t\t\t\t\tvar positionType = options.promptPosition;\n\t\t\t\t\tif (typeof positionType == 'string' && positionType.indexOf(\":\") != -1) positionType = positionType.substring(0, positionType.indexOf(\":\"));\n\n\t\t\t\t\tif (positionType != \"bottomRight\" && positionType != \"bottomLeft\") {\n\t\t\t\t\t\tvar prompt_err = methods._getPrompt(first_err);\n\t\t\t\t\t\tif (prompt_err) {\n\t\t\t\t\t\t\tdestination = prompt_err.offset().top;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Offset the amount the page scrolls by an amount in px to accomodate fixed elements at top of page\n\t\t\t\t\tif (options.scrollOffset) {\n\t\t\t\t\t\tdestination -= options.scrollOffset;\n\t\t\t\t\t}\n\n\t\t\t\t\t// get the position of the first error, there should be at least one, no need to check this\n\t\t\t\t\t//var destination = form.find(\".formError:not('.greenPopup'):first\").offset().top;\n\t\t\t\t\tif (options.isOverflown) {\n\t\t\t\t\t\tvar overflowDIV = $(options.overflownDIV);\n\t\t\t\t\t\tif (!overflowDIV.length) return false;\n\t\t\t\t\t\tvar scrollContainerScroll = overflowDIV.scrollTop();\n\t\t\t\t\t\tvar scrollContainerPos = -parseInt(overflowDIV.offset().top);\n\n\t\t\t\t\t\tdestination += scrollContainerScroll + scrollContainerPos - 5;\n\t\t\t\t\t\tvar scrollContainer = $(options.overflownDIV + \":not(:animated)\");\n\n\t\t\t\t\t\tscrollContainer.animate({ scrollTop: destination }, 1100, function () {\n\t\t\t\t\t\t\tif (options.focusFirstField) first_err.focus();\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$(\"html, body\").animate({\n\t\t\t\t\t\t\tscrollTop: destination\n\t\t\t\t\t\t}, 1100, function () {\n\t\t\t\t\t\t\tif (options.focusFirstField) first_err.focus();\n\t\t\t\t\t\t});\n\t\t\t\t\t\t$(\"html, body\").animate({ scrollLeft: fixleft }, 1100);\n\t\t\t\t\t}\n\t\t\t\t} else if (options.focusFirstField) first_err.focus();\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\t/**\r\n  * This method is called to perform an ajax form validation.\r\n  * During this process all the (field, value) pairs are sent to the server which returns a list of invalid fields or true\r\n  *\r\n  * @param {jqObject} form\r\n  * @param {Map} options\r\n  */\n\t\t_validateFormWithAjax: function _validateFormWithAjax(form, options) {\n\n\t\t\tvar data = form.serialize();\n\t\t\tvar type = options.ajaxFormValidationMethod ? options.ajaxFormValidationMethod : \"GET\";\n\t\t\tvar url = options.ajaxFormValidationURL ? options.ajaxFormValidationURL : form.attr(\"action\");\n\t\t\tvar dataType = options.dataType ? options.dataType : \"json\";\n\t\t\t$.ajax({\n\t\t\t\ttype: type,\n\t\t\t\turl: url,\n\t\t\t\tcache: false,\n\t\t\t\tdataType: dataType,\n\t\t\t\tdata: data,\n\t\t\t\tform: form,\n\t\t\t\tmethods: methods,\n\t\t\t\toptions: options,\n\t\t\t\tbeforeSend: function beforeSend() {\n\t\t\t\t\treturn options.onBeforeAjaxFormValidation(form, options);\n\t\t\t\t},\n\t\t\t\terror: function error(data, transport) {\n\t\t\t\t\tmethods._ajaxError(data, transport);\n\t\t\t\t},\n\t\t\t\tsuccess: function success(json) {\n\t\t\t\t\tif (dataType == \"json\" && json !== true) {\n\t\t\t\t\t\t// getting to this case doesn't necessary means that the form is invalid\n\t\t\t\t\t\t// the server may return green or closing prompt actions\n\t\t\t\t\t\t// this flag helps figuring it out\n\t\t\t\t\t\tvar errorInForm = false;\n\t\t\t\t\t\tfor (var i = 0; i < json.length; i++) {\n\t\t\t\t\t\t\tvar value = json[i];\n\n\t\t\t\t\t\t\tvar errorFieldId = value[0];\n\t\t\t\t\t\t\tvar errorField = $($(\"#\" + errorFieldId)[0]);\n\n\t\t\t\t\t\t\t// make sure we found the element\n\t\t\t\t\t\t\tif (errorField.length == 1) {\n\n\t\t\t\t\t\t\t\t// promptText or selector\n\t\t\t\t\t\t\t\tvar msg = value[2];\n\t\t\t\t\t\t\t\t// if the field is valid\n\t\t\t\t\t\t\t\tif (value[1] == true) {\n\n\t\t\t\t\t\t\t\t\tif (msg == \"\" || !msg) {\n\t\t\t\t\t\t\t\t\t\t// if for some reason, status==true and error=\"\", just close the prompt\n\t\t\t\t\t\t\t\t\t\tmethods._closePrompt(errorField);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t// the field is valid, but we are displaying a green prompt\n\t\t\t\t\t\t\t\t\t\tif (options.allrules[msg]) {\n\t\t\t\t\t\t\t\t\t\t\tvar txt = options.allrules[msg].alertTextOk;\n\t\t\t\t\t\t\t\t\t\t\tif (txt) msg = txt;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tif (options.showPrompts) methods._showPrompt(errorField, msg, \"pass\", false, options, true);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t// the field is invalid, show the red error prompt\n\t\t\t\t\t\t\t\t\terrorInForm |= true;\n\t\t\t\t\t\t\t\t\tif (options.allrules[msg]) {\n\t\t\t\t\t\t\t\t\t\tvar txt = options.allrules[msg].alertText;\n\t\t\t\t\t\t\t\t\t\tif (txt) msg = txt;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (options.showPrompts) methods._showPrompt(errorField, msg, \"\", false, options, true);\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\toptions.onAjaxFormComplete(!errorInForm, form, json, options);\n\t\t\t\t\t} else options.onAjaxFormComplete(true, form, json, options);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\t/**\r\n  * Validates field, shows prompts accordingly\r\n  *\r\n  * @param {jqObject}\r\n  *            field\r\n  * @param {Array[String]}\r\n  *            field's validation rules\r\n  * @param {Map}\r\n  *            user options\r\n  * @return false if field is valid (It is inversed for *fields*, it return false on validate and true on errors.)\r\n  */\n\t\t_validateField: function _validateField(field, options, skipAjaxValidation) {\n\t\t\tif (!field.attr(\"id\")) {\n\t\t\t\tfield.attr(\"id\", \"form-validation-field-\" + $.validationEngine.fieldIdCounter);\n\t\t\t\t++$.validationEngine.fieldIdCounter;\n\t\t\t}\n\n\t\t\tif (field.is(\":hidden\") && !options.prettySelect || field.parent().is(\":hidden\")) return false;\n\n\t\t\tvar rulesParsing = field.attr(options.validateAttribute);\n\t\t\tvar getRules = /validate\\[(.*)\\]/.exec(rulesParsing);\n\n\t\t\tif (!getRules) return false;\n\t\t\tvar str = getRules[1];\n\t\t\tvar rules = str.split(/\\[|,|\\]/);\n\n\t\t\t// true if we ran the ajax validation, tells the logic to stop messing with prompts\n\t\t\tvar isAjaxValidator = false;\n\t\t\tvar fieldName = field.attr(\"name\");\n\t\t\tvar promptText = \"\";\n\t\t\tvar promptType = \"\";\n\t\t\tvar required = false;\n\t\t\tvar limitErrors = false;\n\t\t\toptions.isError = false;\n\t\t\toptions.showArrow = true;\n\n\t\t\t// If the programmer wants to limit the amount of error messages per field,\n\t\t\tif (options.maxErrorsPerField > 0) {\n\t\t\t\tlimitErrors = true;\n\t\t\t}\n\n\t\t\tvar form = $(field.closest(\"form, .validationEngineContainer\"));\n\t\t\t// Fix for adding spaces in the rules\n\t\t\tfor (var i = 0; i < rules.length; i++) {\n\t\t\t\trules[i] = rules[i].replace(\" \", \"\");\n\t\t\t\t// Remove any parsing errors\n\t\t\t\tif (rules[i] === '') {\n\t\t\t\t\tdelete rules[i];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (var i = 0, field_errors = 0; i < rules.length; i++) {\n\n\t\t\t\t// If we are limiting errors, and have hit the max, break\n\t\t\t\tif (limitErrors && field_errors >= options.maxErrorsPerField) {\n\t\t\t\t\t// If we haven't hit a required yet, check to see if there is one in the validation rules for this\n\t\t\t\t\t// field and that it's index is greater or equal to our current index\n\t\t\t\t\tif (!required) {\n\t\t\t\t\t\tvar have_required = $.inArray('required', rules);\n\t\t\t\t\t\trequired = have_required != -1 && have_required >= i;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tvar errorMsg = undefined;\n\t\t\t\tswitch (rules[i]) {\n\n\t\t\t\t\tcase \"required\":\n\t\t\t\t\t\trequired = true;\n\t\t\t\t\t\terrorMsg = methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._required);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"custom\":\n\t\t\t\t\t\terrorMsg = methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._custom);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"groupRequired\":\n\t\t\t\t\t\t// Check is its the first of group, if not, reload validation with first field\n\t\t\t\t\t\t// AND continue normal validation on present field\n\t\t\t\t\t\tvar classGroup = \"[\" + options.validateAttribute + \"*=\" + rules[i + 1] + \"]\";\n\t\t\t\t\t\tvar firstOfGroup = form.find(classGroup).eq(0);\n\t\t\t\t\t\tif (firstOfGroup[0] != field[0]) {\n\n\t\t\t\t\t\t\tmethods._validateField(firstOfGroup, options, skipAjaxValidation);\n\t\t\t\t\t\t\toptions.showArrow = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\terrorMsg = methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._groupRequired);\n\t\t\t\t\t\tif (errorMsg) required = true;\n\t\t\t\t\t\toptions.showArrow = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"ajax\":\n\t\t\t\t\t\t// AJAX defaults to returning it's loading message\n\t\t\t\t\t\terrorMsg = methods._ajax(field, rules, i, options);\n\t\t\t\t\t\tif (errorMsg) {\n\t\t\t\t\t\t\tpromptType = \"load\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"minSize\":\n\t\t\t\t\t\terrorMsg = methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._minSize);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"maxSize\":\n\t\t\t\t\t\terrorMsg = methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._maxSize);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"min\":\n\t\t\t\t\t\terrorMsg = methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._min);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"max\":\n\t\t\t\t\t\terrorMsg = methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._max);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"past\":\n\t\t\t\t\t\terrorMsg = methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._past);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"future\":\n\t\t\t\t\t\terrorMsg = methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._future);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"dateRange\":\n\t\t\t\t\t\tvar classGroup = \"[\" + options.validateAttribute + \"*=\" + rules[i + 1] + \"]\";\n\t\t\t\t\t\toptions.firstOfGroup = form.find(classGroup).eq(0);\n\t\t\t\t\t\toptions.secondOfGroup = form.find(classGroup).eq(1);\n\n\t\t\t\t\t\t//if one entry out of the pair has value then proceed to run through validation\n\t\t\t\t\t\tif (options.firstOfGroup[0].value || options.secondOfGroup[0].value) {\n\t\t\t\t\t\t\terrorMsg = methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._dateRange);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (errorMsg) required = true;\n\t\t\t\t\t\toptions.showArrow = false;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"dateTimeRange\":\n\t\t\t\t\t\tvar classGroup = \"[\" + options.validateAttribute + \"*=\" + rules[i + 1] + \"]\";\n\t\t\t\t\t\toptions.firstOfGroup = form.find(classGroup).eq(0);\n\t\t\t\t\t\toptions.secondOfGroup = form.find(classGroup).eq(1);\n\n\t\t\t\t\t\t//if one entry out of the pair has value then proceed to run through validation\n\t\t\t\t\t\tif (options.firstOfGroup[0].value || options.secondOfGroup[0].value) {\n\t\t\t\t\t\t\terrorMsg = methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._dateTimeRange);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (errorMsg) required = true;\n\t\t\t\t\t\toptions.showArrow = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"maxCheckbox\":\n\t\t\t\t\t\tfield = $(form.find(\"input[name='\" + fieldName + \"']\"));\n\t\t\t\t\t\terrorMsg = methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._maxCheckbox);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"minCheckbox\":\n\t\t\t\t\t\tfield = $(form.find(\"input[name='\" + fieldName + \"']\"));\n\t\t\t\t\t\terrorMsg = methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._minCheckbox);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"equals\":\n\t\t\t\t\t\terrorMsg = methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._equals);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"funcCall\":\n\t\t\t\t\t\terrorMsg = methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._funcCall);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"creditCard\":\n\t\t\t\t\t\terrorMsg = methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._creditCard);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"condRequired\":\n\t\t\t\t\t\terrorMsg = methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._condRequired);\n\t\t\t\t\t\tif (errorMsg !== undefined) {\n\t\t\t\t\t\t\trequired = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t}\n\n\t\t\t\tvar end_validation = false;\n\n\t\t\t\t// If we were passed back an message object, check what the status was to determine what to do\n\t\t\t\tif ((typeof errorMsg === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(errorMsg)) == \"object\") {\n\t\t\t\t\tswitch (errorMsg.status) {\n\t\t\t\t\t\tcase \"_break\":\n\t\t\t\t\t\t\tend_validation = true;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t// If we have an error message, set errorMsg to the error message\n\t\t\t\t\t\tcase \"_error\":\n\t\t\t\t\t\t\terrorMsg = errorMsg.message;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t// If we want to throw an error, but not show a prompt, return early with true\n\t\t\t\t\t\tcase \"_error_no_prompt\":\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t// Anything else we continue on\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// If it has been specified that validation should end now, break\n\t\t\t\tif (end_validation) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t// If we have a string, that means that we have an error, so add it to the error message.\n\t\t\t\tif (typeof errorMsg == 'string') {\n\t\t\t\t\tpromptText += errorMsg + \"<br/>\";\n\t\t\t\t\toptions.isError = true;\n\t\t\t\t\tfield_errors++;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// If the rules required is not added, an empty field is not validated\n\t\t\tif (!required && !field.val() && field.val().length < 1) options.isError = false;\n\n\t\t\t// Hack for radio/checkbox group button, the validation go into the\n\t\t\t// first radio/checkbox of the group\n\t\t\tvar fieldType = field.prop(\"type\");\n\t\t\tvar positionType = field.data(\"promptPosition\") || options.promptPosition;\n\n\t\t\tif ((fieldType == \"radio\" || fieldType == \"checkbox\") && form.find(\"input[name='\" + fieldName + \"']\").size() > 1) {\n\t\t\t\tif (positionType === 'inline') {\n\t\t\t\t\tfield = $(form.find(\"input[name='\" + fieldName + \"'][type!=hidden]:last\"));\n\t\t\t\t} else {\n\t\t\t\t\tfield = $(form.find(\"input[name='\" + fieldName + \"'][type!=hidden]:first\"));\n\t\t\t\t}\n\t\t\t\toptions.showArrow = false;\n\t\t\t}\n\n\t\t\tif (field.is(\":hidden\") && options.prettySelect) {\n\t\t\t\tfield = form.find(\"#\" + options.usePrefix + methods._jqSelector(field.attr('id')) + options.useSuffix);\n\t\t\t}\n\n\t\t\tif (options.isError && options.showPrompts) {\n\t\t\t\tmethods._showPrompt(field, promptText, promptType, false, options);\n\t\t\t} else {\n\t\t\t\tif (!isAjaxValidator) methods._closePrompt(field);\n\t\t\t}\n\n\t\t\tif (!isAjaxValidator) {\n\t\t\t\tfield.trigger(\"jqv.field.result\", [field, options.isError, promptText]);\n\t\t\t}\n\n\t\t\t/* Record error */\n\t\t\tvar errindex = $.inArray(field[0], options.InvalidFields);\n\t\t\tif (errindex == -1) {\n\t\t\t\tif (options.isError) options.InvalidFields.push(field[0]);\n\t\t\t} else if (!options.isError) {\n\t\t\t\toptions.InvalidFields.splice(errindex, 1);\n\t\t\t}\n\n\t\t\tmethods._handleStatusCssClasses(field, options);\n\n\t\t\t/* run callback function for each field */\n\t\t\tif (options.isError && options.onFieldFailure) options.onFieldFailure(field);\n\n\t\t\tif (!options.isError && options.onFieldSuccess) options.onFieldSuccess(field);\n\n\t\t\treturn options.isError;\n\t\t},\n\t\t/**\r\n  * Handling css classes of fields indicating result of validation \r\n  *\r\n  * @param {jqObject}\r\n  *            field\r\n  * @param {Array[String]}\r\n  *            field's validation rules            \r\n  * @private\r\n  */\n\t\t_handleStatusCssClasses: function _handleStatusCssClasses(field, options) {\n\t\t\t/* remove all classes */\n\t\t\tif (options.addSuccessCssClassToField) field.removeClass(options.addSuccessCssClassToField);\n\n\t\t\tif (options.addFailureCssClassToField) field.removeClass(options.addFailureCssClassToField);\n\n\t\t\t/* Add classes */\n\t\t\tif (options.addSuccessCssClassToField && !options.isError) field.addClass(options.addSuccessCssClassToField);\n\n\t\t\tif (options.addFailureCssClassToField && options.isError) field.addClass(options.addFailureCssClassToField);\n\t\t},\n\n\t\t/********************\r\n   * _getErrorMessage\r\n   *\r\n   * @param form\r\n   * @param field\r\n   * @param rule\r\n   * @param rules\r\n   * @param i\r\n   * @param options\r\n   * @param originalValidationMethod\r\n   * @return {*}\r\n   * @private\r\n   */\n\t\t_getErrorMessage: function _getErrorMessage(form, field, rule, rules, i, options, originalValidationMethod) {\n\t\t\t// If we are using the custon validation type, build the index for the rule.\n\t\t\t// Otherwise if we are doing a function call, make the call and return the object\n\t\t\t// that is passed back.\n\t\t\tvar rule_index = _jquery2.default.inArray(rule, rules);\n\t\t\tif (rule === \"custom\" || rule === \"funcCall\") {\n\t\t\t\tvar custom_validation_type = rules[rule_index + 1];\n\t\t\t\trule = rule + \"[\" + custom_validation_type + \"]\";\n\t\t\t\t// Delete the rule from the rules array so that it doesn't try to call the\n\t\t\t\t// same rule over again\n\t\t\t\tdelete rules[rule_index];\n\t\t\t}\n\t\t\t// Change the rule to the composite rule, if it was different from the original\n\t\t\tvar alteredRule = rule;\n\n\t\t\tvar element_classes = field.attr(\"data-validation-engine\") ? field.attr(\"data-validation-engine\") : field.attr(\"class\");\n\t\t\tvar element_classes_array = element_classes.split(\" \");\n\n\t\t\t// Call the original validation method. If we are dealing with dates or checkboxes, also pass the form\n\t\t\tvar errorMsg;\n\t\t\tif (rule == \"future\" || rule == \"past\" || rule == \"maxCheckbox\" || rule == \"minCheckbox\") {\n\t\t\t\terrorMsg = originalValidationMethod(form, field, rules, i, options);\n\t\t\t} else {\n\t\t\t\terrorMsg = originalValidationMethod(field, rules, i, options);\n\t\t\t}\n\n\t\t\t// If the original validation method returned an error and we have a custom error message,\n\t\t\t// return the custom message instead. Otherwise return the original error message.\n\t\t\tif (errorMsg != undefined) {\n\t\t\t\tvar custom_message = methods._getCustomErrorMessage($(field), element_classes_array, alteredRule, options);\n\t\t\t\tif (custom_message) errorMsg = custom_message;\n\t\t\t}\n\t\t\treturn errorMsg;\n\t\t},\n\t\t_getCustomErrorMessage: function _getCustomErrorMessage(field, classes, rule, options) {\n\t\t\tvar custom_message = false;\n\t\t\tvar validityProp = methods._validityProp[rule];\n\t\t\t// If there is a validityProp for this rule, check to see if the field has an attribute for it\n\t\t\tif (validityProp != undefined) {\n\t\t\t\tcustom_message = field.attr(\"data-errormessage-\" + validityProp);\n\t\t\t\t// If there was an error message for it, return the message\n\t\t\t\tif (custom_message != undefined) return custom_message;\n\t\t\t}\n\t\t\tcustom_message = field.attr(\"data-errormessage\");\n\t\t\t// If there is an inline custom error message, return it\n\t\t\tif (custom_message != undefined) return custom_message;\n\t\t\tvar id = '#' + field.attr(\"id\");\n\t\t\t// If we have custom messages for the element's id, get the message for the rule from the id.\n\t\t\t// Otherwise, if we have custom messages for the element's classes, use the first class message we find instead.\n\t\t\tif (typeof options.custom_error_messages[id] != \"undefined\" && typeof options.custom_error_messages[id][rule] != \"undefined\") {\n\t\t\t\tcustom_message = options.custom_error_messages[id][rule]['message'];\n\t\t\t} else if (classes.length > 0) {\n\t\t\t\tfor (var i = 0; i < classes.length && classes.length > 0; i++) {\n\t\t\t\t\tvar element_class = \".\" + classes[i];\n\t\t\t\t\tif (typeof options.custom_error_messages[element_class] != \"undefined\" && typeof options.custom_error_messages[element_class][rule] != \"undefined\") {\n\t\t\t\t\t\tcustom_message = options.custom_error_messages[element_class][rule]['message'];\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\tif (!custom_message && typeof options.custom_error_messages[rule] != \"undefined\" && typeof options.custom_error_messages[rule]['message'] != \"undefined\") {\n\t\t\t\tcustom_message = options.custom_error_messages[rule]['message'];\n\t\t\t}\n\t\t\treturn custom_message;\n\t\t},\n\t\t_validityProp: {\n\t\t\t\"required\": \"value-missing\",\n\t\t\t\"custom\": \"custom-error\",\n\t\t\t\"groupRequired\": \"value-missing\",\n\t\t\t\"ajax\": \"custom-error\",\n\t\t\t\"minSize\": \"range-underflow\",\n\t\t\t\"maxSize\": \"range-overflow\",\n\t\t\t\"min\": \"range-underflow\",\n\t\t\t\"max\": \"range-overflow\",\n\t\t\t\"past\": \"type-mismatch\",\n\t\t\t\"future\": \"type-mismatch\",\n\t\t\t\"dateRange\": \"type-mismatch\",\n\t\t\t\"dateTimeRange\": \"type-mismatch\",\n\t\t\t\"maxCheckbox\": \"range-overflow\",\n\t\t\t\"minCheckbox\": \"range-underflow\",\n\t\t\t\"equals\": \"pattern-mismatch\",\n\t\t\t\"funcCall\": \"custom-error\",\n\t\t\t\"creditCard\": \"pattern-mismatch\",\n\t\t\t\"condRequired\": \"value-missing\"\n\t\t},\n\t\t/**\r\n  * Required validation\r\n  *\r\n  * @param {jqObject} field\r\n  * @param {Array[String]} rules\r\n  * @param {int} i rules index\r\n  * @param {Map}\r\n  *            user options\r\n  * @param {bool} condRequired flag when method is used for internal purpose in condRequired check\r\n  * @return an error string if validation failed\r\n  */\n\t\t_required: function _required(field, rules, i, options, condRequired) {\n\t\t\tswitch (field.prop(\"type\")) {\n\t\t\t\tcase \"text\":\n\t\t\t\tcase \"password\":\n\t\t\t\tcase \"textarea\":\n\t\t\t\tcase \"file\":\n\t\t\t\tcase \"select-one\":\n\t\t\t\tcase \"select-multiple\":\n\t\t\t\tdefault:\n\t\t\t\t\tif (!$.trim(field.val()) && (field.val() != field.attr(\"data-validation-placeholder\") || field.val() !== field.attr(\"placeholder\"))) return options.allrules[rules[i]].alertText;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"radio\":\n\t\t\t\tcase \"checkbox\":\n\t\t\t\t\t// new validation style to only check dependent field\n\t\t\t\t\tif (condRequired) {\n\t\t\t\t\t\tif (!field.attr('checked')) {\n\t\t\t\t\t\t\treturn options.allrules[rules[i]].alertTextCheckboxMultiple;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t// old validation style\n\t\t\t\t\tvar form = field.closest(\"form, .validationEngineContainer\");\n\t\t\t\t\tvar name = field.attr(\"name\");\n\t\t\t\t\tif (form.find(\"input[name='\" + name + \"']:checked\").size() == 0) {\n\t\t\t\t\t\tif (form.find(\"input[name='\" + name + \"']:visible\").size() == 1) return options.allrules[rules[i]].alertTextCheckboxe;else return options.allrules[rules[i]].alertTextCheckboxMultiple;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\t/**\r\n  * Validate that 1 from the group field is required\r\n  *\r\n  * @param {jqObject} field\r\n  * @param {Array[String]} rules\r\n  * @param {int} i rules index\r\n  * @param {Map}\r\n  *            user options\r\n  * @return an error string if validation failed\r\n  */\n\t\t_groupRequired: function _groupRequired(field, rules, i, options) {\n\t\t\tvar classGroup = \"[\" + options.validateAttribute + \"*=\" + rules[i + 1] + \"]\";\n\t\t\tvar isValid = false;\n\t\t\t// Check all fields from the group\n\t\t\tfield.closest(\"form, .validationEngineContainer\").find(classGroup).each(function () {\n\t\t\t\tif (!methods._required($(this), rules, i, options)) {\n\t\t\t\t\tisValid = true;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (!isValid) {\n\t\t\t\treturn options.allrules[rules[i]].alertText;\n\t\t\t}\n\t\t},\n\t\t/**\r\n  * Validate rules\r\n  *\r\n  * @param {jqObject} field\r\n  * @param {Array[String]} rules\r\n  * @param {int} i rules index\r\n  * @param {Map}\r\n  *            user options\r\n  * @return an error string if validation failed\r\n  */\n\t\t_custom: function _custom(field, rules, i, options) {\n\t\t\tvar customRule = rules[i + 1];\n\t\t\tvar rule = options.allrules[customRule];\n\t\t\tvar fn;\n\t\t\tif (!rule) {\n\t\t\t\talert(\"jqv:custom rule not found - \" + customRule);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (rule[\"regex\"]) {\n\t\t\t\tvar ex = rule.regex;\n\t\t\t\tif (!ex) {\n\t\t\t\t\talert(\"jqv:custom regex not found - \" + customRule);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvar pattern = new RegExp(ex);\n\n\t\t\t\tif (!pattern.test(field.val())) return options.allrules[customRule].alertText;\n\t\t\t} else if (rule[\"func\"]) {\n\t\t\t\tfn = rule[\"func\"];\n\n\t\t\t\tif (typeof fn !== \"function\") {\n\t\t\t\t\talert(\"jqv:custom parameter 'function' is no function - \" + customRule);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (!fn(field, rules, i, options)) return options.allrules[customRule].alertText;\n\t\t\t} else {\n\t\t\t\talert(\"jqv:custom type not allowed \" + customRule);\n\t\t\t\treturn;\n\t\t\t}\n\t\t},\n\t\t/**\r\n  * Validate custom function outside of the engine scope\r\n  *\r\n  * @param {jqObject} field\r\n  * @param {Array[String]} rules\r\n  * @param {int} i rules index\r\n  * @param {Map}\r\n  *            user options\r\n  * @return an error string if validation failed\r\n  */\n\t\t_funcCall: function _funcCall(field, rules, i, options) {\n\t\t\tvar functionName = rules[i + 1];\n\t\t\tvar fn;\n\t\t\tif (functionName.indexOf('.') > -1) {\n\t\t\t\tvar namespaces = functionName.split('.');\n\t\t\t\tvar scope = window;\n\t\t\t\twhile (namespaces.length) {\n\t\t\t\t\tscope = scope[namespaces.shift()];\n\t\t\t\t}\n\t\t\t\tfn = scope;\n\t\t\t} else fn = window[functionName] || options.customFunctions[functionName];\n\t\t\tif (typeof fn == 'function') return fn(field, rules, i, options);\n\t\t},\n\t\t/**\r\n  * Field match\r\n  *\r\n  * @param {jqObject} field\r\n  * @param {Array[String]} rules\r\n  * @param {int} i rules index\r\n  * @param {Map}\r\n  *            user options\r\n  * @return an error string if validation failed\r\n  */\n\t\t_equals: function _equals(field, rules, i, options) {\n\t\t\tvar equalsField = rules[i + 1];\n\n\t\t\tif (field.val() != $(\"#\" + equalsField).val()) return options.allrules.equals.alertText;\n\t\t},\n\t\t/**\r\n  * Check the maximum size (in characters)\r\n  *\r\n  * @param {jqObject} field\r\n  * @param {Array[String]} rules\r\n  * @param {int} i rules index\r\n  * @param {Map}\r\n  *            user options\r\n  * @return an error string if validation failed\r\n  */\n\t\t_maxSize: function _maxSize(field, rules, i, options) {\n\t\t\tvar max = rules[i + 1];\n\t\t\tvar len = field.val().length;\n\n\t\t\tif (len > max) {\n\t\t\t\tvar rule = options.allrules.maxSize;\n\t\t\t\treturn rule.alertText + max + rule.alertText2;\n\t\t\t}\n\t\t},\n\t\t/**\r\n  * Check the minimum size (in characters)\r\n  *\r\n  * @param {jqObject} field\r\n  * @param {Array[String]} rules\r\n  * @param {int} i rules index\r\n  * @param {Map}\r\n  *            user options\r\n  * @return an error string if validation failed\r\n  */\n\t\t_minSize: function _minSize(field, rules, i, options) {\n\t\t\tvar min = rules[i + 1];\n\t\t\tvar len = field.val().length;\n\n\t\t\tif (len < min) {\n\t\t\t\tvar rule = options.allrules.minSize;\n\t\t\t\treturn rule.alertText + min + rule.alertText2;\n\t\t\t}\n\t\t},\n\t\t/**\r\n  * Check number minimum value\r\n  *\r\n  * @param {jqObject} field\r\n  * @param {Array[String]} rules\r\n  * @param {int} i rules index\r\n  * @param {Map}\r\n  *            user options\r\n  * @return an error string if validation failed\r\n  */\n\t\t_min: function _min(field, rules, i, options) {\n\t\t\tvar min = parseFloat(rules[i + 1]);\n\t\t\tvar len = parseFloat(field.val());\n\n\t\t\tif (len < min) {\n\t\t\t\tvar rule = options.allrules.min;\n\t\t\t\tif (rule.alertText2) return rule.alertText + min + rule.alertText2;\n\t\t\t\treturn rule.alertText + min;\n\t\t\t}\n\t\t},\n\t\t/**\r\n  * Check number maximum value\r\n  *\r\n  * @param {jqObject} field\r\n  * @param {Array[String]} rules\r\n  * @param {int} i rules index\r\n  * @param {Map}\r\n  *            user options\r\n  * @return an error string if validation failed\r\n  */\n\t\t_max: function _max(field, rules, i, options) {\n\t\t\tvar max = parseFloat(rules[i + 1]);\n\t\t\tvar len = parseFloat(field.val());\n\n\t\t\tif (len > max) {\n\t\t\t\tvar rule = options.allrules.max;\n\t\t\t\tif (rule.alertText2) return rule.alertText + max + rule.alertText2;\n\t\t\t\t//orefalo: to review, also do the translations\n\t\t\t\treturn rule.alertText + max;\n\t\t\t}\n\t\t},\n\t\t/**\r\n  * Checks date is in the past\r\n  *\r\n  * @param {jqObject} field\r\n  * @param {Array[String]} rules\r\n  * @param {int} i rules index\r\n  * @param {Map}\r\n  *            user options\r\n  * @return an error string if validation failed\r\n  */\n\t\t_past: function _past(form, field, rules, i, options) {\n\n\t\t\tvar p = rules[i + 1];\n\t\t\tvar fieldAlt = $(form.find(\"input[name='\" + p.replace(/^#+/, '') + \"']\"));\n\t\t\tvar pdate;\n\n\t\t\tif (p.toLowerCase() == \"now\") {\n\t\t\t\tpdate = new Date();\n\t\t\t} else if (undefined != fieldAlt.val()) {\n\t\t\t\tif (fieldAlt.is(\":disabled\")) return;\n\t\t\t\tpdate = methods._parseDate(fieldAlt.val());\n\t\t\t} else {\n\t\t\t\tpdate = methods._parseDate(p);\n\t\t\t}\n\t\t\tvar vdate = methods._parseDate(field.val());\n\n\t\t\tif (vdate > pdate) {\n\t\t\t\tvar rule = options.allrules.past;\n\t\t\t\tif (rule.alertText2) return rule.alertText + methods._dateToString(pdate) + rule.alertText2;\n\t\t\t\treturn rule.alertText + methods._dateToString(pdate);\n\t\t\t}\n\t\t},\n\t\t/**\r\n  * Checks date is in the future\r\n  *\r\n  * @param {jqObject} field\r\n  * @param {Array[String]} rules\r\n  * @param {int} i rules index\r\n  * @param {Map}\r\n  *            user options\r\n  * @return an error string if validation failed\r\n  */\n\t\t_future: function _future(form, field, rules, i, options) {\n\n\t\t\tvar p = rules[i + 1];\n\t\t\tvar fieldAlt = $(form.find(\"input[name='\" + p.replace(/^#+/, '') + \"']\"));\n\t\t\tvar pdate;\n\n\t\t\tif (p.toLowerCase() == \"now\") {\n\t\t\t\tpdate = new Date();\n\t\t\t} else if (undefined != fieldAlt.val()) {\n\t\t\t\tif (fieldAlt.is(\":disabled\")) return;\n\t\t\t\tpdate = methods._parseDate(fieldAlt.val());\n\t\t\t} else {\n\t\t\t\tpdate = methods._parseDate(p);\n\t\t\t}\n\t\t\tvar vdate = methods._parseDate(field.val());\n\n\t\t\tif (vdate < pdate) {\n\t\t\t\tvar rule = options.allrules.future;\n\t\t\t\tif (rule.alertText2) return rule.alertText + methods._dateToString(pdate) + rule.alertText2;\n\t\t\t\treturn rule.alertText + methods._dateToString(pdate);\n\t\t\t}\n\t\t},\n\t\t/**\r\n  * Checks if valid date\r\n  *\r\n  * @param {string} date string\r\n  * @return a bool based on determination of valid date\r\n  */\n\t\t_isDate: function _isDate(value) {\n\t\t\tvar dateRegEx = new RegExp(/^\\d{4}[\\/\\-](0?[1-9]|1[012])[\\/\\-](0?[1-9]|[12][0-9]|3[01])$|^(?:(?:(?:0?[13578]|1[02])(\\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\\/|-)(?:29|30)))(\\/|-)(?:[1-9]\\d\\d\\d|\\d[1-9]\\d\\d|\\d\\d[1-9]\\d|\\d\\d\\d[1-9])$|^(?:(?:0?[1-9]|1[0-2])(\\/|-)(?:0?[1-9]|1\\d|2[0-8]))(\\/|-)(?:[1-9]\\d\\d\\d|\\d[1-9]\\d\\d|\\d\\d[1-9]\\d|\\d\\d\\d[1-9])$|^(0?2(\\/|-)29)(\\/|-)(?:(?:0[48]00|[13579][26]00|[2468][048]00)|(?:\\d\\d)?(?:0[48]|[2468][048]|[13579][26]))$/);\n\t\t\treturn dateRegEx.test(value);\n\t\t},\n\t\t/**\r\n  * Checks if valid date time\r\n  *\r\n  * @param {string} date string\r\n  * @return a bool based on determination of valid date time\r\n  */\n\t\t_isDateTime: function _isDateTime(value) {\n\t\t\tvar dateTimeRegEx = new RegExp(/^\\d{4}[\\/\\-](0?[1-9]|1[012])[\\/\\-](0?[1-9]|[12][0-9]|3[01])\\s+(1[012]|0?[1-9]){1}:(0?[1-5]|[0-6][0-9]){1}:(0?[0-6]|[0-6][0-9]){1}\\s+(am|pm|AM|PM){1}$|^(?:(?:(?:0?[13578]|1[02])(\\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\\/|-)(?:29|30)))(\\/|-)(?:[1-9]\\d\\d\\d|\\d[1-9]\\d\\d|\\d\\d[1-9]\\d|\\d\\d\\d[1-9])$|^((1[012]|0?[1-9]){1}\\/(0?[1-9]|[12][0-9]|3[01]){1}\\/\\d{2,4}\\s+(1[012]|0?[1-9]){1}:(0?[1-5]|[0-6][0-9]){1}:(0?[0-6]|[0-6][0-9]){1}\\s+(am|pm|AM|PM){1})$/);\n\t\t\treturn dateTimeRegEx.test(value);\n\t\t},\n\t\t//Checks if the start date is before the end date\n\t\t//returns true if end is later than start\n\t\t_dateCompare: function _dateCompare(start, end) {\n\t\t\treturn new Date(start.toString()) < new Date(end.toString());\n\t\t},\n\t\t/**\r\n  * Checks date range\r\n  *\r\n  * @param {jqObject} first field name\r\n  * @param {jqObject} second field name\r\n  * @return an error string if validation failed\r\n  */\n\t\t_dateRange: function _dateRange(field, rules, i, options) {\n\t\t\t//are not both populated\n\t\t\tif (!options.firstOfGroup[0].value && options.secondOfGroup[0].value || options.firstOfGroup[0].value && !options.secondOfGroup[0].value) {\n\t\t\t\treturn options.allrules[rules[i]].alertText + options.allrules[rules[i]].alertText2;\n\t\t\t}\n\n\t\t\t//are not both dates\n\t\t\tif (!methods._isDate(options.firstOfGroup[0].value) || !methods._isDate(options.secondOfGroup[0].value)) {\n\t\t\t\treturn options.allrules[rules[i]].alertText + options.allrules[rules[i]].alertText2;\n\t\t\t}\n\n\t\t\t//are both dates but range is off\n\t\t\tif (!methods._dateCompare(options.firstOfGroup[0].value, options.secondOfGroup[0].value)) {\n\t\t\t\treturn options.allrules[rules[i]].alertText + options.allrules[rules[i]].alertText2;\n\t\t\t}\n\t\t},\n\t\t/**\r\n  * Checks date time range\r\n  *\r\n  * @param {jqObject} first field name\r\n  * @param {jqObject} second field name\r\n  * @return an error string if validation failed\r\n  */\n\t\t_dateTimeRange: function _dateTimeRange(field, rules, i, options) {\n\t\t\t//are not both populated\n\t\t\tif (!options.firstOfGroup[0].value && options.secondOfGroup[0].value || options.firstOfGroup[0].value && !options.secondOfGroup[0].value) {\n\t\t\t\treturn options.allrules[rules[i]].alertText + options.allrules[rules[i]].alertText2;\n\t\t\t}\n\t\t\t//are not both dates\n\t\t\tif (!methods._isDateTime(options.firstOfGroup[0].value) || !methods._isDateTime(options.secondOfGroup[0].value)) {\n\t\t\t\treturn options.allrules[rules[i]].alertText + options.allrules[rules[i]].alertText2;\n\t\t\t}\n\t\t\t//are both dates but range is off\n\t\t\tif (!methods._dateCompare(options.firstOfGroup[0].value, options.secondOfGroup[0].value)) {\n\t\t\t\treturn options.allrules[rules[i]].alertText + options.allrules[rules[i]].alertText2;\n\t\t\t}\n\t\t},\n\t\t/**\r\n  * Max number of checkbox selected\r\n  *\r\n  * @param {jqObject} field\r\n  * @param {Array[String]} rules\r\n  * @param {int} i rules index\r\n  * @param {Map}\r\n  *            user options\r\n  * @return an error string if validation failed\r\n  */\n\t\t_maxCheckbox: function _maxCheckbox(form, field, rules, i, options) {\n\n\t\t\tvar nbCheck = rules[i + 1];\n\t\t\tvar groupname = field.attr(\"name\");\n\t\t\tvar groupSize = form.find(\"input[name='\" + groupname + \"']:checked\").size();\n\t\t\tif (groupSize > nbCheck) {\n\t\t\t\toptions.showArrow = false;\n\t\t\t\tif (options.allrules.maxCheckbox.alertText2) return options.allrules.maxCheckbox.alertText + \" \" + nbCheck + \" \" + options.allrules.maxCheckbox.alertText2;\n\t\t\t\treturn options.allrules.maxCheckbox.alertText;\n\t\t\t}\n\t\t},\n\t\t/**\r\n  * Min number of checkbox selected\r\n  *\r\n  * @param {jqObject} field\r\n  * @param {Array[String]} rules\r\n  * @param {int} i rules index\r\n  * @param {Map}\r\n  *            user options\r\n  * @return an error string if validation failed\r\n  */\n\t\t_minCheckbox: function _minCheckbox(form, field, rules, i, options) {\n\n\t\t\tvar nbCheck = rules[i + 1];\n\t\t\tvar groupname = field.attr(\"name\");\n\t\t\tvar groupSize = form.find(\"input[name='\" + groupname + \"']:checked\").size();\n\t\t\tif (groupSize < nbCheck) {\n\t\t\t\toptions.showArrow = false;\n\t\t\t\treturn options.allrules.minCheckbox.alertText + \" \" + nbCheck + \" \" + options.allrules.minCheckbox.alertText2;\n\t\t\t}\n\t\t},\n\t\t/**\r\n  * Checks that it is a valid credit card number according to the\r\n  * Luhn checksum algorithm.\r\n  *\r\n  * @param {jqObject} field\r\n  * @param {Array[String]} rules\r\n  * @param {int} i rules index\r\n  * @param {Map}\r\n  *            user options\r\n  * @return an error string if validation failed\r\n  */\n\t\t_creditCard: function _creditCard(field, rules, i, options) {\n\t\t\t//spaces and dashes may be valid characters, but must be stripped to calculate the checksum.\n\t\t\tvar valid = false,\n\t\t\t    cardNumber = field.val().replace(/ +/g, '').replace(/-+/g, '');\n\n\t\t\tvar numDigits = cardNumber.length;\n\t\t\tif (numDigits >= 14 && numDigits <= 16 && parseInt(cardNumber) > 0) {\n\n\t\t\t\tvar sum = 0,\n\t\t\t\t    i = numDigits - 1,\n\t\t\t\t    pos = 1,\n\t\t\t\t    digit,\n\t\t\t\t    luhn = new String();\n\t\t\t\tdo {\n\t\t\t\t\tdigit = parseInt(cardNumber.charAt(i));\n\t\t\t\t\tluhn += pos++ % 2 == 0 ? digit * 2 : digit;\n\t\t\t\t} while (--i >= 0);\n\n\t\t\t\tfor (i = 0; i < luhn.length; i++) {\n\t\t\t\t\tsum += parseInt(luhn.charAt(i));\n\t\t\t\t}\n\t\t\t\tvalid = sum % 10 == 0;\n\t\t\t}\n\t\t\tif (!valid) return options.allrules.creditCard.alertText;\n\t\t},\n\t\t/**\r\n  * Ajax field validation\r\n  *\r\n  * @param {jqObject} field\r\n  * @param {Array[String]} rules\r\n  * @param {int} i rules index\r\n  * @param {Map}\r\n  *            user options\r\n  * @return nothing! the ajax validator handles the prompts itself\r\n  */\n\t\t_ajax: function _ajax(field, rules, i, options) {\n\n\t\t\tvar errorSelector = rules[i + 1];\n\t\t\tvar rule = options.allrules[errorSelector];\n\t\t\tvar extraData = rule.extraData;\n\t\t\tvar extraDataDynamic = rule.extraDataDynamic;\n\t\t\tvar data = {\n\t\t\t\t\"fieldId\": field.attr(\"id\"),\n\t\t\t\t\"fieldValue\": field.val()\n\t\t\t};\n\n\t\t\tif ((typeof extraData === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(extraData)) === \"object\") {\n\t\t\t\t$.extend(data, extraData);\n\t\t\t} else if (typeof extraData === \"string\") {\n\t\t\t\tvar tempData = extraData.split(\"&\");\n\t\t\t\tfor (var i = 0; i < tempData.length; i++) {\n\t\t\t\t\tvar values = tempData[i].split(\"=\");\n\t\t\t\t\tif (values[0] && values[0]) {\n\t\t\t\t\t\tdata[values[0]] = values[1];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (extraDataDynamic) {\n\t\t\t\tvar tmpData = [];\n\t\t\t\tvar domIds = String(extraDataDynamic).split(\",\");\n\t\t\t\tfor (var i = 0; i < domIds.length; i++) {\n\t\t\t\t\tvar id = domIds[i];\n\t\t\t\t\tif ($(id).length) {\n\t\t\t\t\t\tvar inputValue = field.closest(\"form, .validationEngineContainer\").find(id).val();\n\t\t\t\t\t\tvar keyValue = id.replace('#', '') + '=' + escape(inputValue);\n\t\t\t\t\t\tdata[id.replace('#', '')] = inputValue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If a field change event triggered this we want to clear the cache for this ID\n\t\t\tif (options.eventTrigger == \"field\") {\n\t\t\t\tdelete options.ajaxValidCache[field.attr(\"id\")];\n\t\t\t}\n\n\t\t\t// If there is an error or if the the field is already validated, do not re-execute AJAX\n\t\t\tif (!options.isError && !methods._checkAjaxFieldStatus(field.attr(\"id\"), options)) {\n\t\t\t\t$.ajax({\n\t\t\t\t\ttype: options.ajaxFormValidationMethod,\n\t\t\t\t\turl: rule.url,\n\t\t\t\t\tcache: false,\n\t\t\t\t\tdataType: \"json\",\n\t\t\t\t\tdata: data,\n\t\t\t\t\tfield: field,\n\t\t\t\t\trule: rule,\n\t\t\t\t\tmethods: methods,\n\t\t\t\t\toptions: options,\n\t\t\t\t\tbeforeSend: function beforeSend() {},\n\t\t\t\t\terror: function error(data, transport) {\n\t\t\t\t\t\tmethods._ajaxError(data, transport);\n\t\t\t\t\t},\n\t\t\t\t\tsuccess: function success(json) {\n\n\t\t\t\t\t\t// asynchronously called on success, data is the json answer from the server\n\t\t\t\t\t\tvar errorFieldId = json[0];\n\t\t\t\t\t\t//var errorField = $($(\"#\" + errorFieldId)[0]);\n\t\t\t\t\t\tvar errorField = $(\"#\" + errorFieldId).eq(0);\n\n\t\t\t\t\t\t// make sure we found the element\n\t\t\t\t\t\tif (errorField.length == 1) {\n\t\t\t\t\t\t\tvar status = json[1];\n\t\t\t\t\t\t\t// read the optional msg from the server\n\t\t\t\t\t\t\tvar msg = json[2];\n\t\t\t\t\t\t\tif (!status) {\n\t\t\t\t\t\t\t\t// Houston we got a problem - display an red prompt\n\t\t\t\t\t\t\t\toptions.ajaxValidCache[errorFieldId] = false;\n\t\t\t\t\t\t\t\toptions.isError = true;\n\n\t\t\t\t\t\t\t\t// resolve the msg prompt\n\t\t\t\t\t\t\t\tif (msg) {\n\t\t\t\t\t\t\t\t\tif (options.allrules[msg]) {\n\t\t\t\t\t\t\t\t\t\tvar txt = options.allrules[msg].alertText;\n\t\t\t\t\t\t\t\t\t\tif (txt) {\n\t\t\t\t\t\t\t\t\t\t\tmsg = txt;\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} else msg = rule.alertText;\n\n\t\t\t\t\t\t\t\tif (options.showPrompts) methods._showPrompt(errorField, msg, \"\", true, options);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\toptions.ajaxValidCache[errorFieldId] = true;\n\n\t\t\t\t\t\t\t\t// resolves the msg prompt\n\t\t\t\t\t\t\t\tif (msg) {\n\t\t\t\t\t\t\t\t\tif (options.allrules[msg]) {\n\t\t\t\t\t\t\t\t\t\tvar txt = options.allrules[msg].alertTextOk;\n\t\t\t\t\t\t\t\t\t\tif (txt) {\n\t\t\t\t\t\t\t\t\t\t\tmsg = txt;\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} else msg = rule.alertTextOk;\n\n\t\t\t\t\t\t\t\tif (options.showPrompts) {\n\t\t\t\t\t\t\t\t\t// see if we should display a green prompt\n\t\t\t\t\t\t\t\t\tif (msg) methods._showPrompt(errorField, msg, \"pass\", true, options);else methods._closePrompt(errorField);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// If a submit form triggered this, we want to re-submit the form\n\t\t\t\t\t\t\t\tif (options.eventTrigger == \"submit\") field.closest(\"form\").submit();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\terrorField.trigger(\"jqv.field.result\", [errorField, options.isError, msg]);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn rule.alertTextLoad;\n\t\t\t}\n\t\t},\n\t\t/**\r\n  * Common method to handle ajax errors\r\n  *\r\n  * @param {Object} data\r\n  * @param {Object} transport\r\n  */\n\t\t_ajaxError: function _ajaxError(data, transport) {\n\t\t\tif (data.status == 0 && transport == null) alert(\"The page is not served from a server! ajax call failed\");else if (typeof console != \"undefined\") console.log(\"Ajax error: \" + data.status + \" \" + transport);\n\t\t},\n\t\t/**\r\n  * date -> string\r\n  *\r\n  * @param {Object} date\r\n  */\n\t\t_dateToString: function _dateToString(date) {\n\t\t\treturn date.getFullYear() + \"-\" + (date.getMonth() + 1) + \"-\" + date.getDate();\n\t\t},\n\t\t/**\r\n  * Parses an ISO date\r\n  * @param {String} d\r\n  */\n\t\t_parseDate: function _parseDate(d) {\n\n\t\t\tvar dateParts = d.split(\"-\");\n\t\t\tif (dateParts == d) dateParts = d.split(\"/\");\n\t\t\treturn new Date(dateParts[0], dateParts[1] - 1, dateParts[2]);\n\t\t},\n\t\t/**\r\n  * Builds or updates a prompt with the given information\r\n  *\r\n  * @param {jqObject} field\r\n  * @param {String} promptText html text to display type\r\n  * @param {String} type the type of bubble: 'pass' (green), 'load' (black) anything else (red)\r\n  * @param {boolean} ajaxed - use to mark fields than being validated with ajax\r\n  * @param {Map} options user options\r\n  */\n\t\t_showPrompt: function _showPrompt(field, promptText, type, ajaxed, options, ajaxform) {\n\t\t\tvar prompt = methods._getPrompt(field);\n\t\t\t// The ajax submit errors are not see has an error in the form,\n\t\t\t// When the form errors are returned, the engine see 2 bubbles, but those are ebing closed by the engine at the same time\n\t\t\t// Because no error was found befor submitting\n\t\t\tif (ajaxform) prompt = false;\n\t\t\t// Check that there is indded text\n\t\t\tif ($.trim(promptText)) {\n\t\t\t\tif (prompt) methods._updatePrompt(field, prompt, promptText, type, ajaxed, options);else methods._buildPrompt(field, promptText, type, ajaxed, options);\n\t\t\t}\n\t\t},\n\t\t/**\r\n  * Builds and shades a prompt for the given field.\r\n  *\r\n  * @param {jqObject} field\r\n  * @param {String} promptText html text to display type\r\n  * @param {String} type the type of bubble: 'pass' (green), 'load' (black) anything else (red)\r\n  * @param {boolean} ajaxed - use to mark fields than being validated with ajax\r\n  * @param {Map} options user options\r\n  */\n\t\t_buildPrompt: function _buildPrompt(field, promptText, type, ajaxed, options) {\n\n\t\t\t// create the prompt\n\t\t\tvar prompt = $('<div>');\n\t\t\tprompt.addClass(methods._getClassName(field.attr(\"id\")) + \"formError\");\n\t\t\t// add a class name to identify the parent form of the prompt\n\t\t\tprompt.addClass(\"parentForm\" + methods._getClassName(field.closest('form, .validationEngineContainer').attr(\"id\")));\n\t\t\tprompt.addClass(\"formError\");\n\n\t\t\tswitch (type) {\n\t\t\t\tcase \"pass\":\n\t\t\t\t\tprompt.addClass(\"greenPopup\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"load\":\n\t\t\t\t\tprompt.addClass(\"blackPopup\");\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t/* it has error  */\n\t\t\t\t//alert(\"unknown popup type:\"+type);\n\t\t\t}\n\t\t\tif (ajaxed) prompt.addClass(\"ajaxed\");\n\n\t\t\t// create the prompt content\n\t\t\tvar promptContent = $('<div>').addClass(\"formErrorContent\").html(promptText).appendTo(prompt);\n\n\t\t\t// determine position type\n\t\t\tvar positionType = field.data(\"promptPosition\") || options.promptPosition;\n\n\t\t\t// create the css arrow pointing at the field\n\t\t\t// note that there is no triangle on max-checkbox and radio\n\t\t\tif (options.showArrow) {\n\t\t\t\tvar arrow = $('<div>').addClass(\"formErrorArrow\");\n\n\t\t\t\t//prompt positioning adjustment support. Usage: positionType:Xshift,Yshift (for ex.: bottomLeft:+20 or bottomLeft:-20,+10)\n\t\t\t\tif (typeof positionType == 'string') {\n\t\t\t\t\tvar pos = positionType.indexOf(\":\");\n\t\t\t\t\tif (pos != -1) positionType = positionType.substring(0, pos);\n\t\t\t\t}\n\n\t\t\t\tswitch (positionType) {\n\t\t\t\t\tcase \"bottomLeft\":\n\t\t\t\t\tcase \"bottomRight\":\n\t\t\t\t\t\tprompt.find(\".formErrorContent\").before(arrow);\n\t\t\t\t\t\tarrow.addClass(\"formErrorArrowBottom\").html('<div class=\"line1\"><!-- --></div><div class=\"line2\"><!-- --></div><div class=\"line3\"><!-- --></div><div class=\"line4\"><!-- --></div><div class=\"line5\"><!-- --></div><div class=\"line6\"><!-- --></div><div class=\"line7\"><!-- --></div><div class=\"line8\"><!-- --></div><div class=\"line9\"><!-- --></div><div class=\"line10\"><!-- --></div>');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"topLeft\":\n\t\t\t\t\tcase \"topRight\":\n\t\t\t\t\t\tarrow.html('<div class=\"line10\"><!-- --></div><div class=\"line9\"><!-- --></div><div class=\"line8\"><!-- --></div><div class=\"line7\"><!-- --></div><div class=\"line6\"><!-- --></div><div class=\"line5\"><!-- --></div><div class=\"line4\"><!-- --></div><div class=\"line3\"><!-- --></div><div class=\"line2\"><!-- --></div><div class=\"line1\"><!-- --></div>');\n\t\t\t\t\t\tprompt.append(arrow);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Add custom prompt class\n\t\t\tif (options.addPromptClass) prompt.addClass(options.addPromptClass);\n\n\t\t\tprompt.css({\n\t\t\t\t\"opacity\": 0\n\t\t\t});\n\t\t\tif (positionType === 'inline') {\n\t\t\t\tprompt.addClass(\"inline\");\n\t\t\t\tif (typeof field.attr('data-prompt-target') !== 'undefined' && $('#' + field.attr('data-prompt-target')).length > 0) {\n\t\t\t\t\tprompt.appendTo($('#' + field.attr('data-prompt-target')));\n\t\t\t\t} else {\n\t\t\t\t\tfield.after(prompt);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfield.before(prompt);\n\t\t\t}\n\n\t\t\tvar pos = methods._calculatePosition(field, prompt, options);\n\t\t\tprompt.css({\n\t\t\t\t'position': positionType === 'inline' ? 'relative' : 'absolute',\n\t\t\t\t\"top\": pos.callerTopPosition,\n\t\t\t\t\"left\": pos.callerleftPosition,\n\t\t\t\t\"marginTop\": pos.marginTopSize,\n\t\t\t\t\"opacity\": 0\n\t\t\t}).data(\"callerField\", field);\n\n\t\t\tif (options.autoHidePrompt) {\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\tprompt.animate({\n\t\t\t\t\t\t\"opacity\": 0\n\t\t\t\t\t}, function () {\n\t\t\t\t\t\tprompt.closest('.formErrorOuter').remove();\n\t\t\t\t\t\tprompt.remove();\n\t\t\t\t\t});\n\t\t\t\t}, options.autoHideDelay);\n\t\t\t}\n\t\t\treturn prompt.animate({\n\t\t\t\t\"opacity\": 0.87\n\t\t\t});\n\t\t},\n\t\t/**\r\n  * Updates the prompt text field - the field for which the prompt\r\n  * @param {jqObject} field\r\n  * @param {String} promptText html text to display type\r\n  * @param {String} type the type of bubble: 'pass' (green), 'load' (black) anything else (red)\r\n  * @param {boolean} ajaxed - use to mark fields than being validated with ajax\r\n  * @param {Map} options user options\r\n  */\n\t\t_updatePrompt: function _updatePrompt(field, prompt, promptText, type, ajaxed, options, noAnimation) {\n\n\t\t\tif (prompt) {\n\t\t\t\tif (typeof type !== \"undefined\") {\n\t\t\t\t\tif (type == \"pass\") prompt.addClass(\"greenPopup\");else prompt.removeClass(\"greenPopup\");\n\n\t\t\t\t\tif (type == \"load\") prompt.addClass(\"blackPopup\");else prompt.removeClass(\"blackPopup\");\n\t\t\t\t}\n\t\t\t\tif (ajaxed) prompt.addClass(\"ajaxed\");else prompt.removeClass(\"ajaxed\");\n\n\t\t\t\tprompt.find(\".formErrorContent\").html(promptText);\n\n\t\t\t\tvar pos = methods._calculatePosition(field, prompt, options);\n\t\t\t\tvar css = { \"top\": pos.callerTopPosition,\n\t\t\t\t\t\"left\": pos.callerleftPosition,\n\t\t\t\t\t\"marginTop\": pos.marginTopSize };\n\n\t\t\t\tif (noAnimation) prompt.css(css);else prompt.animate(css);\n\t\t\t}\n\t\t},\n\t\t/**\r\n  * Closes the prompt associated with the given field\r\n  *\r\n  * @param {jqObject}\r\n  *            field\r\n  */\n\t\t_closePrompt: function _closePrompt(field) {\n\t\t\tvar prompt = methods._getPrompt(field);\n\t\t\tif (prompt) prompt.fadeTo(\"fast\", 0, function () {\n\t\t\t\tprompt.parent('.formErrorOuter').remove();\n\t\t\t\tprompt.remove();\n\t\t\t});\n\t\t},\n\t\tclosePrompt: function closePrompt(field) {\n\t\t\treturn methods._closePrompt(field);\n\t\t},\n\t\t/**\r\n  * Returns the error prompt matching the field if any\r\n  *\r\n  * @param {jqObject}\r\n  *            field\r\n  * @return undefined or the error prompt (jqObject)\r\n  */\n\t\t_getPrompt: function _getPrompt(field) {\n\t\t\tvar formId = $(field).closest('form, .validationEngineContainer').attr('id');\n\t\t\tvar className = methods._getClassName(field.attr(\"id\")) + \"formError\";\n\t\t\tvar match = $(\".\" + methods._escapeExpression(className) + '.parentForm' + formId)[0];\n\t\t\tif (match) return $(match);\n\t\t},\n\t\t/**\r\n    * Returns the escapade classname\r\n    *\r\n    * @param {selector}\r\n    *            className\r\n    */\n\t\t_escapeExpression: function _escapeExpression(selector) {\n\t\t\treturn selector.replace(/([#;&,\\.\\+\\*\\~':\"\\!\\^$\\[\\]\\(\\)=>\\|])/g, \"\\\\$1\");\n\t\t},\n\t\t/**\r\n   * returns true if we are in a RTLed document\r\n   *\r\n   * @param {jqObject} field\r\n   */\n\t\tisRTL: function isRTL(field) {\n\t\t\tvar $document = $(document);\n\t\t\tvar $body = $('body');\n\t\t\tvar rtl = field && field.hasClass('rtl') || field && (field.attr('dir') || '').toLowerCase() === 'rtl' || $document.hasClass('rtl') || ($document.attr('dir') || '').toLowerCase() === 'rtl' || $body.hasClass('rtl') || ($body.attr('dir') || '').toLowerCase() === 'rtl';\n\t\t\treturn Boolean(rtl);\n\t\t},\n\t\t/**\r\n  * Calculates prompt position\r\n  *\r\n  * @param {jqObject}\r\n  *            field\r\n  * @param {jqObject}\r\n  *            the prompt\r\n  * @param {Map}\r\n  *            options\r\n  * @return positions\r\n  */\n\t\t_calculatePosition: function _calculatePosition(field, promptElmt, options) {\n\n\t\t\tvar promptTopPosition, promptleftPosition, marginTopSize;\n\t\t\tvar fieldWidth = field.width();\n\t\t\tvar fieldLeft = field.position().left;\n\t\t\tvar fieldTop = field.position().top;\n\t\t\tvar fieldHeight = field.height();\n\t\t\tvar promptHeight = promptElmt.height();\n\n\t\t\t// is the form contained in an overflown container?\n\t\t\tpromptTopPosition = promptleftPosition = 0;\n\t\t\t// compensation for the arrow\n\t\t\tmarginTopSize = -promptHeight;\n\n\t\t\t//prompt positioning adjustment support\n\t\t\t//now you can adjust prompt position\n\t\t\t//usage: positionType:Xshift,Yshift\n\t\t\t//for example:\n\t\t\t//   bottomLeft:+20 means bottomLeft position shifted by 20 pixels right horizontally\n\t\t\t//   topRight:20, -15 means topRight position shifted by 20 pixels to right and 15 pixels to top\n\t\t\t//You can use +pixels, - pixels. If no sign is provided than + is default.\n\t\t\tvar positionType = field.data(\"promptPosition\") || options.promptPosition;\n\t\t\tvar shift1 = \"\";\n\t\t\tvar shift2 = \"\";\n\t\t\tvar shiftX = 0;\n\t\t\tvar shiftY = 0;\n\t\t\tif (typeof positionType == 'string') {\n\t\t\t\t//do we have any position adjustments ?\n\t\t\t\tif (positionType.indexOf(\":\") != -1) {\n\t\t\t\t\tshift1 = positionType.substring(positionType.indexOf(\":\") + 1);\n\t\t\t\t\tpositionType = positionType.substring(0, positionType.indexOf(\":\"));\n\n\t\t\t\t\t//if any advanced positioning will be needed (percents or something else) - parser should be added here\n\t\t\t\t\t//for now we use simple parseInt()\n\n\t\t\t\t\t//do we have second parameter?\n\t\t\t\t\tif (shift1.indexOf(\",\") != -1) {\n\t\t\t\t\t\tshift2 = shift1.substring(shift1.indexOf(\",\") + 1);\n\t\t\t\t\t\tshift1 = shift1.substring(0, shift1.indexOf(\",\"));\n\t\t\t\t\t\tshiftY = parseInt(shift2);\n\t\t\t\t\t\tif (isNaN(shiftY)) shiftY = 0;\n\t\t\t\t\t};\n\n\t\t\t\t\tshiftX = parseInt(shift1);\n\t\t\t\t\tif (isNaN(shift1)) shift1 = 0;\n\t\t\t\t};\n\t\t\t};\n\n\t\t\tswitch (positionType) {\n\t\t\t\tdefault:\n\t\t\t\tcase \"topRight\":\n\t\t\t\t\tpromptleftPosition += fieldLeft + fieldWidth - 30;\n\t\t\t\t\tpromptTopPosition += fieldTop;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"topLeft\":\n\t\t\t\t\tpromptTopPosition += fieldTop;\n\t\t\t\t\tpromptleftPosition += fieldLeft;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"centerRight\":\n\t\t\t\t\tpromptTopPosition = fieldTop + 4;\n\t\t\t\t\tmarginTopSize = 0;\n\t\t\t\t\tpromptleftPosition = fieldLeft + field.outerWidth(true) + 5;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"centerLeft\":\n\t\t\t\t\tpromptleftPosition = fieldLeft - (promptElmt.width() + 2);\n\t\t\t\t\tpromptTopPosition = fieldTop + 4;\n\t\t\t\t\tmarginTopSize = 0;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"bottomLeft\":\n\t\t\t\t\tpromptTopPosition = fieldTop + field.height() + 5;\n\t\t\t\t\tmarginTopSize = 0;\n\t\t\t\t\tpromptleftPosition = fieldLeft;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"bottomRight\":\n\t\t\t\t\tpromptleftPosition = fieldLeft + fieldWidth - 30;\n\t\t\t\t\tpromptTopPosition = fieldTop + field.height() + 5;\n\t\t\t\t\tmarginTopSize = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"inline\":\n\t\t\t\t\tpromptleftPosition = 0;\n\t\t\t\t\tpromptTopPosition = 0;\n\t\t\t\t\tmarginTopSize = 0;\n\t\t\t};\n\n\t\t\t//apply adjusments if any\n\t\t\tpromptleftPosition += shiftX;\n\t\t\tpromptTopPosition += shiftY;\n\n\t\t\treturn {\n\t\t\t\t\"callerTopPosition\": promptTopPosition + \"px\",\n\t\t\t\t\"callerleftPosition\": promptleftPosition + \"px\",\n\t\t\t\t\"marginTopSize\": marginTopSize + \"px\"\n\t\t\t};\n\t\t},\n\t\t/**\r\n  * Saves the user options and variables in the form.data\r\n  *\r\n  * @param {jqObject}\r\n  *            form - the form where the user option should be saved\r\n  * @param {Map}\r\n  *            options - the user options\r\n  * @return the user options (extended from the defaults)\r\n  */\n\t\t_saveOptions: function _saveOptions(form, options) {\n\n\t\t\t// is there a language localisation ?\n\t\t\tif ($.validationEngineLanguage) var allRules = $.validationEngineLanguage.allRules;else $.error(\"jQuery.validationEngine rules are not loaded, plz add localization files to the page\");\n\t\t\t// --- Internals DO NOT TOUCH or OVERLOAD ---\n\t\t\t// validation rules and i18\n\t\t\t$.validationEngine.defaults.allrules = allRules;\n\n\t\t\tvar userOptions = $.extend(true, {}, $.validationEngine.defaults, options);\n\n\t\t\tform.data('jqv', userOptions);\n\t\t\treturn userOptions;\n\t\t},\n\n\t\t/**\r\n  * Removes forbidden characters from class name\r\n  * @param {String} className\r\n  */\n\t\t_getClassName: function _getClassName(className) {\n\t\t\tif (className) return className.replace(/:/g, \"_\").replace(/\\./g, \"_\");\n\t\t},\n\t\t/**\r\n   * Escape special character for jQuery selector\r\n   * http://totaldev.com/content/escaping-characters-get-valid-jquery-id\r\n   * @param {String} selector\r\n   */\n\t\t_jqSelector: function _jqSelector(str) {\n\t\t\treturn str.replace(/([;&,\\.\\+\\*\\~':\"\\!\\^#$%@\\[\\]\\(\\)=>\\|])/g, '\\\\$1');\n\t\t},\n\t\t/**\r\n  * Conditionally required field\r\n  *\r\n  * @param {jqObject} field\r\n  * @param {Array[String]} rules\r\n  * @param {int} i rules index\r\n  * @param {Map}\r\n  * user options\r\n  * @return an error string if validation failed\r\n  */\n\t\t_condRequired: function _condRequired(field, rules, i, options) {\n\t\t\tvar idx, dependingField;\n\n\t\t\tfor (idx = i + 1; idx < rules.length; idx++) {\n\t\t\t\tdependingField = (0, _jquery2.default)(\"#\" + rules[idx]).first();\n\n\t\t\t\t/* Use _required for determining wether dependingField has a value.\r\n     * There is logic there for handling all field types, and default value; so we won't replicate that here\r\n     * Indicate this special use by setting the last parameter to true so we only validate the dependingField on chackboxes and radio buttons (#462)\r\n     */\n\t\t\t\tif (dependingField.length && methods._required(dependingField, [\"required\"], 0, options, true) == undefined) {\n\t\t\t\t\t/* We now know any of the depending fields has a value,\r\n      * so we can validate this field as per normal required code\r\n      */\n\t\t\t\t\treturn methods._required(field, [\"required\"], 0, options);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_submitButtonClick: function _submitButtonClick(event) {\n\t\t\tvar button = $(this);\n\t\t\tvar form = button.closest('form, .validationEngineContainer');\n\t\t\tform.data(\"jqv_submitButton\", button.attr(\"id\"));\n\t\t}\n\t};\n\n\t/**\r\n * Plugin entry point.\r\n * You may pass an action as a parameter or a list of options.\r\n * if none, the init and attach methods are being called.\r\n * Remember: if you pass options, the attached method is NOT called automatically\r\n *\r\n * @param {String}\r\n *            method (optional) action\r\n */\n\t$.fn.validationEngine = function (method) {\n\n\t\tvar form = $(this);\n\t\tif (!form[0]) return form; // stop here if the form does not exist\n\n\t\tif (typeof method == 'string' && method.charAt(0) != '_' && methods[method]) {\n\n\t\t\t// make sure init is called once\n\t\t\tif (method != \"showPrompt\" && method != \"hide\" && method != \"hideAll\") methods.init.apply(form);\n\n\t\t\treturn methods[method].apply(form, Array.prototype.slice.call(arguments, 1));\n\t\t} else if ((typeof method === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(method)) == 'object' || !method) {\n\n\t\t\t// default constructor with or without arguments\n\t\t\tmethods.init.apply(form, arguments);\n\t\t\treturn methods.attach.apply(form);\n\t\t} else {\n\t\t\t$.error('Method ' + method + ' does not exist in jQuery.validationEngine');\n\t\t}\n\t};\n\n\t// LEAK GLOBAL OPTIONS\n\t$.validationEngine = { fieldIdCounter: 0, defaults: {\n\n\t\t\t// Name of the event triggering field validation\n\t\t\tvalidationEventTrigger: \"blur\",\n\t\t\t// Automatically scroll viewport to the first error\n\t\t\tscroll: true,\n\t\t\t// Focus on the first input\n\t\t\tfocusFirstField: true,\n\t\t\t// Show prompts, set to false to disable prompts\n\t\t\tshowPrompts: true,\n\t\t\t// Opening box position, possible locations are: topLeft,\n\t\t\t// topRight, bottomLeft, centerRight, bottomRight, inline\n\t\t\t// inline gets inserted after the validated field or into an element specified in data-prompt-target\n\t\t\tpromptPosition: \"topRight\",\n\t\t\tbindMethod: \"bind\",\n\t\t\t// internal, automatically set to true when it parse a _ajax rule\n\t\t\tinlineAjax: false,\n\t\t\t// if set to true, the form data is sent asynchronously via ajax to the form.action url (get)\n\t\t\tajaxFormValidation: false,\n\t\t\t// The url to send the submit ajax validation (default to action)\n\t\t\tajaxFormValidationURL: false,\n\t\t\t// HTTP method used for ajax validation\n\t\t\tajaxFormValidationMethod: 'get',\n\t\t\t// Ajax form validation callback method: boolean onComplete(form, status, errors, options)\n\t\t\t// retuns false if the form.submit event needs to be canceled.\n\t\t\tonAjaxFormComplete: $.noop,\n\t\t\t// called right before the ajax call, may return false to cancel\n\t\t\tonBeforeAjaxFormValidation: $.noop,\n\t\t\t// Stops form from submitting and execute function assiciated with it\n\t\t\tonValidationComplete: false,\n\n\t\t\t// Used when you have a form fields too close and the errors messages are on top of other disturbing viewing messages\n\t\t\tdoNotShowAllErrosOnSubmit: false,\n\t\t\t// Object where you store custom messages to override the default error messages\n\t\t\tcustom_error_messages: {},\n\t\t\t// true if you want to vind the input fields\n\t\t\tbinded: true,\n\t\t\t// set to true, when the prompt arrow needs to be displayed\n\t\t\tshowArrow: true,\n\t\t\t// did one of the validation fail ? kept global to stop further ajax validations\n\t\t\tisError: false,\n\t\t\t// Limit how many displayed errors a field can have\n\t\t\tmaxErrorsPerField: false,\n\n\t\t\t// Caches field validation status, typically only bad status are created.\n\t\t\t// the array is used during ajax form validation to detect issues early and prevent an expensive submit\n\t\t\tajaxValidCache: {},\n\t\t\t// Auto update prompt position after window resize\n\t\t\tautoPositionUpdate: false,\n\n\t\t\tInvalidFields: [],\n\t\t\tonFieldSuccess: false,\n\t\t\tonFieldFailure: false,\n\t\t\tonSuccess: false,\n\t\t\tonFailure: false,\n\t\t\tvalidateAttribute: \"class\",\n\t\t\taddSuccessCssClassToField: false,\n\t\t\taddFailureCssClassToField: false,\n\n\t\t\t// Auto-hide prompt\n\t\t\tautoHidePrompt: false,\n\t\t\t// Delay before auto-hide\n\t\t\tautoHideDelay: 10000,\n\t\t\t// Fade out duration while hiding the validations\n\t\t\tfadeDuration: 0.3,\n\t\t\t// Use Prettify select library\n\t\t\tprettySelect: false,\n\t\t\t// Add css class on prompt\n\t\t\taddPromptClass: \"\",\n\t\t\t// Custom ID uses prefix\n\t\t\tusePrefix: \"\",\n\t\t\t// Custom ID uses suffix\n\t\t\tuseSuffix: \"\",\n\t\t\t// Only show one message per error prompt\n\t\t\tshowOneMessage: false\n\t\t} };\n\t$(function () {\n\t\t$.validationEngine.defaults.promptPosition = methods.isRTL() ? 'topLeft' : \"topRight\";\n\t});\n})(_jquery2.default);\n\n/***/ }),\n/* 86 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;\n\nvar _typeof2 = __webpack_require__(7);\n\nvar _typeof3 = _interopRequireDefault(_typeof2);\n\nvar _jquery = __webpack_require__(0);\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar $ = _jquery2.default;\n//fgnass.github.com/spin.js#v1.3.3\n!function (a, b) {\n\t\"object\" == ( false ? \"undefined\" : (0, _typeof3.default)(exports)) ? module.exports = b() :  true ? !(__WEBPACK_AMD_DEFINE_FACTORY__ = (b),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) :\n\t\t\t\t__WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : a.Spinner = b();\n}(undefined, function () {\n\t\"use strict\";\n\tfunction a(a, b) {\n\t\tvar c,\n\t\t    d = document.createElement(a || \"div\");for (c in b) {\n\t\t\td[c] = b[c];\n\t\t}return d;\n\t}function b(a) {\n\t\tfor (var b = 1, c = arguments.length; c > b; b++) {\n\t\t\ta.appendChild(arguments[b]);\n\t\t}return a;\n\t}function c(a, b, c, d) {\n\t\tvar e = [\"opacity\", b, ~~(100 * a), c, d].join(\"-\"),\n\t\t    f = .01 + c / d * 100,\n\t\t    g = Math.max(1 - (1 - a) / b * (100 - f), a),\n\t\t    h = k.substring(0, k.indexOf(\"Animation\")).toLowerCase(),\n\t\t    i = h && \"-\" + h + \"-\" || \"\";return m[e] || (n.insertRule(\"@\" + i + \"keyframes \" + e + \"{0%{opacity:\" + g + \"}\" + f + \"%{opacity:\" + a + \"}\" + (f + .01) + \"%{opacity:1}\" + (f + b) % 100 + \"%{opacity:\" + a + \"}100%{opacity:\" + g + \"}}\", n.cssRules.length), m[e] = 1), e;\n\t}function d(a, b) {\n\t\tvar c,\n\t\t    d,\n\t\t    e = a.style;for (b = b.charAt(0).toUpperCase() + b.slice(1), d = 0; d < l.length; d++) {\n\t\t\tif (c = l[d] + b, void 0 !== e[c]) return c;\n\t\t}return void 0 !== e[b] ? b : void 0;\n\t}function e(a, b) {\n\t\tfor (var c in b) {\n\t\t\ta.style[d(a, c) || c] = b[c];\n\t\t}return a;\n\t}function f(a) {\n\t\tfor (var b = 1; b < arguments.length; b++) {\n\t\t\tvar c = arguments[b];for (var d in c) {\n\t\t\t\tvoid 0 === a[d] && (a[d] = c[d]);\n\t\t\t}\n\t\t}return a;\n\t}function g(a) {\n\t\tfor (var b = { x: a.offsetLeft, y: a.offsetTop }; a = a.offsetParent;) {\n\t\t\tb.x += a.offsetLeft, b.y += a.offsetTop;\n\t\t}return b;\n\t}function h(a, b) {\n\t\treturn \"string\" == typeof a ? a : a[b % a.length];\n\t}function i(a) {\n\t\treturn \"undefined\" == typeof this ? new i(a) : (this.opts = f(a || {}, i.defaults, o), void 0);\n\t}function j() {\n\t\tfunction c(b, c) {\n\t\t\treturn a(\"<\" + b + ' xmlns=\"urn:schemas-microsoft.com:vml\" class=\"spin-vml\">', c);\n\t\t}n.addRule(\".spin-vml\", \"behavior:url(#default#VML)\"), i.prototype.lines = function (a, d) {\n\t\t\tfunction f() {\n\t\t\t\treturn e(c(\"group\", { coordsize: k + \" \" + k, coordorigin: -j + \" \" + -j }), { width: k, height: k });\n\t\t\t}function g(a, g, i) {\n\t\t\t\tb(m, b(e(f(), { rotation: 360 / d.lines * a + \"deg\", left: ~~g }), b(e(c(\"roundrect\", { arcsize: d.corners }), { width: j, height: d.width, left: d.radius, top: -d.width >> 1, filter: i }), c(\"fill\", { color: h(d.color, a), opacity: d.opacity }), c(\"stroke\", { opacity: 0 }))));\n\t\t\t}var i,\n\t\t\t    j = d.length + d.width,\n\t\t\t    k = 2 * j,\n\t\t\t    l = 2 * -(d.width + d.length) + \"px\",\n\t\t\t    m = e(f(), { position: \"absolute\", top: l, left: l });if (d.shadow) for (i = 1; i <= d.lines; i++) {\n\t\t\t\tg(i, -2, \"progid:DXImageTransform.Microsoft.Blur(pixelradius=2,makeshadow=1,shadowopacity=.3)\");\n\t\t\t}for (i = 1; i <= d.lines; i++) {\n\t\t\t\tg(i);\n\t\t\t}return b(a, m);\n\t\t}, i.prototype.opacity = function (a, b, c, d) {\n\t\t\tvar e = a.firstChild;d = d.shadow && d.lines || 0, e && b + d < e.childNodes.length && (e = e.childNodes[b + d], e = e && e.firstChild, e = e && e.firstChild, e && (e.opacity = c));\n\t\t};\n\t}var k,\n\t    l = [\"webkit\", \"Moz\", \"ms\", \"O\"],\n\t    m = {},\n\t    n = function () {\n\t\tvar c = a(\"style\", { type: \"text/css\" });return b(document.getElementsByTagName(\"head\")[0], c), c.sheet || c.styleSheet;\n\t}(),\n\t    o = { lines: 12, length: 7, width: 5, radius: 10, rotate: 0, corners: 1, color: \"#000\", direction: 1, speed: 1, trail: 100, opacity: .25, fps: 20, zIndex: 2e9, className: \"spinner\", top: \"auto\", left: \"auto\", position: \"relative\" };i.defaults = {}, f(i.prototype, { spin: function spin(b) {\n\t\t\tthis.stop();var c,\n\t\t\t    d,\n\t\t\t    f = this,\n\t\t\t    h = f.opts,\n\t\t\t    i = f.el = e(a(0, { className: h.className }), { position: h.position, width: 0, zIndex: h.zIndex }),\n\t\t\t    j = h.radius + h.length + h.width;if (b && (b.insertBefore(i, b.firstChild || null), d = g(b), c = g(i), e(i, { left: (\"auto\" == h.left ? d.x - c.x + (b.offsetWidth >> 1) : parseInt(h.left, 10) + j) + \"px\", top: (\"auto\" == h.top ? d.y - c.y + (b.offsetHeight >> 1) : parseInt(h.top, 10) + j) + \"px\" })), i.setAttribute(\"role\", \"progressbar\"), f.lines(i, f.opts), !k) {\n\t\t\t\tvar l,\n\t\t\t\t    m = 0,\n\t\t\t\t    n = (h.lines - 1) * (1 - h.direction) / 2,\n\t\t\t\t    o = h.fps,\n\t\t\t\t    p = o / h.speed,\n\t\t\t\t    q = (1 - h.opacity) / (p * h.trail / 100),\n\t\t\t\t    r = p / h.lines;!function s() {\n\t\t\t\t\tm++;for (var a = 0; a < h.lines; a++) {\n\t\t\t\t\t\tl = Math.max(1 - (m + (h.lines - a) * r) % p * q, h.opacity), f.opacity(i, a * h.direction + n, l, h);\n\t\t\t\t\t}f.timeout = f.el && setTimeout(s, ~~(1e3 / o));\n\t\t\t\t}();\n\t\t\t}return f;\n\t\t}, stop: function stop() {\n\t\t\tvar a = this.el;return a && (clearTimeout(this.timeout), a.parentNode && a.parentNode.removeChild(a), this.el = void 0), this;\n\t\t}, lines: function lines(d, f) {\n\t\t\tfunction g(b, c) {\n\t\t\t\treturn e(a(), { position: \"absolute\", width: f.length + f.width + \"px\", height: f.width + \"px\", background: b, boxShadow: c, transformOrigin: \"left\", transform: \"rotate(\" + ~~(360 / f.lines * j + f.rotate) + \"deg) translate(\" + f.radius + \"px,0)\", borderRadius: (f.corners * f.width >> 1) + \"px\" });\n\t\t\t}for (var i, j = 0, l = (f.lines - 1) * (1 - f.direction) / 2; j < f.lines; j++) {\n\t\t\t\ti = e(a(), { position: \"absolute\", top: 1 + ~(f.width / 2) + \"px\", transform: f.hwaccel ? \"translate3d(0,0,0)\" : \"\", opacity: f.opacity, animation: k && c(f.opacity, f.trail, l + j * f.direction, f.lines) + \" \" + 1 / f.speed + \"s linear infinite\" }), f.shadow && b(i, e(g(\"#000\", \"0 0 4px #000\"), { top: \"2px\" })), b(d, b(i, g(h(f.color, j), \"0 0 1px rgba(0,0,0,.1)\")));\n\t\t\t}return d;\n\t\t}, opacity: function opacity(a, b, c) {\n\t\t\tb < a.childNodes.length && (a.childNodes[b].style.opacity = c);\n\t\t} });var p = e(a(\"group\"), { behavior: \"url(#default#VML)\" });return !d(p, \"transform\") && p.adj ? j() : k = d(p, \"animation\"), i;\n});\n(function ($) {\n\t$.fn.spin = function (opts, color) {\n\t\tvar presets = {\n\t\t\t\"tiny\": { lines: 8, length: 2, width: 2, radius: 3 },\n\t\t\t\"small\": { lines: 8, length: 4, width: 3, radius: 5 },\n\t\t\t\"large\": { lines: 10, length: 8, width: 4, radius: 8 }\n\t\t};\n\t\tif (Spinner) {\n\t\t\treturn this.each(function () {\n\t\t\t\tvar $this = $(this),\n\t\t\t\t    data = $this.data();\n\n\t\t\t\tif (data.spinner) {\n\t\t\t\t\tdata.spinner.stop();\n\t\t\t\t\tdelete data.spinner;\n\t\t\t\t}\n\t\t\t\tif (opts !== false) {\n\t\t\t\t\tif (typeof opts === \"string\") {\n\t\t\t\t\t\tif (opts in presets) {\n\t\t\t\t\t\t\topts = presets[opts];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\topts = {};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (color) {\n\t\t\t\t\t\t\topts.color = color;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdata.spinner = new Spinner($.extend({ color: $this.css('color') }, opts)).spin(this);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tthrow \"Spinner class not available.\";\n\t\t}\n\t};\n})(_jquery2.default);\n\n/***/ }),\n/* 87 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _jquery = __webpack_require__(0);\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar $ = _jquery2.default;\n\"use strict\";_jquery2.default.base64 = function ($) {\n  var _PADCHAR = \"=\",\n      _ALPHA = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",\n      _VERSION = \"1.0\";function _getbyte64(s, i) {\n    var idx = _ALPHA.indexOf(s.charAt(i));if (idx === -1) {\n      throw \"Cannot decode base64\";\n    }return idx;\n  }function _decode(s) {\n    var pads = 0,\n        i,\n        b10,\n        imax = s.length,\n        x = [];s = String(s);if (imax === 0) {\n      return s;\n    }if (imax % 4 !== 0) {\n      throw \"Cannot decode base64\";\n    }if (s.charAt(imax - 1) === _PADCHAR) {\n      pads = 1;if (s.charAt(imax - 2) === _PADCHAR) {\n        pads = 2;\n      }imax -= 4;\n    }for (i = 0; i < imax; i += 4) {\n      b10 = _getbyte64(s, i) << 18 | _getbyte64(s, i + 1) << 12 | _getbyte64(s, i + 2) << 6 | _getbyte64(s, i + 3);x.push(String.fromCharCode(b10 >> 16, b10 >> 8 & 255, b10 & 255));\n    }switch (pads) {case 1:\n        b10 = _getbyte64(s, i) << 18 | _getbyte64(s, i + 1) << 12 | _getbyte64(s, i + 2) << 6;x.push(String.fromCharCode(b10 >> 16, b10 >> 8 & 255));break;case 2:\n        b10 = _getbyte64(s, i) << 18 | _getbyte64(s, i + 1) << 12;x.push(String.fromCharCode(b10 >> 16));break;}return x.join(\"\");\n  }function _getbyte(s, i) {\n    var x = s.charCodeAt(i);if (x > 255) {\n      throw \"INVALID_CHARACTER_ERR: DOM Exception 5\";\n    }return x;\n  }function _encode(s) {\n    if (arguments.length !== 1) {\n      throw \"SyntaxError: exactly one argument required\";\n    }s = String(s);var i,\n        b10,\n        x = [],\n        imax = s.length - s.length % 3;if (s.length === 0) {\n      return s;\n    }for (i = 0; i < imax; i += 3) {\n      b10 = _getbyte(s, i) << 16 | _getbyte(s, i + 1) << 8 | _getbyte(s, i + 2);x.push(_ALPHA.charAt(b10 >> 18));x.push(_ALPHA.charAt(b10 >> 12 & 63));x.push(_ALPHA.charAt(b10 >> 6 & 63));x.push(_ALPHA.charAt(b10 & 63));\n    }switch (s.length - imax) {case 1:\n        b10 = _getbyte(s, i) << 16;x.push(_ALPHA.charAt(b10 >> 18) + _ALPHA.charAt(b10 >> 12 & 63) + _PADCHAR + _PADCHAR);break;case 2:\n        b10 = _getbyte(s, i) << 16 | _getbyte(s, i + 1) << 8;x.push(_ALPHA.charAt(b10 >> 18) + _ALPHA.charAt(b10 >> 12 & 63) + _ALPHA.charAt(b10 >> 6 & 63) + _PADCHAR);break;}return x.join(\"\");\n  }return { decode: _decode, encode: _encode, VERSION: _VERSION };\n}(_jquery2.default);\n\n/***/ }),\n/* 88 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _typeof2 = __webpack_require__(7);\n\nvar _typeof3 = _interopRequireDefault(_typeof2);\n\nvar _jquery = __webpack_require__(0);\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar $ = _jquery2.default;\n/**\r\n * jQuery Validation Plugin @VERSION\r\n *\r\n * http://bassistance.de/jquery-plugins/jquery-plugin-validation/\r\n * http://docs.jquery.com/Plugins/Validation\r\n *\r\n * Copyright (c) 2012 JAsrn Zaefferer\r\n *\r\n * Dual licensed under the MIT and GPL licenses:\r\n *   http://www.opensource.org/licenses/mit-license.php\r\n *   http://www.gnu.org/licenses/gpl.html\r\n */\n\n(function ($) {\n\n\t$.extend($.fn, {\n\t\t// http://docs.jquery.com/Plugins/Validation/validate\n\t\tvalidate: function validate(options) {\n\n\t\t\t// if nothing is selected, return nothing; can't chain anyway\n\t\t\tif (!this.length) {\n\t\t\t\tif (options && options.debug && window.console) {\n\t\t\t\t\tconsole.warn(\"nothing selected, can't validate, returning nothing\");\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// check if a validator for this form was already created\n\t\t\tvar validator = $.data(this[0], 'validator');\n\t\t\tif (validator) {\n\t\t\t\treturn validator;\n\t\t\t}\n\n\t\t\t// Add novalidate tag if HTML5.\n\t\t\tthis.attr('novalidate', 'novalidate');\n\n\t\t\tvalidator = new $.validator(options, this[0]);\n\t\t\t$.data(this[0], 'validator', validator);\n\n\t\t\tif (validator.settings.onsubmit) {\n\n\t\t\t\tthis.validateDelegate(\":submit\", \"click\", function (ev) {\n\t\t\t\t\tif (validator.settings.submitHandler) {\n\t\t\t\t\t\tvalidator.submitButton = ev.target;\n\t\t\t\t\t}\n\t\t\t\t\t// allow suppressing validation by adding a cancel class to the submit button\n\t\t\t\t\tif ($(ev.target).hasClass('cancel')) {\n\t\t\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t// validate the form on submit\n\t\t\t\tthis.submit(function (event) {\n\t\t\t\t\tif (validator.settings.debug) {\n\t\t\t\t\t\t// prevent form submit to be able to see console output\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t\tfunction handle() {\n\t\t\t\t\t\tvar hidden;\n\t\t\t\t\t\tif (validator.settings.submitHandler) {\n\t\t\t\t\t\t\tif (validator.submitButton) {\n\t\t\t\t\t\t\t\t// insert a hidden input as a replacement for the missing submit button\n\t\t\t\t\t\t\t\thidden = $(\"<input type='hidden'/>\").attr(\"name\", validator.submitButton.name).val(validator.submitButton.value).appendTo(validator.currentForm);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvalidator.settings.submitHandler.call(validator, validator.currentForm, event);\n\t\t\t\t\t\t\tif (validator.submitButton) {\n\t\t\t\t\t\t\t\t// and clean up afterwards; thanks to no-block-scope, hidden can be referenced\n\t\t\t\t\t\t\t\thidden.remove();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// prevent submit for invalid forms or custom submit handlers\n\t\t\t\t\tif (validator.cancelSubmit) {\n\t\t\t\t\t\tvalidator.cancelSubmit = false;\n\t\t\t\t\t\treturn handle();\n\t\t\t\t\t}\n\t\t\t\t\tif (validator.form()) {\n\t\t\t\t\t\tif (validator.pendingRequest) {\n\t\t\t\t\t\t\tvalidator.formSubmitted = true;\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn handle();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalidator.focusInvalid();\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn validator;\n\t\t},\n\t\t// http://docs.jquery.com/Plugins/Validation/valid\n\t\tvalid: function valid() {\n\t\t\tif ($(this[0]).is('form')) {\n\t\t\t\treturn this.validate().form();\n\t\t\t} else {\n\t\t\t\tvar valid = true;\n\t\t\t\tvar validator = $(this[0].form).validate();\n\t\t\t\tthis.each(function () {\n\t\t\t\t\tvalid &= validator.element(this);\n\t\t\t\t});\n\t\t\t\treturn valid;\n\t\t\t}\n\t\t},\n\t\t// attributes: space seperated list of attributes to retrieve and remove\n\t\tremoveAttrs: function removeAttrs(attributes) {\n\t\t\tvar result = {},\n\t\t\t    $element = this;\n\t\t\t$.each(attributes.split(/\\s/), function (index, value) {\n\t\t\t\tresult[value] = $element.attr(value);\n\t\t\t\t$element.removeAttr(value);\n\t\t\t});\n\t\t\treturn result;\n\t\t},\n\t\t// http://docs.jquery.com/Plugins/Validation/rules\n\t\trules: function rules(command, argument) {\n\t\t\tvar element = this[0];\n\n\t\t\tif (command) {\n\t\t\t\tvar settings = $.data(element.form, 'validator').settings;\n\t\t\t\tvar staticRules = settings.rules;\n\t\t\t\tvar existingRules = $.validator.staticRules(element);\n\t\t\t\tswitch (command) {\n\t\t\t\t\tcase \"add\":\n\t\t\t\t\t\t$.extend(existingRules, $.validator.normalizeRule(argument));\n\t\t\t\t\t\tstaticRules[element.name] = existingRules;\n\t\t\t\t\t\tif (argument.messages) {\n\t\t\t\t\t\t\tsettings.messages[element.name] = $.extend(settings.messages[element.name], argument.messages);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"remove\":\n\t\t\t\t\t\tif (!argument) {\n\t\t\t\t\t\t\tdelete staticRules[element.name];\n\t\t\t\t\t\t\treturn existingRules;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar filtered = {};\n\t\t\t\t\t\t$.each(argument.split(/\\s/), function (index, method) {\n\t\t\t\t\t\t\tfiltered[method] = existingRules[method];\n\t\t\t\t\t\t\tdelete existingRules[method];\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn filtered;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar data = $.validator.normalizeRules($.extend({}, $.validator.metadataRules(element), $.validator.classRules(element), $.validator.attributeRules(element), $.validator.staticRules(element)), element);\n\n\t\t\t// make sure required is at front\n\t\t\tif (data.required) {\n\t\t\t\tvar param = data.required;\n\t\t\t\tdelete data.required;\n\t\t\t\tdata = $.extend({ required: param }, data);\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\t});\n\n\t// Custom selectors\n\t$.extend($.expr[\":\"], {\n\t\t// http://docs.jquery.com/Plugins/Validation/blank\n\t\tblank: function blank(a) {\n\t\t\treturn !$.trim(\"\" + a.value);\n\t\t},\n\t\t// http://docs.jquery.com/Plugins/Validation/filled\n\t\tfilled: function filled(a) {\n\t\t\treturn !!$.trim(\"\" + a.value);\n\t\t},\n\t\t// http://docs.jquery.com/Plugins/Validation/unchecked\n\t\tunchecked: function unchecked(a) {\n\t\t\treturn !a.checked;\n\t\t}\n\t});\n\n\t// constructor for validator\n\t$.validator = function (options, form) {\n\t\tthis.settings = $.extend(true, {}, $.validator.defaults, options);\n\t\tthis.currentForm = form;\n\t\tthis.init();\n\t};\n\n\t$.validator.format = function (source, params) {\n\t\tif (arguments.length === 1) {\n\t\t\treturn function () {\n\t\t\t\tvar args = $.makeArray(arguments);\n\t\t\t\targs.unshift(source);\n\t\t\t\treturn $.validator.format.apply(this, args);\n\t\t\t};\n\t\t}\n\t\tif (arguments.length > 2 && params.constructor !== Array) {\n\t\t\tparams = $.makeArray(arguments).slice(1);\n\t\t}\n\t\tif (params.constructor !== Array) {\n\t\t\tparams = [params];\n\t\t}\n\t\t$.each(params, function (i, n) {\n\t\t\tsource = source.replace(new RegExp(\"\\\\{\" + i + \"\\\\}\", \"g\"), n);\n\t\t});\n\t\treturn source;\n\t};\n\n\t$.extend($.validator, {\n\n\t\tdefaults: {\n\t\t\tmessages: {},\n\t\t\tgroups: {},\n\t\t\trules: {},\n\t\t\terrorClass: \"text-form-red\",\n\t\t\tvalidClass: \"valid\",\n\t\t\terrorElement: \"span\",\n\t\t\tfocusInvalid: true,\n\t\t\terrorContainer: $([]),\n\t\t\terrorLabelContainer: $([]),\n\t\t\tonsubmit: true,\n\t\t\tignore: \":hidden\",\n\t\t\tignoreTitle: false,\n\t\t\tonfocusin: function onfocusin(element, event) {\n\t\t\t\tthis.lastActive = element;\n\n\t\t\t\t// hide error label and remove error class on focus if enabled\n\t\t\t\tif (this.settings.focusCleanup && !this.blockFocusCleanup) {\n\t\t\t\t\tif (this.settings.unhighlight) {\n\t\t\t\t\t\tthis.settings.unhighlight.call(this, element, this.settings.errorClass, this.settings.validClass);\n\t\t\t\t\t}\n\t\t\t\t\tthis.addWrapper(this.errorsFor(element)).hide();\n\t\t\t\t}\n\t\t\t},\n\t\t\tonfocusout: function onfocusout(element, event) {\n\t\t\t\tif (!this.checkable(element) && (element.name in this.submitted || !this.optional(element))) {\n\t\t\t\t\tthis.element(element);\n\t\t\t\t}\n\t\t\t},\n\t\t\tonkeyup: function onkeyup(element, event) {\n\t\t\t\tif (event.which == 9 && this.elementValue(element) === '') {\n\t\t\t\t\treturn;\n\t\t\t\t} else if (element.name in this.submitted || element === this.lastActive) {\n\t\t\t\t\tthis.element(element);\n\t\t\t\t}\n\t\t\t},\n\t\t\tonclick: function onclick(element, event) {\n\t\t\t\t// click on selects, radiobuttons and checkboxes\n\t\t\t\tif (element.name in this.submitted) {\n\t\t\t\t\tthis.element(element);\n\t\t\t\t}\n\t\t\t\t// or option elements, check parent select in that case\n\t\t\t\telse if (element.parentNode.name in this.submitted) {\n\t\t\t\t\t\tthis.element(element.parentNode);\n\t\t\t\t\t}\n\t\t\t},\n\t\t\thighlight: function highlight(element, errorClass, validClass) {\n\t\t\t\tif (element.type === 'radio') {\n\t\t\t\t\tthis.findByName(element.name).addClass(errorClass).removeClass(validClass);\n\t\t\t\t} else {\n\t\t\t\t\t$(element).parent().addClass('error').removeClass(validClass);\n\t\t\t\t}\n\t\t\t},\n\t\t\tunhighlight: function unhighlight(element, errorClass, validClass) {\n\t\t\t\tif (element.type === 'radio') {\n\t\t\t\t\tthis.findByName(element.name).removeClass(errorClass).parent().addClass(validClass);\n\t\t\t\t} else {\n\t\t\t\t\t$(element).removeClass(errorClass).parent().addClass(validClass);\n\t\t\t\t\t$(element).parent().removeClass('error').addClass(validClass);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Validator/setDefaults\n\t\tsetDefaults: function setDefaults(settings) {\n\t\t\t$.extend($.validator.defaults, settings);\n\t\t},\n\n\t\tmessages: {\n\t\t\trequired: \"This field is required.\",\n\t\t\tremote: \"Please fix this field.\",\n\t\t\temail: \"Please enter a valid email address.\",\n\t\t\turl: \"Please enter a valid URL.\",\n\t\t\tdate: \"Please enter a valid date.\",\n\t\t\tdateISO: \"Please enter a valid date (ISO).\",\n\t\t\tnumber: \"Please enter a valid number.\",\n\t\t\tdigits: \"Please enter only digits.\",\n\t\t\tcreditcard: \"Please enter a valid credit card number.\",\n\t\t\tequalTo: \"Please enter the same value again.\",\n\t\t\tmaxlength: $.validator.format(\"Please enter no more than {0} characters.\"),\n\t\t\tminlength: $.validator.format(\"Please enter at least {0} characters.\"),\n\t\t\trangelength: $.validator.format(\"Please enter a value between {0} and {1} characters long.\"),\n\t\t\trange: $.validator.format(\"Please enter a value between {0} and {1}.\"),\n\t\t\tmax: $.validator.format(\"Please enter a value less than or equal to {0}.\"),\n\t\t\tmin: $.validator.format(\"Please enter a value greater than or equal to {0}.\")\n\t\t},\n\n\t\tautoCreateRanges: false,\n\n\t\tprototype: {\n\n\t\t\tinit: function init() {\n\t\t\t\tthis.labelContainer = $(this.settings.errorLabelContainer);\n\t\t\t\tthis.errorContext = this.labelContainer.length && this.labelContainer || $(this.currentForm);\n\t\t\t\tthis.containers = $(this.settings.errorContainer).add(this.settings.errorLabelContainer);\n\t\t\t\tthis.submitted = {};\n\t\t\t\tthis.valueCache = {};\n\t\t\t\tthis.pendingRequest = 0;\n\t\t\t\tthis.pending = {};\n\t\t\t\tthis.invalid = {};\n\t\t\t\tthis.reset();\n\n\t\t\t\tvar groups = this.groups = {};\n\t\t\t\t$.each(this.settings.groups, function (key, value) {\n\t\t\t\t\t$.each(value.split(/\\s/), function (index, name) {\n\t\t\t\t\t\tgroups[name] = key;\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tvar rules = this.settings.rules;\n\t\t\t\t$.each(rules, function (key, value) {\n\t\t\t\t\trules[key] = $.validator.normalizeRule(value);\n\t\t\t\t});\n\n\t\t\t\tfunction delegate(event) {\n\t\t\t\t\tvar validator = $.data(this[0].form, \"validator\"),\n\t\t\t\t\t    eventType = \"on\" + event.type.replace(/^validate/, \"\");\n\t\t\t\t\tif (validator.settings[eventType]) {\n\t\t\t\t\t\tvalidator.settings[eventType].call(validator, this[0], event);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t$(this.currentForm).validateDelegate(\":text, [type='password'], [type='file'], select, textarea, \" + \"[type='number'], [type='search'] ,[type='tel'], [type='url'], \" + \"[type='email'], [type='datetime'], [type='date'], [type='month'], \" + \"[type='week'], [type='time'], [type='datetime-local'], \" + \"[type='range'], [type='color'] \", \"focusin focusout keyup\", delegate).validateDelegate(\"[type='radio'], [type='checkbox'], select, option\", \"click\", delegate);\n\n\t\t\t\tif (this.settings.invalidHandler) {\n\t\t\t\t\t$(this.currentForm).bind(\"invalid-form.validate\", this.settings.invalidHandler);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// http://docs.jquery.com/Plugins/Validation/Validator/form\n\t\t\tform: function form() {\n\t\t\t\tthis.checkForm();\n\t\t\t\t$.extend(this.submitted, this.errorMap);\n\t\t\t\tthis.invalid = $.extend({}, this.errorMap);\n\t\t\t\tif (!this.valid()) {\n\t\t\t\t\t$(this.currentForm).triggerHandler(\"invalid-form\", [this]);\n\t\t\t\t}\n\t\t\t\tthis.showErrors();\n\t\t\t\treturn this.valid();\n\t\t\t},\n\n\t\t\tcheckForm: function checkForm() {\n\t\t\t\tthis.prepareForm();\n\t\t\t\tfor (var i = 0, elements = this.currentElements = this.elements(); elements[i]; i++) {\n\t\t\t\t\tthis.check(elements[i]);\n\t\t\t\t}\n\t\t\t\treturn this.valid();\n\t\t\t},\n\n\t\t\t// http://docs.jquery.com/Plugins/Validation/Validator/element\n\t\t\telement: function element(_element) {\n\t\t\t\t_element = this.validationTargetFor(this.clean(_element));\n\t\t\t\tthis.lastElement = _element;\n\t\t\t\tthis.prepareElement(_element);\n\t\t\t\tthis.currentElements = $(_element);\n\t\t\t\tvar result = this.check(_element) !== false;\n\t\t\t\tif (result) {\n\t\t\t\t\tdelete this.invalid[_element.name];\n\t\t\t\t} else {\n\t\t\t\t\tthis.invalid[_element.name] = true;\n\t\t\t\t}\n\t\t\t\tif (!this.numberOfInvalids()) {\n\t\t\t\t\t// Hide error containers on last error\n\t\t\t\t\tthis.toHide = this.toHide.add(this.containers);\n\t\t\t\t}\n\t\t\t\tthis.showErrors();\n\t\t\t\treturn result;\n\t\t\t},\n\n\t\t\t// http://docs.jquery.com/Plugins/Validation/Validator/showErrors\n\t\t\tshowErrors: function showErrors(errors) {\n\t\t\t\tif (errors) {\n\t\t\t\t\t// add items to error list and map\n\t\t\t\t\t$.extend(this.errorMap, errors);\n\t\t\t\t\tthis.errorList = [];\n\t\t\t\t\tfor (var name in errors) {\n\t\t\t\t\t\tthis.errorList.push({\n\t\t\t\t\t\t\tmessage: errors[name],\n\t\t\t\t\t\t\telement: this.findByName(name)[0]\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t// remove items from success list\n\t\t\t\t\tthis.successList = $.grep(this.successList, function (element) {\n\t\t\t\t\t\treturn !(element.name in errors);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (this.settings.showErrors) {\n\t\t\t\t\tthis.settings.showErrors.call(this, this.errorMap, this.errorList);\n\t\t\t\t} else {\n\t\t\t\t\tthis.defaultShowErrors();\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// http://docs.jquery.com/Plugins/Validation/Validator/resetForm\n\t\t\tresetForm: function resetForm() {\n\t\t\t\tif ($.fn.resetForm) {\n\t\t\t\t\t$(this.currentForm).resetForm();\n\t\t\t\t}\n\t\t\t\tthis.submitted = {};\n\t\t\t\tthis.lastElement = null;\n\t\t\t\tthis.prepareForm();\n\t\t\t\tthis.hideErrors();\n\t\t\t\tthis.elements().removeClass(this.settings.errorClass).removeData(\"previousValue\");\n\t\t\t},\n\n\t\t\tnumberOfInvalids: function numberOfInvalids() {\n\t\t\t\treturn this.objectLength(this.invalid);\n\t\t\t},\n\n\t\t\tobjectLength: function objectLength(obj) {\n\t\t\t\tvar count = 0;\n\t\t\t\tfor (var i in obj) {\n\t\t\t\t\tcount++;\n\t\t\t\t}\n\t\t\t\treturn count;\n\t\t\t},\n\n\t\t\thideErrors: function hideErrors() {\n\t\t\t\tthis.addWrapper(this.toHide).hide();\n\t\t\t},\n\n\t\t\tvalid: function valid() {\n\t\t\t\treturn this.size() === 0;\n\t\t\t},\n\n\t\t\tsize: function size() {\n\t\t\t\treturn this.errorList.length;\n\t\t\t},\n\n\t\t\tfocusInvalid: function focusInvalid() {\n\t\t\t\tif (this.settings.focusInvalid) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t$(this.findLastActive() || this.errorList.length && this.errorList[0].element || []).filter(\":visible\").focus()\n\t\t\t\t\t\t// manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find\n\t\t\t\t\t\t.trigger(\"focusin\");\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t// ignore IE throwing errors when focusing hidden elements\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tfindLastActive: function findLastActive() {\n\t\t\t\tvar lastActive = this.lastActive;\n\t\t\t\treturn lastActive && $.grep(this.errorList, function (n) {\n\t\t\t\t\treturn n.element.name === lastActive.name;\n\t\t\t\t}).length === 1 && lastActive;\n\t\t\t},\n\n\t\t\telements: function elements() {\n\t\t\t\tvar validator = this,\n\t\t\t\t    rulesCache = {};\n\n\t\t\t\t// select all valid inputs inside the form (no submit or reset buttons)\n\t\t\t\treturn $(this.currentForm).find(\"input, select, textarea\").not(\":submit, :reset, :image, [disabled]\").not(this.settings.ignore).filter(function () {\n\t\t\t\t\tif (!this.name && validator.settings.debug && window.console) {\n\t\t\t\t\t\tconsole.error(\"%o has no name assigned\", this);\n\t\t\t\t\t}\n\n\t\t\t\t\t// select only the first element for each name, and only those with rules specified\n\t\t\t\t\tif (this.name in rulesCache || !validator.objectLength($(this).rules())) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\trulesCache[this.name] = true;\n\t\t\t\t\treturn true;\n\t\t\t\t});\n\t\t\t},\n\n\t\t\tclean: function clean(selector) {\n\t\t\t\treturn $(selector)[0];\n\t\t\t},\n\n\t\t\terrors: function errors() {\n\t\t\t\tvar errorClass = this.settings.errorClass.replace(' ', '.');\n\t\t\t\treturn $(this.settings.errorElement + \".\" + errorClass, this.errorContext);\n\t\t\t},\n\n\t\t\treset: function reset() {\n\t\t\t\tthis.successList = [];\n\t\t\t\tthis.errorList = [];\n\t\t\t\tthis.errorMap = {};\n\t\t\t\tthis.toShow = $([]);\n\t\t\t\tthis.toHide = $([]);\n\t\t\t\tthis.currentElements = $([]);\n\t\t\t},\n\n\t\t\tprepareForm: function prepareForm() {\n\t\t\t\tthis.reset();\n\t\t\t\tthis.toHide = this.errors().add(this.containers);\n\t\t\t},\n\n\t\t\tprepareElement: function prepareElement(element) {\n\t\t\t\tthis.reset();\n\t\t\t\tthis.toHide = this.errorsFor(element);\n\t\t\t},\n\n\t\t\telementValue: function elementValue(element) {\n\t\t\t\tvar type = $(element).attr('type'),\n\t\t\t\t    val = $(element).val();\n\n\t\t\t\tif (type === 'radio' || type === 'checkbox') {\n\t\t\t\t\treturn $('input[name=\"' + $(element).attr('name') + '\"]:checked').val();\n\t\t\t\t}\n\n\t\t\t\tif (typeof val === 'string') {\n\t\t\t\t\treturn val.replace(/\\r/g, \"\");\n\t\t\t\t}\n\t\t\t\treturn val;\n\t\t\t},\n\n\t\t\tcheck: function check(element) {\n\t\t\t\telement = this.validationTargetFor(this.clean(element));\n\n\t\t\t\tvar rules = $(element).rules();\n\t\t\t\tvar dependencyMismatch = false;\n\t\t\t\tvar val = this.elementValue(element);\n\t\t\t\tvar result;\n\n\t\t\t\tfor (var method in rules) {\n\t\t\t\t\tvar rule = { method: method, parameters: rules[method] };\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\tresult = $.validator.methods[method].call(this, val, element, rule.parameters);\n\n\t\t\t\t\t\t// if a method indicates that the field is optional and therefore valid,\n\t\t\t\t\t\t// don't mark it as valid when there are no other rules\n\t\t\t\t\t\tif (result === \"dependency-mismatch\") {\n\t\t\t\t\t\t\tdependencyMismatch = true;\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdependencyMismatch = false;\n\n\t\t\t\t\t\tif (result === \"pending\") {\n\t\t\t\t\t\t\tthis.toHide = this.toHide.not(this.errorsFor(element));\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!result) {\n\t\t\t\t\t\t\tthis.formatAndAdd(element, rule);\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tif (this.settings.debug && window.console) {\n\t\t\t\t\t\t\tconsole.log(\"exception occured when checking element \" + element.id + \", check the '\" + rule.method + \"' method\", e);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (dependencyMismatch) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (this.objectLength(rules)) {\n\t\t\t\t\tthis.successList.push(element);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// return the custom message for the given element and validation method\n\t\t\t// specified in the element's \"messages\" metadata\n\t\t\tcustomMetaMessage: function customMetaMessage(element, method) {\n\t\t\t\tif (!$.metadata) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvar meta = this.settings.meta ? $(element).metadata()[this.settings.meta] : $(element).metadata();\n\t\t\t\treturn meta && meta.messages && meta.messages[method];\n\t\t\t},\n\n\t\t\t// return the custom message for the given element and validation method\n\t\t\t// specified in the element's HTML5 data attribute\n\t\t\tcustomDataMessage: function customDataMessage(element, method) {\n\t\t\t\treturn $(element).data('msg-' + method.toLowerCase()) || element.attributes && $(element).attr('data-msg-' + method.toLowerCase());\n\t\t\t},\n\n\t\t\t// return the custom message for the given element name and validation method\n\t\t\tcustomMessage: function customMessage(name, method) {\n\t\t\t\tvar m = this.settings.messages[name];\n\t\t\t\treturn m && (m.constructor === String ? m : m[method]);\n\t\t\t},\n\n\t\t\t// return the first defined argument, allowing empty strings\n\t\t\tfindDefined: function findDefined() {\n\t\t\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\t\t\tif (arguments[i] !== undefined) {\n\t\t\t\t\t\treturn arguments[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn undefined;\n\t\t\t},\n\n\t\t\tdefaultMessage: function defaultMessage(element, method) {\n\t\t\t\treturn this.findDefined(this.customMessage(element.name, method), this.customDataMessage(element, method), this.customMetaMessage(element, method),\n\t\t\t\t// title is never undefined, so handle empty string as undefined\n\t\t\t\t!this.settings.ignoreTitle && element.title || undefined, $.validator.messages[method], \"<strong>Warning: No message defined for \" + element.name + \"</strong>\");\n\t\t\t},\n\n\t\t\tformatAndAdd: function formatAndAdd(element, rule) {\n\t\t\t\tvar message = this.defaultMessage(element, rule.method),\n\t\t\t\t    theregex = /\\$?\\{(\\d+)\\}/g;\n\t\t\t\tif (typeof message === \"function\") {\n\t\t\t\t\tmessage = message.call(this, rule.parameters, element);\n\t\t\t\t} else if (theregex.test(message)) {\n\t\t\t\t\tmessage = $.validator.format(message.replace(theregex, '{$1}'), rule.parameters);\n\t\t\t\t}\n\t\t\t\tthis.errorList.push({\n\t\t\t\t\tmessage: message,\n\t\t\t\t\telement: element\n\t\t\t\t});\n\n\t\t\t\tthis.errorMap[element.name] = message;\n\t\t\t\tthis.submitted[element.name] = message;\n\t\t\t},\n\n\t\t\taddWrapper: function addWrapper(toToggle) {\n\t\t\t\tif (this.settings.wrapper) {\n\t\t\t\t\ttoToggle = toToggle.add(toToggle.parent(this.settings.wrapper));\n\t\t\t\t}\n\t\t\t\treturn toToggle;\n\t\t\t},\n\n\t\t\tdefaultShowErrors: function defaultShowErrors() {\n\t\t\t\tvar i, elements;\n\t\t\t\tfor (i = 0; this.errorList[i]; i++) {\n\t\t\t\t\tvar error = this.errorList[i];\n\t\t\t\t\tif (this.settings.highlight) {\n\t\t\t\t\t\tthis.settings.highlight.call(this, error.element, this.settings.errorClass, this.settings.validClass);\n\t\t\t\t\t}\n\t\t\t\t\tthis.showLabel(error.element, error.message);\n\t\t\t\t}\n\t\t\t\tif (this.errorList.length) {\n\t\t\t\t\tthis.toShow = this.toShow.add(this.containers);\n\t\t\t\t}\n\t\t\t\tif (this.settings.success) {\n\t\t\t\t\tfor (i = 0; this.successList[i]; i++) {\n\t\t\t\t\t\tthis.showLabel(this.successList[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (this.settings.unhighlight) {\n\t\t\t\t\tfor (i = 0, elements = this.validElements(); elements[i]; i++) {\n\t\t\t\t\t\tthis.settings.unhighlight.call(this, elements[i], this.settings.errorClass, this.settings.validClass);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.toHide = this.toHide.not(this.toShow);\n\t\t\t\tthis.hideErrors();\n\t\t\t\tthis.addWrapper(this.toShow).show();\n\t\t\t},\n\n\t\t\tvalidElements: function validElements() {\n\t\t\t\treturn this.currentElements.not(this.invalidElements());\n\t\t\t},\n\n\t\t\tinvalidElements: function invalidElements() {\n\t\t\t\treturn $(this.errorList).map(function () {\n\t\t\t\t\treturn this.element;\n\t\t\t\t});\n\t\t\t},\n\n\t\t\tshowLabel: function showLabel(element, message) {\n\t\t\t\tvar label = this.errorsFor(element);\n\t\t\t\tif (label.length) {\n\t\t\t\t\t// refresh error/success class\n\t\t\t\t\tlabel.removeClass(this.settings.validClass).addClass(this.settings.errorClass);\n\n\t\t\t\t\t// check if we have a generated label, replace the message then\n\t\t\t\t\tif (label.attr(\"generated\")) {\n\t\t\t\t\t\tlabel.html(message);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// create label\n\t\t\t\t\tlabel = $(\"<\" + this.settings.errorElement + \"/>\").attr({ \"for\": this.idOrName(element), generated: true }).addClass(this.settings.errorClass).html(message || \"\");\n\t\t\t\t\tif (this.settings.wrapper) {\n\t\t\t\t\t\t// make sure the element is visible, even in IE\n\t\t\t\t\t\t// actually showing the wrapped element is handled elsewhere\n\t\t\t\t\t\tlabel = label.hide().show().wrap(\"<\" + this.settings.wrapper + \"/>\").parent();\n\t\t\t\t\t}\n\t\t\t\t\tif (!this.labelContainer.append(label).length) {\n\t\t\t\t\t\tif (this.settings.errorPlacement) {\n\t\t\t\t\t\t\tthis.settings.errorPlacement(label, $(element));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlabel.insertAfter(element);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!message && this.settings.success) {\n\t\t\t\t\tlabel.text(\"\");\n\t\t\t\t\tif (typeof this.settings.success === \"string\") {\n\t\t\t\t\t\tlabel.addClass(this.settings.success);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.settings.success(label, element);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.toShow = this.toShow.add(label);\n\t\t\t},\n\n\t\t\terrorsFor: function errorsFor(element) {\n\t\t\t\tvar name = this.idOrName(element);\n\t\t\t\treturn this.errors().filter(function () {\n\t\t\t\t\treturn $(this).attr('for') === name;\n\t\t\t\t});\n\t\t\t},\n\n\t\t\tidOrName: function idOrName(element) {\n\t\t\t\treturn this.groups[element.name] || (this.checkable(element) ? element.name : element.id || element.name);\n\t\t\t},\n\n\t\t\tvalidationTargetFor: function validationTargetFor(element) {\n\t\t\t\t// if radio/checkbox, validate first element in group instead\n\t\t\t\tif (this.checkable(element)) {\n\t\t\t\t\telement = this.findByName(element.name).not(this.settings.ignore)[0];\n\t\t\t\t}\n\t\t\t\treturn element;\n\t\t\t},\n\n\t\t\tcheckable: function checkable(element) {\n\t\t\t\treturn (/radio|checkbox/i.test(element.type)\n\t\t\t\t);\n\t\t\t},\n\n\t\t\tfindByName: function findByName(name) {\n\t\t\t\treturn $(this.currentForm).find('[name=\"' + name + '\"]');\n\t\t\t},\n\n\t\t\tgetLength: function getLength(value, element) {\n\t\t\t\tswitch (element.nodeName.toLowerCase()) {\n\t\t\t\t\tcase 'select':\n\t\t\t\t\t\treturn $(\"option:selected\", element).length;\n\t\t\t\t\tcase 'input':\n\t\t\t\t\t\tif (this.checkable(element)) {\n\t\t\t\t\t\t\treturn this.findByName(element.name).filter(':checked').length;\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn value.length;\n\t\t\t},\n\n\t\t\tdepend: function depend(param, element) {\n\t\t\t\treturn this.dependTypes[typeof param === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(param)] ? this.dependTypes[typeof param === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(param)](param, element) : true;\n\t\t\t},\n\n\t\t\tdependTypes: {\n\t\t\t\t\"boolean\": function boolean(param, element) {\n\t\t\t\t\treturn param;\n\t\t\t\t},\n\t\t\t\t\"string\": function string(param, element) {\n\t\t\t\t\treturn !!$(param, element.form).length;\n\t\t\t\t},\n\t\t\t\t\"function\": function _function(param, element) {\n\t\t\t\t\treturn param(element);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\toptional: function optional(element) {\n\t\t\t\tvar val = this.elementValue(element);\n\t\t\t\treturn !$.validator.methods.required.call(this, val, element) && \"dependency-mismatch\";\n\t\t\t},\n\n\t\t\tstartRequest: function startRequest(element) {\n\t\t\t\tif (!this.pending[element.name]) {\n\t\t\t\t\tthis.pendingRequest++;\n\t\t\t\t\tthis.pending[element.name] = true;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tstopRequest: function stopRequest(element, valid) {\n\t\t\t\tthis.pendingRequest--;\n\t\t\t\t// sometimes synchronization fails, make sure pendingRequest is never < 0\n\t\t\t\tif (this.pendingRequest < 0) {\n\t\t\t\t\tthis.pendingRequest = 0;\n\t\t\t\t}\n\t\t\t\tdelete this.pending[element.name];\n\t\t\t\tif (valid && this.pendingRequest === 0 && this.formSubmitted && this.form()) {\n\t\t\t\t\t$(this.currentForm).submit();\n\t\t\t\t\tthis.formSubmitted = false;\n\t\t\t\t} else if (!valid && this.pendingRequest === 0 && this.formSubmitted) {\n\t\t\t\t\t$(this.currentForm).triggerHandler(\"invalid-form\", [this]);\n\t\t\t\t\tthis.formSubmitted = false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tpreviousValue: function previousValue(element) {\n\t\t\t\treturn $.data(element, \"previousValue\") || $.data(element, \"previousValue\", {\n\t\t\t\t\told: null,\n\t\t\t\t\tvalid: true,\n\t\t\t\t\tmessage: this.defaultMessage(element, \"remote\")\n\t\t\t\t});\n\t\t\t}\n\n\t\t},\n\n\t\tclassRuleSettings: {\n\t\t\trequired: { required: true },\n\t\t\temail: { email: true },\n\t\t\turl: { url: true },\n\t\t\tdate: { date: true },\n\t\t\tdateISO: { dateISO: true },\n\t\t\tnumber: { number: true },\n\t\t\tdigits: { digits: true },\n\t\t\tcreditcard: { creditcard: true }\n\t\t},\n\n\t\taddClassRules: function addClassRules(className, rules) {\n\t\t\tif (className.constructor === String) {\n\t\t\t\tthis.classRuleSettings[className] = rules;\n\t\t\t} else {\n\t\t\t\t$.extend(this.classRuleSettings, className);\n\t\t\t}\n\t\t},\n\n\t\tclassRules: function classRules(element) {\n\t\t\tvar rules = {};\n\t\t\tvar classes = $(element).attr('class');\n\t\t\tif (classes) {\n\t\t\t\t$.each(classes.split(' '), function () {\n\t\t\t\t\tif (this in $.validator.classRuleSettings) {\n\t\t\t\t\t\t$.extend(rules, $.validator.classRuleSettings[this]);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn rules;\n\t\t},\n\n\t\tattributeRules: function attributeRules(element) {\n\t\t\tvar rules = {};\n\t\t\tvar $element = $(element);\n\n\t\t\tfor (var method in $.validator.methods) {\n\t\t\t\tvar value;\n\n\t\t\t\t// support for <input required> in both html5 and older browsers\n\t\t\t\tif (method === 'required') {\n\t\t\t\t\tvalue = $element.get(0).getAttribute(method);\n\t\t\t\t\t// Some browsers return an empty string for the required attribute\n\t\t\t\t\t// and non-HTML5 browsers might have required=\"\" markup\n\t\t\t\t\tif (value === \"\") {\n\t\t\t\t\t\tvalue = true;\n\t\t\t\t\t}\n\t\t\t\t\t// force non-HTML5 browsers to return bool\n\t\t\t\t\tvalue = !!value;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = $element.attr(method);\n\t\t\t\t}\n\n\t\t\t\tif (value) {\n\t\t\t\t\trules[method] = value;\n\t\t\t\t} else if ($element[0].getAttribute(\"type\") === method) {\n\t\t\t\t\trules[method] = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// maxlength may be returned as -1, 2147483647 (IE) and 524288 (safari) for text inputs\n\t\t\tif (rules.maxlength && /-1|2147483647|524288/.test(rules.maxlength)) {\n\t\t\t\tdelete rules.maxlength;\n\t\t\t}\n\n\t\t\treturn rules;\n\t\t},\n\n\t\tmetadataRules: function metadataRules(element) {\n\t\t\tif (!$.metadata) {\n\t\t\t\treturn {};\n\t\t\t}\n\n\t\t\tvar meta = $.data(element.form, 'validator').settings.meta;\n\t\t\treturn meta ? $(element).metadata()[meta] : $(element).metadata();\n\t\t},\n\n\t\tstaticRules: function staticRules(element) {\n\t\t\tvar rules = {};\n\t\t\tvar validator = $.data(element.form, 'validator');\n\t\t\tif (validator.settings.rules) {\n\t\t\t\trules = $.validator.normalizeRule(validator.settings.rules[element.name]) || {};\n\t\t\t}\n\t\t\treturn rules;\n\t\t},\n\n\t\tnormalizeRules: function normalizeRules(rules, element) {\n\t\t\t// handle dependency check\n\t\t\t$.each(rules, function (prop, val) {\n\t\t\t\t// ignore rule when param is explicitly false, eg. required:false\n\t\t\t\tif (val === false) {\n\t\t\t\t\tdelete rules[prop];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (val.param || val.depends) {\n\t\t\t\t\tvar keepRule = true;\n\t\t\t\t\tswitch ((0, _typeof3.default)(val.depends)) {\n\t\t\t\t\t\tcase \"string\":\n\t\t\t\t\t\t\tkeepRule = !!$(val.depends, element.form).length;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"function\":\n\t\t\t\t\t\t\tkeepRule = val.depends.call(element, element);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif (keepRule) {\n\t\t\t\t\t\trules[prop] = val.param !== undefined ? val.param : true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdelete rules[prop];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// evaluate parameters\n\t\t\t$.each(rules, function (rule, parameter) {\n\t\t\t\trules[rule] = $.isFunction(parameter) ? parameter(element) : parameter;\n\t\t\t});\n\n\t\t\t// clean number parameters\n\t\t\t$.each(['minlength', 'maxlength', 'min', 'max'], function () {\n\t\t\t\tif (rules[this]) {\n\t\t\t\t\trules[this] = Number(rules[this]);\n\t\t\t\t}\n\t\t\t});\n\t\t\t$.each(['rangelength', 'range'], function () {\n\t\t\t\tif (rules[this]) {\n\t\t\t\t\trules[this] = [Number(rules[this][0]), Number(rules[this][1])];\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif ($.validator.autoCreateRanges) {\n\t\t\t\t// auto-create ranges\n\t\t\t\tif (rules.min && rules.max) {\n\t\t\t\t\trules.range = [rules.min, rules.max];\n\t\t\t\t\tdelete rules.min;\n\t\t\t\t\tdelete rules.max;\n\t\t\t\t}\n\t\t\t\tif (rules.minlength && rules.maxlength) {\n\t\t\t\t\trules.rangelength = [rules.minlength, rules.maxlength];\n\t\t\t\t\tdelete rules.minlength;\n\t\t\t\t\tdelete rules.maxlength;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// To support custom messages in metadata ignore rule methods titled \"messages\"\n\t\t\tif (rules.messages) {\n\t\t\t\tdelete rules.messages;\n\t\t\t}\n\n\t\t\treturn rules;\n\t\t},\n\n\t\t// Converts a simple string to a {string: true} rule, e.g., \"required\" to {required:true}\n\t\tnormalizeRule: function normalizeRule(data) {\n\t\t\tif (typeof data === \"string\") {\n\t\t\t\tvar transformed = {};\n\t\t\t\t$.each(data.split(/\\s/), function () {\n\t\t\t\t\ttransformed[this] = true;\n\t\t\t\t});\n\t\t\t\tdata = transformed;\n\t\t\t}\n\t\t\treturn data;\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Validator/addMethod\n\t\taddMethod: function addMethod(name, method, message) {\n\t\t\t$.validator.methods[name] = method;\n\t\t\t$.validator.messages[name] = message !== undefined ? message : $.validator.messages[name];\n\t\t\tif (method.length < 3) {\n\t\t\t\t$.validator.addClassRules(name, $.validator.normalizeRule(name));\n\t\t\t}\n\t\t},\n\n\t\tmethods: {\n\n\t\t\t// http://docs.jquery.com/Plugins/Validation/Methods/required\n\t\t\trequired: function required(value, element, param) {\n\t\t\t\t// check if dependency is met\n\t\t\t\tif (!this.depend(param, element)) {\n\t\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t\t}\n\t\t\t\tif (element.nodeName.toLowerCase() === \"select\") {\n\t\t\t\t\t// could be an array for select-multiple or a string, both are fine this way\n\t\t\t\t\tvar val = $(element).val();\n\t\t\t\t\treturn val && val.length > 0;\n\t\t\t\t}\n\t\t\t\tif (this.checkable(element)) {\n\t\t\t\t\treturn this.getLength(value, element) > 0;\n\t\t\t\t}\n\t\t\t\treturn $.trim(value).length > 0;\n\t\t\t},\n\n\t\t\t// http://docs.jquery.com/Plugins/Validation/Methods/remote\n\t\t\tremote: function remote(value, element, param) {\n\t\t\t\tif (this.optional(element)) {\n\t\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t\t}\n\n\t\t\t\tvar previous = this.previousValue(element);\n\t\t\t\tif (!this.settings.messages[element.name]) {\n\t\t\t\t\tthis.settings.messages[element.name] = {};\n\t\t\t\t}\n\t\t\t\tprevious.originalMessage = this.settings.messages[element.name].remote;\n\t\t\t\tthis.settings.messages[element.name].remote = previous.message;\n\n\t\t\t\tparam = typeof param === \"string\" && { url: param } || param;\n\n\t\t\t\tif (this.pending[element.name]) {\n\t\t\t\t\treturn \"pending\";\n\t\t\t\t}\n\t\t\t\tif (previous.old === value) {\n\t\t\t\t\treturn previous.valid;\n\t\t\t\t}\n\n\t\t\t\tprevious.old = value;\n\t\t\t\tvar validator = this;\n\t\t\t\tthis.startRequest(element);\n\t\t\t\tvar data = {};\n\t\t\t\tdata[element.name] = value;\n\t\t\t\t$.ajax($.extend(true, {\n\t\t\t\t\turl: param,\n\t\t\t\t\tmode: \"abort\",\n\t\t\t\t\tport: \"validate\" + element.name,\n\t\t\t\t\tdataType: \"json\",\n\t\t\t\t\tdata: data,\n\t\t\t\t\tsuccess: function success(response) {\n\t\t\t\t\t\tvalidator.settings.messages[element.name].remote = previous.originalMessage;\n\t\t\t\t\t\tvar valid = response === true || response === \"true\";\n\t\t\t\t\t\tif (valid) {\n\t\t\t\t\t\t\tvar submitted = validator.formSubmitted;\n\t\t\t\t\t\t\tvalidator.prepareElement(element);\n\t\t\t\t\t\t\tvalidator.formSubmitted = submitted;\n\t\t\t\t\t\t\tvalidator.successList.push(element);\n\t\t\t\t\t\t\tdelete validator.invalid[element.name];\n\t\t\t\t\t\t\tvalidator.showErrors();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvar errors = {};\n\t\t\t\t\t\t\tvar message = response || validator.defaultMessage(element, \"remote\");\n\t\t\t\t\t\t\terrors[element.name] = previous.message = $.isFunction(message) ? message(value) : message;\n\t\t\t\t\t\t\tvalidator.invalid[element.name] = true;\n\t\t\t\t\t\t\tvalidator.showErrors(errors);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tprevious.valid = valid;\n\t\t\t\t\t\tvalidator.stopRequest(element, valid);\n\t\t\t\t\t}\n\t\t\t\t}, param));\n\t\t\t\treturn \"pending\";\n\t\t\t},\n\n\t\t\t// http://docs.jquery.com/Plugins/Validation/Methods/minlength\n\t\t\tminlength: function minlength(value, element, param) {\n\t\t\t\tvar length = $.isArray(value) ? value.length : this.getLength($.trim(value), element);\n\t\t\t\treturn this.optional(element) || length >= param;\n\t\t\t},\n\n\t\t\t// http://docs.jquery.com/Plugins/Validation/Methods/maxlength\n\t\t\tmaxlength: function maxlength(value, element, param) {\n\t\t\t\tvar length = $.isArray(value) ? value.length : this.getLength($.trim(value), element);\n\t\t\t\treturn this.optional(element) || length <= param;\n\t\t\t},\n\n\t\t\t// http://docs.jquery.com/Plugins/Validation/Methods/rangelength\n\t\t\trangelength: function rangelength(value, element, param) {\n\t\t\t\tvar length = $.isArray(value) ? value.length : this.getLength($.trim(value), element);\n\t\t\t\treturn this.optional(element) || length >= param[0] && length <= param[1];\n\t\t\t},\n\n\t\t\t// http://docs.jquery.com/Plugins/Validation/Methods/min\n\t\t\tmin: function min(value, element, param) {\n\t\t\t\treturn this.optional(element) || value >= param;\n\t\t\t},\n\n\t\t\t// http://docs.jquery.com/Plugins/Validation/Methods/max\n\t\t\tmax: function max(value, element, param) {\n\t\t\t\treturn this.optional(element) || value <= param;\n\t\t\t},\n\n\t\t\t// http://docs.jquery.com/Plugins/Validation/Methods/range\n\t\t\trange: function range(value, element, param) {\n\t\t\t\treturn this.optional(element) || value >= param[0] && value <= param[1];\n\t\t\t},\n\n\t\t\t// http://docs.jquery.com/Plugins/Validation/Methods/email\n\t\t\temail: function email(value, element) {\n\t\t\t\t// contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/\n\t\t\t\treturn this.optional(element) || /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i.test(value);\n\t\t\t},\n\n\t\t\t// http://docs.jquery.com/Plugins/Validation/Methods/url\n\t\t\turl: function url(value, element) {\n\t\t\t\t// contributed by Scott Gonzalez: http://projects.scottsplayground.com/iri/\n\t\t\t\treturn this.optional(element) || /^(https?|ftp):\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i.test(value);\n\t\t\t},\n\n\t\t\t// http://docs.jquery.com/Plugins/Validation/Methods/date\n\t\t\tdate: function date(value, element) {\n\t\t\t\treturn this.optional(element) || !/Invalid|NaN/.test(new Date(value));\n\t\t\t},\n\n\t\t\t// http://docs.jquery.com/Plugins/Validation/Methods/dateISO\n\t\t\tdateISO: function dateISO(value, element) {\n\t\t\t\treturn this.optional(element) || /^\\d{4}[\\/\\-]\\d{1,2}[\\/\\-]\\d{1,2}$/.test(value);\n\t\t\t},\n\n\t\t\t// http://docs.jquery.com/Plugins/Validation/Methods/number\n\t\t\tnumber: function number(value, element) {\n\t\t\t\treturn this.optional(element) || /^-?(?:\\d+|\\d{1,3}(?:,\\d{3})+)?(?:\\.\\d+)?$/.test(value);\n\t\t\t},\n\n\t\t\t// http://docs.jquery.com/Plugins/Validation/Methods/digits\n\t\t\tdigits: function digits(value, element) {\n\t\t\t\treturn this.optional(element) || /^\\d+$/.test(value);\n\t\t\t},\n\n\t\t\t// http://docs.jquery.com/Plugins/Validation/Methods/creditcard\n\t\t\t// based on http://en.wikipedia.org/wiki/Luhn\n\t\t\tcreditcard: function creditcard(value, element) {\n\t\t\t\tif (this.optional(element)) {\n\t\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t\t}\n\t\t\t\t// accept only spaces, digits and dashes\n\t\t\t\tif (/[^0-9 \\-]+/.test(value)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tvar nCheck = 0,\n\t\t\t\t    nDigit = 0,\n\t\t\t\t    bEven = false;\n\n\t\t\t\tvalue = value.replace(/\\D/g, \"\");\n\n\t\t\t\tfor (var n = value.length - 1; n >= 0; n--) {\n\t\t\t\t\tvar cDigit = value.charAt(n);\n\t\t\t\t\tnDigit = parseInt(cDigit, 10);\n\t\t\t\t\tif (bEven) {\n\t\t\t\t\t\tif ((nDigit *= 2) > 9) {\n\t\t\t\t\t\t\tnDigit -= 9;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tnCheck += nDigit;\n\t\t\t\t\tbEven = !bEven;\n\t\t\t\t}\n\n\t\t\t\treturn nCheck % 10 === 0;\n\t\t\t},\n\n\t\t\t// http://docs.jquery.com/Plugins/Validation/Methods/equalTo\n\t\t\tequalTo: function equalTo(value, element, param) {\n\t\t\t\t// bind to the blur event of the target in order to revalidate whenever the target field is updated\n\t\t\t\t// TODO find a way to bind the event just once, avoiding the unbind-rebind overhead\n\t\t\t\tvar target = $(param);\n\t\t\t\tif (this.settings.onfocusout) {\n\t\t\t\t\ttarget.unbind(\".validate-equalTo\").bind(\"blur.validate-equalTo\", function () {\n\t\t\t\t\t\t$(element).valid();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn value === target.val();\n\t\t\t}\n\n\t\t}\n\n\t});\n\n\t// deprecated, use $.validator.format instead\n\t$.format = $.validator.format;\n})(_jquery2.default);\n\n// ajax mode: abort\n// usage: $.ajax({ mode: \"abort\"[, port: \"uniqueport\"]});\n// if mode:\"abort\" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort()\n(function ($) {\n\tvar pendingRequests = {};\n\t// Use a prefilter if available (1.5+)\n\tif ($.ajaxPrefilter) {\n\t\t$.ajaxPrefilter(function (settings, _, xhr) {\n\t\t\tvar port = settings.port;\n\t\t\tif (settings.mode === \"abort\") {\n\t\t\t\tif (pendingRequests[port]) {\n\t\t\t\t\tpendingRequests[port].abort();\n\t\t\t\t}\n\t\t\t\tpendingRequests[port] = xhr;\n\t\t\t}\n\t\t});\n\t} else {\n\t\t// Proxy ajax\n\t\tvar ajax = $.ajax;\n\t\t$.ajax = function (settings) {\n\t\t\tvar mode = (\"mode\" in settings ? settings : $.ajaxSettings).mode,\n\t\t\t    port = (\"port\" in settings ? settings : $.ajaxSettings).port;\n\t\t\tif (mode === \"abort\") {\n\t\t\t\tif (pendingRequests[port]) {\n\t\t\t\t\tpendingRequests[port].abort();\n\t\t\t\t}\n\t\t\t\treturn pendingRequests[port] = ajax.apply(this, arguments);\n\t\t\t}\n\t\t\treturn ajax.apply(this, arguments);\n\t\t};\n\t}\n})(_jquery2.default);\n\n// provides cross-browser focusin and focusout events\n// IE has native support, in other browsers, use event caputuring (neither bubbles)\n\n// provides delegate(type: String, delegate: Selector, handler: Callback) plugin for easier event delegation\n// handler is only called when $(event.target).is(delegate), in the scope of the jquery-object for event.target\n(function ($) {\n\t// only implement if not provided by jQuery core (since 1.4)\n\t// TODO verify if jQuery 1.4's implementation is compatible with older jQuery special-event APIs\n\tif (!_jquery2.default.event.special.focusin && !_jquery2.default.event.special.focusout && document.addEventListener) {\n\t\t$.each({\n\t\t\tfocus: 'focusin',\n\t\t\tblur: 'focusout'\n\t\t}, function (original, fix) {\n\t\t\t$.event.special[fix] = {\n\t\t\t\tsetup: function setup() {\n\t\t\t\t\tthis.addEventListener(original, handler, true);\n\t\t\t\t},\n\t\t\t\tteardown: function teardown() {\n\t\t\t\t\tthis.removeEventListener(original, handler, true);\n\t\t\t\t},\n\t\t\t\thandler: function handler(e) {\n\t\t\t\t\tvar args = arguments;\n\t\t\t\t\targs[0] = $.event.fix(e);\n\t\t\t\t\targs[0].type = fix;\n\t\t\t\t\treturn $.event.handle.apply(this, args);\n\t\t\t\t}\n\t\t\t};\n\t\t\tfunction handler(e) {\n\t\t\t\te = $.event.fix(e);\n\t\t\t\te.type = fix;\n\t\t\t\treturn $.event.handle.call(this, e);\n\t\t\t}\n\t\t});\n\t}\n\t$.extend($.fn, {\n\t\tvalidateDelegate: function validateDelegate(delegate, type, handler) {\n\t\t\treturn this.bind(type, function (event) {\n\t\t\t\tvar target = $(event.target);\n\t\t\t\tif (target.is(delegate)) {\n\t\t\t\t\treturn handler.apply(target, arguments);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n})(_jquery2.default);\n\n/***/ }),\n/* 89 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// import './tube'; // dont't - it used to be...\nvar jQuery = __webpack_require__(0);\n/* Exposing jQuery to site's global scope. */\n/* can use webpack plugin but that works just fine */\nif (!window['jQuery']) {\n    window['jQuery'] = jQuery;\n}\nif (!window['$']) {\n    window['$'] = jQuery;\n}\n__webpack_require__(77);\n__webpack_require__(83);\n__webpack_require__(80);\n__webpack_require__(76);\n__webpack_require__(81);\n__webpack_require__(82);\n// import './newTube/core/bootstrap';\n// import './vendor/jquery.waterfall'; // waterfall\n__webpack_require__(79);\n__webpack_require__(78);\n__webpack_require__(84);\n__webpack_require__(85);\n__webpack_require__(47);\n__webpack_require__(86);\n__webpack_require__(88);\n__webpack_require__(87);\nvar _1 = __webpack_require__(75);\nvar isDevEnv =  false ? true : false;\nif (isDevEnv) {\n    console.warn(\"Warning: This is dev environment. Switch to production before deployment.\");\n}\n// tslint:disable:no-unused-variable\nwindow.addEventListener(\"load\", function () {\n    /* ************************************** */\n    /* ************************************** */\n    /* Refactored/Reused and modularized code */\n    /* ************************************** */\n    /* ************************************** */\n    /* Dropdown handler - no bootstrap */\n    var dropdowns = new _1.Dropdowns();\n    /* Changing template color */\n    var colorChanger = new _1.ColorChanger();\n    /* Search dropdown */\n    var searchSelector = new _1.SearchSelector();\n    /* Top bar categories */\n    var quickHover = new _1.QuickHover(200);\n    quickHover.setInnerExit(\"[data-mb-quick-hover=\\\"inner-exit\\\"]\");\n    /* Magic trigger for nav on mobile */\n    var mainNav = new _1.MainNav();\n    /* Handle dropdowns + target links on mobile */\n    var doubleTap = new _1.DoubleTap();\n    /* Scroll up */\n    var scrollUp = new _1.ScrollTop();\n    /* Sets element height based on other element's height - i.e. add on main page */\n    var heightNormalizer = new _1.HeightNormalizer();\n    /* Sets custom scrollbar to proper element */\n    var simpleScrollbar = new _1.SimpleScrollbar();\n    /* Responsible for aka collapse elements */\n    var expander = new _1.Expander();\n    /* Shuffleling thums */\n    var thumbShuffler = new _1.ThumbShuffler(500, 9);\n    /* Ads in items */\n    var addInItems = new _1.AdInItems(2);\n    /* Tabs */\n    var tabs = new _1.Tabs();\n    /* Gallery handler */\n    var gallery = new _1.Gallery();\n    /* Avatars uploader btn */\n    var fakeUpload = new _1.FakeUpload();\n    /* Comments handler */\n    var comments = new _1.Comments();\n    /* Ratings handler */\n    var rating = new _1.Rating();\n    /* ************************************** */\n    /* ************************************** */\n    /* External/Legacy code support */\n    /* ************************************** */\n    /* ************************************** */\n    var ionRangeSlider = new _1.IonRangeSlider.init();\n    var modal1 = new _1.Modals.init();\n    var modal2 = new _1.Modals.init();\n});\n\n/***/ }),\n/* 90 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _classCallCheck2 = __webpack_require__(1);\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(2);\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\n\nvar AdInItems = function () {\n    function AdInItems() {\n        var multiply = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 2;\n        (0, _classCallCheck3.default)(this, AdInItems);\n\n        this._siblingHeight = null;\n        this._elem = document.querySelector(\"[data-mb=\\\"ad-in-items\\\"]\");\n        this._multiply = multiply;\n        if (this._elem) {\n            this._init();\n        }\n    }\n\n    (0, _createClass3.default)(AdInItems, [{\n        key: \"_init\",\n        value: function _init() {\n            this._setHeight();\n            window.addEventListener(\"resize\", this._setHeight.bind(this));\n        }\n    }, {\n        key: \"_setHeight\",\n        value: function _setHeight() {\n            var _this = this;\n\n            this._getSiblingHeight();\n            setTimeout(function () {\n                _this._elem.style.height = _this._siblingHeight * _this._multiply + 13 + \"px\";\n            }, 200);\n        }\n    }, {\n        key: \"_getSiblingHeight\",\n        value: function _getSiblingHeight() {\n            return this._siblingHeight = this._elem.nextElementSibling.clientHeight;\n        }\n    }]);\n    return AdInItems;\n}();\n\nexports.AdInItems = AdInItems;\n\n/***/ }),\n/* 91 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _classCallCheck2 = __webpack_require__(1);\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(2);\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar helpers_1 = __webpack_require__(9);\nvar cookie_storage_1 = __webpack_require__(124);\nvar cookieStorage = new cookie_storage_1.CookieStorage();\n\nvar ColorChanger = function () {\n    function ColorChanger() {\n        (0, _classCallCheck3.default)(this, ColorChanger);\n\n        this._attr = \"[data-mb=\\\"change-color\\\"]\";\n        this._isSet = false;\n        this._elem = document.querySelector(this._attr);\n        this._htmlElement = document.getElementsByTagName('HTML')[0];\n        this._isSet = cookieStorage.getItem('user.mb.invertedColors') === 'true' ? true : false;\n        this._init();\n    }\n\n    (0, _createClass3.default)(ColorChanger, [{\n        key: \"_init\",\n        value: function _init() {\n            this._set();\n            this._registerTrigger();\n        }\n    }, {\n        key: \"_set\",\n        value: function _set() {\n            if (this._isSet) {\n                helpers_1.DomHelpers.addClass(this._htmlElement, \"js-inverted-colors\");\n            } else {\n                helpers_1.DomHelpers.removeClass(this._htmlElement, \"js-inverted-colors\");\n            }\n        }\n    }, {\n        key: \"_registerTrigger\",\n        value: function _registerTrigger() {\n            var _this = this;\n\n            if (this._elem) {\n                this._elem.addEventListener(\"click\", function (e) {\n                    _this._isSet = !_this._isSet;\n                    cookieStorage.setItem(\"user.mb.invertedColors\", String(_this._isSet));\n                    _this._set();\n                });\n            }\n        }\n    }]);\n    return ColorChanger;\n}();\n\nexports.ColorChanger = ColorChanger;\n\n/***/ }),\n/* 92 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _regenerator = __webpack_require__(54);\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _classCallCheck2 = __webpack_require__(1);\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(2);\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nvar _promise = __webpack_require__(23);\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = _promise2.default))(function (resolve, reject) {\n        function fulfilled(value) {\n            try {\n                step(generator.next(value));\n            } catch (e) {\n                reject(e);\n            }\n        }\n        function rejected(value) {\n            try {\n                step(generator[\"throw\"](value));\n            } catch (e) {\n                reject(e);\n            }\n        }\n        function step(result) {\n            result.done ? resolve(result.value) : new P(function (resolve) {\n                resolve(result.value);\n            }).then(fulfilled, rejected);\n        }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar helpers_1 = __webpack_require__(9);\nvar scroll_top_1 = __webpack_require__(50);\nvar jQuery = __webpack_require__(0);\nvar $ = jQuery;\n// tslint:disable:member-ordering\n\nvar Comments = function () {\n    function Comments(postUrl) {\n        (0, _classCallCheck3.default)(this, Comments);\n\n        this._postUrl = window[\"_basehttp\"] + \"/includes/ajax.post_comment.php\";\n        this._scrollTo = new scroll_top_1.ScrollTop(false);\n        this.loaded = 0;\n        this.commentsContainer = document.querySelector(\"[data-mb=\\\"load-comments\\\"]\");\n        this._form = document.querySelector(\"[data-mb=\\\"add-comment\\\"]\");\n        this._captchaImg = document.querySelector(\"[data-mb=\\\"captcha-img\\\"]\");\n        if (this._captchaImg) {\n            this._captchaImgUrl = this._captchaImg.getAttribute(\"src\");\n        }\n        if (postUrl) {\n            this._postUrl = postUrl;\n        }\n        this._init();\n    }\n\n    (0, _createClass3.default)(Comments, [{\n        key: \"_getProps\",\n        value: function _getProps() {\n            this._rawUrl = this.commentsContainer.getAttribute(\"data-opt-url\");\n            this._contentId = this.commentsContainer.getAttribute(\"data-opt-id\");\n            this._type = this.commentsContainer.getAttribute(\"data-opt-type\");\n        }\n    }, {\n        key: \"_buildUrl\",\n        value: function _buildUrl() {\n            return this._rawUrl + \"?id=\" + this._contentId + \"&type=\" + this._type + \"&loaded=\" + this.loaded + \"&time=\" + new Date().getTime();\n        }\n    }, {\n        key: \"_init\",\n        value: function _init() {\n            if (this.commentsContainer) {\n                this._getProps();\n                this.loadComments();\n            }\n            if (this._form) {\n                this._submitBtn = this._form.querySelector(\"button[type=\\\"submit\\\"]\");\n                this._textarea = this._form.querySelector(\"textarea[name=\\\"comment\\\"]\");\n                this._captcha = this._form.querySelector(\"input[name=\\\"captcha\\\"]\");\n                this._alertBox = document.querySelector(\"[data-mb=\\\"comment-alert\\\"]\");\n                if (this._submitBtn) {\n                    this._handlePostComments();\n                }\n            }\n        }\n    }, {\n        key: \"_handlePostComments\",\n        value: function _handlePostComments() {\n            var _this = this;\n\n            this._submitBtn.addEventListener(\"click\", function (e) {\n                e.preventDefault();\n                if (!_this._textarea.value) {\n                    return;\n                }\n                var data = {\n                    comment: _this._textarea.value,\n                    id: _this._contentId,\n                    type: _this._type,\n                    captcha: _this._captcha.value\n                };\n                var serializeData = helpers_1.HttpHelper.serialize(data);\n                helpers_1.HttpHelper.post(_this._postUrl, serializeData, { \"Content-Type\": \"application/x-www-form-urlencoded; charset=UTF-8\" }).then(function (response) {\n                    helpers_1.DomHelpers.removeClass(_this._alertBox.parentElement, \"--hidden\");\n                    var responseJson = JSON.parse(response);\n                    _this._alertBox.innerHTML = responseJson.info;\n                    _this._captchaImg.src = _this._captchaImgUrl + \"?nocache=\" + Math.floor(Math.random() * 1000);\n                    return responseJson.error !== 'true';\n                }).then(function (response) {\n                    if (!response) {\n                        return false;\n                    }\n                    return _this.reloadComments();\n                }).then(function (response) {\n                    if (response) {\n                        setTimeout(function () {\n                            helpers_1.DomHelpers.addClass(_this._alertBox.parentElement, '--hidden');\n                        }, 5000);\n                        setTimeout(function () {\n                            //this._scrollTo.scroll(this.commentsContainer.scrollWidth); /* TODO should scroll correctly */\n                        }, 1000);\n                    }\n                });\n            });\n        }\n    }, {\n        key: \"loadComments\",\n        value: function loadComments() {\n            return __awaiter(this, void 0, void 0, /*#__PURE__*/_regenerator2.default.mark(function _callee() {\n                var _this2 = this;\n\n                return _regenerator2.default.wrap(function _callee$(_context) {\n                    while (1) {\n                        switch (_context.prev = _context.next) {\n                            case 0:\n                                if (this.commentsContainer) {\n                                    _context.next = 2;\n                                    break;\n                                }\n\n                                return _context.abrupt(\"return\", false);\n\n                            case 2:\n                                return _context.abrupt(\"return\", helpers_1.HttpHelper.get(this._buildUrl()).then(function (response) {\n                                    _this2.commentsContainer.innerHTML = response;\n                                    return response;\n                                }));\n\n                            case 3:\n                            case \"end\":\n                                return _context.stop();\n                        }\n                    }\n                }, _callee, this);\n            }));\n        }\n    }, {\n        key: \"reloadComments\",\n        value: function reloadComments() {\n            return __awaiter(this, void 0, void 0, /*#__PURE__*/_regenerator2.default.mark(function _callee2() {\n                return _regenerator2.default.wrap(function _callee2$(_context2) {\n                    while (1) {\n                        switch (_context2.prev = _context2.next) {\n                            case 0:\n                                return _context2.abrupt(\"return\", this.loadComments());\n\n                            case 1:\n                            case \"end\":\n                                return _context2.stop();\n                        }\n                    }\n                }, _callee2, this);\n            }));\n        }\n    }]);\n    return Comments;\n}();\n\nexports.Comments = Comments;\n\n/***/ }),\n/* 93 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _from = __webpack_require__(4);\n\nvar _from2 = _interopRequireDefault(_from);\n\nvar _classCallCheck2 = __webpack_require__(1);\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(2);\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar helpers_1 = __webpack_require__(9);\n\nvar DoubleTap = function () {\n    function DoubleTap() {\n        (0, _classCallCheck3.default)(this, DoubleTap);\n\n        this._list = document.querySelectorAll(\"[data-mb=\\\"double-tap\\\"]\");\n        if (this._list) {\n            this._init();\n        }\n    }\n\n    (0, _createClass3.default)(DoubleTap, [{\n        key: \"_init\",\n        value: function _init() {\n            (0, _from2.default)(this._list).forEach(function (elem) {\n                helpers_1.PlatformHelper.doubleTap(elem);\n            });\n        }\n    }]);\n    return DoubleTap;\n}();\n\nexports.DoubleTap = DoubleTap;\n\n/***/ }),\n/* 94 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _from = __webpack_require__(4);\n\nvar _from2 = _interopRequireDefault(_from);\n\nvar _classCallCheck2 = __webpack_require__(1);\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(2);\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar _1 = __webpack_require__(9);\n\nvar Dropdowns = function () {\n    function Dropdowns() {\n        (0, _classCallCheck3.default)(this, Dropdowns);\n\n        this._parents = [];\n        this._selector = document.querySelectorAll(\"[data-mb=\\\"dropdown\\\"]\");\n        this._init();\n    }\n\n    (0, _createClass3.default)(Dropdowns, [{\n        key: \"_init\",\n        value: function _init() {\n            var _this = this;\n\n            (0, _from2.default)(this._selector).forEach(function (elem) {\n                var parent = void 0;\n                if (!elem.hasOwnProperty('_nhanceDropdown')) {\n                    elem.addEventListener(\"click\", function (e) {\n                        elem['_nhanceDropdown'] = true;\n                        e.stopPropagation();\n                        e.preventDefault();\n                        parent = elem.parentElement;\n                        if (!parent.hasOwnProperty('_nhanceDropdownParent')) {\n                            parent['_nhanceDropdownParent'] = true;\n                            // parent.addEventListener('click', (e: Event) => {\n                            //     //console.warn(e)\n                            //     //e.stopPropagation();\n                            //     //e.preventDefault();\n                            // });\n                            _this._parents.push(parent);\n                        }\n                        _1.DomHelpers.toggleClass(parent, \"js-dropdown-open\");\n                        _this._unsetOthers(parent);\n                    });\n                }\n            });\n            if (!document.hasOwnProperty('_nhanceDropdownKiller')) {\n                document['_nhanceDropdownKiller'] = true;\n                document.addEventListener('click', function (e) {\n                    _this._parents.forEach(function (parent) {\n                        _1.DomHelpers.removeClass(parent, \"js-dropdown-open\");\n                    });\n                });\n            }\n        }\n    }, {\n        key: \"_unsetOthers\",\n        value: function _unsetOthers(current) {\n            var other = document.querySelectorAll(\".js-dropdown-open\");\n            var searchFix = document.querySelectorAll(\".js-search-list-visible\"); /* This shit require refactor. This is not cool */\n            if (searchFix) {\n                (0, _from2.default)(searchFix).forEach(function (elem) {\n                    if (elem !== current) {\n                        _1.DomHelpers.removeClass(elem, \"js-search-list-visible\");\n                    }\n                });\n            }\n            if (!other) {\n                return;\n            }\n            (0, _from2.default)(other).forEach(function (elem) {\n                if (elem !== current) {\n                    _1.DomHelpers.removeClass(elem, \"js-dropdown-open\");\n                }\n            });\n        }\n    }]);\n    return Dropdowns;\n}();\n\nexports.Dropdowns = Dropdowns;\n\n/***/ }),\n/* 95 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _from = __webpack_require__(4);\n\nvar _from2 = _interopRequireDefault(_from);\n\nvar _assign = __webpack_require__(52);\n\nvar _assign2 = _interopRequireDefault(_assign);\n\nvar _classCallCheck2 = __webpack_require__(1);\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(2);\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar nhance_responsive_trigger_1 = __webpack_require__(32);\nvar dom_helper_1 = __webpack_require__(48);\n\nvar ExpandElement = function () {\n    function ExpandElement(trigger, target) {\n        (0, _classCallCheck3.default)(this, ExpandElement);\n\n        this._isInitialized = false;\n        this._useTimeout = true;\n        this._defaults = {\n            triggerElement: null,\n            targetElement: null,\n            activeToMaxScreenWidth: 768,\n            anywhereActionClose: false,\n            defaultOpen: false,\n            classes: {\n                in: 'expander-open',\n                animIn: 'expander-opening',\n                out: 'expander-closed',\n                animOut: 'expander-closing',\n                animProgress: 'expander-animating',\n                triggerActive: 'is-expander-trigger-active',\n                targetActive: 'is-expander-target-active'\n            },\n            setBodyClasses: false,\n            useTimeout: true,\n            onChange: this._onChange.bind(this)\n        };\n        if (!trigger || !target) {\n            return;\n        }\n        this._trigger = trigger;\n        this._target = target;\n        this._init(this._generateSettings());\n    }\n\n    (0, _createClass3.default)(ExpandElement, [{\n        key: \"_generateSettings\",\n        value: function _generateSettings() {\n            var opts = {};\n            /* Parse custom options */\n            var hasOpts = this._trigger.getAttribute(\"data-mb-options\");\n            if (hasOpts) {\n                try {\n                    hasOpts = JSON.parse(hasOpts.replace(/'/gim, \"\\\"\"));\n                } catch (err) {\n                    hasOpts = null;\n                }\n            }\n            if (hasOpts) {\n                opts = (0, _assign2.default)({}, this._defaults, hasOpts);\n                this._useTimeout = hasOpts.useTimeout == false ? false : true;\n            } else {\n                opts = (0, _assign2.default)({}, this._defaults);\n            }\n            opts.triggerElement = this._trigger;\n            opts.targetElement = this._target;\n            return opts;\n        }\n    }, {\n        key: \"_init\",\n        value: function _init(opts) {\n            this._main = new nhance_responsive_trigger_1.NhanceTools.ResponsiveTriggerClass(opts);\n        }\n    }, {\n        key: \"_onChange\",\n        value: function _onChange(isActive, canUse) {\n            var _this = this;\n\n            if (!canUse) {\n                dom_helper_1.DomHelpers.removeClass(this._target, \"is-collapsed\");\n                this._target.style.height = null;\n                return false;\n            }\n            var currentHeight = this._target.clientHeight;\n            if (isActive && this._isInitialized && currentHeight > 0) {\n                return;\n            }\n            if (!this._isInitialized) {\n                this._isInitialized = true;\n                if (isActive && !currentHeight) {\n                    this._target.style.height = null;\n                    dom_helper_1.DomHelpers.removeClass(this._target, \"is-collapsed\");\n                } else {\n                    this._target.style.height = \"0px\";\n                    dom_helper_1.DomHelpers.addClass(this._target, \"is-collapsed\");\n                }\n                return;\n            }\n            if (isActive) {\n                dom_helper_1.DomHelpers.removeClass(this._target, \"is-collapsed\");\n                this._target.style.height = null;\n                var targetHeight = this._target.clientHeight;\n                this._target.style.height = \"0px\";\n                dom_helper_1.DomHelpers.addClass(this._target, \"is-collapsed\");\n                if (!this._useTimeout) {\n                    dom_helper_1.DomHelpers.tempClass(this._target, \"is-collapse-animating\", 400).then(function () {\n                        dom_helper_1.DomHelpers.removeClass(_this._target, \"is-collapsed\");\n                    });\n                    setTimeout(function () {\n                        _this._target.style.height = targetHeight + \"px\";\n                    }, 10);\n                    return;\n                }\n                setTimeout(function () {\n                    dom_helper_1.DomHelpers.tempClass(_this._target, \"is-collapse-animating\", 400).then(function () {\n                        dom_helper_1.DomHelpers.removeClass(_this._target, \"is-collapsed\");\n                    });\n                    setTimeout(function () {\n                        _this._target.style.height = targetHeight + \"px\";\n                    }, 10);\n                }, 50);\n                return;\n            }\n            if (!isActive) {\n                this._target.style.height = this._target.clientHeight + \"px\";\n                dom_helper_1.DomHelpers.tempClass(this._target, \"is-collapse-animating\", 500);\n                this._target.style.height = \"0px\";\n                dom_helper_1.DomHelpers.addClass(this._target, \"is-collapsed\");\n            }\n        }\n    }]);\n    return ExpandElement;\n}();\n\nvar Expander = function () {\n    function Expander() {\n        var trigger = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"[data-mb-expand]\";\n        var target = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"[data-mb-expand-target]\";\n        (0, _classCallCheck3.default)(this, Expander);\n\n        this._registry = [];\n        if (!trigger || !target) {\n            return;\n        }\n        this._triggers = document.querySelectorAll(trigger);\n        this._targets = document.querySelectorAll(target);\n        this._triggerSelector = trigger.replace(/(\\[|\\])/gim, '');\n        this._targetSelector = target;\n        if (!this._triggers || !this._targets) {\n            return;\n        }\n        if (this._triggers.length !== this._targets.length) {\n            console.warn(\"Epxander warning: triggers count (\" + this._triggers.length + \") is not equal to targets count(\" + this._targets.length + \").\\n            Some elements on this page might not work properly.\");\n        }\n        this._init();\n    }\n\n    (0, _createClass3.default)(Expander, [{\n        key: \"_init\",\n        value: function _init() {\n            var _this2 = this;\n\n            (0, _from2.default)(this._triggers).forEach(function (trigger) {\n                var targetSelector = trigger.getAttribute(_this2._triggerSelector);\n                var target = document.querySelector(\"\" + _this2._targetSelector.replace(']', '=' + targetSelector + ']'));\n                if (target) {\n                    dom_helper_1.DomHelpers.addClass(trigger, \"js-expander-trigger\");\n                    dom_helper_1.DomHelpers.addClass(target, \"js-expander-target\");\n                    _this2._registry.push({\n                        trigger: trigger,\n                        target: target,\n                        _main: new ExpandElement(trigger, target)\n                    });\n                }\n            });\n        }\n    }]);\n    return Expander;\n}();\n\nexports.Expander = Expander;\n\n/***/ }),\n/* 96 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _classCallCheck2 = __webpack_require__(1);\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(2);\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar jQuery = __webpack_require__(0);\nvar $ = jQuery;\n\nvar FakeUpload = function () {\n    function FakeUpload() {\n        (0, _classCallCheck3.default)(this, FakeUpload);\n\n        this._btn = $('[data-mb=\"fake-upload\"]');\n        if (this._btn.length) {\n            this._input = $('[data-opt=\"' + this._btn.attr(\"data-opt-target\") + '\"]');\n            if (this._input.length) {\n                this._init();\n            }\n        }\n    }\n\n    (0, _createClass3.default)(FakeUpload, [{\n        key: \"_init\",\n        value: function _init() {\n            var self = this;\n            this._btn.on(\"click\", function (e) {\n                e.preventDefault();\n                self._input.click();\n            });\n            this._input.change(function () {\n                self._btn.find(\".sub-label\").text($(this).val());\n            });\n        }\n    }]);\n    return FakeUpload;\n}();\n\nexports.FakeUpload = FakeUpload;\n\n/***/ }),\n/* 97 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _classCallCheck2 = __webpack_require__(1);\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _typeof2 = __webpack_require__(7);\n\nvar _typeof3 = _interopRequireDefault(_typeof2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__webpack_require__(113);\nvar modals_1 = __webpack_require__(31);\nvar jQuery = __webpack_require__(0);\nvar $ = jQuery;\nexports.ajaxGalleryNavigation = function () {\n    var btn = $('[data-mb=\"load-img\"]');\n    var btnW = '[data-mb=\"load-img\"]';\n    var container = \"data-mb\" + '=\"ajax-container\"';\n    if (btn.length) {\n        $(window).on(\"keyup\", function (e) {\n            switch (e.which) {\n                case 37:\n                    // left\n                    $(document).find(btnW).filter('[rel=\"prev\"]').click();\n                    break;\n                case 39:\n                    // right\n                    $(document).find(btnW).filter('[rel=\"next\"]').click();\n                    break;\n                default:\n                    return;\n            }\n            e.preventDefault();\n        });\n    }\n    $(window).on(\"click\", function (e) {\n        var newUrl = \"\";\n        if ($(e.target).attr(\"data-mb\") == \"load-img\" || $(e.target).parent().attr(\"data-mb\") == \"load-img\" || $(e.target).parent().parent().attr(\"data-mb\") == \"load-img\") {\n            e.preventDefault();\n            if ($(e.target).attr(\"data-mb\") == \"load-img\") {\n                newUrl = $(e.target).attr(\"href\");\n            } else if ($(e.target).parent().attr(\"data-mb\") == \"load-img\") {\n                newUrl = $(e.target).parent().attr(\"href\");\n            } else {\n                newUrl = $(e.target).parent().parent().attr(\"href\");\n            }\n            $('[' + container + ']').css(\"min-height\", $('[' + container + '] img').height());\n            $('[' + container + ']').addClass(\"loading-img\");\n            /*btn.on(\"click\", function(e) {\r\n             e.preventDefault();\r\n             var newUrl = $(this).attr(\"href\")*/\n            var xhr;\n            if ((typeof xhr === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(xhr)) == 'object') {\n                xhr.abort();\n            }\n            xhr = $.ajax({\n                url: newUrl,\n                type: 'GET',\n                dataType: 'html',\n                cache: false,\n                crossDomain: false,\n                data: {},\n                success: function success(data) {\n                    var c = $(data).find('[' + container + ']');\n                    var cImg = $(data).find('[' + container + '] img');\n                    var stateTitleNew = $(data).filter(\"title\").text();\n                    var stateNew = c.attr(\"data-opt-current\");\n                    c.addClass(\"loading-img\");\n                    // check IF IMG IS LOADED\n                    // modal error option\n                    var aa = modals_1.getAttributes(\".loading-img\");\n                    var modalOptions = {\n                        rand: Math.floor(Math.random() * 1000),\n                        closeTitle: aa[\"data-opt-close\"] ? aa[\"data-opt-close\"] : \"Close\",\n                        id: aa[\"id\"] ? aa[\"id\"] : \"modal-\" + this.rand,\n                        title: aa[\"data-opt-title\"] ? aa[\"data-opt-title\"] : \"Error\"\n                    };\n                    if (cImg.length) {\n                        cImg.on('load', function () {\n                            console.log(\"image loaded correctly\");\n                            $('[' + container + ']').removeClass(\"loading-img\");\n                        });\n                        cImg.on('error', function () {\n                            modals_1.buildNewModal(\"Error loading image\", modalOptions);\n                        });\n                        cImg.attr(\"src\", cImg.attr(\"src\"));\n                    }\n                    // CHANGE URL\n                    (function (window, undefined) {\n                        // Bind to StateChange Event\n                        History.Adapter.bind(window, 'statechange', function () {\n                            var State = History.getState(); // Note: We are using History.getState() instead of event.state\n                        });\n                        // Change our States\n                        History.pushState({ state: 1 }, stateTitleNew, \"?image=\" + stateNew);\n                    })(window);\n                    // UPDATE CONTAINER\n                    $('[' + container + ']').replaceWith(c);\n                    // UPDATE SLIDER\n                    setTimeout(function () {\n                        $('.owl-carousel').trigger(\"to.owl.carousel\", [parseInt(stateNew) - 1, 0, true]);\n                        $('.gallery-item-col').removeClass(\"active\");\n                        $('.gi-' + stateNew).addClass(\"active\");\n                    }, 500);\n                },\n                error: function error(data) {\n                    console.log(\"ERROR \" + data);\n                }\n            });\n        }\n    });\n};\n\nvar Gallery = function Gallery() {\n    (0, _classCallCheck3.default)(this, Gallery);\n\n    var btn = $('[data-mb=\"load-img\"]');\n    if (btn.length) {\n        exports.ajaxGalleryNavigation();\n    }\n};\n\nexports.Gallery = Gallery;\n\n/***/ }),\n/* 98 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _classCallCheck2 = __webpack_require__(1);\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(2);\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar platform_helper_1 = __webpack_require__(49);\n\nvar HeightNormalizer = function () {\n    function HeightNormalizer() {\n        var srcElemSelector = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"[data-mb-height=\\\"source\\\"]\";\n        var targetElemSelector = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"[data-mb-height=\\\"target\\\"]\";\n        (0, _classCallCheck3.default)(this, HeightNormalizer);\n\n        this._h = null;\n        this._timeout = 500;\n        this._minScreenWidth = 768;\n        if (srcElemSelector) {\n            this._srcElem = document.querySelector(srcElemSelector);\n        }\n        if (targetElemSelector) {\n            this._targetElem = document.querySelector(targetElemSelector);\n        }\n        if (this._srcElem && this._targetElem) {\n            this._init();\n        }\n    }\n\n    (0, _createClass3.default)(HeightNormalizer, [{\n        key: \"_init\",\n        value: function _init() {\n            var _this = this;\n\n            this._registerListener();\n            setTimeout(function () {\n                _this._setNewHeight();\n            }, 500);\n            this._setNewHeight();\n        }\n    }, {\n        key: \"_registerListener\",\n        value: function _registerListener() {\n            var _this2 = this;\n\n            window.addEventListener(\"resize\", function () {\n                setTimeout(_this2._setNewHeight.bind(_this2), _this2._timeout);\n            });\n        }\n    }, {\n        key: \"_setNewHeight\",\n        value: function _setNewHeight() {\n            if (platform_helper_1.PlatformHelper.windowWidth() >= this._minScreenWidth) {\n                this._getCurrentHeight();\n                this._targetElem.style.height = this._h + \"px\";\n            } else {\n                this._targetElem.style.height = null;\n            }\n        }\n    }, {\n        key: \"_getCurrentHeight\",\n        value: function _getCurrentHeight() {\n            return this._h = this._srcElem.clientHeight ? this._srcElem.clientHeight : this._srcElem.offsetHeight;\n        }\n    }]);\n    return HeightNormalizer;\n}();\n\nexports.HeightNormalizer = HeightNormalizer;\n\n/***/ }),\n/* 99 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _keys = __webpack_require__(53);\n\nvar _keys2 = _interopRequireDefault(_keys);\n\nvar _promise = __webpack_require__(23);\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar HttpHelper;\n(function (HttpHelper) {\n    HttpHelper.request = function () {\n        var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"GET\";\n        var url = arguments[1];\n        var data = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n        var headers = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n        return new _promise2.default(function (resolve, reject) {\n            if (!url) {\n                return false;\n            }\n            var xhr = new XMLHttpRequest();\n            xhr.open(type, url, true);\n            if (headers && (0, _keys2.default)(headers).length) {\n                (0, _keys2.default)(headers).forEach(function (key) {\n                    xhr.setRequestHeader(key, headers[key]);\n                });\n            } else {\n                xhr.setRequestHeader('Content-Type', 'application/json');\n            }\n            xhr.send(data);\n            xhr.onerror = function (e) {\n                reject(e);\n            };\n            xhr.onreadystatechange = function (e) {\n                if (xhr.readyState == 4) {\n                    if (xhr.status == 200) {\n                        resolve(xhr.responseText);\n                        return;\n                    }\n                    reject(xhr);\n                }\n            };\n        }).catch(function (err) {\n            console.warn('request error:', err);\n        });\n    };\n    HttpHelper.get = function (url) {\n        return HttpHelper.request(\"GET\", url);\n    };\n    HttpHelper.post = function (url, data) {\n        var headers = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n        return HttpHelper.request(\"POST\", url, data, headers);\n    };\n    HttpHelper.serialize = function (data) {\n        var serializeData = \"\";\n        for (var a in data) {\n            if (!serializeData) {\n                serializeData = a + \"=\" + data[a];\n            } else {\n                serializeData = serializeData + \"&\" + a + \"=\" + data[a];\n            }\n        }\n        return serializeData;\n    };\n})(HttpHelper = exports.HttpHelper || (exports.HttpHelper = {}));\n\n/***/ }),\n/* 100 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar jQuery = __webpack_require__(0);\nvar $ = jQuery;\n// Ion.RangeSlider\n// version 2.1.3 Build: 352\n// © Denis Ineshin, 2016\n// https://github.com/IonDen\n//\n// Project page:    http://ionden.com/a/plugins/ion.rangeSlider/en.html\n// GitHub page:     https://github.com/IonDen/ion.rangeSlider\n//\n// Released under MIT licence:\n// http://ionden.com/a/plugins/licence-en.html\n// =====================================================================================================================\n__webpack_require__(114);\nvar IonRangeSlider;\n(function (IonRangeSlider) {\n    IonRangeSlider.init = function () {\n        var filter = $(\"#range_length_filter\");\n        if (filter) {\n            filter.ionRangeSlider({\n                type: \"double\",\n                //                    min: 0,\n                //                    max: 50,\n                step: 5,\n                grid: true,\n                grid_snap: true,\n                oldUrl: \"\",\n                newUrl: \"\",\n                //values: [\"0\", \"10\", \"20\", \"30\", \"40\", \"+\"],\n                onStart: function onStart(data) {},\n                onChange: function onChange(data) {},\n                onFinish: function onFinish(data) {\n                    var oldUrl = window.location.href;\n                    var newUrl = \"\";\n                    var andChar = \"?\";\n                    var andChar2 = \"&\";\n                    var sLen = oldUrl.length;\n                    var multiplication = parseInt(filter.attr(\"data-multiplication\")) > 0 ? parseInt(filter.attr(\"data-multiplication\")) : 1;\n                    var limit = data.max * multiplication;\n                    var dt = data.to * multiplication;\n                    var df = data.from * multiplication;\n                    var dt_string = filter.attr(\"data-attr-to\") + \"=\" + dt;\n                    var df_string = filter.attr(\"data-attr-from\") + \"=\" + df;\n                    var tempUrlArray = [];\n                    var subparamsArray = [];\n                    console.log(multiplication);\n                    // check if there is already GET [?]\n                    var currentUrl;\n                    if (oldUrl.indexOf(\"?\") > -1) {\n                        tempUrlArray = oldUrl.split(\"?\");\n                        currentUrl = tempUrlArray[0];\n                        tempUrlArray = tempUrlArray[1];\n                        subparamsArray = tempUrlArray.split(\"&\");\n                        // check params and remove them\n                        for (var i = subparamsArray.length - 1; i >= 0; i--) {\n                            //console.log(subparamsArray[i].indexOf(\"duration\") > -1);\n                            //if (subparamsArray[i].indexOf(\"duration\") > -1) {\n                            if (subparamsArray[i].indexOf(filter.attr(\"data-attr-to\")) > -1 || subparamsArray[i].indexOf(filter.attr(\"data-attr-from\")) > -1) {\n                                subparamsArray.splice(i, 1);\n                            }\n                        }\n                    } else {\n                        currentUrl = oldUrl;\n                    }\n                    if (df > data.min) {\n                        subparamsArray.push(df_string);\n                    }\n                    // build new array\n                    if (dt != limit) {\n                        subparamsArray.push(dt_string);\n                    }\n                    var newParamsUrl = [];\n                    var valParams = [];\n                    // build array string\n                    for (var i = 0; i < subparamsArray.length; i++) {\n                        valParams.push(subparamsArray[i]);\n                        if (i == 0) {\n                            newParamsUrl += \"?\" + subparamsArray[i];\n                        } else {\n                            newParamsUrl += \"&\" + subparamsArray[i];\n                        }\n                    }\n                    //filter.val(valParams); \n                    newUrl = currentUrl + newParamsUrl;\n                    if (filter.attr(\"data-method\") != \"onpost\") {\n                        window.location.href = newUrl;\n                    }\n                },\n                onUpdate: function onUpdate(data) {}\n            });\n            var slider = $(\"#range_length_filter\").data(\"ionRangeSlider\");\n            //                slider.update({\n            //                    from:20,\n            //                    to: 50,\n            //                });\n        }\n    };\n})(IonRangeSlider = exports.IonRangeSlider || (exports.IonRangeSlider = {}));\n\n/***/ }),\n/* 101 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _classCallCheck2 = __webpack_require__(1);\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(2);\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar nhance_responsive_trigger_1 = __webpack_require__(32);\n// tslint:disable:object-literal-sort-keys\n\nvar MainNav = function () {\n    function MainNav() {\n        var bodyClass = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"is-main-nav-open\";\n        (0, _classCallCheck3.default)(this, MainNav);\n\n        this.bodyClass = bodyClass;\n        this.trigger = new nhance_responsive_trigger_1.NhanceTools.ResponsiveTriggerClass({\n            triggerElement: document.querySelector(\"[data-mb-trigger=\\\"nav\\\"]\"),\n            targetElement: document.querySelector('.main-nav'),\n            anywhereExcludedElements: document.querySelector('.main-nav__inner'),\n            defaultOpen: false,\n            classes: {\n                in: 'is-main-nav-open',\n                animIn: 'is-main-nav-opening',\n                out: 'is-main-nav-closed',\n                animOut: 'is-main-nav-closing',\n                animProgress: 'is-main-nav-animating',\n                triggerActive: 'is-active',\n                targetActive: 'is-active'\n            },\n            animTimeout: 500,\n            onInit: function onInit() {},\n            onChange: function onChange(isActive) {}\n        });\n        this._init();\n    }\n\n    (0, _createClass3.default)(MainNav, [{\n        key: \"_init\",\n        value: function _init() {}\n    }]);\n    return MainNav;\n}();\n\nexports.MainNav = MainNav;\n\n/***/ }),\n/* 102 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _from = __webpack_require__(4);\n\nvar _from2 = _interopRequireDefault(_from);\n\nvar _classCallCheck2 = __webpack_require__(1);\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(2);\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar helpers_1 = __webpack_require__(9);\n// tslint:disable:member-ordering\n\nvar QuickHoverElement = function () {\n    function QuickHoverElement(elem, className) {\n        var timeout = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 500;\n        (0, _classCallCheck3.default)(this, QuickHoverElement);\n\n        this._timeoutFunc = null;\n        this._elem = elem;\n        this._className = className;\n        this._timeout = timeout;\n        this._registerEnterListener();\n        this._registerExitListener();\n    }\n\n    (0, _createClass3.default)(QuickHoverElement, [{\n        key: \"_registerEnterListener\",\n        value: function _registerEnterListener() {\n            var _this = this;\n\n            this._elem.addEventListener('mouseenter', function (e) {\n                _this._unsetTimeout();\n                helpers_1.DomHelpers.addClass(_this._elem, _this._className);\n            });\n        }\n    }, {\n        key: \"_registerExitListener\",\n        value: function _registerExitListener() {\n            var _this2 = this;\n\n            this._elem.addEventListener('mouseleave', function (e) {\n                _this2._unsetTimeout();\n                if (helpers_1.PlatformHelper.detectMobileDevice()) {\n                    helpers_1.DomHelpers.removeClass(_this2._elem, _this2._className);\n                    _this2._unsetTimeout();\n                    return;\n                }\n                _this2._timeoutFunc = setTimeout(function () {\n                    helpers_1.DomHelpers.removeClass(_this2._elem, _this2._className);\n                    _this2._unsetTimeout();\n                }, _this2._timeout);\n            });\n        }\n    }, {\n        key: \"_unsetTimeout\",\n        value: function _unsetTimeout() {\n            if (this._timeoutFunc) {\n                clearTimeout(this._timeoutFunc);\n                this._timeoutFunc = null;\n            }\n        }\n    }]);\n    return QuickHoverElement;\n}();\n\nvar QuickHover = function () {\n    function QuickHover() {\n        var timeout = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 500;\n        (0, _classCallCheck3.default)(this, QuickHover);\n\n        this._registy = [];\n        this._list = document.querySelectorAll(\"[data-mb=\\\"quick-hover\\\"]\");\n        this._timeout = timeout;\n        if (this._list) {\n            this._init();\n        }\n    }\n\n    (0, _createClass3.default)(QuickHover, [{\n        key: \"_init\",\n        value: function _init() {\n            var _this3 = this;\n\n            (0, _from2.default)(this._list).forEach(function (elem) {\n                _this3._registy.push(new QuickHoverElement(elem, \"js-hover\", _this3._timeout));\n            });\n        }\n    }, {\n        key: \"setInnerExit\",\n        value: function setInnerExit(selector) {\n            var unsetLevelsUp = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;\n\n            var elem = document.querySelector(\"\" + selector);\n            var excluded = document.querySelector(\"[data-mb-quick-hover=\\\"exclude-exit\\\"]\");\n            var levelCount = 0;\n            if (!elem) {\n                return;\n            }\n            var target = elem;\n            while (levelCount < unsetLevelsUp) {\n                target = target.parentElement;\n                levelCount++;\n            }\n            if (target) {\n                elem.addEventListener('mouseleave', function (e) {\n                    var t = e.toElement || e.relatedTarget;\n                    if (t.getAttribute(\"data-mb-quick-hover\") === 'exclude-exit') {\n                        return;\n                    }\n                    helpers_1.DomHelpers.removeClass(target, \"js-hover\");\n                });\n            }\n        }\n    }]);\n    return QuickHover;\n}();\n\nexports.QuickHover = QuickHover;\n\n/***/ }),\n/* 103 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _from = __webpack_require__(4);\n\nvar _from2 = _interopRequireDefault(_from);\n\nvar _classCallCheck2 = __webpack_require__(1);\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(2);\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar jQuery = __webpack_require__(0);\n__webpack_require__(47);\nvar helpers_1 = __webpack_require__(9);\nvar modals_1 = __webpack_require__(31);\nvar $ = jQuery;\n\nvar Rating = function () {\n    function Rating() {\n        (0, _classCallCheck3.default)(this, Rating);\n\n        this._msg = {\n            error: \"Sorry, you've already voted!\",\n            success: \"Thanks for voting!\"\n        };\n        this._initJRatingModule();\n        this._initThumbsModule();\n    }\n\n    (0, _createClass3.default)(Rating, [{\n        key: \"_initThumbsModule\",\n        value: function _initThumbsModule() {\n            if (!$('[data-mb=\"thumbs-rating\"]').length) {\n                return;\n            }\n            var el = document.querySelector(\"[data-mb=\\\"thumbs-rating\\\"]\");\n            this._rawUrl = window['_basehttp'] + \"/includes/rating/jRating.php\";\n            this._id = el.getAttribute(\"data-opt-id\");\n            this._type = el.getAttribute(\"data-opt-type\") ? el.getAttribute(\"data-opt-type\") : \"0\";\n            this._list = document.querySelectorAll(\"[data-mb=\\\"vote\\\"]\");\n            this._handleVote();\n        }\n    }, {\n        key: \"_handleVote\",\n        value: function _handleVote() {\n            var _this = this;\n\n            if (!this._list) {\n                return;\n            }\n            (0, _from2.default)(this._list).forEach(function (btn) {\n                btn.addEventListener(\"click\", function (e) {\n                    e.preventDefault();\n                    var rate = btn.getAttribute(\"data-opt-vote\") === 'up' ? 100 : 0;\n                    var data = helpers_1.HttpHelper.serialize({\n                        action: 'rating',\n                        idBox: _this._id,\n                        type: _this._type,\n                        rate: rate\n                    });\n                    helpers_1.HttpHelper.post(_this._rawUrl, data, { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' }).then(function (response) {\n                        return JSON.parse(response);\n                    }).then(function (response) {\n                        modals_1.buildNewModal(response.message, {\n                            rand: Math.floor(Math.random() * 1000),\n                            closeTitle: btn.getAttribute('data-opt-close'),\n                            id: \"voting\",\n                            title: btn.getAttribute('title')\n                        });\n                        return response;\n                    });\n                });\n            });\n        }\n    }, {\n        key: \"_initJRatingModule\",\n        value: function _initJRatingModule() {\n            if (!$('.ratingStars').length) {\n                return;\n            }\n            $('.ratingStars').jRating({\n                'rateMax': 100,\n                onError: function onError() {\n                    $('#ratingStarsMessage').text('Sorry, you\\'ve already voted on this video/gallery.');\n                },\n                onSuccess: function onSuccess() {\n                    $('#ratingStarsMessage').text('Thanks for voting!');\n                }\n            }, 'json');\n        }\n    }]);\n    return Rating;\n}();\n\nexports.Rating = Rating;\n\n/***/ }),\n/* 104 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__webpack_require__(106);\n__webpack_require__(105);\n\n/***/ }),\n/* 105 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/***/ }),\n/* 106 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/***/ }),\n/* 107 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _from = __webpack_require__(4);\n\nvar _from2 = _interopRequireDefault(_from);\n\nvar _getIterator2 = __webpack_require__(117);\n\nvar _getIterator3 = _interopRequireDefault(_getIterator2);\n\nvar _toConsumableArray2 = __webpack_require__(122);\n\nvar _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);\n\nvar _classCallCheck2 = __webpack_require__(1);\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(2);\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\n\nvar Helpers = function () {\n    function Helpers() {\n        (0, _classCallCheck3.default)(this, Helpers);\n    }\n\n    (0, _createClass3.default)(Helpers, null, [{\n        key: \"toArray\",\n        value: function toArray(classes) {\n            var rtn = void 0;\n            if (classes instanceof Array) {\n                return [].concat((0, _toConsumableArray3.default)(classes)); /* Copy! */\n            }\n            if (typeof classes === 'string') {\n                return classes.split(' ');\n            }\n        }\n    }, {\n        key: \"hasClass\",\n        value: function hasClass(element) {\n            for (var _len = arguments.length, classes = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n                classes[_key - 1] = arguments[_key];\n            }\n\n            //console.time('HELPER hasClass');\n            var _iteratorNormalCompletion = true;\n            var _didIteratorError = false;\n            var _iteratorError = undefined;\n\n            try {\n                for (var _iterator = (0, _getIterator3.default)(classes), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n                    var cls = _step.value;\n\n                    return !!~(0, _from2.default)(element.classList).indexOf(cls);\n                }\n            } catch (err) {\n                _didIteratorError = true;\n                _iteratorError = err;\n            } finally {\n                try {\n                    if (!_iteratorNormalCompletion && _iterator.return) {\n                        _iterator.return();\n                    }\n                } finally {\n                    if (_didIteratorError) {\n                        throw _iteratorError;\n                    }\n                }\n            }\n\n            console.timeEnd('HELPER hasClass');\n        }\n    }, {\n        key: \"addClass\",\n        value: function addClass(element) {\n            //console.time('HELPER addClass');\n            var currentClasses = element.className.split(\" \");\n            var newClassesArray = [].concat((0, _toConsumableArray3.default)(currentClasses));\n\n            for (var _len2 = arguments.length, classes = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n                classes[_key2 - 1] = arguments[_key2];\n            }\n\n            var _iteratorNormalCompletion2 = true;\n            var _didIteratorError2 = false;\n            var _iteratorError2 = undefined;\n\n            try {\n                for (var _iterator2 = (0, _getIterator3.default)(classes), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n                    var cls = _step2.value;\n\n                    if (!~currentClasses.indexOf(cls)) {\n                        newClassesArray.push(cls);\n                    }\n                }\n            } catch (err) {\n                _didIteratorError2 = true;\n                _iteratorError2 = err;\n            } finally {\n                try {\n                    if (!_iteratorNormalCompletion2 && _iterator2.return) {\n                        _iterator2.return();\n                    }\n                } finally {\n                    if (_didIteratorError2) {\n                        throw _iteratorError2;\n                    }\n                }\n            }\n\n            element.className = newClassesArray.sort().join(' ');\n            //console.timeEnd('HELPER addClass');\n        }\n    }, {\n        key: \"removeClass\",\n        value: function removeClass(element) {\n            //console.time('HELPER removeClass');\n            var current = element.className.split(\" \");\n            var rmIndexArray = [];\n\n            for (var _len3 = arguments.length, classes = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n                classes[_key3 - 1] = arguments[_key3];\n            }\n\n            for (var i = 0; i < classes.length; i++) {\n                var index = current.indexOf(classes[i]);\n                if (index > -1) {\n                    rmIndexArray.push(index);\n                }\n            }\n            var _iteratorNormalCompletion3 = true;\n            var _didIteratorError3 = false;\n            var _iteratorError3 = undefined;\n\n            try {\n                for (var _iterator3 = (0, _getIterator3.default)(rmIndexArray.sort().reverse()), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n                    var _index = _step3.value;\n\n                    current.splice(_index, 1);\n                }\n            } catch (err) {\n                _didIteratorError3 = true;\n                _iteratorError3 = err;\n            } finally {\n                try {\n                    if (!_iteratorNormalCompletion3 && _iterator3.return) {\n                        _iterator3.return();\n                    }\n                } finally {\n                    if (_didIteratorError3) {\n                        throw _iteratorError3;\n                    }\n                }\n            }\n\n            element.className = current.join(' ');\n            //console.timeEnd('HELPER removeClass');\n        }\n    }, {\n        key: \"tempClass\",\n        value: function tempClass(element) {\n            for (var _len4 = arguments.length, classes = Array(_len4 > 2 ? _len4 - 2 : 0), _key4 = 2; _key4 < _len4; _key4++) {\n                classes[_key4 - 2] = arguments[_key4];\n            }\n\n            var timeout = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 500;\n\n            Helpers.addClass.apply(Helpers, [element].concat(classes));\n            setTimeout(function () {\n                Helpers.removeClass.apply(Helpers, [element].concat(classes));\n            }, timeout);\n        }\n    }]);\n    return Helpers;\n}();\n\nexports.Helpers = Helpers;\n\n/***/ }),\n/* 108 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar dom_classes_helper_1 = __webpack_require__(107);\nexports.Helpers = dom_classes_helper_1.Helpers;\n\n/***/ }),\n/* 109 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _from = __webpack_require__(4);\n\nvar _from2 = _interopRequireDefault(_from);\n\nvar _classCallCheck2 = __webpack_require__(1);\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(2);\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar helpers_1 = __webpack_require__(9);\n\nvar SearchSelector = function () {\n    function SearchSelector() {\n        (0, _classCallCheck3.default)(this, SearchSelector);\n\n        this._canUseSelect = false;\n        this._selected = \"\";\n        this._inputTarget = document.querySelector(\"[data-mb-search-target]\");\n        this._divLabelTarget = document.querySelector(\"[data-mb-search-label]\");\n        this._list = document.querySelectorAll(\"[data-mb-search-select]\");\n        if (this._inputTarget && this._divLabelTarget && this._list) {\n            this._canUseSelect = true;\n            this._set();\n            this._registerTriggers();\n        }\n    }\n\n    (0, _createClass3.default)(SearchSelector, [{\n        key: \"_set\",\n        value: function _set() {\n            this._clearLabel();\n            this._clearInputVal();\n            this._getSelected();\n            this._setSelectedLabel();\n            this._setInputVal();\n            /* If that's not clear enough for you.. f* u */\n        }\n    }, {\n        key: \"_clearLabel\",\n        value: function _clearLabel() {\n            this._divLabelTarget.innerHTML = \"\";\n        }\n    }, {\n        key: \"_clearInputVal\",\n        value: function _clearInputVal() {\n            this._inputTarget.value = \"\";\n        }\n    }, {\n        key: \"_getSelected\",\n        value: function _getSelected() {\n            var searchType = window.localStorage.getItem('user.mb.searchType');\n            this._selected = searchType ? searchType : \"\";\n        }\n    }, {\n        key: \"_setSelectedLabel\",\n        value: function _setSelectedLabel() {\n            var _this = this;\n\n            var htmlCode = void 0;\n            (0, _from2.default)(this._list).forEach(function (element) {\n                var attrib = element.getAttribute(\"data-mb-search-select\");\n                if (!_this._selected && (attrib === \"all\" || !attrib) || _this._selected === attrib) {\n                    htmlCode = element.innerHTML;\n                }\n            });\n            this._divLabelTarget.innerHTML = htmlCode;\n        }\n    }, {\n        key: \"_setInputVal\",\n        value: function _setInputVal() {\n            this._inputTarget.value = this._selected;\n        }\n    }, {\n        key: \"_registerTriggers\",\n        value: function _registerTriggers() {\n            var _this2 = this;\n\n            var parent = this._divLabelTarget.parentElement;\n            this._divLabelTarget.addEventListener(\"click\", function (e) {\n                e.stopPropagation();\n                helpers_1.DomHelpers.toggleClass(parent, \"js-search-list-visible\");\n            });\n            document.addEventListener(\"click\", function () {\n                helpers_1.DomHelpers.removeClass(parent, \"js-search-list-visible\");\n            });\n            (0, _from2.default)(this._list).forEach(function (element) {\n                element.addEventListener(\"click\", function (e) {\n                    var attrib = element.getAttribute(\"data-mb-search-select\");\n                    if (attrib === \"all\" || !attrib) {\n                        window.localStorage.removeItem(\"user.mb.searchType\");\n                    } else {\n                        window.localStorage.setItem(\"user.mb.searchType\", attrib);\n                    }\n                    _this2._set();\n                });\n            });\n        }\n    }]);\n    return SearchSelector;\n}();\n\nexports.SearchSelector = SearchSelector;\n\n/***/ }),\n/* 110 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _from = __webpack_require__(4);\n\nvar _from2 = _interopRequireDefault(_from);\n\nvar _classCallCheck2 = __webpack_require__(1);\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(2);\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// https://github.com/Grsmto/simplebar\nvar SimpleBar = __webpack_require__(172);\n\nvar SimpleScrollbar = function () {\n    function SimpleScrollbar() {\n        (0, _classCallCheck3.default)(this, SimpleScrollbar);\n\n        this._registy = []; /* Might be used in the future to manipulate scrollbars */\n        this._list = document.querySelectorAll(\"[data-mb=\\\"scrollbar\\\"]\");\n        if (this._list) {\n            this._init();\n        }\n    }\n\n    (0, _createClass3.default)(SimpleScrollbar, [{\n        key: \"_init\",\n        value: function _init() {\n            var _this = this;\n\n            (0, _from2.default)(this._list).forEach(function (elem) {\n                _this._registy.push(new SimpleBar(elem, { autoHide: false }));\n            });\n        }\n    }]);\n    return SimpleScrollbar;\n}();\n\nexports.SimpleScrollbar = SimpleScrollbar;\n\n/***/ }),\n/* 111 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _from = __webpack_require__(4);\n\nvar _from2 = _interopRequireDefault(_from);\n\nvar _classCallCheck2 = __webpack_require__(1);\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(2);\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar helpers_1 = __webpack_require__(9);\n\nvar Tabs = function () {\n    function Tabs() {\n        (0, _classCallCheck3.default)(this, Tabs);\n\n        this._triggers = document.querySelectorAll(\"[data-mb-tab]\");\n        this._content = document.querySelectorAll(\"[data-tab-id]\");\n        if (this._triggers && this._content) {\n            this._registerTriggers();\n            this._setFirst();\n        }\n    }\n\n    (0, _createClass3.default)(Tabs, [{\n        key: \"_registerTriggers\",\n        value: function _registerTriggers() {\n            var _this = this;\n\n            (0, _from2.default)(this._triggers).forEach(function (elem) {\n                elem.addEventListener(\"click\", function (e) {\n                    e.preventDefault();\n                    _this._unsetTrigger(elem);\n                    _this._set(elem);\n                });\n            });\n        }\n    }, {\n        key: \"_set\",\n        value: function _set(elem) {\n            var attrib = elem.getAttribute(\"data-mb-tab\");\n            helpers_1.DomHelpers.addClass(elem, \"is-active\");\n            (0, _from2.default)(this._content).forEach(function (contentEl) {\n                var cattrib = contentEl.getAttribute(\"data-tab-id\");\n                if (cattrib === attrib) {\n                    helpers_1.DomHelpers.addClass(contentEl, \"is-active\", \"is-tab-active\");\n                } else {\n                    helpers_1.DomHelpers.removeClass(contentEl, \"is-active\", \"is-tab-active\");\n                }\n            });\n        }\n    }, {\n        key: \"_setFirst\",\n        value: function _setFirst() {\n            var first = (0, _from2.default)(this._triggers)[0];\n            if (!first) {\n                return;\n            }\n            var attrib = first.getAttribute(\"data-mb-tab\");\n            helpers_1.DomHelpers.addClass(first, \"is-active\");\n            (0, _from2.default)(this._content).forEach(function (elem) {\n                var cattrib = elem.getAttribute(\"data-tab-id\");\n                if (cattrib === attrib) {\n                    helpers_1.DomHelpers.addClass(elem, \"is-active\", \"is-tab-active\");\n                } else {\n                    helpers_1.DomHelpers.removeClass(elem, \"is-active\", \"is-tab-active\");\n                }\n            });\n        }\n    }, {\n        key: \"_unsetTrigger\",\n        value: function _unsetTrigger(elem) {\n            (0, _from2.default)(this._triggers).forEach(function (trigger) {\n                if (trigger !== elem) {\n                    helpers_1.DomHelpers.removeClass(trigger, \"is-active\");\n                }\n            });\n        }\n    }]);\n    return Tabs;\n}();\n\nexports.Tabs = Tabs;\n\n/***/ }),\n/* 112 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _regenerator = __webpack_require__(54);\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _from = __webpack_require__(4);\n\nvar _from2 = _interopRequireDefault(_from);\n\nvar _isNan = __webpack_require__(51);\n\nvar _isNan2 = _interopRequireDefault(_isNan);\n\nvar _classCallCheck2 = __webpack_require__(1);\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(2);\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nvar _promise = __webpack_require__(23);\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = _promise2.default))(function (resolve, reject) {\n        function fulfilled(value) {\n            try {\n                step(generator.next(value));\n            } catch (e) {\n                reject(e);\n            }\n        }\n        function rejected(value) {\n            try {\n                step(generator[\"throw\"](value));\n            } catch (e) {\n                reject(e);\n            }\n        }\n        function step(result) {\n            result.done ? resolve(result.value) : new P(function (resolve) {\n                resolve(result.value);\n            }).then(fulfilled, rejected);\n        }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n\nvar Thumb = function () {\n    function Thumb(elem, timeout, limit, target) {\n        (0, _classCallCheck3.default)(this, Thumb);\n\n        this._thumbs = [];\n        this._elem = elem;\n        this._timeout = timeout;\n        this._limit = limit;\n        this._target = target;\n        this._init();\n    }\n\n    (0, _createClass3.default)(Thumb, [{\n        key: \"_init\",\n        value: function _init() {\n            if (!this._extractFileNames()) {\n                return;\n            }\n            this._registerEvents();\n        }\n    }, {\n        key: \"_extractFileNames\",\n        value: function _extractFileNames() {\n            var src = !this._target ? this._elem.getAttribute(\"src\") : this._target.getAttribute('src');\n            if (!src) {\n                return false;\n            }\n            var lastDotIndex = src.lastIndexOf(\".\");\n            var obj = {\n                prefix: src.substr(0, lastDotIndex - 1),\n                suffix: src.substr(lastDotIndex, src.length),\n                current: Number(src.substr(lastDotIndex - 1, 1))\n            };\n            this._initial = obj.current;\n            this._current = obj.current;\n            if ((0, _isNan2.default)(this._initial)) {\n                return false;\n            }\n            var x = 1;\n            while (x <= this._limit) {\n                this._thumbs.push(\"\" + obj.prefix + x + obj.suffix);\n                x++;\n            }\n            return true;\n        }\n    }, {\n        key: \"_registerEvents\",\n        value: function _registerEvents() {\n            this._elem.addEventListener(\"mouseenter\", this._start.bind(this));\n            this._elem.addEventListener(\"mouseleave\", this._stop.bind(this));\n        }\n    }, {\n        key: \"_start\",\n        value: function _start() {\n            this._incrementCurrent();\n            if (this._interval) {\n                return;\n            }\n            this._interval = setInterval(this._incrementCurrent.bind(this), this._timeout);\n        }\n    }, {\n        key: \"_stop\",\n        value: function _stop() {\n            var elem = this._target ? this._target : this._elem;\n            clearInterval(this._interval);\n            this._interval = undefined;\n            this._current = this._initial;\n            elem.setAttribute(\"src\", this._thumbs[this._initial - 1]);\n        }\n    }, {\n        key: \"_incrementCurrent\",\n        value: function _incrementCurrent() {\n            var elem = this._target ? this._target : this._elem;\n            this._current++;\n            if (this._current >= this._limit) {\n                this._current = 0;\n            }\n            elem.setAttribute(\"src\", this._thumbs[this._current]);\n        }\n    }]);\n    return Thumb;\n}();\n\nvar ThumbShuffler = function () {\n    function ThumbShuffler() {\n        var timeout = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 500;\n        var limit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 9;\n        (0, _classCallCheck3.default)(this, ThumbShuffler);\n\n        this._registry = [];\n        this._limit = limit;\n        this._timeout = timeout;\n        this._init();\n    }\n\n    (0, _createClass3.default)(ThumbShuffler, [{\n        key: \"_init\",\n        value: function _init() {\n            var _this = this;\n\n            var elems = document.querySelectorAll(\"[data-mb=\\\"shuffle\\\"]\");\n            if (elems) {\n                (0, _from2.default)(elems).forEach(function (elem) {\n                    if (!~_this._registry.indexOf(elem)) {\n                        _this._registry.push(elem);\n                        var target = void 0;\n                        if (elem.nodeName !== 'IMG') {\n                            target = elem.querySelector(\"[data-mb=\\\"shuffle-target\\\"]\");\n                        }\n                        new Thumb(elem, _this._timeout, _this._limit, target);\n                    }\n                });\n            }\n        }\n    }, {\n        key: \"update\",\n        value: function update() {\n            return __awaiter(this, void 0, void 0, /*#__PURE__*/_regenerator2.default.mark(function _callee() {\n                return _regenerator2.default.wrap(function _callee$(_context) {\n                    while (1) {\n                        switch (_context.prev = _context.next) {\n                            case 0:\n                                this._init();\n                                return _context.abrupt(\"return\", true);\n\n                            case 2:\n                            case \"end\":\n                                return _context.stop();\n                        }\n                    }\n                }, _callee, this);\n            }));\n        }\n    }]);\n    return ThumbShuffler;\n}();\n\nexports.ThumbShuffler = ThumbShuffler;\n\n/***/ }),\n/* 113 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _stringify = __webpack_require__(118);\n\nvar _stringify2 = _interopRequireDefault(_stringify);\n\nvar _typeof2 = __webpack_require__(7);\n\nvar _typeof3 = _interopRequireDefault(_typeof2);\n\nvar _jquery = __webpack_require__(0);\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar $ = _jquery2.default;\n(typeof JSON === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(JSON)) != \"object\" && (JSON = {}), function () {\n  \"use strict\";\n  function f(e) {\n    return e < 10 ? \"0\" + e : e;\n  }function quote(e) {\n    return escapable.lastIndex = 0, escapable.test(e) ? '\"' + e.replace(escapable, function (e) {\n      var t = meta[e];return typeof t == \"string\" ? t : \"\\\\u\" + (\"0000\" + e.charCodeAt(0).toString(16)).slice(-4);\n    }) + '\"' : '\"' + e + '\"';\n  }function str(e, t) {\n    var n,\n        r,\n        i,\n        s,\n        o = gap,\n        u,\n        a = t[e];a && (typeof a === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(a)) == \"object\" && typeof a.toJSON == \"function\" && (a = a.toJSON(e)), typeof rep == \"function\" && (a = rep.call(t, e, a));switch (typeof a === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(a)) {case \"string\":\n        return quote(a);case \"number\":\n        return isFinite(a) ? String(a) : \"null\";case \"boolean\":case \"null\":\n        return String(a);case \"object\":\n        if (!a) return \"null\";gap += indent, u = [];if (Object.prototype.toString.apply(a) === \"[object Array]\") {\n          s = a.length;for (n = 0; n < s; n += 1) {\n            u[n] = str(n, a) || \"null\";\n          }return i = u.length === 0 ? \"[]\" : gap ? \"[\\n\" + gap + u.join(\",\\n\" + gap) + \"\\n\" + o + \"]\" : \"[\" + u.join(\",\") + \"]\", gap = o, i;\n        }if (rep && (typeof rep === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(rep)) == \"object\") {\n          s = rep.length;for (n = 0; n < s; n += 1) {\n            typeof rep[n] == \"string\" && (r = rep[n], i = str(r, a), i && u.push(quote(r) + (gap ? \": \" : \":\") + i));\n          }\n        } else for (r in a) {\n          Object.prototype.hasOwnProperty.call(a, r) && (i = str(r, a), i && u.push(quote(r) + (gap ? \": \" : \":\") + i));\n        }return i = u.length === 0 ? \"{}\" : gap ? \"{\\n\" + gap + u.join(\",\\n\" + gap) + \"\\n\" + o + \"}\" : \"{\" + u.join(\",\") + \"}\", gap = o, i;}\n  }typeof Date.prototype.toJSON != \"function\" && (Date.prototype.toJSON = function (e) {\n    return isFinite(this.valueOf()) ? this.getUTCFullYear() + \"-\" + f(this.getUTCMonth() + 1) + \"-\" + f(this.getUTCDate()) + \"T\" + f(this.getUTCHours()) + \":\" + f(this.getUTCMinutes()) + \":\" + f(this.getUTCSeconds()) + \"Z\" : null;\n  }, String.prototype.toJSON = Number.prototype.toJSON = Boolean.prototype.toJSON = function (e) {\n    return this.valueOf();\n  });var cx = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,\n      escapable = /[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,\n      gap,\n      indent,\n      meta = { \"\\b\": \"\\\\b\", \"\t\": \"\\\\t\", \"\\n\": \"\\\\n\", \"\\f\": \"\\\\f\", \"\\r\": \"\\\\r\", '\"': '\\\\\"', \"\\\\\": \"\\\\\\\\\" },\n      rep;typeof _stringify2.default != \"function\" && (JSON.stringify = function (e, t, n) {\n    var r;gap = \"\", indent = \"\";if (typeof n == \"number\") for (r = 0; r < n; r += 1) {\n      indent += \" \";\n    } else typeof n == \"string\" && (indent = n);rep = t;if (!t || typeof t == \"function\" || (typeof t === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(t)) == \"object\" && typeof t.length == \"number\") return str(\"\", { \"\": e });throw new Error(\"JSON.stringify\");\n  }), typeof JSON.parse != \"function\" && (JSON.parse = function (text, reviver) {\n    function walk(e, t) {\n      var n,\n          r,\n          i = e[t];if (i && (typeof i === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(i)) == \"object\") for (n in i) {\n        Object.prototype.hasOwnProperty.call(i, n) && (r = walk(i, n), r !== undefined ? i[n] = r : delete i[n]);\n      }return reviver.call(e, t, i);\n    }var j;text = String(text), cx.lastIndex = 0, cx.test(text) && (text = text.replace(cx, function (e) {\n      return \"\\\\u\" + (\"0000\" + e.charCodeAt(0).toString(16)).slice(-4);\n    }));if (/^[\\],:{}\\s]*$/.test(text.replace(/\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g, \"@\").replace(/\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g, \"]\").replace(/(?:^|:|,)(?:\\s*\\[)+/g, \"\"))) return j = eval(\"(\" + text + \")\"), typeof reviver == \"function\" ? walk({ \"\": j }, \"\") : j;throw new SyntaxError(\"JSON.parse\");\n  });\n}(), function (e, t) {\n  \"use strict\";\n  var n = e.History = e.History || {};if (typeof n.Adapter != \"undefined\") throw new Error(\"History.js Adapter has already been loaded...\");n.Adapter = { handlers: {}, _uid: 1, uid: function uid(e) {\n      return e._uid || (e._uid = n.Adapter._uid++);\n    }, bind: function bind(e, t, r) {\n      var i = n.Adapter.uid(e);n.Adapter.handlers[i] = n.Adapter.handlers[i] || {}, n.Adapter.handlers[i][t] = n.Adapter.handlers[i][t] || [], n.Adapter.handlers[i][t].push(r), e[\"on\" + t] = function (e, t) {\n        return function (r) {\n          n.Adapter.trigger(e, t, r);\n        };\n      }(e, t);\n    }, trigger: function trigger(e, t, r) {\n      r = r || {};var i = n.Adapter.uid(e),\n          s,\n          o;n.Adapter.handlers[i] = n.Adapter.handlers[i] || {}, n.Adapter.handlers[i][t] = n.Adapter.handlers[i][t] || [];for (s = 0, o = n.Adapter.handlers[i][t].length; s < o; ++s) {\n        n.Adapter.handlers[i][t][s].apply(this, [r]);\n      }\n    }, extractEventData: function extractEventData(e, n) {\n      var r = n && n[e] || t;return r;\n    }, onDomLoad: function onDomLoad(t) {\n      var n = e.setTimeout(function () {\n        t();\n      }, 2e3);e.onload = function () {\n        clearTimeout(n), t();\n      };\n    } }, typeof n.init != \"undefined\" && n.init();\n}(window), function (e, t) {\n  \"use strict\";\n  var n = e.document,\n      r = e.setTimeout || r,\n      i = e.clearTimeout || i,\n      s = e.setInterval || s,\n      o = e.History = e.History || {};if (typeof o.initHtml4 != \"undefined\") throw new Error(\"History.js HTML4 Support has already been loaded...\");o.initHtml4 = function () {\n    if (typeof o.initHtml4.initialized != \"undefined\") return !1;o.initHtml4.initialized = !0, o.enabled = !0, o.savedHashes = [], o.isLastHash = function (e) {\n      var t = o.getHashByIndex(),\n          n;return n = e === t, n;\n    }, o.isHashEqual = function (e, t) {\n      return e = encodeURIComponent(e).replace(/%25/g, \"%\"), t = encodeURIComponent(t).replace(/%25/g, \"%\"), e === t;\n    }, o.saveHash = function (e) {\n      return o.isLastHash(e) ? !1 : (o.savedHashes.push(e), !0);\n    }, o.getHashByIndex = function (e) {\n      var t = null;return typeof e == \"undefined\" ? t = o.savedHashes[o.savedHashes.length - 1] : e < 0 ? t = o.savedHashes[o.savedHashes.length + e] : t = o.savedHashes[e], t;\n    }, o.discardedHashes = {}, o.discardedStates = {}, o.discardState = function (e, t, n) {\n      var r = o.getHashByState(e),\n          i;return i = { discardedState: e, backState: n, forwardState: t }, o.discardedStates[r] = i, !0;\n    }, o.discardHash = function (e, t, n) {\n      var r = { discardedHash: e, backState: n, forwardState: t };return o.discardedHashes[e] = r, !0;\n    }, o.discardedState = function (e) {\n      var t = o.getHashByState(e),\n          n;return n = o.discardedStates[t] || !1, n;\n    }, o.discardedHash = function (e) {\n      var t = o.discardedHashes[e] || !1;return t;\n    }, o.recycleState = function (e) {\n      var t = o.getHashByState(e);return o.discardedState(e) && delete o.discardedStates[t], !0;\n    }, o.emulated.hashChange && (o.hashChangeInit = function () {\n      o.checkerFunction = null;var t = \"\",\n          r,\n          i,\n          u,\n          a,\n          f = Boolean(o.getHash());return o.isInternetExplorer() ? (r = \"historyjs-iframe\", i = n.createElement(\"iframe\"), i.setAttribute(\"id\", r), i.setAttribute(\"src\", \"#\"), i.style.display = \"none\", n.body.appendChild(i), i.contentWindow.document.open(), i.contentWindow.document.close(), u = \"\", a = !1, o.checkerFunction = function () {\n        if (a) return !1;a = !0;var n = o.getHash(),\n            r = o.getHash(i.contentWindow.document);return n !== t ? (t = n, r !== n && (u = r = n, i.contentWindow.document.open(), i.contentWindow.document.close(), i.contentWindow.document.location.hash = o.escapeHash(n)), o.Adapter.trigger(e, \"hashchange\")) : r !== u && (u = r, f && r === \"\" ? o.back() : o.setHash(r, !1)), a = !1, !0;\n      }) : o.checkerFunction = function () {\n        var n = o.getHash() || \"\";return n !== t && (t = n, o.Adapter.trigger(e, \"hashchange\")), !0;\n      }, o.intervalList.push(s(o.checkerFunction, o.options.hashChangeInterval)), !0;\n    }, o.Adapter.onDomLoad(o.hashChangeInit)), o.emulated.pushState && (o.onHashChange = function (t) {\n      var n = t && t.newURL || o.getLocationHref(),\n          r = o.getHashByUrl(n),\n          i = null,\n          s = null,\n          u = null,\n          a;return o.isLastHash(r) ? (o.busy(!1), !1) : (o.doubleCheckComplete(), o.saveHash(r), r && o.isTraditionalAnchor(r) ? (o.Adapter.trigger(e, \"anchorchange\"), o.busy(!1), !1) : (i = o.extractState(o.getFullUrl(r || o.getLocationHref()), !0), o.isLastSavedState(i) ? (o.busy(!1), !1) : (s = o.getHashByState(i), a = o.discardedState(i), a ? (o.getHashByIndex(-2) === o.getHashByState(a.forwardState) ? o.back(!1) : o.forward(!1), !1) : (o.pushState(i.data, i.title, encodeURI(i.url), !1), !0))));\n    }, o.Adapter.bind(e, \"hashchange\", o.onHashChange), o.pushState = function (t, n, r, i) {\n      r = encodeURI(r).replace(/%25/g, \"%\");if (o.getHashByUrl(r)) throw new Error(\"History.js does not support states with fragment-identifiers (hashes/anchors).\");if (i !== !1 && o.busy()) return o.pushQueue({ scope: o, callback: o.pushState, args: arguments, queue: i }), !1;o.busy(!0);var s = o.createStateObject(t, n, r),\n          u = o.getHashByState(s),\n          a = o.getState(!1),\n          f = o.getHashByState(a),\n          l = o.getHash(),\n          c = o.expectedStateId == s.id;return o.storeState(s), o.expectedStateId = s.id, o.recycleState(s), o.setTitle(s), u === f ? (o.busy(!1), !1) : (o.saveState(s), c || o.Adapter.trigger(e, \"statechange\"), !o.isHashEqual(u, l) && !o.isHashEqual(u, o.getShortUrl(o.getLocationHref())) && o.setHash(u, !1), o.busy(!1), !0);\n    }, o.replaceState = function (t, n, r, i) {\n      r = encodeURI(r).replace(/%25/g, \"%\");if (o.getHashByUrl(r)) throw new Error(\"History.js does not support states with fragment-identifiers (hashes/anchors).\");if (i !== !1 && o.busy()) return o.pushQueue({ scope: o, callback: o.replaceState, args: arguments, queue: i }), !1;o.busy(!0);var s = o.createStateObject(t, n, r),\n          u = o.getHashByState(s),\n          a = o.getState(!1),\n          f = o.getHashByState(a),\n          l = o.getStateByIndex(-2);return o.discardState(a, s, l), u === f ? (o.storeState(s), o.expectedStateId = s.id, o.recycleState(s), o.setTitle(s), o.saveState(s), o.Adapter.trigger(e, \"statechange\"), o.busy(!1)) : o.pushState(s.data, s.title, s.url, !1), !0;\n    }), o.emulated.pushState && o.getHash() && !o.emulated.hashChange && o.Adapter.onDomLoad(function () {\n      o.Adapter.trigger(e, \"hashchange\");\n    });\n  }, typeof o.init != \"undefined\" && o.init();\n}(window), function (e, t) {\n  \"use strict\";\n  var n = e.console || t,\n      r = e.document,\n      i = e.navigator,\n      s = !1,\n      o = e.setTimeout,\n      u = e.clearTimeout,\n      a = e.setInterval,\n      f = e.clearInterval,\n      l = e.JSON,\n      c = e.alert,\n      h = e.History = e.History || {},\n      p = e.history;try {\n    s = e.sessionStorage, s.setItem(\"TEST\", \"1\"), s.removeItem(\"TEST\");\n  } catch (d) {\n    s = !1;\n  }l.stringify = l.stringify || l.encode, l.parse = l.parse || l.decode;if (typeof h.init != \"undefined\") throw new Error(\"History.js Core has already been loaded...\");h.init = function (e) {\n    return typeof h.Adapter == \"undefined\" ? !1 : (typeof h.initCore != \"undefined\" && h.initCore(), typeof h.initHtml4 != \"undefined\" && h.initHtml4(), !0);\n  }, h.initCore = function (d) {\n    if (typeof h.initCore.initialized != \"undefined\") return !1;h.initCore.initialized = !0, h.options = h.options || {}, h.options.hashChangeInterval = h.options.hashChangeInterval || 100, h.options.safariPollInterval = h.options.safariPollInterval || 500, h.options.doubleCheckInterval = h.options.doubleCheckInterval || 500, h.options.disableSuid = h.options.disableSuid || !1, h.options.storeInterval = h.options.storeInterval || 1e3, h.options.busyDelay = h.options.busyDelay || 250, h.options.debug = h.options.debug || !1, h.options.initialTitle = h.options.initialTitle || r.title, h.options.html4Mode = h.options.html4Mode || !1, h.options.delayInit = h.options.delayInit || !1, h.intervalList = [], h.clearAllIntervals = function () {\n      var e,\n          t = h.intervalList;if (typeof t != \"undefined\" && t !== null) {\n        for (e = 0; e < t.length; e++) {\n          f(t[e]);\n        }h.intervalList = null;\n      }\n    }, h.debug = function () {\n      (h.options.debug || !1) && h.log.apply(h, arguments);\n    }, h.log = function () {\n      var e = typeof n != \"undefined\" && typeof n.log != \"undefined\" && typeof n.log.apply != \"undefined\",\n          t = r.getElementById(\"log\"),\n          i,\n          s,\n          o,\n          u,\n          a;e ? (u = Array.prototype.slice.call(arguments), i = u.shift(), typeof n.debug != \"undefined\" ? n.debug.apply(n, [i, u]) : n.log.apply(n, [i, u])) : i = \"\\n\" + arguments[0] + \"\\n\";for (s = 1, o = arguments.length; s < o; ++s) {\n        a = arguments[s];if ((typeof a === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(a)) == \"object\" && typeof l != \"undefined\") try {\n          a = l.stringify(a);\n        } catch (f) {}i += \"\\n\" + a + \"\\n\";\n      }return t ? (t.value += i + \"\\n-----\\n\", t.scrollTop = t.scrollHeight - t.clientHeight) : e || c(i), !0;\n    }, h.getInternetExplorerMajorVersion = function () {\n      var e = h.getInternetExplorerMajorVersion.cached = typeof h.getInternetExplorerMajorVersion.cached != \"undefined\" ? h.getInternetExplorerMajorVersion.cached : function () {\n        var e = 3,\n            t = r.createElement(\"div\"),\n            n = t.getElementsByTagName(\"i\");while ((t.innerHTML = \"<!--[if gt IE \" + ++e + \"]><i></i><![endif]-->\") && n[0]) {}return e > 4 ? e : !1;\n      }();return e;\n    }, h.isInternetExplorer = function () {\n      var e = h.isInternetExplorer.cached = typeof h.isInternetExplorer.cached != \"undefined\" ? h.isInternetExplorer.cached : Boolean(h.getInternetExplorerMajorVersion());return e;\n    }, h.options.html4Mode ? h.emulated = { pushState: !0, hashChange: !0 } : h.emulated = { pushState: !Boolean(e.history && e.history.pushState && e.history.replaceState && !/ Mobile\\/([1-7][a-z]|(8([abcde]|f(1[0-8]))))/i.test(i.userAgent) && !/AppleWebKit\\/5([0-2]|3[0-2])/i.test(i.userAgent)), hashChange: Boolean(!(\"onhashchange\" in e || \"onhashchange\" in r) || h.isInternetExplorer() && h.getInternetExplorerMajorVersion() < 8) }, h.enabled = !h.emulated.pushState, h.bugs = { setHash: Boolean(!h.emulated.pushState && i.vendor === \"Apple Computer, Inc.\" && /AppleWebKit\\/5([0-2]|3[0-3])/.test(i.userAgent)), safariPoll: Boolean(!h.emulated.pushState && i.vendor === \"Apple Computer, Inc.\" && /AppleWebKit\\/5([0-2]|3[0-3])/.test(i.userAgent)), ieDoubleCheck: Boolean(h.isInternetExplorer() && h.getInternetExplorerMajorVersion() < 8), hashEscape: Boolean(h.isInternetExplorer() && h.getInternetExplorerMajorVersion() < 7) }, h.isEmptyObject = function (e) {\n      for (var t in e) {\n        if (e.hasOwnProperty(t)) return !1;\n      }return !0;\n    }, h.cloneObject = function (e) {\n      var t, n;return e ? (t = l.stringify(e), n = l.parse(t)) : n = {}, n;\n    }, h.getRootUrl = function () {\n      var e = r.location.protocol + \"//\" + (r.location.hostname || r.location.host);if (r.location.port || !1) e += \":\" + r.location.port;return e += \"/\", e;\n    }, h.getBaseHref = function () {\n      var e = r.getElementsByTagName(\"base\"),\n          t = null,\n          n = \"\";return e.length === 1 && (t = e[0], n = t.href.replace(/[^\\/]+$/, \"\")), n = n.replace(/\\/+$/, \"\"), n && (n += \"/\"), n;\n    }, h.getBaseUrl = function () {\n      var e = h.getBaseHref() || h.getBasePageUrl() || h.getRootUrl();return e;\n    }, h.getPageUrl = function () {\n      var e = h.getState(!1, !1),\n          t = (e || {}).url || h.getLocationHref(),\n          n;return n = t.replace(/\\/+$/, \"\").replace(/[^\\/]+$/, function (e, t, n) {\n        return (/\\./.test(e) ? e : e + \"/\"\n        );\n      }), n;\n    }, h.getBasePageUrl = function () {\n      var e = h.getLocationHref().replace(/[#\\?].*/, \"\").replace(/[^\\/]+$/, function (e, t, n) {\n        return (/[^\\/]$/.test(e) ? \"\" : e\n        );\n      }).replace(/\\/+$/, \"\") + \"/\";return e;\n    }, h.getFullUrl = function (e, t) {\n      var n = e,\n          r = e.substring(0, 1);return t = typeof t == \"undefined\" ? !0 : t, /[a-z]+\\:\\/\\//.test(e) || (r === \"/\" ? n = h.getRootUrl() + e.replace(/^\\/+/, \"\") : r === \"#\" ? n = h.getPageUrl().replace(/#.*/, \"\") + e : r === \"?\" ? n = h.getPageUrl().replace(/[\\?#].*/, \"\") + e : t ? n = h.getBaseUrl() + e.replace(/^(\\.\\/)+/, \"\") : n = h.getBasePageUrl() + e.replace(/^(\\.\\/)+/, \"\")), n.replace(/\\#$/, \"\");\n    }, h.getShortUrl = function (e) {\n      var t = e,\n          n = h.getBaseUrl(),\n          r = h.getRootUrl();return h.emulated.pushState && (t = t.replace(n, \"\")), t = t.replace(r, \"/\"), h.isTraditionalAnchor(t) && (t = \"./\" + t), t = t.replace(/^(\\.\\/)+/g, \"./\").replace(/\\#$/, \"\"), t;\n    }, h.getLocationHref = function (e) {\n      return e = e || r, e.URL === e.location.href ? e.location.href : e.location.href === decodeURIComponent(e.URL) ? e.URL : e.location.hash && decodeURIComponent(e.location.href.replace(/^[^#]+/, \"\")) === e.location.hash ? e.location.href : e.URL.indexOf(\"#\") == -1 && e.location.href.indexOf(\"#\") != -1 ? e.location.href : e.URL || e.location.href;\n    }, h.store = {}, h.idToState = h.idToState || {}, h.stateToId = h.stateToId || {}, h.urlToId = h.urlToId || {}, h.storedStates = h.storedStates || [], h.savedStates = h.savedStates || [], h.normalizeStore = function () {\n      h.store.idToState = h.store.idToState || {}, h.store.urlToId = h.store.urlToId || {}, h.store.stateToId = h.store.stateToId || {};\n    }, h.getState = function (e, t) {\n      typeof e == \"undefined\" && (e = !0), typeof t == \"undefined\" && (t = !0);var n = h.getLastSavedState();return !n && t && (n = h.createStateObject()), e && (n = h.cloneObject(n), n.url = n.cleanUrl || n.url), n;\n    }, h.getIdByState = function (e) {\n      var t = h.extractId(e.url),\n          n;if (!t) {\n        n = h.getStateString(e);if (typeof h.stateToId[n] != \"undefined\") t = h.stateToId[n];else if (typeof h.store.stateToId[n] != \"undefined\") t = h.store.stateToId[n];else {\n          for (;;) {\n            t = new Date().getTime() + String(Math.random()).replace(/\\D/g, \"\");if (typeof h.idToState[t] == \"undefined\" && typeof h.store.idToState[t] == \"undefined\") break;\n          }h.stateToId[n] = t, h.idToState[t] = e;\n        }\n      }return t;\n    }, h.normalizeState = function (e) {\n      var t, n;if (!e || (typeof e === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(e)) != \"object\") e = {};if (typeof e.normalized != \"undefined\") return e;if (!e.data || (0, _typeof3.default)(e.data) != \"object\") e.data = {};return t = {}, t.normalized = !0, t.title = e.title || \"\", t.url = h.getFullUrl(e.url ? e.url : h.getLocationHref()), t.hash = h.getShortUrl(t.url), t.data = h.cloneObject(e.data), t.id = h.getIdByState(t), t.cleanUrl = t.url.replace(/\\??\\&_suid.*/, \"\"), t.url = t.cleanUrl, n = !h.isEmptyObject(t.data), (t.title || n) && h.options.disableSuid !== !0 && (t.hash = h.getShortUrl(t.url).replace(/\\??\\&_suid.*/, \"\"), /\\?/.test(t.hash) || (t.hash += \"?\"), t.hash += \"&_suid=\" + t.id), t.hashedUrl = h.getFullUrl(t.hash), (h.emulated.pushState || h.bugs.safariPoll) && h.hasUrlDuplicate(t) && (t.url = t.hashedUrl), t;\n    }, h.createStateObject = function (e, t, n) {\n      var r = { data: e, title: t, url: n };return r = h.normalizeState(r), r;\n    }, h.getStateById = function (e) {\n      e = String(e);var n = h.idToState[e] || h.store.idToState[e] || t;return n;\n    }, h.getStateString = function (e) {\n      var t, n, r;return t = h.normalizeState(e), n = { data: t.data, title: e.title, url: e.url }, r = l.stringify(n), r;\n    }, h.getStateId = function (e) {\n      var t, n;return t = h.normalizeState(e), n = t.id, n;\n    }, h.getHashByState = function (e) {\n      var t, n;return t = h.normalizeState(e), n = t.hash, n;\n    }, h.extractId = function (e) {\n      var t, n, r, i;return e.indexOf(\"#\") != -1 ? i = e.split(\"#\")[0] : i = e, n = /(.*)\\&_suid=([0-9]+)$/.exec(i), r = n ? n[1] || e : e, t = n ? String(n[2] || \"\") : \"\", t || !1;\n    }, h.isTraditionalAnchor = function (e) {\n      var t = !/[\\/\\?\\.]/.test(e);return t;\n    }, h.extractState = function (e, t) {\n      var n = null,\n          r,\n          i;return t = t || !1, r = h.extractId(e), r && (n = h.getStateById(r)), n || (i = h.getFullUrl(e), r = h.getIdByUrl(i) || !1, r && (n = h.getStateById(r)), !n && t && !h.isTraditionalAnchor(e) && (n = h.createStateObject(null, null, i))), n;\n    }, h.getIdByUrl = function (e) {\n      var n = h.urlToId[e] || h.store.urlToId[e] || t;return n;\n    }, h.getLastSavedState = function () {\n      return h.savedStates[h.savedStates.length - 1] || t;\n    }, h.getLastStoredState = function () {\n      return h.storedStates[h.storedStates.length - 1] || t;\n    }, h.hasUrlDuplicate = function (e) {\n      var t = !1,\n          n;return n = h.extractState(e.url), t = n && n.id !== e.id, t;\n    }, h.storeState = function (e) {\n      return h.urlToId[e.url] = e.id, h.storedStates.push(h.cloneObject(e)), e;\n    }, h.isLastSavedState = function (e) {\n      var t = !1,\n          n,\n          r,\n          i;return h.savedStates.length && (n = e.id, r = h.getLastSavedState(), i = r.id, t = n === i), t;\n    }, h.saveState = function (e) {\n      return h.isLastSavedState(e) ? !1 : (h.savedStates.push(h.cloneObject(e)), !0);\n    }, h.getStateByIndex = function (e) {\n      var t = null;return typeof e == \"undefined\" ? t = h.savedStates[h.savedStates.length - 1] : e < 0 ? t = h.savedStates[h.savedStates.length + e] : t = h.savedStates[e], t;\n    }, h.getCurrentIndex = function () {\n      var e = null;return h.savedStates.length < 1 ? e = 0 : e = h.savedStates.length - 1, e;\n    }, h.getHash = function (e) {\n      var t = h.getLocationHref(e),\n          n;return n = h.getHashByUrl(t), n;\n    }, h.unescapeHash = function (e) {\n      var t = h.normalizeHash(e);return t = decodeURIComponent(t), t;\n    }, h.normalizeHash = function (e) {\n      var t = e.replace(/[^#]*#/, \"\").replace(/#.*/, \"\");return t;\n    }, h.setHash = function (e, t) {\n      var n, i;return t !== !1 && h.busy() ? (h.pushQueue({ scope: h, callback: h.setHash, args: arguments, queue: t }), !1) : (h.busy(!0), n = h.extractState(e, !0), n && !h.emulated.pushState ? h.pushState(n.data, n.title, n.url, !1) : h.getHash() !== e && (h.bugs.setHash ? (i = h.getPageUrl(), h.pushState(null, null, i + \"#\" + e, !1)) : r.location.hash = e), h);\n    }, h.escapeHash = function (t) {\n      var n = h.normalizeHash(t);return n = e.encodeURIComponent(n), h.bugs.hashEscape || (n = n.replace(/\\%21/g, \"!\").replace(/\\%26/g, \"&\").replace(/\\%3D/g, \"=\").replace(/\\%3F/g, \"?\")), n;\n    }, h.getHashByUrl = function (e) {\n      var t = String(e).replace(/([^#]*)#?([^#]*)#?(.*)/, \"$2\");return t = h.unescapeHash(t), t;\n    }, h.setTitle = function (e) {\n      var t = e.title,\n          n;t || (n = h.getStateByIndex(0), n && n.url === e.url && (t = n.title || h.options.initialTitle));try {\n        r.getElementsByTagName(\"title\")[0].innerHTML = t.replace(\"<\", \"&lt;\").replace(\">\", \"&gt;\").replace(\" & \", \" &amp; \");\n      } catch (i) {}return r.title = t, h;\n    }, h.queues = [], h.busy = function (e) {\n      typeof e != \"undefined\" ? h.busy.flag = e : typeof h.busy.flag == \"undefined\" && (h.busy.flag = !1);if (!h.busy.flag) {\n        u(h.busy.timeout);var t = function t() {\n          var e, n, r;if (h.busy.flag) return;for (e = h.queues.length - 1; e >= 0; --e) {\n            n = h.queues[e];if (n.length === 0) continue;r = n.shift(), h.fireQueueItem(r), h.busy.timeout = o(t, h.options.busyDelay);\n          }\n        };h.busy.timeout = o(t, h.options.busyDelay);\n      }return h.busy.flag;\n    }, h.busy.flag = !1, h.fireQueueItem = function (e) {\n      return e.callback.apply(e.scope || h, e.args || []);\n    }, h.pushQueue = function (e) {\n      return h.queues[e.queue || 0] = h.queues[e.queue || 0] || [], h.queues[e.queue || 0].push(e), h;\n    }, h.queue = function (e, t) {\n      return typeof e == \"function\" && (e = { callback: e }), typeof t != \"undefined\" && (e.queue = t), h.busy() ? h.pushQueue(e) : h.fireQueueItem(e), h;\n    }, h.clearQueue = function () {\n      return h.busy.flag = !1, h.queues = [], h;\n    }, h.stateChanged = !1, h.doubleChecker = !1, h.doubleCheckComplete = function () {\n      return h.stateChanged = !0, h.doubleCheckClear(), h;\n    }, h.doubleCheckClear = function () {\n      return h.doubleChecker && (u(h.doubleChecker), h.doubleChecker = !1), h;\n    }, h.doubleCheck = function (e) {\n      return h.stateChanged = !1, h.doubleCheckClear(), h.bugs.ieDoubleCheck && (h.doubleChecker = o(function () {\n        return h.doubleCheckClear(), h.stateChanged || e(), !0;\n      }, h.options.doubleCheckInterval)), h;\n    }, h.safariStatePoll = function () {\n      var t = h.extractState(h.getLocationHref()),\n          n;if (!h.isLastSavedState(t)) return n = t, n || (n = h.createStateObject()), h.Adapter.trigger(e, \"popstate\"), h;return;\n    }, h.back = function (e) {\n      return e !== !1 && h.busy() ? (h.pushQueue({ scope: h, callback: h.back, args: arguments, queue: e }), !1) : (h.busy(!0), h.doubleCheck(function () {\n        h.back(!1);\n      }), p.go(-1), !0);\n    }, h.forward = function (e) {\n      return e !== !1 && h.busy() ? (h.pushQueue({ scope: h, callback: h.forward, args: arguments, queue: e }), !1) : (h.busy(!0), h.doubleCheck(function () {\n        h.forward(!1);\n      }), p.go(1), !0);\n    }, h.go = function (e, t) {\n      var n;if (e > 0) for (n = 1; n <= e; ++n) {\n        h.forward(t);\n      } else {\n        if (!(e < 0)) throw new Error(\"History.go: History.go requires a positive or negative integer passed.\");for (n = -1; n >= e; --n) {\n          h.back(t);\n        }\n      }return h;\n    };if (h.emulated.pushState) {\n      var v = function v() {};h.pushState = h.pushState || v, h.replaceState = h.replaceState || v;\n    } else h.onPopState = function (t, n) {\n      var r = !1,\n          i = !1,\n          s,\n          o;return h.doubleCheckComplete(), s = h.getHash(), s ? (o = h.extractState(s || h.getLocationHref(), !0), o ? h.replaceState(o.data, o.title, o.url, !1) : (h.Adapter.trigger(e, \"anchorchange\"), h.busy(!1)), h.expectedStateId = !1, !1) : (r = h.Adapter.extractEventData(\"state\", t, n) || !1, r ? i = h.getStateById(r) : h.expectedStateId ? i = h.getStateById(h.expectedStateId) : i = h.extractState(h.getLocationHref()), i || (i = h.createStateObject(null, null, h.getLocationHref())), h.expectedStateId = !1, h.isLastSavedState(i) ? (h.busy(!1), !1) : (h.storeState(i), h.saveState(i), h.setTitle(i), h.Adapter.trigger(e, \"statechange\"), h.busy(!1), !0));\n    }, h.Adapter.bind(e, \"popstate\", h.onPopState), h.pushState = function (t, n, r, i) {\n      if (h.getHashByUrl(r) && h.emulated.pushState) throw new Error(\"History.js does not support states with fragement-identifiers (hashes/anchors).\");if (i !== !1 && h.busy()) return h.pushQueue({ scope: h, callback: h.pushState, args: arguments, queue: i }), !1;h.busy(!0);var s = h.createStateObject(t, n, r);return h.isLastSavedState(s) ? h.busy(!1) : (h.storeState(s), h.expectedStateId = s.id, p.pushState(s.id, s.title, s.url), h.Adapter.trigger(e, \"popstate\")), !0;\n    }, h.replaceState = function (t, n, r, i) {\n      if (h.getHashByUrl(r) && h.emulated.pushState) throw new Error(\"History.js does not support states with fragement-identifiers (hashes/anchors).\");if (i !== !1 && h.busy()) return h.pushQueue({ scope: h, callback: h.replaceState, args: arguments, queue: i }), !1;h.busy(!0);var s = h.createStateObject(t, n, r);return h.isLastSavedState(s) ? h.busy(!1) : (h.storeState(s), h.expectedStateId = s.id, p.replaceState(s.id, s.title, s.url), h.Adapter.trigger(e, \"popstate\")), !0;\n    };if (s) {\n      try {\n        h.store = l.parse(s.getItem(\"History.store\")) || {};\n      } catch (m) {\n        h.store = {};\n      }h.normalizeStore();\n    } else h.store = {}, h.normalizeStore();h.Adapter.bind(e, \"unload\", h.clearAllIntervals), h.saveState(h.storeState(h.extractState(h.getLocationHref(), !0))), s && (h.onUnload = function () {\n      var e, t, n;try {\n        e = l.parse(s.getItem(\"History.store\")) || {};\n      } catch (r) {\n        e = {};\n      }e.idToState = e.idToState || {}, e.urlToId = e.urlToId || {}, e.stateToId = e.stateToId || {};for (t in h.idToState) {\n        if (!h.idToState.hasOwnProperty(t)) continue;e.idToState[t] = h.idToState[t];\n      }for (t in h.urlToId) {\n        if (!h.urlToId.hasOwnProperty(t)) continue;e.urlToId[t] = h.urlToId[t];\n      }for (t in h.stateToId) {\n        if (!h.stateToId.hasOwnProperty(t)) continue;e.stateToId[t] = h.stateToId[t];\n      }h.store = e, h.normalizeStore(), n = l.stringify(e);try {\n        s.setItem(\"History.store\", n);\n      } catch (i) {\n        if (i.code !== DOMException.QUOTA_EXCEEDED_ERR) throw i;s.length && (s.removeItem(\"History.store\"), s.setItem(\"History.store\", n));\n      }\n    }, h.intervalList.push(a(h.onUnload, h.options.storeInterval)), h.Adapter.bind(e, \"beforeunload\", h.onUnload), h.Adapter.bind(e, \"unload\", h.onUnload));if (!h.emulated.pushState) {\n      h.bugs.safariPoll && h.intervalList.push(a(h.safariStatePoll, h.options.safariPollInterval));if (i.vendor === \"Apple Computer, Inc.\" || (i.appCodeName || \"\") === \"Mozilla\") h.Adapter.bind(e, \"hashchange\", function () {\n        h.Adapter.trigger(e, \"popstate\");\n      }), h.getHash() && h.Adapter.onDomLoad(function () {\n        h.Adapter.trigger(e, \"hashchange\");\n      });\n    }\n  }, (!h.options || !h.options.delayInit) && h.init();\n}(window);\n\n/***/ }),\n/* 114 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;\n\nvar _jquery = __webpack_require__(0);\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar $ = _jquery2.default;\n// Ion.RangeSlider\n// version 2.1.3 Build: 352\n// © Denis Ineshin, 2016\n// https://github.com/IonDen\n//\n// Project page:    http://ionden.com/a/plugins/ion.rangeSlider/en.html\n// GitHub page:     https://github.com/IonDen/ion.rangeSlider\n//\n// Released under MIT licence:\n// http://ionden.com/a/plugins/licence-en.html\n// =====================================================================================================================\n\n(function (factory) {\n    if (true) {\n        !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(0)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory(_jquery2.default, document, window, navigator)),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n    } else {\n        factory(_jquery2.default, document, window, navigator);\n    }\n})(function ($, document, window, navigator, undefined) {\n    \"use strict\";\n\n    // =================================================================================================================\n    // Service\n\n    var plugin_count = 0;\n\n    // IE8 fix\n    var is_old_ie = function () {\n        var n = navigator.userAgent,\n            r = /msie\\s\\d+/i,\n            v;\n        if (n.search(r) > 0) {\n            v = r.exec(n).toString();\n            v = v.split(\" \")[1];\n            if (v < 9) {\n                $(\"html\").addClass(\"lt-ie9\");\n                return true;\n            }\n        }\n        return false;\n    }();\n    if (!Function.prototype.bind) {\n        Function.prototype.bind = function bind(that) {\n\n            var target = this;\n            var slice = [].slice;\n\n            if (typeof target != \"function\") {\n                throw new TypeError();\n            }\n\n            var args = slice.call(arguments, 1),\n                bound = function bound() {\n\n                if (this instanceof bound) {\n\n                    var F = function F() {};\n                    F.prototype = target.prototype;\n                    var self = new F();\n\n                    var result = target.apply(self, args.concat(slice.call(arguments)));\n                    if (Object(result) === result) {\n                        return result;\n                    }\n                    return self;\n                } else {\n\n                    return target.apply(that, args.concat(slice.call(arguments)));\n                }\n            };\n\n            return bound;\n        };\n    }\n    if (!Array.prototype.indexOf) {\n        Array.prototype.indexOf = function (searchElement, fromIndex) {\n            var k;\n            if (this == null) {\n                throw new TypeError('\"this\" is null or not defined');\n            }\n            var O = Object(this);\n            var len = O.length >>> 0;\n            if (len === 0) {\n                return -1;\n            }\n            var n = +fromIndex || 0;\n            if (Math.abs(n) === Infinity) {\n                n = 0;\n            }\n            if (n >= len) {\n                return -1;\n            }\n            k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);\n            while (k < len) {\n                if (k in O && O[k] === searchElement) {\n                    return k;\n                }\n                k++;\n            }\n            return -1;\n        };\n    }\n\n    // =================================================================================================================\n    // Template\n\n    var base_html = '<span class=\"irs\">' + '<span class=\"irs-line\" tabindex=\"-1\"><span class=\"irs-line-left\"></span><span class=\"irs-line-mid\"></span><span class=\"irs-line-right\"></span></span>' + '<span class=\"irs-min\">0</span><span class=\"irs-max\">1</span>' + '<span class=\"irs-from\">0</span><span class=\"irs-to\">0</span><span class=\"irs-single\">0</span>' + '</span>' + '<span class=\"irs-grid\"></span>' + '<span class=\"irs-bar\"></span>';\n\n    var single_html = '<span class=\"irs-bar-edge\"></span>' + '<span class=\"irs-shadow shadow-single\"></span>' + '<span class=\"irs-slider single\"></span>';\n\n    var double_html = '<span class=\"irs-shadow shadow-from\"></span>' + '<span class=\"irs-shadow shadow-to\"></span>' + '<span class=\"irs-slider from\"></span>' + '<span class=\"irs-slider to\"></span>';\n\n    var disable_html = '<span class=\"irs-disable-mask\"></span>';\n\n    // =================================================================================================================\n    // Core\n\n    /**\r\n     * Main plugin constructor\r\n     *\r\n     * @param input {Object} link to base input element\r\n     * @param options {Object} slider config\r\n     * @param plugin_count {Number}\r\n     * @constructor\r\n     */\n    var IonRangeSlider = function IonRangeSlider(input, options, plugin_count) {\n        this.VERSION = \"2.1.3\";\n        this.input = input;\n        this.plugin_count = plugin_count;\n        this.current_plugin = 0;\n        this.calc_count = 0;\n        this.update_tm = 0;\n        this.old_from = 0;\n        this.old_to = 0;\n        this.old_min_interval = null;\n        this.raf_id = null;\n        this.dragging = false;\n        this.force_redraw = false;\n        this.no_diapason = false;\n        this.is_key = false;\n        this.is_update = false;\n        this.is_start = true;\n        this.is_finish = false;\n        this.is_active = false;\n        this.is_resize = false;\n        this.is_click = false;\n\n        // cache for links to all DOM elements\n        this.$cache = {\n            win: $(window),\n            body: $(document.body),\n            input: $(input),\n            cont: null,\n            rs: null,\n            min: null,\n            max: null,\n            from: null,\n            to: null,\n            single: null,\n            bar: null,\n            line: null,\n            s_single: null,\n            s_from: null,\n            s_to: null,\n            shad_single: null,\n            shad_from: null,\n            shad_to: null,\n            edge: null,\n            grid: null,\n            grid_labels: []\n        };\n\n        // storage for measure variables\n        this.coords = {\n            // left\n            x_gap: 0,\n            x_pointer: 0,\n\n            // width\n            w_rs: 0,\n            w_rs_old: 0,\n            w_handle: 0,\n\n            // percents\n            p_gap: 0,\n            p_gap_left: 0,\n            p_gap_right: 0,\n            p_step: 0,\n            p_pointer: 0,\n            p_handle: 0,\n            p_single_fake: 0,\n            p_single_real: 0,\n            p_from_fake: 0,\n            p_from_real: 0,\n            p_to_fake: 0,\n            p_to_real: 0,\n            p_bar_x: 0,\n            p_bar_w: 0,\n\n            // grid\n            grid_gap: 0,\n            big_num: 0,\n            big: [],\n            big_w: [],\n            big_p: [],\n            big_x: []\n        };\n\n        // storage for labels measure variables\n        this.labels = {\n            // width\n            w_min: 0,\n            w_max: 0,\n            w_from: 0,\n            w_to: 0,\n            w_single: 0,\n\n            // percents\n            p_min: 0,\n            p_max: 0,\n            p_from_fake: 0,\n            p_from_left: 0,\n            p_to_fake: 0,\n            p_to_left: 0,\n            p_single_fake: 0,\n            p_single_left: 0\n        };\n\n        /**\r\n         * get and validate config\r\n         */\n        var $inp = this.$cache.input,\n            val = $inp.prop(\"value\"),\n            config,\n            config_from_data,\n            prop;\n\n        // default config\n        config = {\n            type: \"single\",\n\n            min: 10,\n            max: 100,\n            from: null,\n            to: null,\n            step: 1,\n\n            min_interval: 0,\n            max_interval: 0,\n            drag_interval: false,\n\n            values: [],\n            p_values: [],\n\n            from_fixed: false,\n            from_min: null,\n            from_max: null,\n            from_shadow: false,\n\n            to_fixed: false,\n            to_min: null,\n            to_max: null,\n            to_shadow: false,\n\n            prettify_enabled: true,\n            prettify_separator: \" \",\n            prettify: null,\n\n            force_edges: false,\n\n            keyboard: false,\n            keyboard_step: 5,\n\n            grid: false,\n            grid_margin: true,\n            grid_num: 4,\n            grid_snap: false,\n\n            hide_min_max: false,\n            hide_from_to: false,\n\n            prefix: \"\",\n            postfix: \"\",\n            max_postfix: \"\",\n            decorate_both: true,\n            values_separator: \" — \",\n\n            input_values_separator: \";\",\n\n            disable: false,\n\n            onStart: null,\n            onChange: null,\n            onFinish: null,\n            onUpdate: null\n        };\n\n        // config from data-attributes extends js config\n        config_from_data = {\n            type: $inp.data(\"type\"),\n\n            min: $inp.data(\"min\"),\n            max: $inp.data(\"max\"),\n            from: $inp.data(\"from\"),\n            to: $inp.data(\"to\"),\n            step: $inp.data(\"step\"),\n\n            min_interval: $inp.data(\"minInterval\"),\n            max_interval: $inp.data(\"maxInterval\"),\n            drag_interval: $inp.data(\"dragInterval\"),\n\n            values: $inp.data(\"values\"),\n\n            from_fixed: $inp.data(\"fromFixed\"),\n            from_min: $inp.data(\"fromMin\"),\n            from_max: $inp.data(\"fromMax\"),\n            from_shadow: $inp.data(\"fromShadow\"),\n\n            to_fixed: $inp.data(\"toFixed\"),\n            to_min: $inp.data(\"toMin\"),\n            to_max: $inp.data(\"toMax\"),\n            to_shadow: $inp.data(\"toShadow\"),\n\n            prettify_enabled: $inp.data(\"prettifyEnabled\"),\n            prettify_separator: $inp.data(\"prettifySeparator\"),\n\n            force_edges: $inp.data(\"forceEdges\"),\n\n            keyboard: $inp.data(\"keyboard\"),\n            keyboard_step: $inp.data(\"keyboardStep\"),\n\n            grid: $inp.data(\"grid\"),\n            grid_margin: $inp.data(\"gridMargin\"),\n            grid_num: $inp.data(\"gridNum\"),\n            grid_snap: $inp.data(\"gridSnap\"),\n\n            hide_min_max: $inp.data(\"hideMinMax\"),\n            hide_from_to: $inp.data(\"hideFromTo\"),\n\n            prefix: $inp.data(\"prefix\"),\n            postfix: $inp.data(\"postfix\"),\n            max_postfix: $inp.data(\"maxPostfix\"),\n            decorate_both: $inp.data(\"decorateBoth\"),\n            values_separator: $inp.data(\"valuesSeparator\"),\n\n            input_values_separator: $inp.data(\"inputValuesSeparator\"),\n\n            disable: $inp.data(\"disable\")\n        };\n        config_from_data.values = config_from_data.values && config_from_data.values.split(\",\");\n\n        for (prop in config_from_data) {\n            if (config_from_data.hasOwnProperty(prop)) {\n                if (!config_from_data[prop] && config_from_data[prop] !== 0) {\n                    delete config_from_data[prop];\n                }\n            }\n        }\n\n        // input value extends default config\n        if (val) {\n            val = val.split(config_from_data.input_values_separator || options.input_values_separator || \";\");\n\n            if (val[0] && val[0] == +val[0]) {\n                val[0] = +val[0];\n            }\n            if (val[1] && val[1] == +val[1]) {\n                val[1] = +val[1];\n            }\n\n            if (options && options.values && options.values.length) {\n                config.from = val[0] && options.values.indexOf(val[0]);\n                config.to = val[1] && options.values.indexOf(val[1]);\n            } else {\n                config.from = val[0] && +val[0];\n                config.to = val[1] && +val[1];\n            }\n        }\n\n        // js config extends default config\n        $.extend(config, options);\n\n        // data config extends config\n        $.extend(config, config_from_data);\n        this.options = config;\n\n        // validate config, to be sure that all data types are correct\n        this.validate();\n\n        // default result object, returned to callbacks\n        this.result = {\n            input: this.$cache.input,\n            slider: null,\n\n            min: this.options.min,\n            max: this.options.max,\n\n            from: this.options.from,\n            from_percent: 0,\n            from_value: null,\n\n            to: this.options.to,\n            to_percent: 0,\n            to_value: null\n        };\n\n        this.init();\n    };\n\n    IonRangeSlider.prototype = {\n\n        /**\r\n         * Starts or updates the plugin instance\r\n         *\r\n         * @param is_update {boolean}\r\n         */\n        init: function init(is_update) {\n            this.no_diapason = false;\n            this.coords.p_step = this.convertToPercent(this.options.step, true);\n\n            this.target = \"base\";\n\n            this.toggleInput();\n            this.append();\n            this.setMinMax();\n\n            if (is_update) {\n                this.force_redraw = true;\n                this.calc(true);\n\n                // callbacks called\n                this.callOnUpdate();\n            } else {\n                this.force_redraw = true;\n                this.calc(true);\n\n                // callbacks called\n                this.callOnStart();\n            }\n\n            this.updateScene();\n        },\n\n        /**\r\n         * Appends slider template to a DOM\r\n         */\n        append: function append() {\n            var container_html = '<span class=\"irs js-irs-' + this.plugin_count + '\"></span>';\n            this.$cache.input.before(container_html);\n            this.$cache.input.prop(\"readonly\", true);\n            this.$cache.cont = this.$cache.input.prev();\n            this.result.slider = this.$cache.cont;\n\n            this.$cache.cont.html(base_html);\n            this.$cache.rs = this.$cache.cont.find(\".irs\");\n            this.$cache.min = this.$cache.cont.find(\".irs-min\");\n            this.$cache.max = this.$cache.cont.find(\".irs-max\");\n            this.$cache.from = this.$cache.cont.find(\".irs-from\");\n            this.$cache.to = this.$cache.cont.find(\".irs-to\");\n            this.$cache.single = this.$cache.cont.find(\".irs-single\");\n            this.$cache.bar = this.$cache.cont.find(\".irs-bar\");\n            this.$cache.line = this.$cache.cont.find(\".irs-line\");\n            this.$cache.grid = this.$cache.cont.find(\".irs-grid\");\n\n            if (this.options.type === \"single\") {\n                this.$cache.cont.append(single_html);\n                this.$cache.edge = this.$cache.cont.find(\".irs-bar-edge\");\n                this.$cache.s_single = this.$cache.cont.find(\".single\");\n                this.$cache.from[0].style.visibility = \"hidden\";\n                this.$cache.to[0].style.visibility = \"hidden\";\n                this.$cache.shad_single = this.$cache.cont.find(\".shadow-single\");\n            } else {\n                this.$cache.cont.append(double_html);\n                this.$cache.s_from = this.$cache.cont.find(\".from\");\n                this.$cache.s_to = this.$cache.cont.find(\".to\");\n                this.$cache.shad_from = this.$cache.cont.find(\".shadow-from\");\n                this.$cache.shad_to = this.$cache.cont.find(\".shadow-to\");\n\n                this.setTopHandler();\n            }\n\n            if (this.options.hide_from_to) {\n                this.$cache.from[0].style.display = \"none\";\n                this.$cache.to[0].style.display = \"none\";\n                this.$cache.single[0].style.display = \"none\";\n            }\n\n            this.appendGrid();\n\n            if (this.options.disable) {\n                this.appendDisableMask();\n                this.$cache.input[0].disabled = true;\n            } else {\n                this.$cache.cont.removeClass(\"irs-disabled\");\n                this.$cache.input[0].disabled = false;\n                this.bindEvents();\n            }\n\n            if (this.options.drag_interval) {\n                this.$cache.bar[0].style.cursor = \"ew-resize\";\n            }\n        },\n\n        /**\r\n         * Determine which handler has a priority\r\n         * works only for double slider type\r\n         */\n        setTopHandler: function setTopHandler() {\n            var min = this.options.min,\n                max = this.options.max,\n                from = this.options.from,\n                to = this.options.to;\n\n            if (from > min && to === max) {\n                this.$cache.s_from.addClass(\"type_last\");\n            } else if (to < max) {\n                this.$cache.s_to.addClass(\"type_last\");\n            }\n        },\n\n        /**\r\n         * Determine which handles was clicked last\r\n         * and which handler should have hover effect\r\n         *\r\n         * @param target {String}\r\n         */\n        changeLevel: function changeLevel(target) {\n            switch (target) {\n                case \"single\":\n                    this.coords.p_gap = this.toFixed(this.coords.p_pointer - this.coords.p_single_fake);\n                    break;\n                case \"from\":\n                    this.coords.p_gap = this.toFixed(this.coords.p_pointer - this.coords.p_from_fake);\n                    this.$cache.s_from.addClass(\"state_hover\");\n                    this.$cache.s_from.addClass(\"type_last\");\n                    this.$cache.s_to.removeClass(\"type_last\");\n                    break;\n                case \"to\":\n                    this.coords.p_gap = this.toFixed(this.coords.p_pointer - this.coords.p_to_fake);\n                    this.$cache.s_to.addClass(\"state_hover\");\n                    this.$cache.s_to.addClass(\"type_last\");\n                    this.$cache.s_from.removeClass(\"type_last\");\n                    break;\n                case \"both\":\n                    this.coords.p_gap_left = this.toFixed(this.coords.p_pointer - this.coords.p_from_fake);\n                    this.coords.p_gap_right = this.toFixed(this.coords.p_to_fake - this.coords.p_pointer);\n                    this.$cache.s_to.removeClass(\"type_last\");\n                    this.$cache.s_from.removeClass(\"type_last\");\n                    break;\n            }\n        },\n\n        /**\r\n         * Then slider is disabled\r\n         * appends extra layer with opacity\r\n         */\n        appendDisableMask: function appendDisableMask() {\n            this.$cache.cont.append(disable_html);\n            this.$cache.cont.addClass(\"irs-disabled\");\n        },\n\n        /**\r\n         * Remove slider instance\r\n         * and ubind all events\r\n         */\n        remove: function remove() {\n            this.$cache.cont.remove();\n            this.$cache.cont = null;\n\n            this.$cache.line.off(\"keydown.irs_\" + this.plugin_count);\n\n            this.$cache.body.off(\"touchmove.irs_\" + this.plugin_count);\n            this.$cache.body.off(\"mousemove.irs_\" + this.plugin_count);\n\n            this.$cache.win.off(\"touchend.irs_\" + this.plugin_count);\n            this.$cache.win.off(\"mouseup.irs_\" + this.plugin_count);\n\n            if (is_old_ie) {\n                this.$cache.body.off(\"mouseup.irs_\" + this.plugin_count);\n                this.$cache.body.off(\"mouseleave.irs_\" + this.plugin_count);\n            }\n\n            this.$cache.grid_labels = [];\n            this.coords.big = [];\n            this.coords.big_w = [];\n            this.coords.big_p = [];\n            this.coords.big_x = [];\n\n            cancelAnimationFrame(this.raf_id);\n        },\n\n        /**\r\n         * bind all slider events\r\n         */\n        bindEvents: function bindEvents() {\n            if (this.no_diapason) {\n                return;\n            }\n\n            this.$cache.body.on(\"touchmove.irs_\" + this.plugin_count, this.pointerMove.bind(this));\n            this.$cache.body.on(\"mousemove.irs_\" + this.plugin_count, this.pointerMove.bind(this));\n\n            this.$cache.win.on(\"touchend.irs_\" + this.plugin_count, this.pointerUp.bind(this));\n            this.$cache.win.on(\"mouseup.irs_\" + this.plugin_count, this.pointerUp.bind(this));\n\n            this.$cache.line.on(\"touchstart.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\n            this.$cache.line.on(\"mousedown.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\n\n            if (this.options.drag_interval && this.options.type === \"double\") {\n                this.$cache.bar.on(\"touchstart.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"both\"));\n                this.$cache.bar.on(\"mousedown.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"both\"));\n            } else {\n                this.$cache.bar.on(\"touchstart.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\n                this.$cache.bar.on(\"mousedown.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\n            }\n\n            if (this.options.type === \"single\") {\n                this.$cache.single.on(\"touchstart.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"single\"));\n                this.$cache.s_single.on(\"touchstart.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"single\"));\n                this.$cache.shad_single.on(\"touchstart.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\n\n                this.$cache.single.on(\"mousedown.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"single\"));\n                this.$cache.s_single.on(\"mousedown.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"single\"));\n                this.$cache.edge.on(\"mousedown.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\n                this.$cache.shad_single.on(\"mousedown.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\n            } else {\n                this.$cache.single.on(\"touchstart.irs_\" + this.plugin_count, this.pointerDown.bind(this, null));\n                this.$cache.single.on(\"mousedown.irs_\" + this.plugin_count, this.pointerDown.bind(this, null));\n\n                this.$cache.from.on(\"touchstart.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"from\"));\n                this.$cache.s_from.on(\"touchstart.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"from\"));\n                this.$cache.to.on(\"touchstart.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"to\"));\n                this.$cache.s_to.on(\"touchstart.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"to\"));\n                this.$cache.shad_from.on(\"touchstart.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\n                this.$cache.shad_to.on(\"touchstart.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\n\n                this.$cache.from.on(\"mousedown.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"from\"));\n                this.$cache.s_from.on(\"mousedown.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"from\"));\n                this.$cache.to.on(\"mousedown.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"to\"));\n                this.$cache.s_to.on(\"mousedown.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"to\"));\n                this.$cache.shad_from.on(\"mousedown.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\n                this.$cache.shad_to.on(\"mousedown.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\n            }\n\n            if (this.options.keyboard) {\n                this.$cache.line.on(\"keydown.irs_\" + this.plugin_count, this.key.bind(this, \"keyboard\"));\n            }\n\n            if (is_old_ie) {\n                this.$cache.body.on(\"mouseup.irs_\" + this.plugin_count, this.pointerUp.bind(this));\n                this.$cache.body.on(\"mouseleave.irs_\" + this.plugin_count, this.pointerUp.bind(this));\n            }\n        },\n\n        /**\r\n         * Mousemove or touchmove\r\n         * only for handlers\r\n         *\r\n         * @param e {Object} event object\r\n         */\n        pointerMove: function pointerMove(e) {\n            if (!this.dragging) {\n                return;\n            }\n\n            var x = e.pageX || e.originalEvent.touches && e.originalEvent.touches[0].pageX;\n            this.coords.x_pointer = x - this.coords.x_gap;\n\n            this.calc();\n        },\n\n        /**\r\n         * Mouseup or touchend\r\n         * only for handlers\r\n         *\r\n         * @param e {Object} event object\r\n         */\n        pointerUp: function pointerUp(e) {\n            if (this.current_plugin !== this.plugin_count) {\n                return;\n            }\n\n            if (this.is_active) {\n                this.is_active = false;\n            } else {\n                return;\n            }\n\n            this.$cache.cont.find(\".state_hover\").removeClass(\"state_hover\");\n\n            this.force_redraw = true;\n\n            if (is_old_ie) {\n                $(\"*\").prop(\"unselectable\", false);\n            }\n\n            this.updateScene();\n            this.restoreOriginalMinInterval();\n\n            // callbacks call\n            if ($.contains(this.$cache.cont[0], e.target) || this.dragging) {\n                this.is_finish = true;\n                this.callOnFinish();\n            }\n\n            this.dragging = false;\n        },\n\n        /**\r\n         * Mousedown or touchstart\r\n         * only for handlers\r\n         *\r\n         * @param target {String|null}\r\n         * @param e {Object} event object\r\n         */\n        pointerDown: function pointerDown(target, e) {\n            e.preventDefault();\n            var x = e.pageX || e.originalEvent.touches && e.originalEvent.touches[0].pageX;\n            if (e.button === 2) {\n                return;\n            }\n\n            if (target === \"both\") {\n                this.setTempMinInterval();\n            }\n\n            if (!target) {\n                target = this.target;\n            }\n\n            this.current_plugin = this.plugin_count;\n            this.target = target;\n\n            this.is_active = true;\n            this.dragging = true;\n\n            this.coords.x_gap = this.$cache.rs.offset().left;\n            this.coords.x_pointer = x - this.coords.x_gap;\n\n            this.calcPointerPercent();\n            this.changeLevel(target);\n\n            if (is_old_ie) {\n                $(\"*\").prop(\"unselectable\", true);\n            }\n\n            this.$cache.line.trigger(\"focus\");\n\n            this.updateScene();\n        },\n\n        /**\r\n         * Mousedown or touchstart\r\n         * for other slider elements, like diapason line\r\n         *\r\n         * @param target {String}\r\n         * @param e {Object} event object\r\n         */\n        pointerClick: function pointerClick(target, e) {\n            e.preventDefault();\n            var x = e.pageX || e.originalEvent.touches && e.originalEvent.touches[0].pageX;\n            if (e.button === 2) {\n                return;\n            }\n\n            this.current_plugin = this.plugin_count;\n            this.target = target;\n\n            this.is_click = true;\n            this.coords.x_gap = this.$cache.rs.offset().left;\n            this.coords.x_pointer = +(x - this.coords.x_gap).toFixed();\n\n            this.force_redraw = true;\n            this.calc();\n\n            this.$cache.line.trigger(\"focus\");\n        },\n\n        /**\r\n         * Keyborard controls for focused slider\r\n         *\r\n         * @param target {String}\r\n         * @param e {Object} event object\r\n         * @returns {boolean|undefined}\r\n         */\n        key: function key(target, e) {\n            if (this.current_plugin !== this.plugin_count || e.altKey || e.ctrlKey || e.shiftKey || e.metaKey) {\n                return;\n            }\n\n            switch (e.which) {\n                case 83: // W\n                case 65: // A\n                case 40: // DOWN\n                case 37:\n                    // LEFT\n                    e.preventDefault();\n                    this.moveByKey(false);\n                    break;\n\n                case 87: // S\n                case 68: // D\n                case 38: // UP\n                case 39:\n                    // RIGHT\n                    e.preventDefault();\n                    this.moveByKey(true);\n                    break;\n            }\n\n            return true;\n        },\n\n        /**\r\n         * Move by key. Beta\r\n         * @todo refactor than have plenty of time\r\n         *\r\n         * @param right {boolean} direction to move\r\n         */\n        moveByKey: function moveByKey(right) {\n            var p = this.coords.p_pointer;\n\n            if (right) {\n                p += this.options.keyboard_step;\n            } else {\n                p -= this.options.keyboard_step;\n            }\n\n            this.coords.x_pointer = this.toFixed(this.coords.w_rs / 100 * p);\n            this.is_key = true;\n            this.calc();\n        },\n\n        /**\r\n         * Set visibility and content\r\n         * of Min and Max labels\r\n         */\n        setMinMax: function setMinMax() {\n            if (!this.options) {\n                return;\n            }\n\n            if (this.options.hide_min_max) {\n                this.$cache.min[0].style.display = \"none\";\n                this.$cache.max[0].style.display = \"none\";\n                return;\n            }\n\n            if (this.options.values.length) {\n                this.$cache.min.html(this.decorate(this.options.p_values[this.options.min]));\n                this.$cache.max.html(this.decorate(this.options.p_values[this.options.max]));\n            } else {\n                this.$cache.min.html(this.decorate(this._prettify(this.options.min), this.options.min));\n                this.$cache.max.html(this.decorate(this._prettify(this.options.max), this.options.max));\n            }\n\n            this.labels.w_min = this.$cache.min.outerWidth(false);\n            this.labels.w_max = this.$cache.max.outerWidth(false);\n        },\n\n        /**\r\n         * Then dragging interval, prevent interval collapsing\r\n         * using min_interval option\r\n         */\n        setTempMinInterval: function setTempMinInterval() {\n            var interval = this.result.to - this.result.from;\n\n            if (this.old_min_interval === null) {\n                this.old_min_interval = this.options.min_interval;\n            }\n\n            this.options.min_interval = interval;\n        },\n\n        /**\r\n         * Restore min_interval option to original\r\n         */\n        restoreOriginalMinInterval: function restoreOriginalMinInterval() {\n            if (this.old_min_interval !== null) {\n                this.options.min_interval = this.old_min_interval;\n                this.old_min_interval = null;\n            }\n        },\n\n        // =============================================================================================================\n        // Calculations\n\n        /**\r\n         * All calculations and measures start here\r\n         *\r\n         * @param update {boolean=}\r\n         */\n        calc: function calc(update) {\n            if (!this.options) {\n                return;\n            }\n\n            this.calc_count++;\n\n            if (this.calc_count === 10 || update) {\n                this.calc_count = 0;\n                this.coords.w_rs = this.$cache.rs.outerWidth(false);\n\n                this.calcHandlePercent();\n            }\n\n            if (!this.coords.w_rs) {\n                return;\n            }\n\n            this.calcPointerPercent();\n            var handle_x = this.getHandleX();\n\n            if (this.target === \"click\") {\n                this.coords.p_gap = this.coords.p_handle / 2;\n                handle_x = this.getHandleX();\n\n                if (this.options.drag_interval) {\n                    this.target = \"both_one\";\n                } else {\n                    this.target = this.chooseHandle(handle_x);\n                }\n            }\n\n            switch (this.target) {\n                case \"base\":\n                    var w = (this.options.max - this.options.min) / 100,\n                        f = (this.result.from - this.options.min) / w,\n                        t = (this.result.to - this.options.min) / w;\n\n                    this.coords.p_single_real = this.toFixed(f);\n                    this.coords.p_from_real = this.toFixed(f);\n                    this.coords.p_to_real = this.toFixed(t);\n\n                    this.coords.p_single_real = this.checkDiapason(this.coords.p_single_real, this.options.from_min, this.options.from_max);\n                    this.coords.p_from_real = this.checkDiapason(this.coords.p_from_real, this.options.from_min, this.options.from_max);\n                    this.coords.p_to_real = this.checkDiapason(this.coords.p_to_real, this.options.to_min, this.options.to_max);\n\n                    this.coords.p_single_fake = this.convertToFakePercent(this.coords.p_single_real);\n                    this.coords.p_from_fake = this.convertToFakePercent(this.coords.p_from_real);\n                    this.coords.p_to_fake = this.convertToFakePercent(this.coords.p_to_real);\n\n                    this.target = null;\n\n                    break;\n\n                case \"single\":\n                    if (this.options.from_fixed) {\n                        break;\n                    }\n\n                    this.coords.p_single_real = this.convertToRealPercent(handle_x);\n                    this.coords.p_single_real = this.calcWithStep(this.coords.p_single_real);\n                    this.coords.p_single_real = this.checkDiapason(this.coords.p_single_real, this.options.from_min, this.options.from_max);\n\n                    this.coords.p_single_fake = this.convertToFakePercent(this.coords.p_single_real);\n\n                    break;\n\n                case \"from\":\n                    if (this.options.from_fixed) {\n                        break;\n                    }\n\n                    this.coords.p_from_real = this.convertToRealPercent(handle_x);\n                    this.coords.p_from_real = this.calcWithStep(this.coords.p_from_real);\n                    if (this.coords.p_from_real > this.coords.p_to_real) {\n                        this.coords.p_from_real = this.coords.p_to_real;\n                    }\n                    this.coords.p_from_real = this.checkDiapason(this.coords.p_from_real, this.options.from_min, this.options.from_max);\n                    this.coords.p_from_real = this.checkMinInterval(this.coords.p_from_real, this.coords.p_to_real, \"from\");\n                    this.coords.p_from_real = this.checkMaxInterval(this.coords.p_from_real, this.coords.p_to_real, \"from\");\n\n                    this.coords.p_from_fake = this.convertToFakePercent(this.coords.p_from_real);\n\n                    break;\n\n                case \"to\":\n                    if (this.options.to_fixed) {\n                        break;\n                    }\n\n                    this.coords.p_to_real = this.convertToRealPercent(handle_x);\n                    this.coords.p_to_real = this.calcWithStep(this.coords.p_to_real);\n                    if (this.coords.p_to_real < this.coords.p_from_real) {\n                        this.coords.p_to_real = this.coords.p_from_real;\n                    }\n                    this.coords.p_to_real = this.checkDiapason(this.coords.p_to_real, this.options.to_min, this.options.to_max);\n                    this.coords.p_to_real = this.checkMinInterval(this.coords.p_to_real, this.coords.p_from_real, \"to\");\n                    this.coords.p_to_real = this.checkMaxInterval(this.coords.p_to_real, this.coords.p_from_real, \"to\");\n\n                    this.coords.p_to_fake = this.convertToFakePercent(this.coords.p_to_real);\n\n                    break;\n\n                case \"both\":\n                    if (this.options.from_fixed || this.options.to_fixed) {\n                        break;\n                    }\n\n                    handle_x = this.toFixed(handle_x + this.coords.p_handle * 0.1);\n\n                    this.coords.p_from_real = this.convertToRealPercent(handle_x) - this.coords.p_gap_left;\n                    this.coords.p_from_real = this.calcWithStep(this.coords.p_from_real);\n                    this.coords.p_from_real = this.checkDiapason(this.coords.p_from_real, this.options.from_min, this.options.from_max);\n                    this.coords.p_from_real = this.checkMinInterval(this.coords.p_from_real, this.coords.p_to_real, \"from\");\n                    this.coords.p_from_fake = this.convertToFakePercent(this.coords.p_from_real);\n\n                    this.coords.p_to_real = this.convertToRealPercent(handle_x) + this.coords.p_gap_right;\n                    this.coords.p_to_real = this.calcWithStep(this.coords.p_to_real);\n                    this.coords.p_to_real = this.checkDiapason(this.coords.p_to_real, this.options.to_min, this.options.to_max);\n                    this.coords.p_to_real = this.checkMinInterval(this.coords.p_to_real, this.coords.p_from_real, \"to\");\n                    this.coords.p_to_fake = this.convertToFakePercent(this.coords.p_to_real);\n\n                    break;\n\n                case \"both_one\":\n                    if (this.options.from_fixed || this.options.to_fixed) {\n                        break;\n                    }\n\n                    var real_x = this.convertToRealPercent(handle_x),\n                        from = this.result.from_percent,\n                        to = this.result.to_percent,\n                        full = to - from,\n                        half = full / 2,\n                        new_from = real_x - half,\n                        new_to = real_x + half;\n\n                    if (new_from < 0) {\n                        new_from = 0;\n                        new_to = new_from + full;\n                    }\n\n                    if (new_to > 100) {\n                        new_to = 100;\n                        new_from = new_to - full;\n                    }\n\n                    this.coords.p_from_real = this.calcWithStep(new_from);\n                    this.coords.p_from_real = this.checkDiapason(this.coords.p_from_real, this.options.from_min, this.options.from_max);\n                    this.coords.p_from_fake = this.convertToFakePercent(this.coords.p_from_real);\n\n                    this.coords.p_to_real = this.calcWithStep(new_to);\n                    this.coords.p_to_real = this.checkDiapason(this.coords.p_to_real, this.options.to_min, this.options.to_max);\n                    this.coords.p_to_fake = this.convertToFakePercent(this.coords.p_to_real);\n\n                    break;\n            }\n\n            if (this.options.type === \"single\") {\n                this.coords.p_bar_x = this.coords.p_handle / 2;\n                this.coords.p_bar_w = this.coords.p_single_fake;\n\n                this.result.from_percent = this.coords.p_single_real;\n                this.result.from = this.convertToValue(this.coords.p_single_real);\n\n                if (this.options.values.length) {\n                    this.result.from_value = this.options.values[this.result.from];\n                }\n            } else {\n                this.coords.p_bar_x = this.toFixed(this.coords.p_from_fake + this.coords.p_handle / 2);\n                this.coords.p_bar_w = this.toFixed(this.coords.p_to_fake - this.coords.p_from_fake);\n\n                this.result.from_percent = this.coords.p_from_real;\n                this.result.from = this.convertToValue(this.coords.p_from_real);\n                this.result.to_percent = this.coords.p_to_real;\n                this.result.to = this.convertToValue(this.coords.p_to_real);\n\n                if (this.options.values.length) {\n                    this.result.from_value = this.options.values[this.result.from];\n                    this.result.to_value = this.options.values[this.result.to];\n                }\n            }\n\n            this.calcMinMax();\n            this.calcLabels();\n        },\n\n        /**\r\n         * calculates pointer X in percent\r\n         */\n        calcPointerPercent: function calcPointerPercent() {\n            if (!this.coords.w_rs) {\n                this.coords.p_pointer = 0;\n                return;\n            }\n\n            if (this.coords.x_pointer < 0 || isNaN(this.coords.x_pointer)) {\n                this.coords.x_pointer = 0;\n            } else if (this.coords.x_pointer > this.coords.w_rs) {\n                this.coords.x_pointer = this.coords.w_rs;\n            }\n\n            this.coords.p_pointer = this.toFixed(this.coords.x_pointer / this.coords.w_rs * 100);\n        },\n\n        convertToRealPercent: function convertToRealPercent(fake) {\n            var full = 100 - this.coords.p_handle;\n            return fake / full * 100;\n        },\n\n        convertToFakePercent: function convertToFakePercent(real) {\n            var full = 100 - this.coords.p_handle;\n            return real / 100 * full;\n        },\n\n        getHandleX: function getHandleX() {\n            var max = 100 - this.coords.p_handle,\n                x = this.toFixed(this.coords.p_pointer - this.coords.p_gap);\n\n            if (x < 0) {\n                x = 0;\n            } else if (x > max) {\n                x = max;\n            }\n\n            return x;\n        },\n\n        calcHandlePercent: function calcHandlePercent() {\n            if (this.options.type === \"single\") {\n                this.coords.w_handle = this.$cache.s_single.outerWidth(false);\n            } else {\n                this.coords.w_handle = this.$cache.s_from.outerWidth(false);\n            }\n\n            this.coords.p_handle = this.toFixed(this.coords.w_handle / this.coords.w_rs * 100);\n        },\n\n        /**\r\n         * Find closest handle to pointer click\r\n         *\r\n         * @param real_x {Number}\r\n         * @returns {String}\r\n         */\n        chooseHandle: function chooseHandle(real_x) {\n            if (this.options.type === \"single\") {\n                return \"single\";\n            } else {\n                var m_point = this.coords.p_from_real + (this.coords.p_to_real - this.coords.p_from_real) / 2;\n                if (real_x >= m_point) {\n                    return this.options.to_fixed ? \"from\" : \"to\";\n                } else {\n                    return this.options.from_fixed ? \"to\" : \"from\";\n                }\n            }\n        },\n\n        /**\r\n         * Measure Min and Max labels width in percent\r\n         */\n        calcMinMax: function calcMinMax() {\n            if (!this.coords.w_rs) {\n                return;\n            }\n\n            this.labels.p_min = this.labels.w_min / this.coords.w_rs * 100;\n            this.labels.p_max = this.labels.w_max / this.coords.w_rs * 100;\n        },\n\n        /**\r\n         * Measure labels width and X in percent\r\n         */\n        calcLabels: function calcLabels() {\n            if (!this.coords.w_rs || this.options.hide_from_to) {\n                return;\n            }\n\n            if (this.options.type === \"single\") {\n\n                this.labels.w_single = this.$cache.single.outerWidth(false);\n                this.labels.p_single_fake = this.labels.w_single / this.coords.w_rs * 100;\n                this.labels.p_single_left = this.coords.p_single_fake + this.coords.p_handle / 2 - this.labels.p_single_fake / 2;\n                this.labels.p_single_left = this.checkEdges(this.labels.p_single_left, this.labels.p_single_fake);\n            } else {\n\n                this.labels.w_from = this.$cache.from.outerWidth(false);\n                this.labels.p_from_fake = this.labels.w_from / this.coords.w_rs * 100;\n                this.labels.p_from_left = this.coords.p_from_fake + this.coords.p_handle / 2 - this.labels.p_from_fake / 2;\n                this.labels.p_from_left = this.toFixed(this.labels.p_from_left);\n                this.labels.p_from_left = this.checkEdges(this.labels.p_from_left, this.labels.p_from_fake);\n\n                this.labels.w_to = this.$cache.to.outerWidth(false);\n                this.labels.p_to_fake = this.labels.w_to / this.coords.w_rs * 100;\n                this.labels.p_to_left = this.coords.p_to_fake + this.coords.p_handle / 2 - this.labels.p_to_fake / 2;\n                this.labels.p_to_left = this.toFixed(this.labels.p_to_left);\n                this.labels.p_to_left = this.checkEdges(this.labels.p_to_left, this.labels.p_to_fake);\n\n                this.labels.w_single = this.$cache.single.outerWidth(false);\n                this.labels.p_single_fake = this.labels.w_single / this.coords.w_rs * 100;\n                this.labels.p_single_left = (this.labels.p_from_left + this.labels.p_to_left + this.labels.p_to_fake) / 2 - this.labels.p_single_fake / 2;\n                this.labels.p_single_left = this.toFixed(this.labels.p_single_left);\n                this.labels.p_single_left = this.checkEdges(this.labels.p_single_left, this.labels.p_single_fake);\n            }\n        },\n\n        // =============================================================================================================\n        // Drawings\n\n        /**\r\n         * Main function called in request animation frame\r\n         * to update everything\r\n         */\n        updateScene: function updateScene() {\n            if (this.raf_id) {\n                cancelAnimationFrame(this.raf_id);\n                this.raf_id = null;\n            }\n\n            clearTimeout(this.update_tm);\n            this.update_tm = null;\n\n            if (!this.options) {\n                return;\n            }\n\n            this.drawHandles();\n\n            if (this.is_active) {\n                this.raf_id = requestAnimationFrame(this.updateScene.bind(this));\n            } else {\n                this.update_tm = setTimeout(this.updateScene.bind(this), 300);\n            }\n        },\n\n        /**\r\n         * Draw handles\r\n         */\n        drawHandles: function drawHandles() {\n            this.coords.w_rs = this.$cache.rs.outerWidth(false);\n\n            if (!this.coords.w_rs) {\n                return;\n            }\n\n            if (this.coords.w_rs !== this.coords.w_rs_old) {\n                this.target = \"base\";\n                this.is_resize = true;\n            }\n\n            if (this.coords.w_rs !== this.coords.w_rs_old || this.force_redraw) {\n                this.setMinMax();\n                this.calc(true);\n                this.drawLabels();\n                if (this.options.grid) {\n                    this.calcGridMargin();\n                    this.calcGridLabels();\n                }\n                this.force_redraw = true;\n                this.coords.w_rs_old = this.coords.w_rs;\n                this.drawShadow();\n            }\n\n            if (!this.coords.w_rs) {\n                return;\n            }\n\n            if (!this.dragging && !this.force_redraw && !this.is_key) {\n                return;\n            }\n\n            if (this.old_from !== this.result.from || this.old_to !== this.result.to || this.force_redraw || this.is_key) {\n\n                this.drawLabels();\n\n                this.$cache.bar[0].style.left = this.coords.p_bar_x + \"%\";\n                this.$cache.bar[0].style.width = this.coords.p_bar_w + \"%\";\n\n                if (this.options.type === \"single\") {\n                    this.$cache.s_single[0].style.left = this.coords.p_single_fake + \"%\";\n\n                    this.$cache.single[0].style.left = this.labels.p_single_left + \"%\";\n\n                    if (this.options.values.length) {\n                        this.$cache.input.prop(\"value\", this.result.from_value);\n                    } else {\n                        this.$cache.input.prop(\"value\", this.result.from);\n                    }\n                    this.$cache.input.data(\"from\", this.result.from);\n                } else {\n                    this.$cache.s_from[0].style.left = this.coords.p_from_fake + \"%\";\n                    this.$cache.s_to[0].style.left = this.coords.p_to_fake + \"%\";\n\n                    if (this.old_from !== this.result.from || this.force_redraw) {\n                        this.$cache.from[0].style.left = this.labels.p_from_left + \"%\";\n                    }\n                    if (this.old_to !== this.result.to || this.force_redraw) {\n                        this.$cache.to[0].style.left = this.labels.p_to_left + \"%\";\n                    }\n\n                    this.$cache.single[0].style.left = this.labels.p_single_left + \"%\";\n\n                    if (this.options.values.length) {\n                        this.$cache.input.prop(\"value\", this.result.from_value + this.options.input_values_separator + this.result.to_value);\n                    } else {\n                        this.$cache.input.prop(\"value\", this.result.from + this.options.input_values_separator + this.result.to);\n                    }\n                    this.$cache.input.data(\"from\", this.result.from);\n                    this.$cache.input.data(\"to\", this.result.to);\n                }\n\n                if ((this.old_from !== this.result.from || this.old_to !== this.result.to) && !this.is_start) {\n                    this.$cache.input.trigger(\"change\");\n                }\n\n                this.old_from = this.result.from;\n                this.old_to = this.result.to;\n\n                // callbacks call\n                if (!this.is_resize && !this.is_update && !this.is_start && !this.is_finish) {\n                    this.callOnChange();\n                }\n                if (this.is_key || this.is_click) {\n                    this.is_key = false;\n                    this.is_click = false;\n                    this.callOnFinish();\n                }\n\n                this.is_update = false;\n                this.is_resize = false;\n                this.is_finish = false;\n            }\n\n            this.is_start = false;\n            this.is_key = false;\n            this.is_click = false;\n            this.force_redraw = false;\n        },\n\n        /**\r\n         * Draw labels\r\n         * measure labels collisions\r\n         * collapse close labels\r\n         */\n        drawLabels: function drawLabels() {\n            if (!this.options) {\n                return;\n            }\n\n            var values_num = this.options.values.length,\n                p_values = this.options.p_values,\n                text_single,\n                text_from,\n                text_to;\n\n            if (this.options.hide_from_to) {\n                return;\n            }\n\n            if (this.options.type === \"single\") {\n\n                if (values_num) {\n                    text_single = this.decorate(p_values[this.result.from]);\n                    this.$cache.single.html(text_single);\n                } else {\n                    text_single = this.decorate(this._prettify(this.result.from), this.result.from);\n                    this.$cache.single.html(text_single);\n                }\n\n                this.calcLabels();\n\n                if (this.labels.p_single_left < this.labels.p_min + 1) {\n                    this.$cache.min[0].style.visibility = \"hidden\";\n                } else {\n                    this.$cache.min[0].style.visibility = \"visible\";\n                }\n\n                if (this.labels.p_single_left + this.labels.p_single_fake > 100 - this.labels.p_max - 1) {\n                    this.$cache.max[0].style.visibility = \"hidden\";\n                } else {\n                    this.$cache.max[0].style.visibility = \"visible\";\n                }\n            } else {\n\n                if (values_num) {\n\n                    if (this.options.decorate_both) {\n                        text_single = this.decorate(p_values[this.result.from]);\n                        text_single += this.options.values_separator;\n                        text_single += this.decorate(p_values[this.result.to]);\n                    } else {\n                        text_single = this.decorate(p_values[this.result.from] + this.options.values_separator + p_values[this.result.to]);\n                    }\n                    text_from = this.decorate(p_values[this.result.from]);\n                    text_to = this.decorate(p_values[this.result.to]);\n\n                    this.$cache.single.html(text_single);\n                    this.$cache.from.html(text_from);\n                    this.$cache.to.html(text_to);\n                } else {\n\n                    if (this.options.decorate_both) {\n                        text_single = this.decorate(this._prettify(this.result.from), this.result.from);\n                        text_single += this.options.values_separator;\n                        text_single += this.decorate(this._prettify(this.result.to), this.result.to);\n                    } else {\n                        text_single = this.decorate(this._prettify(this.result.from) + this.options.values_separator + this._prettify(this.result.to), this.result.to);\n                    }\n                    text_from = this.decorate(this._prettify(this.result.from), this.result.from);\n                    text_to = this.decorate(this._prettify(this.result.to), this.result.to);\n\n                    this.$cache.single.html(text_single);\n                    this.$cache.from.html(text_from);\n                    this.$cache.to.html(text_to);\n                }\n\n                this.calcLabels();\n\n                var min = Math.min(this.labels.p_single_left, this.labels.p_from_left),\n                    single_left = this.labels.p_single_left + this.labels.p_single_fake,\n                    to_left = this.labels.p_to_left + this.labels.p_to_fake,\n                    max = Math.max(single_left, to_left);\n\n                if (this.labels.p_from_left + this.labels.p_from_fake >= this.labels.p_to_left) {\n                    this.$cache.from[0].style.visibility = \"hidden\";\n                    this.$cache.to[0].style.visibility = \"hidden\";\n                    this.$cache.single[0].style.visibility = \"visible\";\n\n                    if (this.result.from === this.result.to) {\n                        if (this.target === \"from\") {\n                            this.$cache.from[0].style.visibility = \"visible\";\n                        } else if (this.target === \"to\") {\n                            this.$cache.to[0].style.visibility = \"visible\";\n                        }\n                        this.$cache.single[0].style.visibility = \"hidden\";\n                        max = to_left;\n                    } else {\n                        this.$cache.from[0].style.visibility = \"hidden\";\n                        this.$cache.to[0].style.visibility = \"hidden\";\n                        this.$cache.single[0].style.visibility = \"visible\";\n                        max = Math.max(single_left, to_left);\n                    }\n                } else {\n                    this.$cache.from[0].style.visibility = \"visible\";\n                    this.$cache.to[0].style.visibility = \"visible\";\n                    this.$cache.single[0].style.visibility = \"hidden\";\n                }\n\n                if (min < this.labels.p_min + 1) {\n                    this.$cache.min[0].style.visibility = \"hidden\";\n                } else {\n                    this.$cache.min[0].style.visibility = \"visible\";\n                }\n\n                if (max > 100 - this.labels.p_max - 1) {\n                    this.$cache.max[0].style.visibility = \"hidden\";\n                } else {\n                    this.$cache.max[0].style.visibility = \"visible\";\n                }\n            }\n        },\n\n        /**\r\n         * Draw shadow intervals\r\n         */\n        drawShadow: function drawShadow() {\n            var o = this.options,\n                c = this.$cache,\n                is_from_min = typeof o.from_min === \"number\" && !isNaN(o.from_min),\n                is_from_max = typeof o.from_max === \"number\" && !isNaN(o.from_max),\n                is_to_min = typeof o.to_min === \"number\" && !isNaN(o.to_min),\n                is_to_max = typeof o.to_max === \"number\" && !isNaN(o.to_max),\n                from_min,\n                from_max,\n                to_min,\n                to_max;\n\n            if (o.type === \"single\") {\n                if (o.from_shadow && (is_from_min || is_from_max)) {\n                    from_min = this.convertToPercent(is_from_min ? o.from_min : o.min);\n                    from_max = this.convertToPercent(is_from_max ? o.from_max : o.max) - from_min;\n                    from_min = this.toFixed(from_min - this.coords.p_handle / 100 * from_min);\n                    from_max = this.toFixed(from_max - this.coords.p_handle / 100 * from_max);\n                    from_min = from_min + this.coords.p_handle / 2;\n\n                    c.shad_single[0].style.display = \"block\";\n                    c.shad_single[0].style.left = from_min + \"%\";\n                    c.shad_single[0].style.width = from_max + \"%\";\n                } else {\n                    c.shad_single[0].style.display = \"none\";\n                }\n            } else {\n                if (o.from_shadow && (is_from_min || is_from_max)) {\n                    from_min = this.convertToPercent(is_from_min ? o.from_min : o.min);\n                    from_max = this.convertToPercent(is_from_max ? o.from_max : o.max) - from_min;\n                    from_min = this.toFixed(from_min - this.coords.p_handle / 100 * from_min);\n                    from_max = this.toFixed(from_max - this.coords.p_handle / 100 * from_max);\n                    from_min = from_min + this.coords.p_handle / 2;\n\n                    c.shad_from[0].style.display = \"block\";\n                    c.shad_from[0].style.left = from_min + \"%\";\n                    c.shad_from[0].style.width = from_max + \"%\";\n                } else {\n                    c.shad_from[0].style.display = \"none\";\n                }\n\n                if (o.to_shadow && (is_to_min || is_to_max)) {\n                    to_min = this.convertToPercent(is_to_min ? o.to_min : o.min);\n                    to_max = this.convertToPercent(is_to_max ? o.to_max : o.max) - to_min;\n                    to_min = this.toFixed(to_min - this.coords.p_handle / 100 * to_min);\n                    to_max = this.toFixed(to_max - this.coords.p_handle / 100 * to_max);\n                    to_min = to_min + this.coords.p_handle / 2;\n\n                    c.shad_to[0].style.display = \"block\";\n                    c.shad_to[0].style.left = to_min + \"%\";\n                    c.shad_to[0].style.width = to_max + \"%\";\n                } else {\n                    c.shad_to[0].style.display = \"none\";\n                }\n            }\n        },\n\n        // =============================================================================================================\n        // Callbacks\n\n        callOnStart: function callOnStart() {\n            if (this.options.onStart && typeof this.options.onStart === \"function\") {\n                this.options.onStart(this.result);\n            }\n        },\n        callOnChange: function callOnChange() {\n            if (this.options.onChange && typeof this.options.onChange === \"function\") {\n                this.options.onChange(this.result);\n            }\n        },\n        callOnFinish: function callOnFinish() {\n            if (this.options.onFinish && typeof this.options.onFinish === \"function\") {\n                this.options.onFinish(this.result);\n            }\n        },\n        callOnUpdate: function callOnUpdate() {\n            if (this.options.onUpdate && typeof this.options.onUpdate === \"function\") {\n                this.options.onUpdate(this.result);\n            }\n        },\n\n        // =============================================================================================================\n        // Service methods\n\n        toggleInput: function toggleInput() {\n            this.$cache.input.toggleClass(\"irs-hidden-input\");\n        },\n\n        /**\r\n         * Convert real value to percent\r\n         *\r\n         * @param value {Number} X in real\r\n         * @param no_min {boolean=} don't use min value\r\n         * @returns {Number} X in percent\r\n         */\n        convertToPercent: function convertToPercent(value, no_min) {\n            var diapason = this.options.max - this.options.min,\n                one_percent = diapason / 100,\n                val,\n                percent;\n\n            if (!diapason) {\n                this.no_diapason = true;\n                return 0;\n            }\n\n            if (no_min) {\n                val = value;\n            } else {\n                val = value - this.options.min;\n            }\n\n            percent = val / one_percent;\n\n            return this.toFixed(percent);\n        },\n\n        /**\r\n         * Convert percent to real values\r\n         *\r\n         * @param percent {Number} X in percent\r\n         * @returns {Number} X in real\r\n         */\n        convertToValue: function convertToValue(percent) {\n            var min = this.options.min,\n                max = this.options.max,\n                min_decimals = min.toString().split(\".\")[1],\n                max_decimals = max.toString().split(\".\")[1],\n                min_length,\n                max_length,\n                avg_decimals = 0,\n                abs = 0;\n\n            if (percent === 0) {\n                return this.options.min;\n            }\n            if (percent === 100) {\n                return this.options.max;\n            }\n\n            if (min_decimals) {\n                min_length = min_decimals.length;\n                avg_decimals = min_length;\n            }\n            if (max_decimals) {\n                max_length = max_decimals.length;\n                avg_decimals = max_length;\n            }\n            if (min_length && max_length) {\n                avg_decimals = min_length >= max_length ? min_length : max_length;\n            }\n\n            if (min < 0) {\n                abs = Math.abs(min);\n                min = +(min + abs).toFixed(avg_decimals);\n                max = +(max + abs).toFixed(avg_decimals);\n            }\n\n            var number = (max - min) / 100 * percent + min,\n                string = this.options.step.toString().split(\".\")[1],\n                result;\n\n            if (string) {\n                number = +number.toFixed(string.length);\n            } else {\n                number = number / this.options.step;\n                number = number * this.options.step;\n\n                number = +number.toFixed(0);\n            }\n\n            if (abs) {\n                number -= abs;\n            }\n\n            if (string) {\n                result = +number.toFixed(string.length);\n            } else {\n                result = this.toFixed(number);\n            }\n\n            if (result < this.options.min) {\n                result = this.options.min;\n            } else if (result > this.options.max) {\n                result = this.options.max;\n            }\n\n            return result;\n        },\n\n        /**\r\n         * Round percent value with step\r\n         *\r\n         * @param percent {Number}\r\n         * @returns percent {Number} rounded\r\n         */\n        calcWithStep: function calcWithStep(percent) {\n            var rounded = Math.round(percent / this.coords.p_step) * this.coords.p_step;\n\n            if (rounded > 100) {\n                rounded = 100;\n            }\n            if (percent === 100) {\n                rounded = 100;\n            }\n\n            return this.toFixed(rounded);\n        },\n\n        checkMinInterval: function checkMinInterval(p_current, p_next, type) {\n            var o = this.options,\n                current,\n                next;\n\n            if (!o.min_interval) {\n                return p_current;\n            }\n\n            current = this.convertToValue(p_current);\n            next = this.convertToValue(p_next);\n\n            if (type === \"from\") {\n\n                if (next - current < o.min_interval) {\n                    current = next - o.min_interval;\n                }\n            } else {\n\n                if (current - next < o.min_interval) {\n                    current = next + o.min_interval;\n                }\n            }\n\n            return this.convertToPercent(current);\n        },\n\n        checkMaxInterval: function checkMaxInterval(p_current, p_next, type) {\n            var o = this.options,\n                current,\n                next;\n\n            if (!o.max_interval) {\n                return p_current;\n            }\n\n            current = this.convertToValue(p_current);\n            next = this.convertToValue(p_next);\n\n            if (type === \"from\") {\n\n                if (next - current > o.max_interval) {\n                    current = next - o.max_interval;\n                }\n            } else {\n\n                if (current - next > o.max_interval) {\n                    current = next + o.max_interval;\n                }\n            }\n\n            return this.convertToPercent(current);\n        },\n\n        checkDiapason: function checkDiapason(p_num, min, max) {\n            var num = this.convertToValue(p_num),\n                o = this.options;\n\n            if (typeof min !== \"number\") {\n                min = o.min;\n            }\n\n            if (typeof max !== \"number\") {\n                max = o.max;\n            }\n\n            if (num < min) {\n                num = min;\n            }\n\n            if (num > max) {\n                num = max;\n            }\n\n            return this.convertToPercent(num);\n        },\n\n        toFixed: function toFixed(num) {\n            num = num.toFixed(9);\n            return +num;\n        },\n\n        _prettify: function _prettify(num) {\n            if (!this.options.prettify_enabled) {\n                return num;\n            }\n\n            if (this.options.prettify && typeof this.options.prettify === \"function\") {\n                return this.options.prettify(num);\n            } else {\n                return this.prettify(num);\n            }\n        },\n\n        prettify: function prettify(num) {\n            var n = num.toString();\n            return n.replace(/(\\d{1,3}(?=(?:\\d\\d\\d)+(?!\\d)))/g, \"$1\" + this.options.prettify_separator);\n        },\n\n        checkEdges: function checkEdges(left, width) {\n            if (!this.options.force_edges) {\n                return this.toFixed(left);\n            }\n\n            if (left < 0) {\n                left = 0;\n            } else if (left > 100 - width) {\n                left = 100 - width;\n            }\n\n            return this.toFixed(left);\n        },\n\n        validate: function validate() {\n            var o = this.options,\n                r = this.result,\n                v = o.values,\n                vl = v.length,\n                value,\n                i;\n\n            if (typeof o.min === \"string\") o.min = +o.min;\n            if (typeof o.max === \"string\") o.max = +o.max;\n            if (typeof o.from === \"string\") o.from = +o.from;\n            if (typeof o.to === \"string\") o.to = +o.to;\n            if (typeof o.step === \"string\") o.step = +o.step;\n\n            if (typeof o.from_min === \"string\") o.from_min = +o.from_min;\n            if (typeof o.from_max === \"string\") o.from_max = +o.from_max;\n            if (typeof o.to_min === \"string\") o.to_min = +o.to_min;\n            if (typeof o.to_max === \"string\") o.to_max = +o.to_max;\n\n            if (typeof o.keyboard_step === \"string\") o.keyboard_step = +o.keyboard_step;\n            if (typeof o.grid_num === \"string\") o.grid_num = +o.grid_num;\n\n            if (o.max < o.min) {\n                o.max = o.min;\n            }\n\n            if (vl) {\n                o.p_values = [];\n                o.min = 0;\n                o.max = vl - 1;\n                o.step = 1;\n                o.grid_num = o.max;\n                o.grid_snap = true;\n\n                for (i = 0; i < vl; i++) {\n                    value = +v[i];\n\n                    if (!isNaN(value)) {\n                        v[i] = value;\n                        value = this._prettify(value);\n                    } else {\n                        value = v[i];\n                    }\n\n                    o.p_values.push(value);\n                }\n            }\n\n            if (typeof o.from !== \"number\" || isNaN(o.from)) {\n                o.from = o.min;\n            }\n\n            if (typeof o.to !== \"number\" || isNaN(o.from)) {\n                o.to = o.max;\n            }\n\n            if (o.type === \"single\") {\n\n                if (o.from < o.min) {\n                    o.from = o.min;\n                }\n\n                if (o.from > o.max) {\n                    o.from = o.max;\n                }\n            } else {\n\n                if (o.from < o.min || o.from > o.max) {\n                    o.from = o.min;\n                }\n                if (o.to > o.max || o.to < o.min) {\n                    o.to = o.max;\n                }\n                if (o.from > o.to) {\n                    o.from = o.to;\n                }\n            }\n\n            if (typeof o.step !== \"number\" || isNaN(o.step) || !o.step || o.step < 0) {\n                o.step = 1;\n            }\n\n            if (typeof o.keyboard_step !== \"number\" || isNaN(o.keyboard_step) || !o.keyboard_step || o.keyboard_step < 0) {\n                o.keyboard_step = 5;\n            }\n\n            if (typeof o.from_min === \"number\" && o.from < o.from_min) {\n                o.from = o.from_min;\n            }\n\n            if (typeof o.from_max === \"number\" && o.from > o.from_max) {\n                o.from = o.from_max;\n            }\n\n            if (typeof o.to_min === \"number\" && o.to < o.to_min) {\n                o.to = o.to_min;\n            }\n\n            if (typeof o.to_max === \"number\" && o.from > o.to_max) {\n                o.to = o.to_max;\n            }\n\n            if (r) {\n                if (r.min !== o.min) {\n                    r.min = o.min;\n                }\n\n                if (r.max !== o.max) {\n                    r.max = o.max;\n                }\n\n                if (r.from < r.min || r.from > r.max) {\n                    r.from = o.from;\n                }\n\n                if (r.to < r.min || r.to > r.max) {\n                    r.to = o.to;\n                }\n            }\n\n            if (typeof o.min_interval !== \"number\" || isNaN(o.min_interval) || !o.min_interval || o.min_interval < 0) {\n                o.min_interval = 0;\n            }\n\n            if (typeof o.max_interval !== \"number\" || isNaN(o.max_interval) || !o.max_interval || o.max_interval < 0) {\n                o.max_interval = 0;\n            }\n\n            if (o.min_interval && o.min_interval > o.max - o.min) {\n                o.min_interval = o.max - o.min;\n            }\n\n            if (o.max_interval && o.max_interval > o.max - o.min) {\n                o.max_interval = o.max - o.min;\n            }\n        },\n\n        decorate: function decorate(num, original) {\n            var decorated = \"\",\n                o = this.options;\n\n            if (o.prefix) {\n                decorated += o.prefix;\n            }\n\n            decorated += num;\n\n            if (o.max_postfix) {\n                if (o.values.length && num === o.p_values[o.max]) {\n                    decorated += o.max_postfix;\n                    if (o.postfix) {\n                        decorated += \" \";\n                    }\n                } else if (original === o.max) {\n                    decorated += o.max_postfix;\n                    if (o.postfix) {\n                        decorated += \" \";\n                    }\n                }\n            }\n\n            if (o.postfix) {\n                decorated += o.postfix;\n            }\n\n            return decorated;\n        },\n\n        updateFrom: function updateFrom() {\n            this.result.from = this.options.from;\n            this.result.from_percent = this.convertToPercent(this.result.from);\n            if (this.options.values) {\n                this.result.from_value = this.options.values[this.result.from];\n            }\n        },\n\n        updateTo: function updateTo() {\n            this.result.to = this.options.to;\n            this.result.to_percent = this.convertToPercent(this.result.to);\n            if (this.options.values) {\n                this.result.to_value = this.options.values[this.result.to];\n            }\n        },\n\n        updateResult: function updateResult() {\n            this.result.min = this.options.min;\n            this.result.max = this.options.max;\n            this.updateFrom();\n            this.updateTo();\n        },\n\n        // =============================================================================================================\n        // Grid\n\n        appendGrid: function appendGrid() {\n            if (!this.options.grid) {\n                return;\n            }\n\n            var o = this.options,\n                i,\n                z,\n                total = o.max - o.min,\n                big_num = o.grid_num,\n                big_p = 0,\n                big_w = 0,\n                small_max = 4,\n                local_small_max,\n                small_p,\n                small_w = 0,\n                result,\n                html = '';\n\n            this.calcGridMargin();\n\n            if (o.grid_snap) {\n                big_num = total / o.step;\n                big_p = this.toFixed(o.step / (total / 100));\n            } else {\n                big_p = this.toFixed(100 / big_num);\n            }\n\n            if (big_num > 4) {\n                small_max = 3;\n            }\n            if (big_num > 7) {\n                small_max = 2;\n            }\n            if (big_num > 14) {\n                small_max = 1;\n            }\n            if (big_num > 28) {\n                small_max = 0;\n            }\n\n            for (i = 0; i < big_num + 1; i++) {\n                local_small_max = small_max;\n\n                big_w = this.toFixed(big_p * i);\n\n                if (big_w > 100) {\n                    big_w = 100;\n\n                    local_small_max -= 2;\n                    if (local_small_max < 0) {\n                        local_small_max = 0;\n                    }\n                }\n                this.coords.big[i] = big_w;\n\n                small_p = (big_w - big_p * (i - 1)) / (local_small_max + 1);\n\n                for (z = 1; z <= local_small_max; z++) {\n                    if (big_w === 0) {\n                        break;\n                    }\n\n                    small_w = this.toFixed(big_w - small_p * z);\n\n                    html += '<span class=\"irs-grid-pol small\" style=\"left: ' + small_w + '%\"></span>';\n                }\n\n                html += '<span class=\"irs-grid-pol\" style=\"left: ' + big_w + '%\"></span>';\n\n                result = this.convertToValue(big_w);\n                if (o.values.length) {\n                    result = o.p_values[result];\n                } else {\n                    result = this._prettify(result);\n                }\n\n                html += '<span class=\"irs-grid-text js-grid-text-' + i + '\" style=\"left: ' + big_w + '%\">' + result + '</span>';\n            }\n            this.coords.big_num = Math.ceil(big_num + 1);\n\n            this.$cache.cont.addClass(\"irs-with-grid\");\n            this.$cache.grid.html(html);\n            this.cacheGridLabels();\n        },\n\n        cacheGridLabels: function cacheGridLabels() {\n            var $label,\n                i,\n                num = this.coords.big_num;\n\n            for (i = 0; i < num; i++) {\n                $label = this.$cache.grid.find(\".js-grid-text-\" + i);\n                this.$cache.grid_labels.push($label);\n            }\n\n            this.calcGridLabels();\n        },\n\n        calcGridLabels: function calcGridLabels() {\n            var i,\n                label,\n                start = [],\n                finish = [],\n                num = this.coords.big_num;\n\n            for (i = 0; i < num; i++) {\n                this.coords.big_w[i] = this.$cache.grid_labels[i].outerWidth(false);\n                this.coords.big_p[i] = this.toFixed(this.coords.big_w[i] / this.coords.w_rs * 100);\n                this.coords.big_x[i] = this.toFixed(this.coords.big_p[i] / 2);\n\n                start[i] = this.toFixed(this.coords.big[i] - this.coords.big_x[i]);\n                finish[i] = this.toFixed(start[i] + this.coords.big_p[i]);\n            }\n\n            if (this.options.force_edges) {\n                if (start[0] < -this.coords.grid_gap) {\n                    start[0] = -this.coords.grid_gap;\n                    finish[0] = this.toFixed(start[0] + this.coords.big_p[0]);\n\n                    this.coords.big_x[0] = this.coords.grid_gap;\n                }\n\n                if (finish[num - 1] > 100 + this.coords.grid_gap) {\n                    finish[num - 1] = 100 + this.coords.grid_gap;\n                    start[num - 1] = this.toFixed(finish[num - 1] - this.coords.big_p[num - 1]);\n\n                    this.coords.big_x[num - 1] = this.toFixed(this.coords.big_p[num - 1] - this.coords.grid_gap);\n                }\n            }\n\n            this.calcGridCollision(2, start, finish);\n            this.calcGridCollision(4, start, finish);\n\n            for (i = 0; i < num; i++) {\n                label = this.$cache.grid_labels[i][0];\n                label.style.marginLeft = -this.coords.big_x[i] + \"%\";\n            }\n        },\n\n        // Collisions Calc Beta\n        // TODO: Refactor then have plenty of time\n        calcGridCollision: function calcGridCollision(step, start, finish) {\n            var i,\n                next_i,\n                label,\n                num = this.coords.big_num;\n\n            for (i = 0; i < num; i += step) {\n                next_i = i + step / 2;\n                if (next_i >= num) {\n                    break;\n                }\n\n                label = this.$cache.grid_labels[next_i][0];\n\n                if (finish[i] <= start[next_i]) {\n                    label.style.visibility = \"visible\";\n                } else {\n                    label.style.visibility = \"hidden\";\n                }\n            }\n        },\n\n        calcGridMargin: function calcGridMargin() {\n            if (!this.options.grid_margin) {\n                return;\n            }\n\n            this.coords.w_rs = this.$cache.rs.outerWidth(false);\n            if (!this.coords.w_rs) {\n                return;\n            }\n\n            if (this.options.type === \"single\") {\n                this.coords.w_handle = this.$cache.s_single.outerWidth(false);\n            } else {\n                this.coords.w_handle = this.$cache.s_from.outerWidth(false);\n            }\n            this.coords.p_handle = this.toFixed(this.coords.w_handle / this.coords.w_rs * 100);\n            this.coords.grid_gap = this.toFixed(this.coords.p_handle / 2 - 0.1);\n\n            this.$cache.grid[0].style.width = this.toFixed(100 - this.coords.p_handle) + \"%\";\n            this.$cache.grid[0].style.left = this.coords.grid_gap + \"%\";\n        },\n\n        // =============================================================================================================\n        // Public methods\n\n        update: function update(options) {\n            if (!this.input) {\n                return;\n            }\n\n            this.is_update = true;\n\n            this.options.from = this.result.from;\n            this.options.to = this.result.to;\n\n            this.options = $.extend(this.options, options);\n            this.validate();\n            this.updateResult(options);\n\n            this.toggleInput();\n            this.remove();\n            this.init(true);\n        },\n\n        reset: function reset() {\n            if (!this.input) {\n                return;\n            }\n\n            this.updateResult();\n            this.update();\n        },\n\n        destroy: function destroy() {\n            if (!this.input) {\n                return;\n            }\n\n            this.toggleInput();\n            this.$cache.input.prop(\"readonly\", false);\n            $.data(this.input, \"ionRangeSlider\", null);\n\n            this.remove();\n            this.input = null;\n            this.options = null;\n        }\n    };\n\n    $.fn.ionRangeSlider = function (options) {\n        return this.each(function () {\n            if (!$.data(this, \"ionRangeSlider\")) {\n                $.data(this, \"ionRangeSlider\", new IonRangeSlider(this, options, plugin_count++));\n            }\n        });\n    };\n\n    // =================================================================================================================\n    // http://paulirish.com/2011/requestanimationframe-for-smart-animating/\n    // http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating\n\n    // requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel\n\n    // MIT license\n\n    (function () {\n        var lastTime = 0;\n        var vendors = ['ms', 'moz', 'webkit', 'o'];\n        for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {\n            window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];\n            window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame'];\n        }\n\n        if (!window.requestAnimationFrame) window.requestAnimationFrame = function (callback, element) {\n            var currTime = new Date().getTime();\n            var timeToCall = Math.max(0, 16 - (currTime - lastTime));\n            var id = window.setTimeout(function () {\n                callback(currTime + timeToCall);\n            }, timeToCall);\n            lastTime = currTime + timeToCall;\n            return id;\n        };\n\n        if (!window.cancelAnimationFrame) window.cancelAnimationFrame = function (id) {\n            clearTimeout(id);\n        };\n    })();\n});\n\n/***/ }),\n/* 115 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _typeof2 = __webpack_require__(7);\n\nvar _typeof3 = _interopRequireDefault(_typeof2);\n\nvar _jquery = __webpack_require__(0);\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar $ = _jquery2.default; /* ========================================================================\n                           * Bootstrap: modal.js v3.3.5\n                           * http://getbootstrap.com/javascript/#modals\n                           * ========================================================================\n                           * Copyright 2011-2015 Twitter, Inc.\n                           * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n                           * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // MODAL CLASS DEFINITION\n  // ======================\n\n  var Modal = function Modal(element, options) {\n    this.options = options;\n    this.$body = $(document.body);\n    this.$element = $(element);\n    this.$dialog = this.$element.find('.modal-dialog');\n    this.$backdrop = null;\n    this.isShown = null;\n    this.originalBodyPad = null;\n    this.scrollbarWidth = 0;\n    this.ignoreBackdropClick = false;\n\n    if (this.options.remote) {\n      this.$element.find('.modal-content').load(this.options.remote, $.proxy(function () {\n        this.$element.trigger('loaded.bs.modal');\n      }, this));\n    }\n  };\n\n  Modal.VERSION = '3.3.5';\n\n  Modal.TRANSITION_DURATION = 300;\n  Modal.BACKDROP_TRANSITION_DURATION = 150;\n\n  Modal.DEFAULTS = {\n    backdrop: true,\n    keyboard: true,\n    show: true\n  };\n\n  Modal.prototype.toggle = function (_relatedTarget) {\n    return this.isShown ? this.hide() : this.show(_relatedTarget);\n  };\n\n  Modal.prototype.show = function (_relatedTarget) {\n    var that = this;\n    var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget });\n\n    this.$element.trigger(e);\n\n    if (this.isShown || e.isDefaultPrevented()) return;\n\n    this.isShown = true;\n\n    this.checkScrollbar();\n    this.setScrollbar();\n    this.$body.addClass('modal-open');\n\n    this.escape();\n    this.resize();\n\n    this.$element.on('click.dismiss.bs.modal', '[data-dismiss=\"modal\"]', $.proxy(this.hide, this));\n\n    this.$dialog.on('mousedown.dismiss.bs.modal', function () {\n      that.$element.one('mouseup.dismiss.bs.modal', function (e) {\n        if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true;\n      });\n    });\n\n    this.backdrop(function () {\n      var transition = $.support.transition && that.$element.hasClass('fade');\n\n      if (!that.$element.parent().length) {\n        that.$element.appendTo(that.$body); // don't move modals dom position\n      }\n\n      that.$element.show().scrollTop(0);\n\n      that.adjustDialog();\n\n      if (transition) {\n        that.$element[0].offsetWidth; // force reflow\n      }\n\n      that.$element.addClass('in');\n\n      that.enforceFocus();\n\n      var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget });\n\n      transition ? that.$dialog // wait for modal to slide in\n      .one('bsTransitionEnd', function () {\n        that.$element.trigger('focus').trigger(e);\n      }).emulateTransitionEnd(Modal.TRANSITION_DURATION) : that.$element.trigger('focus').trigger(e);\n    });\n  };\n\n  Modal.prototype.hide = function (e) {\n    if (e) e.preventDefault();\n\n    e = $.Event('hide.bs.modal');\n\n    this.$element.trigger(e);\n\n    if (!this.isShown || e.isDefaultPrevented()) return;\n\n    this.isShown = false;\n\n    this.escape();\n    this.resize();\n\n    $(document).off('focusin.bs.modal');\n\n    this.$element.removeClass('in').off('click.dismiss.bs.modal').off('mouseup.dismiss.bs.modal');\n\n    this.$dialog.off('mousedown.dismiss.bs.modal');\n\n    $.support.transition && this.$element.hasClass('fade') ? this.$element.one('bsTransitionEnd', $.proxy(this.hideModal, this)).emulateTransitionEnd(Modal.TRANSITION_DURATION) : this.hideModal();\n  };\n\n  Modal.prototype.enforceFocus = function () {\n    $(document).off('focusin.bs.modal') // guard against infinite focus loop\n    .on('focusin.bs.modal', $.proxy(function (e) {\n      if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {\n        this.$element.trigger('focus');\n      }\n    }, this));\n  };\n\n  Modal.prototype.escape = function () {\n    if (this.isShown && this.options.keyboard) {\n      this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {\n        e.which == 27 && this.hide();\n      }, this));\n    } else if (!this.isShown) {\n      this.$element.off('keydown.dismiss.bs.modal');\n    }\n  };\n\n  Modal.prototype.resize = function () {\n    if (this.isShown) {\n      $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this));\n    } else {\n      $(window).off('resize.bs.modal');\n    }\n  };\n\n  Modal.prototype.hideModal = function () {\n    var that = this;\n    this.$element.hide();\n    this.backdrop(function () {\n      that.$body.removeClass('modal-open');\n      that.resetAdjustments();\n      that.resetScrollbar();\n      that.$element.trigger('hidden.bs.modal');\n    });\n  };\n\n  Modal.prototype.removeBackdrop = function () {\n    this.$backdrop && this.$backdrop.remove();\n    this.$backdrop = null;\n  };\n\n  Modal.prototype.backdrop = function (callback) {\n    var that = this;\n    var animate = this.$element.hasClass('fade') ? 'fade' : '';\n\n    if (this.isShown && this.options.backdrop) {\n      var doAnimate = $.support.transition && animate;\n\n      this.$backdrop = $(document.createElement('div')).addClass('modal-backdrop ' + animate).appendTo(this.$body);\n\n      this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {\n        if (this.ignoreBackdropClick) {\n          this.ignoreBackdropClick = false;\n          return;\n        }\n        if (e.target !== e.currentTarget) return;\n        this.options.backdrop == 'static' ? this.$element[0].focus() : this.hide();\n      }, this));\n\n      if (doAnimate) this.$backdrop[0].offsetWidth; // force reflow\n\n      this.$backdrop.addClass('in');\n\n      if (!callback) return;\n\n      doAnimate ? this.$backdrop.one('bsTransitionEnd', callback).emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) : callback();\n    } else if (!this.isShown && this.$backdrop) {\n      this.$backdrop.removeClass('in');\n\n      var callbackRemove = function callbackRemove() {\n        that.removeBackdrop();\n        callback && callback();\n      };\n      $.support.transition && this.$element.hasClass('fade') ? this.$backdrop.one('bsTransitionEnd', callbackRemove).emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) : callbackRemove();\n    } else if (callback) {\n      callback();\n    }\n  };\n\n  // these following methods are used to handle overflowing modals\n\n  Modal.prototype.handleUpdate = function () {\n    this.adjustDialog();\n  };\n\n  Modal.prototype.adjustDialog = function () {\n    var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight;\n\n    this.$element.css({\n      paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',\n      paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''\n    });\n  };\n\n  Modal.prototype.resetAdjustments = function () {\n    this.$element.css({\n      paddingLeft: '',\n      paddingRight: ''\n    });\n  };\n\n  Modal.prototype.checkScrollbar = function () {\n    var fullWindowWidth = window.innerWidth;\n    if (!fullWindowWidth) {\n      // workaround for missing window.innerWidth in IE8\n      var documentElementRect = document.documentElement.getBoundingClientRect();\n      fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left);\n    }\n    this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth;\n    this.scrollbarWidth = this.measureScrollbar();\n  };\n\n  Modal.prototype.setScrollbar = function () {\n    var bodyPad = parseInt(this.$body.css('padding-right') || 0, 10);\n    this.originalBodyPad = document.body.style.paddingRight || '';\n    if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth);\n  };\n\n  Modal.prototype.resetScrollbar = function () {\n    this.$body.css('padding-right', this.originalBodyPad);\n  };\n\n  Modal.prototype.measureScrollbar = function () {\n    // thx walsh\n    var scrollDiv = document.createElement('div');\n    scrollDiv.className = 'modal-scrollbar-measure';\n    this.$body.append(scrollDiv);\n    var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n    this.$body[0].removeChild(scrollDiv);\n    return scrollbarWidth;\n  };\n\n  // MODAL PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option, _relatedTarget) {\n    return this.each(function () {\n      var $this = $(this);\n      var data = $this.data('bs.modal');\n      var options = $.extend({}, Modal.DEFAULTS, $this.data(), (typeof option === 'undefined' ? 'undefined' : (0, _typeof3.default)(option)) == 'object' && option);\n\n      if (!data) $this.data('bs.modal', data = new Modal(this, options));\n      if (typeof option == 'string') data[option](_relatedTarget);else if (options.show) data.show(_relatedTarget);\n    });\n  }\n\n  var old = $.fn.modal;\n\n  $.fn.modal = Plugin;\n  $.fn.modal.Constructor = Modal;\n\n  // MODAL NO CONFLICT\n  // =================\n\n  $.fn.modal.noConflict = function () {\n    $.fn.modal = old;\n    return this;\n  };\n\n  // MODAL DATA-API\n  // ==============\n\n  $(document).on('click.bs.modal.data-api', '[data-toggle=\"modal\"]', function (e) {\n    var $this = $(this);\n    var href = $this.attr('href');\n    var $target = $($this.attr('data-target') || href && href.replace(/.*(?=#[^\\s]+$)/, '')); // strip for ie7\n    var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data());\n\n    if ($this.is('a')) e.preventDefault();\n\n    $target.one('show.bs.modal', function (showEvent) {\n      if (showEvent.isDefaultPrevented()) return; // only register focus restorer if modal will actually get shown\n      $target.one('hidden.bs.modal', function () {\n        $this.is(':visible') && $this.trigger('focus');\n      });\n    });\n    Plugin.call($target, option, this);\n  });\n}(_jquery2.default);\n\n/***/ }),\n/* 116 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(115);\n\nvar _jquery = __webpack_require__(0);\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar $ = _jquery2.default;\n\n(function ($) {\n    _jquery2.default.modalWindows = function (options) {\n        var defaults = {\n            target: \".modal\",\n            trigger: \"[data-toggle-modal]\",\n            defaultOpen: false,\n            bodyClass: \"modal-open\",\n            \"nh_modalShow\": function nh_modalShow() {},\n            \"nh_modalHide\": function nh_modalHide() {},\n            \"nh_modalTriggerClick\": function nh_modalTriggerClick() {}\n        };\n\n        var opt = $.extend(true, {}, defaults, options);\n\n        var keys = { 37: 1, 38: 1, 39: 1, 40: 1 };\n\n        function preventDefault(e) {\n            e = e || window.event;\n            if (e.preventDefault) e.preventDefault();\n            e.returnValue = false;\n        }\n\n        function preventDefaultForScrollKeys(e) {\n            if (keys[e.keyCode]) {\n                preventDefault(e);\n                return false;\n            }\n        }\n\n        function disableScroll() {\n            if (window.addEventListener) // older FF\n                window.addEventListener('DOMMouseScroll', preventDefault, false);\n            window.onwheel = preventDefault; // modern standard\n            window.onmousewheel = document.onmousewheel = preventDefault; // older browsers, IE\n            window.ontouchmove = preventDefault; // mobile\n            document.onkeydown = preventDefaultForScrollKeys;\n        }\n\n        function enableScroll() {\n            if (window.removeEventListener) window.removeEventListener('DOMMouseScroll', preventDefault, false);\n            window.onmousewheel = document.onmousewheel = null;\n            window.onwheel = null;\n            window.ontouchmove = null;\n            document.onkeydown = null;\n        }\n\n        // SHOW\n        function showModal() {\n            if (opt.bodyClass) {\n                $(\"body\").addClass(opt.bodyClass);\n            }\n\n            $(opt.target).modal(\"show\");\n            disableScroll();\n            opt.nh_modalShow.call(opt);\n        }\n\n        // HIDE\n        function hideModal() {\n            $(opt.target).modal(\"hide\");\n            enableScroll();\n            if (opt.bodyClass) {\n                $(opt.target).on(\"hidden.bs.modal\", function (e) {\n                    $(\"body\").removeClass(opt.bodyClass);\n                });\n            }\n            //        opt.nh_modalHide.call(opt);\n        }\n\n        // TRIGGER FUNCTION\n        function trigger() {\n            $(opt.trigger).click(function (e) {\n                e.preventDefault();\n                showModal();\n                opt.nh_modalTriggerClick.call(opt);\n            });\n        }\n\n        // DEFAULT\n        function defaultOpen() {\n            if (opt.defaultOpen) {\n                showModal();\n            }\n        }\n\n        ////////////////////////////////////////////////////\n        ////////////////////////////////////////////////////\n        // INIT\n        defaultOpen();\n        trigger();\n        $(opt.target).on('hidden.bs.modal', function (e) {\n            enableScroll();\n            opt.nh_modalHide.call(opt);\n        });\n        if (opt.bodyClass) {\n            $(opt.target).on(\"hidden.bs.modal\", function (e) {\n                $(\"body\").removeClass(opt.bodyClass);\n            });\n        }\n    };\n})(_jquery2.default);\n\n/***/ }),\n/* 117 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = { \"default\": __webpack_require__(126), __esModule: true };\n\n/***/ }),\n/* 118 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = { \"default\": __webpack_require__(127), __esModule: true };\n\n/***/ }),\n/* 119 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = { \"default\": __webpack_require__(130), __esModule: true };\n\n/***/ }),\n/* 120 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = { \"default\": __webpack_require__(133), __esModule: true };\n\n/***/ }),\n/* 121 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = { \"default\": __webpack_require__(134), __esModule: true };\n\n/***/ }),\n/* 122 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _from = __webpack_require__(4);\n\nvar _from2 = _interopRequireDefault(_from);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (arr) {\n  if (Array.isArray(arr)) {\n    for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {\n      arr2[i] = arr[i];\n    }\n\n    return arr2;\n  } else {\n    return (0, _from2.default)(arr);\n  }\n};\n\n/***/ }),\n/* 123 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar format_cookie_1 = __webpack_require__(55);\nvar parse_cookies_1 = __webpack_require__(56);\n\nvar CookieStorage = function () {\n    function CookieStorage(defaultOptions) {\n        _classCallCheck(this, CookieStorage);\n\n        this._defaultOptions = Object.assign({\n            path: null,\n            domain: null,\n            expires: null,\n            secure: false\n        }, defaultOptions);\n        if (typeof Proxy !== 'undefined') {\n            return new Proxy(this, CookieStorageHandler);\n        }\n    }\n\n    _createClass(CookieStorage, [{\n        key: \"clear\",\n        value: function clear() {\n            var _this = this;\n\n            var parsed = parse_cookies_1.parseCookies(this._getCookie());\n            var keys = Object.keys(parsed);\n            keys.forEach(function (key) {\n                return _this.removeItem(key);\n            });\n        }\n    }, {\n        key: \"getItem\",\n        value: function getItem(key) {\n            var parsed = parse_cookies_1.parseCookies(this._getCookie());\n            return parsed.hasOwnProperty(key) ? parsed[key] : null;\n        }\n    }, {\n        key: \"key\",\n        value: function key(index) {\n            var parsed = parse_cookies_1.parseCookies(this._getCookie());\n            var sortedKeys = Object.keys(parsed).sort();\n            return index < sortedKeys.length ? sortedKeys[index] : null;\n        }\n    }, {\n        key: \"removeItem\",\n        value: function removeItem(key, cookieOptions) {\n            var data = '';\n            var options = Object.assign({}, this._defaultOptions, cookieOptions, {\n                expires: new Date(0)\n            });\n            var formatted = format_cookie_1.formatCookie(key, data, options);\n            this._setCookie(formatted);\n        }\n    }, {\n        key: \"setItem\",\n        value: function setItem(key, data, options) {\n            var opts = Object.assign({}, this._defaultOptions, options);\n            var formatted = format_cookie_1.formatCookie(key, data, opts);\n            this._setCookie(formatted);\n        }\n    }, {\n        key: \"_getCookie\",\n        value: function _getCookie() {\n            return typeof document === 'undefined' ? '' : typeof document.cookie === 'undefined' ? '' : document.cookie;\n        }\n    }, {\n        key: \"_setCookie\",\n        value: function _setCookie(value) {\n            document.cookie = value;\n        }\n    }, {\n        key: \"length\",\n        get: function get() {\n            var parsed = parse_cookies_1.parseCookies(this._getCookie());\n            var keys = Object.keys(parsed);\n            return keys.length;\n        }\n    }]);\n\n    return CookieStorage;\n}();\n\nexports.CookieStorage = CookieStorage;\nvar CookieStorageHandler = {\n    get: function get(target, p) {\n        if (p in target) {\n            return target[p];\n        } else {\n            var result = target.getItem(p.toString());\n            return result ? result : undefined;\n        }\n    },\n    set: function set(target, p, value) {\n        target.setItem(p.toString(), value);\n        return true;\n    },\n    has: function has(target, p) {\n        if (p in target) {\n            return true;\n        } else {\n            return target.getItem(p.toString()) ? true : false;\n        }\n    },\n    deleteProperty: function deleteProperty(target, p) {\n        target.removeItem(p.toString());\n        return true;\n    },\n    defineProperty: function defineProperty(target, p, attributes) {\n        var isExtensible = Object.isExtensible(target);\n        var alreadyExists = target.getItem(p.toString());\n        if (!isExtensible && !alreadyExists) {\n            throw new TypeError(\"Can't add property \" + p.toString() + \", object is not extensible\");\n        } else {\n            target.setItem(p.toString(), attributes.value);\n            return true;\n        }\n    },\n    ownKeys: function ownKeys(target) {\n        var keys = [];\n        for (var i = 0; i < target.length; i++) {\n            if (target.key(i) == null) {\n                continue;\n            } else {\n                keys.push(target.key(i));\n            }\n        }\n        return keys;\n    },\n    getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, p) {\n        if (p in target) {\n            return undefined;\n        } else {\n            return {\n                value: target.getItem(p.toString()),\n                writable: true,\n                enumerable: true,\n                configurable: true\n            };\n        }\n    }\n};\n\n/***/ }),\n/* 124 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar cookie_storage_1 = __webpack_require__(123);\nexports.CookieStorage = cookie_storage_1.CookieStorage;\nvar format_cookie_1 = __webpack_require__(55);\nexports.formatCookie = format_cookie_1.formatCookie;\nvar parse_cookies_1 = __webpack_require__(56);\nexports.parseCookies = parse_cookies_1.parseCookies;\n\n/***/ }),\n/* 125 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(30);\n__webpack_require__(158);\nmodule.exports = __webpack_require__(3).Array.from;\n\n\n/***/ }),\n/* 126 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(46);\n__webpack_require__(30);\nmodule.exports = __webpack_require__(157);\n\n\n/***/ }),\n/* 127 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar core = __webpack_require__(3);\nvar $JSON = core.JSON || (core.JSON = { stringify: JSON.stringify });\nmodule.exports = function stringify(it) { // eslint-disable-line no-unused-vars\n  return $JSON.stringify.apply($JSON, arguments);\n};\n\n\n/***/ }),\n/* 128 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(160);\nmodule.exports = __webpack_require__(3).Number.isNaN;\n\n\n/***/ }),\n/* 129 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(161);\nmodule.exports = __webpack_require__(3).Object.assign;\n\n\n/***/ }),\n/* 130 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(162);\nvar $Object = __webpack_require__(3).Object;\nmodule.exports = function defineProperty(it, key, desc) {\n  return $Object.defineProperty(it, key, desc);\n};\n\n\n/***/ }),\n/* 131 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(163);\nmodule.exports = __webpack_require__(3).Object.keys;\n\n\n/***/ }),\n/* 132 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(73);\n__webpack_require__(30);\n__webpack_require__(46);\n__webpack_require__(164);\n__webpack_require__(166);\n__webpack_require__(167);\nmodule.exports = __webpack_require__(3).Promise;\n\n\n/***/ }),\n/* 133 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(165);\n__webpack_require__(73);\n__webpack_require__(168);\n__webpack_require__(169);\nmodule.exports = __webpack_require__(3).Symbol;\n\n\n/***/ }),\n/* 134 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(30);\n__webpack_require__(46);\nmodule.exports = __webpack_require__(44).f('iterator');\n\n\n/***/ }),\n/* 135 */\n/***/ (function(module, exports) {\n\nmodule.exports = function () { /* empty */ };\n\n\n/***/ }),\n/* 136 */\n/***/ (function(module, exports) {\n\nmodule.exports = function (it, Constructor, name, forbiddenField) {\n  if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n    throw TypeError(name + ': incorrect invocation!');\n  } return it;\n};\n\n\n/***/ }),\n/* 137 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// false -> Array#indexOf\n// true  -> Array#includes\nvar toIObject = __webpack_require__(17);\nvar toLength = __webpack_require__(41);\nvar toAbsoluteIndex = __webpack_require__(156);\nmodule.exports = function (IS_INCLUDES) {\n  return function ($this, el, fromIndex) {\n    var O = toIObject($this);\n    var length = toLength(O.length);\n    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare\n    if (IS_INCLUDES && el != el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare\n      if (value != value) return true;\n    // Array#indexOf ignores holes, Array#includes - not\n    } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n      if (O[index] === el) return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n\n\n/***/ }),\n/* 138 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $defineProperty = __webpack_require__(11);\nvar createDesc = __webpack_require__(22);\n\nmodule.exports = function (object, index, value) {\n  if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n  else object[index] = value;\n};\n\n\n/***/ }),\n/* 139 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// all enumerable object keys, includes symbols\nvar getKeys = __webpack_require__(21);\nvar gOPS = __webpack_require__(37);\nvar pIE = __webpack_require__(26);\nmodule.exports = function (it) {\n  var result = getKeys(it);\n  var getSymbols = gOPS.f;\n  if (getSymbols) {\n    var symbols = getSymbols(it);\n    var isEnum = pIE.f;\n    var i = 0;\n    var key;\n    while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n  } return result;\n};\n\n\n/***/ }),\n/* 140 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar ctx = __webpack_require__(19);\nvar call = __webpack_require__(62);\nvar isArrayIter = __webpack_require__(61);\nvar anObject = __webpack_require__(10);\nvar toLength = __webpack_require__(41);\nvar getIterFn = __webpack_require__(45);\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n  var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n  var f = ctx(fn, that, entries ? 2 : 1);\n  var index = 0;\n  var length, step, iterator, result;\n  if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n  // fast case for arrays with default iterator\n  if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n    result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n    if (result === BREAK || result === RETURN) return result;\n  } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n    result = call(iterator, f, step.value, entries);\n    if (result === BREAK || result === RETURN) return result;\n  }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n\n\n/***/ }),\n/* 141 */\n/***/ (function(module, exports) {\n\n// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n  var un = that === undefined;\n  switch (args.length) {\n    case 0: return un ? fn()\n                      : fn.call(that);\n    case 1: return un ? fn(args[0])\n                      : fn.call(that, args[0]);\n    case 2: return un ? fn(args[0], args[1])\n                      : fn.call(that, args[0], args[1]);\n    case 3: return un ? fn(args[0], args[1], args[2])\n                      : fn.call(that, args[0], args[1], args[2]);\n    case 4: return un ? fn(args[0], args[1], args[2], args[3])\n                      : fn.call(that, args[0], args[1], args[2], args[3]);\n  } return fn.apply(that, args);\n};\n\n\n/***/ }),\n/* 142 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 7.2.2 IsArray(argument)\nvar cof = __webpack_require__(18);\nmodule.exports = Array.isArray || function isArray(arg) {\n  return cof(arg) == 'Array';\n};\n\n\n/***/ }),\n/* 143 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar create = __webpack_require__(65);\nvar descriptor = __webpack_require__(22);\nvar setToStringTag = __webpack_require__(27);\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\n__webpack_require__(14)(IteratorPrototype, __webpack_require__(6)('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n  Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n  setToStringTag(Constructor, NAME + ' Iterator');\n};\n\n\n/***/ }),\n/* 144 */\n/***/ (function(module, exports) {\n\nmodule.exports = function (done, value) {\n  return { value: value, done: !!done };\n};\n\n\n/***/ }),\n/* 145 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar META = __webpack_require__(29)('meta');\nvar isObject = __webpack_require__(16);\nvar has = __webpack_require__(13);\nvar setDesc = __webpack_require__(11).f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n  return true;\n};\nvar FREEZE = !__webpack_require__(15)(function () {\n  return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n  setDesc(it, META, { value: {\n    i: 'O' + ++id, // object ID\n    w: {}          // weak collections IDs\n  } });\n};\nvar fastKey = function (it, create) {\n  // return primitive with prefix\n  if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n  if (!has(it, META)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return 'F';\n    // not necessary to add metadata\n    if (!create) return 'E';\n    // add missing metadata\n    setMeta(it);\n  // return object ID\n  } return it[META].i;\n};\nvar getWeak = function (it, create) {\n  if (!has(it, META)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return true;\n    // not necessary to add metadata\n    if (!create) return false;\n    // add missing metadata\n    setMeta(it);\n  // return hash weak collections IDs\n  } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n  if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n  return it;\n};\nvar meta = module.exports = {\n  KEY: META,\n  NEED: false,\n  fastKey: fastKey,\n  getWeak: getWeak,\n  onFreeze: onFreeze\n};\n\n\n/***/ }),\n/* 146 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(5);\nvar macrotask = __webpack_require__(72).set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = __webpack_require__(18)(process) == 'process';\n\nmodule.exports = function () {\n  var head, last, notify;\n\n  var flush = function () {\n    var parent, fn;\n    if (isNode && (parent = process.domain)) parent.exit();\n    while (head) {\n      fn = head.fn;\n      head = head.next;\n      try {\n        fn();\n      } catch (e) {\n        if (head) notify();\n        else last = undefined;\n        throw e;\n      }\n    } last = undefined;\n    if (parent) parent.enter();\n  };\n\n  // Node.js\n  if (isNode) {\n    notify = function () {\n      process.nextTick(flush);\n    };\n  // browsers with MutationObserver\n  } else if (Observer) {\n    var toggle = true;\n    var node = document.createTextNode('');\n    new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n    notify = function () {\n      node.data = toggle = !toggle;\n    };\n  // environments with maybe non-completely correct, but existent Promise\n  } else if (Promise && Promise.resolve) {\n    var promise = Promise.resolve();\n    notify = function () {\n      promise.then(flush);\n    };\n  // for other environments - macrotask based on:\n  // - setImmediate\n  // - MessageChannel\n  // - window.postMessag\n  // - onreadystatechange\n  // - setTimeout\n  } else {\n    notify = function () {\n      // strange IE + webpack dev server bug - use .call(global)\n      macrotask.call(global, flush);\n    };\n  }\n\n  return function (fn) {\n    var task = { fn: fn, next: undefined };\n    if (last) last.next = task;\n    if (!head) {\n      head = task;\n      notify();\n    } last = task;\n  };\n};\n\n\n/***/ }),\n/* 147 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = __webpack_require__(21);\nvar gOPS = __webpack_require__(37);\nvar pIE = __webpack_require__(26);\nvar toObject = __webpack_require__(28);\nvar IObject = __webpack_require__(60);\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || __webpack_require__(15)(function () {\n  var A = {};\n  var B = {};\n  // eslint-disable-next-line no-undef\n  var S = Symbol();\n  var K = 'abcdefghijklmnopqrst';\n  A[S] = 7;\n  K.split('').forEach(function (k) { B[k] = k; });\n  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n  var T = toObject(target);\n  var aLen = arguments.length;\n  var index = 1;\n  var getSymbols = gOPS.f;\n  var isEnum = pIE.f;\n  while (aLen > index) {\n    var S = IObject(arguments[index++]);\n    var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n    var length = keys.length;\n    var j = 0;\n    var key;\n    while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n  } return T;\n} : $assign;\n\n\n/***/ }),\n/* 148 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar dP = __webpack_require__(11);\nvar anObject = __webpack_require__(10);\nvar getKeys = __webpack_require__(21);\n\nmodule.exports = __webpack_require__(12) ? Object.defineProperties : function defineProperties(O, Properties) {\n  anObject(O);\n  var keys = getKeys(Properties);\n  var length = keys.length;\n  var i = 0;\n  var P;\n  while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n  return O;\n};\n\n\n/***/ }),\n/* 149 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar pIE = __webpack_require__(26);\nvar createDesc = __webpack_require__(22);\nvar toIObject = __webpack_require__(17);\nvar toPrimitive = __webpack_require__(42);\nvar has = __webpack_require__(13);\nvar IE8_DOM_DEFINE = __webpack_require__(59);\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = __webpack_require__(12) ? gOPD : function getOwnPropertyDescriptor(O, P) {\n  O = toIObject(O);\n  P = toPrimitive(P, true);\n  if (IE8_DOM_DEFINE) try {\n    return gOPD(O, P);\n  } catch (e) { /* empty */ }\n  if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n\n\n/***/ }),\n/* 150 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = __webpack_require__(17);\nvar gOPN = __webpack_require__(66).f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n  ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n  try {\n    return gOPN(it);\n  } catch (e) {\n    return windowNames.slice();\n  }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n  return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n\n\n/***/ }),\n/* 151 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = __webpack_require__(13);\nvar toObject = __webpack_require__(28);\nvar IE_PROTO = __webpack_require__(38)('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n  O = toObject(O);\n  if (has(O, IE_PROTO)) return O[IE_PROTO];\n  if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n    return O.constructor.prototype;\n  } return O instanceof Object ? ObjectProto : null;\n};\n\n\n/***/ }),\n/* 152 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// most Object methods by ES6 should accept primitives\nvar $export = __webpack_require__(8);\nvar core = __webpack_require__(3);\nvar fails = __webpack_require__(15);\nmodule.exports = function (KEY, exec) {\n  var fn = (core.Object || {})[KEY] || Object[KEY];\n  var exp = {};\n  exp[KEY] = exec(fn);\n  $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n\n\n/***/ }),\n/* 153 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar hide = __webpack_require__(14);\nmodule.exports = function (target, src, safe) {\n  for (var key in src) {\n    if (safe && target[key]) target[key] = src[key];\n    else hide(target, key, src[key]);\n  } return target;\n};\n\n\n/***/ }),\n/* 154 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar global = __webpack_require__(5);\nvar core = __webpack_require__(3);\nvar dP = __webpack_require__(11);\nvar DESCRIPTORS = __webpack_require__(12);\nvar SPECIES = __webpack_require__(6)('species');\n\nmodule.exports = function (KEY) {\n  var C = typeof core[KEY] == 'function' ? core[KEY] : global[KEY];\n  if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n    configurable: true,\n    get: function () { return this; }\n  });\n};\n\n\n/***/ }),\n/* 155 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar toInteger = __webpack_require__(40);\nvar defined = __webpack_require__(33);\n// true  -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n  return function (that, pos) {\n    var s = String(defined(that));\n    var i = toInteger(pos);\n    var l = s.length;\n    var a, b;\n    if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n    a = s.charCodeAt(i);\n    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n      ? TO_STRING ? s.charAt(i) : a\n      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n  };\n};\n\n\n/***/ }),\n/* 156 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar toInteger = __webpack_require__(40);\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n  index = toInteger(index);\n  return index < 0 ? max(index + length, 0) : min(index, length);\n};\n\n\n/***/ }),\n/* 157 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar anObject = __webpack_require__(10);\nvar get = __webpack_require__(45);\nmodule.exports = __webpack_require__(3).getIterator = function (it) {\n  var iterFn = get(it);\n  if (typeof iterFn != 'function') throw TypeError(it + ' is not iterable!');\n  return anObject(iterFn.call(it));\n};\n\n\n/***/ }),\n/* 158 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ctx = __webpack_require__(19);\nvar $export = __webpack_require__(8);\nvar toObject = __webpack_require__(28);\nvar call = __webpack_require__(62);\nvar isArrayIter = __webpack_require__(61);\nvar toLength = __webpack_require__(41);\nvar createProperty = __webpack_require__(138);\nvar getIterFn = __webpack_require__(45);\n\n$export($export.S + $export.F * !__webpack_require__(64)(function (iter) { Array.from(iter); }), 'Array', {\n  // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n  from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n    var O = toObject(arrayLike);\n    var C = typeof this == 'function' ? this : Array;\n    var aLen = arguments.length;\n    var mapfn = aLen > 1 ? arguments[1] : undefined;\n    var mapping = mapfn !== undefined;\n    var index = 0;\n    var iterFn = getIterFn(O);\n    var length, result, step, iterator;\n    if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n    // if object isn't iterable or it's array with default iterator - use simple case\n    if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n      for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n        createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n      }\n    } else {\n      length = toLength(O.length);\n      for (result = new C(length); length > index; index++) {\n        createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n      }\n    }\n    result.length = index;\n    return result;\n  }\n});\n\n\n/***/ }),\n/* 159 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar addToUnscopables = __webpack_require__(135);\nvar step = __webpack_require__(144);\nvar Iterators = __webpack_require__(20);\nvar toIObject = __webpack_require__(17);\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = __webpack_require__(63)(Array, 'Array', function (iterated, kind) {\n  this._t = toIObject(iterated); // target\n  this._i = 0;                   // next index\n  this._k = kind;                // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n  var O = this._t;\n  var kind = this._k;\n  var index = this._i++;\n  if (!O || index >= O.length) {\n    this._t = undefined;\n    return step(1);\n  }\n  if (kind == 'keys') return step(0, index);\n  if (kind == 'values') return step(0, O[index]);\n  return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n\n\n/***/ }),\n/* 160 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 20.1.2.4 Number.isNaN(number)\nvar $export = __webpack_require__(8);\n\n$export($export.S, 'Number', {\n  isNaN: function isNaN(number) {\n    // eslint-disable-next-line no-self-compare\n    return number != number;\n  }\n});\n\n\n/***/ }),\n/* 161 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.3.1 Object.assign(target, source)\nvar $export = __webpack_require__(8);\n\n$export($export.S + $export.F, 'Object', { assign: __webpack_require__(147) });\n\n\n/***/ }),\n/* 162 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar $export = __webpack_require__(8);\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !__webpack_require__(12), 'Object', { defineProperty: __webpack_require__(11).f });\n\n\n/***/ }),\n/* 163 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.14 Object.keys(O)\nvar toObject = __webpack_require__(28);\nvar $keys = __webpack_require__(21);\n\n__webpack_require__(152)('keys', function () {\n  return function keys(it) {\n    return $keys(toObject(it));\n  };\n});\n\n\n/***/ }),\n/* 164 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar LIBRARY = __webpack_require__(25);\nvar global = __webpack_require__(5);\nvar ctx = __webpack_require__(19);\nvar classof = __webpack_require__(57);\nvar $export = __webpack_require__(8);\nvar isObject = __webpack_require__(16);\nvar aFunction = __webpack_require__(24);\nvar anInstance = __webpack_require__(136);\nvar forOf = __webpack_require__(140);\nvar speciesConstructor = __webpack_require__(71);\nvar task = __webpack_require__(72).set;\nvar microtask = __webpack_require__(146)();\nvar newPromiseCapabilityModule = __webpack_require__(36);\nvar perform = __webpack_require__(68);\nvar promiseResolve = __webpack_require__(69);\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n  try {\n    // correct subclassing with @@species support\n    var promise = $Promise.resolve(1);\n    var FakePromise = (promise.constructor = {})[__webpack_require__(6)('species')] = function (exec) {\n      exec(empty, empty);\n    };\n    // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n    return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;\n  } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n  var then;\n  return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n  if (promise._n) return;\n  promise._n = true;\n  var chain = promise._c;\n  microtask(function () {\n    var value = promise._v;\n    var ok = promise._s == 1;\n    var i = 0;\n    var run = function (reaction) {\n      var handler = ok ? reaction.ok : reaction.fail;\n      var resolve = reaction.resolve;\n      var reject = reaction.reject;\n      var domain = reaction.domain;\n      var result, then;\n      try {\n        if (handler) {\n          if (!ok) {\n            if (promise._h == 2) onHandleUnhandled(promise);\n            promise._h = 1;\n          }\n          if (handler === true) result = value;\n          else {\n            if (domain) domain.enter();\n            result = handler(value);\n            if (domain) domain.exit();\n          }\n          if (result === reaction.promise) {\n            reject(TypeError('Promise-chain cycle'));\n          } else if (then = isThenable(result)) {\n            then.call(result, resolve, reject);\n          } else resolve(result);\n        } else reject(value);\n      } catch (e) {\n        reject(e);\n      }\n    };\n    while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n    promise._c = [];\n    promise._n = false;\n    if (isReject && !promise._h) onUnhandled(promise);\n  });\n};\nvar onUnhandled = function (promise) {\n  task.call(global, function () {\n    var value = promise._v;\n    var unhandled = isUnhandled(promise);\n    var result, handler, console;\n    if (unhandled) {\n      result = perform(function () {\n        if (isNode) {\n          process.emit('unhandledRejection', value, promise);\n        } else if (handler = global.onunhandledrejection) {\n          handler({ promise: promise, reason: value });\n        } else if ((console = global.console) && console.error) {\n          console.error('Unhandled promise rejection', value);\n        }\n      });\n      // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n      promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n    } promise._a = undefined;\n    if (unhandled && result.e) throw result.v;\n  });\n};\nvar isUnhandled = function (promise) {\n  if (promise._h == 1) return false;\n  var chain = promise._a || promise._c;\n  var i = 0;\n  var reaction;\n  while (chain.length > i) {\n    reaction = chain[i++];\n    if (reaction.fail || !isUnhandled(reaction.promise)) return false;\n  } return true;\n};\nvar onHandleUnhandled = function (promise) {\n  task.call(global, function () {\n    var handler;\n    if (isNode) {\n      process.emit('rejectionHandled', promise);\n    } else if (handler = global.onrejectionhandled) {\n      handler({ promise: promise, reason: promise._v });\n    }\n  });\n};\nvar $reject = function (value) {\n  var promise = this;\n  if (promise._d) return;\n  promise._d = true;\n  promise = promise._w || promise; // unwrap\n  promise._v = value;\n  promise._s = 2;\n  if (!promise._a) promise._a = promise._c.slice();\n  notify(promise, true);\n};\nvar $resolve = function (value) {\n  var promise = this;\n  var then;\n  if (promise._d) return;\n  promise._d = true;\n  promise = promise._w || promise; // unwrap\n  try {\n    if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n    if (then = isThenable(value)) {\n      microtask(function () {\n        var wrapper = { _w: promise, _d: false }; // wrap\n        try {\n          then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n        } catch (e) {\n          $reject.call(wrapper, e);\n        }\n      });\n    } else {\n      promise._v = value;\n      promise._s = 1;\n      notify(promise, false);\n    }\n  } catch (e) {\n    $reject.call({ _w: promise, _d: false }, e); // wrap\n  }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n  // 25.4.3.1 Promise(executor)\n  $Promise = function Promise(executor) {\n    anInstance(this, $Promise, PROMISE, '_h');\n    aFunction(executor);\n    Internal.call(this);\n    try {\n      executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n    } catch (err) {\n      $reject.call(this, err);\n    }\n  };\n  // eslint-disable-next-line no-unused-vars\n  Internal = function Promise(executor) {\n    this._c = [];             // <- awaiting reactions\n    this._a = undefined;      // <- checked in isUnhandled reactions\n    this._s = 0;              // <- state\n    this._d = false;          // <- done\n    this._v = undefined;      // <- value\n    this._h = 0;              // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n    this._n = false;          // <- notify\n  };\n  Internal.prototype = __webpack_require__(153)($Promise.prototype, {\n    // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n    then: function then(onFulfilled, onRejected) {\n      var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n      reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n      reaction.fail = typeof onRejected == 'function' && onRejected;\n      reaction.domain = isNode ? process.domain : undefined;\n      this._c.push(reaction);\n      if (this._a) this._a.push(reaction);\n      if (this._s) notify(this, false);\n      return reaction.promise;\n    },\n    // 25.4.5.1 Promise.prototype.catch(onRejected)\n    'catch': function (onRejected) {\n      return this.then(undefined, onRejected);\n    }\n  });\n  OwnPromiseCapability = function () {\n    var promise = new Internal();\n    this.promise = promise;\n    this.resolve = ctx($resolve, promise, 1);\n    this.reject = ctx($reject, promise, 1);\n  };\n  newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n    return C === $Promise || C === Wrapper\n      ? new OwnPromiseCapability(C)\n      : newGenericPromiseCapability(C);\n  };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\n__webpack_require__(27)($Promise, PROMISE);\n__webpack_require__(154)(PROMISE);\nWrapper = __webpack_require__(3)[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n  // 25.4.4.5 Promise.reject(r)\n  reject: function reject(r) {\n    var capability = newPromiseCapability(this);\n    var $$reject = capability.reject;\n    $$reject(r);\n    return capability.promise;\n  }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n  // 25.4.4.6 Promise.resolve(x)\n  resolve: function resolve(x) {\n    return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n  }\n});\n$export($export.S + $export.F * !(USE_NATIVE && __webpack_require__(64)(function (iter) {\n  $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n  // 25.4.4.1 Promise.all(iterable)\n  all: function all(iterable) {\n    var C = this;\n    var capability = newPromiseCapability(C);\n    var resolve = capability.resolve;\n    var reject = capability.reject;\n    var result = perform(function () {\n      var values = [];\n      var index = 0;\n      var remaining = 1;\n      forOf(iterable, false, function (promise) {\n        var $index = index++;\n        var alreadyCalled = false;\n        values.push(undefined);\n        remaining++;\n        C.resolve(promise).then(function (value) {\n          if (alreadyCalled) return;\n          alreadyCalled = true;\n          values[$index] = value;\n          --remaining || resolve(values);\n        }, reject);\n      });\n      --remaining || resolve(values);\n    });\n    if (result.e) reject(result.v);\n    return capability.promise;\n  },\n  // 25.4.4.4 Promise.race(iterable)\n  race: function race(iterable) {\n    var C = this;\n    var capability = newPromiseCapability(C);\n    var reject = capability.reject;\n    var result = perform(function () {\n      forOf(iterable, false, function (promise) {\n        C.resolve(promise).then(capability.resolve, reject);\n      });\n    });\n    if (result.e) reject(result.v);\n    return capability.promise;\n  }\n});\n\n\n/***/ }),\n/* 165 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// ECMAScript 6 symbols shim\nvar global = __webpack_require__(5);\nvar has = __webpack_require__(13);\nvar DESCRIPTORS = __webpack_require__(12);\nvar $export = __webpack_require__(8);\nvar redefine = __webpack_require__(70);\nvar META = __webpack_require__(145).KEY;\nvar $fails = __webpack_require__(15);\nvar shared = __webpack_require__(39);\nvar setToStringTag = __webpack_require__(27);\nvar uid = __webpack_require__(29);\nvar wks = __webpack_require__(6);\nvar wksExt = __webpack_require__(44);\nvar wksDefine = __webpack_require__(43);\nvar enumKeys = __webpack_require__(139);\nvar isArray = __webpack_require__(142);\nvar anObject = __webpack_require__(10);\nvar toIObject = __webpack_require__(17);\nvar toPrimitive = __webpack_require__(42);\nvar createDesc = __webpack_require__(22);\nvar _create = __webpack_require__(65);\nvar gOPNExt = __webpack_require__(150);\nvar $GOPD = __webpack_require__(149);\nvar $DP = __webpack_require__(11);\nvar $keys = __webpack_require__(21);\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n  return _create(dP({}, 'a', {\n    get: function () { return dP(this, 'a', { value: 7 }).a; }\n  })).a != 7;\n}) ? function (it, key, D) {\n  var protoDesc = gOPD(ObjectProto, key);\n  if (protoDesc) delete ObjectProto[key];\n  dP(it, key, D);\n  if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n  var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n  sym._k = tag;\n  return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n  return typeof it == 'symbol';\n} : function (it) {\n  return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n  if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n  anObject(it);\n  key = toPrimitive(key, true);\n  anObject(D);\n  if (has(AllSymbols, key)) {\n    if (!D.enumerable) {\n      if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n      it[HIDDEN][key] = true;\n    } else {\n      if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n      D = _create(D, { enumerable: createDesc(0, false) });\n    } return setSymbolDesc(it, key, D);\n  } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n  anObject(it);\n  var keys = enumKeys(P = toIObject(P));\n  var i = 0;\n  var l = keys.length;\n  var key;\n  while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n  return it;\n};\nvar $create = function create(it, P) {\n  return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n  var E = isEnum.call(this, key = toPrimitive(key, true));\n  if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n  return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n  it = toIObject(it);\n  key = toPrimitive(key, true);\n  if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n  var D = gOPD(it, key);\n  if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n  return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n  var names = gOPN(toIObject(it));\n  var result = [];\n  var i = 0;\n  var key;\n  while (names.length > i) {\n    if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n  } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n  var IS_OP = it === ObjectProto;\n  var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n  var result = [];\n  var i = 0;\n  var key;\n  while (names.length > i) {\n    if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n  } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n  $Symbol = function Symbol() {\n    if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n    var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n    var $set = function (value) {\n      if (this === ObjectProto) $set.call(OPSymbols, value);\n      if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n      setSymbolDesc(this, tag, createDesc(1, value));\n    };\n    if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n    return wrap(tag);\n  };\n  redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n    return this._k;\n  });\n\n  $GOPD.f = $getOwnPropertyDescriptor;\n  $DP.f = $defineProperty;\n  __webpack_require__(66).f = gOPNExt.f = $getOwnPropertyNames;\n  __webpack_require__(26).f = $propertyIsEnumerable;\n  __webpack_require__(37).f = $getOwnPropertySymbols;\n\n  if (DESCRIPTORS && !__webpack_require__(25)) {\n    redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n  }\n\n  wksExt.f = function (name) {\n    return wrap(wks(name));\n  };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n  // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n  'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n  // 19.4.2.1 Symbol.for(key)\n  'for': function (key) {\n    return has(SymbolRegistry, key += '')\n      ? SymbolRegistry[key]\n      : SymbolRegistry[key] = $Symbol(key);\n  },\n  // 19.4.2.5 Symbol.keyFor(sym)\n  keyFor: function keyFor(sym) {\n    if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n    for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n  },\n  useSetter: function () { setter = true; },\n  useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n  // 19.1.2.2 Object.create(O [, Properties])\n  create: $create,\n  // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n  defineProperty: $defineProperty,\n  // 19.1.2.3 Object.defineProperties(O, Properties)\n  defineProperties: $defineProperties,\n  // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n  getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n  // 19.1.2.7 Object.getOwnPropertyNames(O)\n  getOwnPropertyNames: $getOwnPropertyNames,\n  // 19.1.2.8 Object.getOwnPropertySymbols(O)\n  getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n  var S = $Symbol();\n  // MS Edge converts symbol values to JSON as {}\n  // WebKit converts symbol values to JSON as null\n  // V8 throws on boxed symbols\n  return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n  stringify: function stringify(it) {\n    if (it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n    var args = [it];\n    var i = 1;\n    var replacer, $replacer;\n    while (arguments.length > i) args.push(arguments[i++]);\n    replacer = args[1];\n    if (typeof replacer == 'function') $replacer = replacer;\n    if ($replacer || !isArray(replacer)) replacer = function (key, value) {\n      if ($replacer) value = $replacer.call(this, key, value);\n      if (!isSymbol(value)) return value;\n    };\n    args[1] = replacer;\n    return _stringify.apply($JSON, args);\n  }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || __webpack_require__(14)($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n\n\n/***/ }),\n/* 166 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n// https://github.com/tc39/proposal-promise-finally\n\nvar $export = __webpack_require__(8);\nvar core = __webpack_require__(3);\nvar global = __webpack_require__(5);\nvar speciesConstructor = __webpack_require__(71);\nvar promiseResolve = __webpack_require__(69);\n\n$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {\n  var C = speciesConstructor(this, core.Promise || global.Promise);\n  var isFunction = typeof onFinally == 'function';\n  return this.then(\n    isFunction ? function (x) {\n      return promiseResolve(C, onFinally()).then(function () { return x; });\n    } : onFinally,\n    isFunction ? function (e) {\n      return promiseResolve(C, onFinally()).then(function () { throw e; });\n    } : onFinally\n  );\n} });\n\n\n/***/ }),\n/* 167 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// https://github.com/tc39/proposal-promise-try\nvar $export = __webpack_require__(8);\nvar newPromiseCapability = __webpack_require__(36);\nvar perform = __webpack_require__(68);\n\n$export($export.S, 'Promise', { 'try': function (callbackfn) {\n  var promiseCapability = newPromiseCapability.f(this);\n  var result = perform(callbackfn);\n  (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v);\n  return promiseCapability.promise;\n} });\n\n\n/***/ }),\n/* 168 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(43)('asyncIterator');\n\n\n/***/ }),\n/* 169 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(43)('observable');\n\n\n/***/ }),\n/* 170 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// This method of obtaining a reference to the global object needs to be\n// kept identical to the way it is obtained in runtime.js\nvar g = (function() { return this })() || Function(\"return this\")();\n\n// Use `getOwnPropertyNames` because not all browsers support calling\n// `hasOwnProperty` on the global `self` object in a worker. See #183.\nvar hadRuntime = g.regeneratorRuntime &&\n  Object.getOwnPropertyNames(g).indexOf(\"regeneratorRuntime\") >= 0;\n\n// Save the old regeneratorRuntime in case it needs to be restored later.\nvar oldRuntime = hadRuntime && g.regeneratorRuntime;\n\n// Force reevalutation of runtime.js.\ng.regeneratorRuntime = undefined;\n\nmodule.exports = __webpack_require__(171);\n\nif (hadRuntime) {\n  // Restore the original runtime.\n  g.regeneratorRuntime = oldRuntime;\n} else {\n  // Remove the global property added by runtime.js.\n  try {\n    delete g.regeneratorRuntime;\n  } catch(e) {\n    g.regeneratorRuntime = undefined;\n  }\n}\n\n\n/***/ }),\n/* 171 */\n/***/ (function(module, exports) {\n\n/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n  \"use strict\";\n\n  var Op = Object.prototype;\n  var hasOwn = Op.hasOwnProperty;\n  var undefined; // More compressible than void 0.\n  var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n  var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n  var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n  var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n  var inModule = typeof module === \"object\";\n  var runtime = global.regeneratorRuntime;\n  if (runtime) {\n    if (inModule) {\n      // If regeneratorRuntime is defined globally and we're in a module,\n      // make the exports object identical to regeneratorRuntime.\n      module.exports = runtime;\n    }\n    // Don't bother evaluating the rest of this file if the runtime was\n    // already defined globally.\n    return;\n  }\n\n  // Define the runtime globally (as expected by generated code) as either\n  // module.exports (if we're in a module) or a new, empty object.\n  runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n  function wrap(innerFn, outerFn, self, tryLocsList) {\n    // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n    var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n    var generator = Object.create(protoGenerator.prototype);\n    var context = new Context(tryLocsList || []);\n\n    // The ._invoke method unifies the implementations of the .next,\n    // .throw, and .return methods.\n    generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n    return generator;\n  }\n  runtime.wrap = wrap;\n\n  // Try/catch helper to minimize deoptimizations. Returns a completion\n  // record like context.tryEntries[i].completion. This interface could\n  // have been (and was previously) designed to take a closure to be\n  // invoked without arguments, but in all the cases we care about we\n  // already have an existing method we want to call, so there's no need\n  // to create a new function object. We can even get away with assuming\n  // the method takes exactly one argument, since that happens to be true\n  // in every case, so we don't have to touch the arguments object. The\n  // only additional allocation required is the completion record, which\n  // has a stable shape and so hopefully should be cheap to allocate.\n  function tryCatch(fn, obj, arg) {\n    try {\n      return { type: \"normal\", arg: fn.call(obj, arg) };\n    } catch (err) {\n      return { type: \"throw\", arg: err };\n    }\n  }\n\n  var GenStateSuspendedStart = \"suspendedStart\";\n  var GenStateSuspendedYield = \"suspendedYield\";\n  var GenStateExecuting = \"executing\";\n  var GenStateCompleted = \"completed\";\n\n  // Returning this object from the innerFn has the same effect as\n  // breaking out of the dispatch switch statement.\n  var ContinueSentinel = {};\n\n  // Dummy constructor functions that we use as the .constructor and\n  // .constructor.prototype properties for functions that return Generator\n  // objects. For full spec compliance, you may wish to configure your\n  // minifier not to mangle the names of these two functions.\n  function Generator() {}\n  function GeneratorFunction() {}\n  function GeneratorFunctionPrototype() {}\n\n  // This is a polyfill for %IteratorPrototype% for environments that\n  // don't natively support it.\n  var IteratorPrototype = {};\n  IteratorPrototype[iteratorSymbol] = function () {\n    return this;\n  };\n\n  var getProto = Object.getPrototypeOf;\n  var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n  if (NativeIteratorPrototype &&\n      NativeIteratorPrototype !== Op &&\n      hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n    // This environment has a native %IteratorPrototype%; use it instead\n    // of the polyfill.\n    IteratorPrototype = NativeIteratorPrototype;\n  }\n\n  var Gp = GeneratorFunctionPrototype.prototype =\n    Generator.prototype = Object.create(IteratorPrototype);\n  GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n  GeneratorFunctionPrototype.constructor = GeneratorFunction;\n  GeneratorFunctionPrototype[toStringTagSymbol] =\n    GeneratorFunction.displayName = \"GeneratorFunction\";\n\n  // Helper for defining the .next, .throw, and .return methods of the\n  // Iterator interface in terms of a single ._invoke method.\n  function defineIteratorMethods(prototype) {\n    [\"next\", \"throw\", \"return\"].forEach(function(method) {\n      prototype[method] = function(arg) {\n        return this._invoke(method, arg);\n      };\n    });\n  }\n\n  runtime.isGeneratorFunction = function(genFun) {\n    var ctor = typeof genFun === \"function\" && genFun.constructor;\n    return ctor\n      ? ctor === GeneratorFunction ||\n        // For the native GeneratorFunction constructor, the best we can\n        // do is to check its .name property.\n        (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n      : false;\n  };\n\n  runtime.mark = function(genFun) {\n    if (Object.setPrototypeOf) {\n      Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n    } else {\n      genFun.__proto__ = GeneratorFunctionPrototype;\n      if (!(toStringTagSymbol in genFun)) {\n        genFun[toStringTagSymbol] = \"GeneratorFunction\";\n      }\n    }\n    genFun.prototype = Object.create(Gp);\n    return genFun;\n  };\n\n  // Within the body of any async function, `await x` is transformed to\n  // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n  // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n  // meant to be awaited.\n  runtime.awrap = function(arg) {\n    return { __await: arg };\n  };\n\n  function AsyncIterator(generator) {\n    function invoke(method, arg, resolve, reject) {\n      var record = tryCatch(generator[method], generator, arg);\n      if (record.type === \"throw\") {\n        reject(record.arg);\n      } else {\n        var result = record.arg;\n        var value = result.value;\n        if (value &&\n            typeof value === \"object\" &&\n            hasOwn.call(value, \"__await\")) {\n          return Promise.resolve(value.__await).then(function(value) {\n            invoke(\"next\", value, resolve, reject);\n          }, function(err) {\n            invoke(\"throw\", err, resolve, reject);\n          });\n        }\n\n        return Promise.resolve(value).then(function(unwrapped) {\n          // When a yielded Promise is resolved, its final value becomes\n          // the .value of the Promise<{value,done}> result for the\n          // current iteration. If the Promise is rejected, however, the\n          // result for this iteration will be rejected with the same\n          // reason. Note that rejections of yielded Promises are not\n          // thrown back into the generator function, as is the case\n          // when an awaited Promise is rejected. This difference in\n          // behavior between yield and await is important, because it\n          // allows the consumer to decide what to do with the yielded\n          // rejection (swallow it and continue, manually .throw it back\n          // into the generator, abandon iteration, whatever). With\n          // await, by contrast, there is no opportunity to examine the\n          // rejection reason outside the generator function, so the\n          // only option is to throw it from the await expression, and\n          // let the generator function handle the exception.\n          result.value = unwrapped;\n          resolve(result);\n        }, reject);\n      }\n    }\n\n    var previousPromise;\n\n    function enqueue(method, arg) {\n      function callInvokeWithMethodAndArg() {\n        return new Promise(function(resolve, reject) {\n          invoke(method, arg, resolve, reject);\n        });\n      }\n\n      return previousPromise =\n        // If enqueue has been called before, then we want to wait until\n        // all previous Promises have been resolved before calling invoke,\n        // so that results are always delivered in the correct order. If\n        // enqueue has not been called before, then it is important to\n        // call invoke immediately, without waiting on a callback to fire,\n        // so that the async generator function has the opportunity to do\n        // any necessary setup in a predictable way. This predictability\n        // is why the Promise constructor synchronously invokes its\n        // executor callback, and why async functions synchronously\n        // execute code before the first await. Since we implement simple\n        // async functions in terms of async generators, it is especially\n        // important to get this right, even though it requires care.\n        previousPromise ? previousPromise.then(\n          callInvokeWithMethodAndArg,\n          // Avoid propagating failures to Promises returned by later\n          // invocations of the iterator.\n          callInvokeWithMethodAndArg\n        ) : callInvokeWithMethodAndArg();\n    }\n\n    // Define the unified helper method that is used to implement .next,\n    // .throw, and .return (see defineIteratorMethods).\n    this._invoke = enqueue;\n  }\n\n  defineIteratorMethods(AsyncIterator.prototype);\n  AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n    return this;\n  };\n  runtime.AsyncIterator = AsyncIterator;\n\n  // Note that simple async functions are implemented on top of\n  // AsyncIterator objects; they just return a Promise for the value of\n  // the final result produced by the iterator.\n  runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n    var iter = new AsyncIterator(\n      wrap(innerFn, outerFn, self, tryLocsList)\n    );\n\n    return runtime.isGeneratorFunction(outerFn)\n      ? iter // If outerFn is a generator, return the full iterator.\n      : iter.next().then(function(result) {\n          return result.done ? result.value : iter.next();\n        });\n  };\n\n  function makeInvokeMethod(innerFn, self, context) {\n    var state = GenStateSuspendedStart;\n\n    return function invoke(method, arg) {\n      if (state === GenStateExecuting) {\n        throw new Error(\"Generator is already running\");\n      }\n\n      if (state === GenStateCompleted) {\n        if (method === \"throw\") {\n          throw arg;\n        }\n\n        // Be forgiving, per 25.3.3.3.3 of the spec:\n        // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n        return doneResult();\n      }\n\n      context.method = method;\n      context.arg = arg;\n\n      while (true) {\n        var delegate = context.delegate;\n        if (delegate) {\n          var delegateResult = maybeInvokeDelegate(delegate, context);\n          if (delegateResult) {\n            if (delegateResult === ContinueSentinel) continue;\n            return delegateResult;\n          }\n        }\n\n        if (context.method === \"next\") {\n          // Setting context._sent for legacy support of Babel's\n          // function.sent implementation.\n          context.sent = context._sent = context.arg;\n\n        } else if (context.method === \"throw\") {\n          if (state === GenStateSuspendedStart) {\n            state = GenStateCompleted;\n            throw context.arg;\n          }\n\n          context.dispatchException(context.arg);\n\n        } else if (context.method === \"return\") {\n          context.abrupt(\"return\", context.arg);\n        }\n\n        state = GenStateExecuting;\n\n        var record = tryCatch(innerFn, self, context);\n        if (record.type === \"normal\") {\n          // If an exception is thrown from innerFn, we leave state ===\n          // GenStateExecuting and loop back for another invocation.\n          state = context.done\n            ? GenStateCompleted\n            : GenStateSuspendedYield;\n\n          if (record.arg === ContinueSentinel) {\n            continue;\n          }\n\n          return {\n            value: record.arg,\n            done: context.done\n          };\n\n        } else if (record.type === \"throw\") {\n          state = GenStateCompleted;\n          // Dispatch the exception by looping back around to the\n          // context.dispatchException(context.arg) call above.\n          context.method = \"throw\";\n          context.arg = record.arg;\n        }\n      }\n    };\n  }\n\n  // Call delegate.iterator[context.method](context.arg) and handle the\n  // result, either by returning a { value, done } result from the\n  // delegate iterator, or by modifying context.method and context.arg,\n  // setting context.delegate to null, and returning the ContinueSentinel.\n  function maybeInvokeDelegate(delegate, context) {\n    var method = delegate.iterator[context.method];\n    if (method === undefined) {\n      // A .throw or .return when the delegate iterator has no .throw\n      // method always terminates the yield* loop.\n      context.delegate = null;\n\n      if (context.method === \"throw\") {\n        if (delegate.iterator.return) {\n          // If the delegate iterator has a return method, give it a\n          // chance to clean up.\n          context.method = \"return\";\n          context.arg = undefined;\n          maybeInvokeDelegate(delegate, context);\n\n          if (context.method === \"throw\") {\n            // If maybeInvokeDelegate(context) changed context.method from\n            // \"return\" to \"throw\", let that override the TypeError below.\n            return ContinueSentinel;\n          }\n        }\n\n        context.method = \"throw\";\n        context.arg = new TypeError(\n          \"The iterator does not provide a 'throw' method\");\n      }\n\n      return ContinueSentinel;\n    }\n\n    var record = tryCatch(method, delegate.iterator, context.arg);\n\n    if (record.type === \"throw\") {\n      context.method = \"throw\";\n      context.arg = record.arg;\n      context.delegate = null;\n      return ContinueSentinel;\n    }\n\n    var info = record.arg;\n\n    if (! info) {\n      context.method = \"throw\";\n      context.arg = new TypeError(\"iterator result is not an object\");\n      context.delegate = null;\n      return ContinueSentinel;\n    }\n\n    if (info.done) {\n      // Assign the result of the finished delegate to the temporary\n      // variable specified by delegate.resultName (see delegateYield).\n      context[delegate.resultName] = info.value;\n\n      // Resume execution at the desired location (see delegateYield).\n      context.next = delegate.nextLoc;\n\n      // If context.method was \"throw\" but the delegate handled the\n      // exception, let the outer generator proceed normally. If\n      // context.method was \"next\", forget context.arg since it has been\n      // \"consumed\" by the delegate iterator. If context.method was\n      // \"return\", allow the original .return call to continue in the\n      // outer generator.\n      if (context.method !== \"return\") {\n        context.method = \"next\";\n        context.arg = undefined;\n      }\n\n    } else {\n      // Re-yield the result returned by the delegate method.\n      return info;\n    }\n\n    // The delegate iterator is finished, so forget it and continue with\n    // the outer generator.\n    context.delegate = null;\n    return ContinueSentinel;\n  }\n\n  // Define Generator.prototype.{next,throw,return} in terms of the\n  // unified ._invoke helper method.\n  defineIteratorMethods(Gp);\n\n  Gp[toStringTagSymbol] = \"Generator\";\n\n  // A Generator should always return itself as the iterator object when the\n  // @@iterator function is called on it. Some browsers' implementations of the\n  // iterator prototype chain incorrectly implement this, causing the Generator\n  // object to not be returned from this call. This ensures that doesn't happen.\n  // See https://github.com/facebook/regenerator/issues/274 for more details.\n  Gp[iteratorSymbol] = function() {\n    return this;\n  };\n\n  Gp.toString = function() {\n    return \"[object Generator]\";\n  };\n\n  function pushTryEntry(locs) {\n    var entry = { tryLoc: locs[0] };\n\n    if (1 in locs) {\n      entry.catchLoc = locs[1];\n    }\n\n    if (2 in locs) {\n      entry.finallyLoc = locs[2];\n      entry.afterLoc = locs[3];\n    }\n\n    this.tryEntries.push(entry);\n  }\n\n  function resetTryEntry(entry) {\n    var record = entry.completion || {};\n    record.type = \"normal\";\n    delete record.arg;\n    entry.completion = record;\n  }\n\n  function Context(tryLocsList) {\n    // The root entry object (effectively a try statement without a catch\n    // or a finally block) gives us a place to store values thrown from\n    // locations where there is no enclosing try statement.\n    this.tryEntries = [{ tryLoc: \"root\" }];\n    tryLocsList.forEach(pushTryEntry, this);\n    this.reset(true);\n  }\n\n  runtime.keys = function(object) {\n    var keys = [];\n    for (var key in object) {\n      keys.push(key);\n    }\n    keys.reverse();\n\n    // Rather than returning an object with a next method, we keep\n    // things simple and return the next function itself.\n    return function next() {\n      while (keys.length) {\n        var key = keys.pop();\n        if (key in object) {\n          next.value = key;\n          next.done = false;\n          return next;\n        }\n      }\n\n      // To avoid creating an additional object, we just hang the .value\n      // and .done properties off the next function object itself. This\n      // also ensures that the minifier will not anonymize the function.\n      next.done = true;\n      return next;\n    };\n  };\n\n  function values(iterable) {\n    if (iterable) {\n      var iteratorMethod = iterable[iteratorSymbol];\n      if (iteratorMethod) {\n        return iteratorMethod.call(iterable);\n      }\n\n      if (typeof iterable.next === \"function\") {\n        return iterable;\n      }\n\n      if (!isNaN(iterable.length)) {\n        var i = -1, next = function next() {\n          while (++i < iterable.length) {\n            if (hasOwn.call(iterable, i)) {\n              next.value = iterable[i];\n              next.done = false;\n              return next;\n            }\n          }\n\n          next.value = undefined;\n          next.done = true;\n\n          return next;\n        };\n\n        return next.next = next;\n      }\n    }\n\n    // Return an iterator with no values.\n    return { next: doneResult };\n  }\n  runtime.values = values;\n\n  function doneResult() {\n    return { value: undefined, done: true };\n  }\n\n  Context.prototype = {\n    constructor: Context,\n\n    reset: function(skipTempReset) {\n      this.prev = 0;\n      this.next = 0;\n      // Resetting context._sent for legacy support of Babel's\n      // function.sent implementation.\n      this.sent = this._sent = undefined;\n      this.done = false;\n      this.delegate = null;\n\n      this.method = \"next\";\n      this.arg = undefined;\n\n      this.tryEntries.forEach(resetTryEntry);\n\n      if (!skipTempReset) {\n        for (var name in this) {\n          // Not sure about the optimal order of these conditions:\n          if (name.charAt(0) === \"t\" &&\n              hasOwn.call(this, name) &&\n              !isNaN(+name.slice(1))) {\n            this[name] = undefined;\n          }\n        }\n      }\n    },\n\n    stop: function() {\n      this.done = true;\n\n      var rootEntry = this.tryEntries[0];\n      var rootRecord = rootEntry.completion;\n      if (rootRecord.type === \"throw\") {\n        throw rootRecord.arg;\n      }\n\n      return this.rval;\n    },\n\n    dispatchException: function(exception) {\n      if (this.done) {\n        throw exception;\n      }\n\n      var context = this;\n      function handle(loc, caught) {\n        record.type = \"throw\";\n        record.arg = exception;\n        context.next = loc;\n\n        if (caught) {\n          // If the dispatched exception was caught by a catch block,\n          // then let that catch block handle the exception normally.\n          context.method = \"next\";\n          context.arg = undefined;\n        }\n\n        return !! caught;\n      }\n\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        var record = entry.completion;\n\n        if (entry.tryLoc === \"root\") {\n          // Exception thrown outside of any try block that could handle\n          // it, so set the completion value of the entire function to\n          // throw the exception.\n          return handle(\"end\");\n        }\n\n        if (entry.tryLoc <= this.prev) {\n          var hasCatch = hasOwn.call(entry, \"catchLoc\");\n          var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n          if (hasCatch && hasFinally) {\n            if (this.prev < entry.catchLoc) {\n              return handle(entry.catchLoc, true);\n            } else if (this.prev < entry.finallyLoc) {\n              return handle(entry.finallyLoc);\n            }\n\n          } else if (hasCatch) {\n            if (this.prev < entry.catchLoc) {\n              return handle(entry.catchLoc, true);\n            }\n\n          } else if (hasFinally) {\n            if (this.prev < entry.finallyLoc) {\n              return handle(entry.finallyLoc);\n            }\n\n          } else {\n            throw new Error(\"try statement without catch or finally\");\n          }\n        }\n      }\n    },\n\n    abrupt: function(type, arg) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.tryLoc <= this.prev &&\n            hasOwn.call(entry, \"finallyLoc\") &&\n            this.prev < entry.finallyLoc) {\n          var finallyEntry = entry;\n          break;\n        }\n      }\n\n      if (finallyEntry &&\n          (type === \"break\" ||\n           type === \"continue\") &&\n          finallyEntry.tryLoc <= arg &&\n          arg <= finallyEntry.finallyLoc) {\n        // Ignore the finally entry if control is not jumping to a\n        // location outside the try/catch block.\n        finallyEntry = null;\n      }\n\n      var record = finallyEntry ? finallyEntry.completion : {};\n      record.type = type;\n      record.arg = arg;\n\n      if (finallyEntry) {\n        this.method = \"next\";\n        this.next = finallyEntry.finallyLoc;\n        return ContinueSentinel;\n      }\n\n      return this.complete(record);\n    },\n\n    complete: function(record, afterLoc) {\n      if (record.type === \"throw\") {\n        throw record.arg;\n      }\n\n      if (record.type === \"break\" ||\n          record.type === \"continue\") {\n        this.next = record.arg;\n      } else if (record.type === \"return\") {\n        this.rval = this.arg = record.arg;\n        this.method = \"return\";\n        this.next = \"end\";\n      } else if (record.type === \"normal\" && afterLoc) {\n        this.next = afterLoc;\n      }\n\n      return ContinueSentinel;\n    },\n\n    finish: function(finallyLoc) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.finallyLoc === finallyLoc) {\n          this.complete(entry.completion, entry.afterLoc);\n          resetTryEntry(entry);\n          return ContinueSentinel;\n        }\n      }\n    },\n\n    \"catch\": function(tryLoc) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.tryLoc === tryLoc) {\n          var record = entry.completion;\n          if (record.type === \"throw\") {\n            var thrown = record.arg;\n            resetTryEntry(entry);\n          }\n          return thrown;\n        }\n      }\n\n      // The context.catch method must only be called with a location\n      // argument that corresponds to a known catch block.\n      throw new Error(\"illegal catch attempt\");\n    },\n\n    delegateYield: function(iterable, resultName, nextLoc) {\n      this.delegate = {\n        iterator: values(iterable),\n        resultName: resultName,\n        nextLoc: nextLoc\n      };\n\n      if (this.method === \"next\") {\n        // Deliberately forget the last sent value so that we don't\n        // accidentally pass it on to the delegate.\n        this.arg = undefined;\n      }\n\n      return ContinueSentinel;\n    }\n  };\n})(\n  // In sloppy mode, unbound `this` refers to the global object, fallback to\n  // Function constructor if we're in global strict mode. That is sadly a form\n  // of indirect eval which violates Content Security Policy.\n  (function() { return this })() || Function(\"return this\")()\n);\n\n\n/***/ }),\n/* 172 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/*!\n * \n *         SimpleBar.js - v2.5.1\n *         Scrollbars, simpler.\n *         https://grsmto.github.io/simplebar/\n *         \n *         Made by Adrien Grsmto from a fork by Jonathan Nicol\n *         Under MIT License\n *       \n */\n!function(t,e){ true?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.SimpleBar=e():t.SimpleBar=e()}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,e),i.l=!0,i.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,\"a\",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p=\"\",e(e.s=27)}([function(t,e,n){var r=n(23)(\"wks\"),i=n(12),o=n(1).Symbol,s=\"function\"==typeof o;(t.exports=function(t){return r[t]||(r[t]=s&&o[t]||(s?o:i)(\"Symbol.\"+t))}).store=r},function(t,e){var n=t.exports=\"undefined\"!=typeof window&&window.Math==Math?window:\"undefined\"!=typeof self&&self.Math==Math?self:Function(\"return this\")();\"number\"==typeof __g&&(__g=n)},function(t,e){var n={}.hasOwnProperty;t.exports=function(t,e){return n.call(t,e)}},function(t,e){var n=t.exports={version:\"2.5.1\"};\"number\"==typeof __e&&(__e=n)},function(t,e,n){var r=n(5),i=n(11);t.exports=n(7)?function(t,e,n){return r.f(t,e,i(1,n))}:function(t,e,n){return t[e]=n,t}},function(t,e,n){var r=n(6),i=n(33),o=n(34),s=Object.defineProperty;e.f=n(7)?Object.defineProperty:function(t,e,n){if(r(t),e=o(e,!0),r(n),i)try{return s(t,e,n)}catch(t){}if(\"get\"in n||\"set\"in n)throw TypeError(\"Accessors not supported!\");return\"value\"in n&&(t[e]=n.value),t}},function(t,e,n){var r=n(10);t.exports=function(t){if(!r(t))throw TypeError(t+\" is not an object!\");return t}},function(t,e,n){t.exports=!n(16)(function(){return 7!=Object.defineProperty({},\"a\",{get:function(){return 7}}).a})},function(t,e){var n=Math.ceil,r=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?r:n)(t)}},function(t,e){t.exports=function(t){if(void 0==t)throw TypeError(\"Can't call method on  \"+t);return t}},function(t,e){t.exports=function(t){return\"object\"==typeof t?null!==t:\"function\"==typeof t}},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e){var n=0,r=Math.random();t.exports=function(t){return\"Symbol(\".concat(void 0===t?\"\":t,\")_\",(++n+r).toString(36))}},function(t,e){t.exports={}},function(t,e,n){var r=n(23)(\"keys\"),i=n(12);t.exports=function(t){return r[t]||(r[t]=i(t))}},function(t,e,n){var r=n(1),i=n(3),o=n(4),s=n(18),c=n(19),a=function(t,e,n){var u,l,f,h,d=t&a.F,p=t&a.G,v=t&a.S,b=t&a.P,y=t&a.B,m=p?r:v?r[e]||(r[e]={}):(r[e]||{}).prototype,g=p?i:i[e]||(i[e]={}),O=g.prototype||(g.prototype={});p&&(n=e);for(u in n)l=!d&&m&&void 0!==m[u],f=(l?m:n)[u],h=y&&l?c(f,r):b&&\"function\"==typeof f?c(Function.call,f):f,m&&s(m,u,f,t&a.U),g[u]!=f&&o(g,u,h),b&&O[u]!=f&&(O[u]=f)};r.core=i,a.F=1,a.G=2,a.S=4,a.P=8,a.B=16,a.W=32,a.U=64,a.R=128,t.exports=a},function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e,n){var r=n(10),i=n(1).document,o=r(i)&&r(i.createElement);t.exports=function(t){return o?i.createElement(t):{}}},function(t,e,n){var r=n(1),i=n(4),o=n(2),s=n(12)(\"src\"),c=Function.toString,a=(\"\"+c).split(\"toString\");n(3).inspectSource=function(t){return c.call(t)},(t.exports=function(t,e,n,c){var u=\"function\"==typeof n;u&&(o(n,\"name\")||i(n,\"name\",e)),t[e]!==n&&(u&&(o(n,s)||i(n,s,t[e]?\"\"+t[e]:a.join(String(e)))),t===r?t[e]=n:c?t[e]?t[e]=n:i(t,e,n):(delete t[e],i(t,e,n)))})(Function.prototype,\"toString\",function(){return\"function\"==typeof this&&this[s]||c.call(this)})},function(t,e,n){var r=n(35);t.exports=function(t,e,n){if(r(t),void 0===e)return t;switch(n){case 1:return function(n){return t.call(e,n)};case 2:return function(n,r){return t.call(e,n,r)};case 3:return function(n,r,i){return t.call(e,n,r,i)}}return function(){return t.apply(e,arguments)}}},function(t,e,n){var r=n(41),i=n(9);t.exports=function(t){return r(i(t))}},function(t,e){var n={}.toString;t.exports=function(t){return n.call(t).slice(8,-1)}},function(t,e,n){var r=n(8),i=Math.min;t.exports=function(t){return t>0?i(r(t),9007199254740991):0}},function(t,e,n){var r=n(1),i=r[\"__core-js_shared__\"]||(r[\"__core-js_shared__\"]={});t.exports=function(t){return i[t]||(i[t]={})}},function(t,e){t.exports=\"constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf\".split(\",\")},function(t,e,n){var r=n(5).f,i=n(2),o=n(0)(\"toStringTag\");t.exports=function(t,e,n){t&&!i(t=n?t:t.prototype,o)&&r(t,o,{configurable:!0,value:e})}},function(t,e,n){var r=n(9);t.exports=function(t){return Object(r(t))}},function(t,e,n){\"use strict\";function r(t){return t&&t.__esModule?t:{default:t}}function i(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}function o(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function s(t,e,n){return e&&o(t.prototype,e),n&&o(t,n),t}Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=void 0,n(28);var c=r(n(53)),a=r(n(54)),u=r(n(56));n(57),Object.assign=n(58);var l=function(){function t(e,n){i(this,t),this.el=e,this.flashTimeout,this.contentEl,this.scrollContentEl,this.dragOffset={x:0,y:0},this.isVisible={x:!0,y:!0},this.scrollOffsetAttr={x:\"scrollLeft\",y:\"scrollTop\"},this.sizeAttr={x:\"offsetWidth\",y:\"offsetHeight\"},this.scrollSizeAttr={x:\"scrollWidth\",y:\"scrollHeight\"},this.offsetAttr={x:\"left\",y:\"top\"},this.globalObserver,this.mutationObserver,this.resizeObserver,this.currentAxis,this.options=Object.assign({},t.defaultOptions,n),this.classNames=this.options.classNames,this.scrollbarWidth=(0,c.default)(),this.offsetSize=20,this.flashScrollbar=this.flashScrollbar.bind(this),this.onDragY=this.onDragY.bind(this),this.onDragX=this.onDragX.bind(this),this.onScrollY=this.onScrollY.bind(this),this.onScrollX=this.onScrollX.bind(this),this.drag=this.drag.bind(this),this.onEndDrag=this.onEndDrag.bind(this),this.onMouseEnter=this.onMouseEnter.bind(this),this.recalculate=(0,a.default)(this.recalculate,100,{leading:!0,trailing:!1}),this.init()}return s(t,[{key:\"init\",value:function(){this.el.SimpleBar=this,this.initDOM(),this.scrollbarX=this.trackX.querySelector(\".\".concat(this.classNames.scrollbar)),this.scrollbarY=this.trackY.querySelector(\".\".concat(this.classNames.scrollbar)),this.scrollContentEl.style.paddingRight=\"\".concat(this.scrollbarWidth||this.offsetSize,\"px\"),this.scrollContentEl.style.marginBottom=\"-\".concat(2*this.scrollbarWidth||this.offsetSize,\"px\"),this.contentEl.style.paddingBottom=\"\".concat(this.scrollbarWidth||this.offsetSize,\"px\"),0!==this.scrollbarWidth&&(this.contentEl.style.marginRight=\"-\".concat(this.scrollbarWidth,\"px\")),this.recalculate(),this.initListeners()}},{key:\"initDOM\",value:function(){var t=this;if(Array.from(this.el.children).filter(function(e){return e.classList.contains(t.classNames.scrollContent)}).length)this.trackX=this.el.querySelector(\".\".concat(this.classNames.track,\".horizontal\")),this.trackY=this.el.querySelector(\".\".concat(this.classNames.track,\".vertical\")),this.scrollContentEl=this.el.querySelector(\".\".concat(this.classNames.scrollContent)),this.contentEl=this.el.querySelector(\".\".concat(this.classNames.content));else{for(this.scrollContentEl=document.createElement(\"div\"),this.contentEl=document.createElement(\"div\"),this.scrollContentEl.classList.add(this.classNames.scrollContent),this.contentEl.classList.add(this.classNames.content);this.el.firstChild;)this.contentEl.appendChild(this.el.firstChild);this.scrollContentEl.appendChild(this.contentEl),this.el.appendChild(this.scrollContentEl)}if(!this.trackX||!this.trackY){var e=document.createElement(\"div\"),n=document.createElement(\"div\");e.classList.add(this.classNames.track),n.classList.add(this.classNames.scrollbar),e.appendChild(n),this.trackX=e.cloneNode(!0),this.trackX.classList.add(\"horizontal\"),this.trackY=e.cloneNode(!0),this.trackY.classList.add(\"vertical\"),this.el.insertBefore(this.trackX,this.el.firstChild),this.el.insertBefore(this.trackY,this.el.firstChild)}this.el.setAttribute(\"data-simplebar\",\"init\")}},{key:\"initListeners\",value:function(){var t=this;this.options.autoHide&&this.el.addEventListener(\"mouseenter\",this.onMouseEnter),this.scrollbarY.addEventListener(\"mousedown\",this.onDragY),this.scrollbarX.addEventListener(\"mousedown\",this.onDragX),this.scrollContentEl.addEventListener(\"scroll\",this.onScrollY),this.contentEl.addEventListener(\"scroll\",this.onScrollX),\"undefined\"!=typeof MutationObserver&&(this.mutationObserver=new MutationObserver(function(e){e.forEach(function(e){(t.isChildNode(e.target)||e.addedNodes.length)&&t.recalculate()})}),this.mutationObserver.observe(this.el,{attributes:!0,childList:!0,characterData:!0,subtree:!0})),this.resizeObserver=new u.default(this.recalculate.bind(this)),this.resizeObserver.observe(this.el)}},{key:\"removeListeners\",value:function(){this.options.autoHide&&this.el.removeEventListener(\"mouseenter\",this.onMouseEnter),this.scrollbarX.removeEventListener(\"mousedown\",this.onDragX),this.scrollbarY.removeEventListener(\"mousedown\",this.onDragY),this.scrollContentEl.removeEventListener(\"scroll\",this.onScrollY),this.contentEl.removeEventListener(\"scroll\",this.onScrollX),this.mutationObserver.disconnect(),this.resizeObserver.disconnect()}},{key:\"onDragX\",value:function(t){this.onDrag(t,\"x\")}},{key:\"onDragY\",value:function(t){this.onDrag(t,\"y\")}},{key:\"onDrag\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"y\";t.preventDefault();var n=\"y\"===e?this.scrollbarY:this.scrollbarX,r=\"y\"===e?t.pageY:t.pageX;this.dragOffset[e]=r-n.getBoundingClientRect()[this.offsetAttr[e]],this.currentAxis=e,document.addEventListener(\"mousemove\",this.drag),document.addEventListener(\"mouseup\",this.onEndDrag)}},{key:\"drag\",value:function(t){var e,n,r;t.preventDefault(),\"y\"===this.currentAxis?(e=t.pageY,n=this.trackY,r=this.scrollContentEl):(e=t.pageX,n=this.trackX,r=this.contentEl);var i=e-n.getBoundingClientRect()[this.offsetAttr[this.currentAxis]]-this.dragOffset[this.currentAxis],o=i/n[this.sizeAttr[this.currentAxis]],s=o*this.contentEl[this.scrollSizeAttr[this.currentAxis]];r[this.scrollOffsetAttr[this.currentAxis]]=s}},{key:\"onEndDrag\",value:function(){document.removeEventListener(\"mousemove\",this.drag),document.removeEventListener(\"mouseup\",this.onEndDrag)}},{key:\"resizeScrollbar\",value:function(){var t,e,n,r,i,o=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"y\";\"x\"===o?(t=this.trackX,e=this.scrollbarX,n=this.contentEl[this.scrollOffsetAttr[o]],r=this.contentSizeX,i=this.scrollbarXSize):(t=this.trackY,e=this.scrollbarY,n=this.scrollContentEl[this.scrollOffsetAttr[o]],r=this.contentSizeY,i=this.scrollbarYSize);var s=i/r,c=n/(r-i),a=Math.max(~~(s*(i-2))-2,this.options.scrollbarMinSize),u=~~((i-4-a)*c+2);this.isVisible[o]=i<r,this.isVisible[o]?(t.style.visibility=\"visible\",\"x\"===o?(e.style.left=\"\".concat(u,\"px\"),e.style.width=\"\".concat(a,\"px\")):(e.style.top=\"\".concat(u,\"px\"),e.style.height=\"\".concat(a,\"px\"))):t.style.visibility=\"hidden\"}},{key:\"onScrollX\",value:function(){this.flashScrollbar(\"x\")}},{key:\"onScrollY\",value:function(){this.flashScrollbar(\"y\")}},{key:\"onMouseEnter\",value:function(){this.flashScrollbar(\"x\"),this.flashScrollbar(\"y\")}},{key:\"flashScrollbar\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"y\";this.resizeScrollbar(t),this.showScrollbar(t)}},{key:\"showScrollbar\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"y\";this.isVisible[t]&&(\"x\"===t?this.scrollbarX.classList.add(\"visible\"):this.scrollbarY.classList.add(\"visible\"),this.options.autoHide&&(\"number\"==typeof this.flashTimeout&&window.clearTimeout(this.flashTimeout),this.flashTimeout=window.setTimeout(this.hideScrollbar.bind(this),1e3)))}},{key:\"hideScrollbar\",value:function(){this.scrollbarX.classList.remove(\"visible\"),this.scrollbarY.classList.remove(\"visible\"),\"number\"==typeof this.flashTimeout&&window.clearTimeout(this.flashTimeout)}},{key:\"recalculate\",value:function(){this.contentSizeX=this.contentEl[this.scrollSizeAttr.x],this.contentSizeY=this.contentEl[this.scrollSizeAttr.y]-(this.scrollbarWidth||this.offsetSize),this.scrollbarXSize=this.trackX[this.sizeAttr.x],this.scrollbarYSize=this.trackY[this.sizeAttr.y],this.resizeScrollbar(\"x\"),this.resizeScrollbar(\"y\"),this.options.autoHide||(this.showScrollbar(\"x\"),this.showScrollbar(\"y\"))}},{key:\"getScrollElement\",value:function(){return this.scrollContentEl}},{key:\"getContentElement\",value:function(){return this.contentEl}},{key:\"unMount\",value:function(){this.removeListeners(),this.el.SimpleBar=null}},{key:\"isChildNode\",value:function(t){return null!==t&&(t===this.el||this.isChildNode(t.parentNode))}}],[{key:\"initHtmlApi\",value:function(){this.initDOMLoadedElements=this.initDOMLoadedElements.bind(this),\"undefined\"!=typeof MutationObserver&&(this.globalObserver=new MutationObserver(function(e){e.forEach(function(e){Array.from(e.addedNodes).forEach(function(e){1===e.nodeType&&(e.hasAttribute(\"data-simplebar\")?!e.SimpleBar&&new t(e,t.getElOptions(e)):Array.from(e.querySelectorAll(\"[data-simplebar]\")).forEach(function(e){!e.SimpleBar&&new t(e,t.getElOptions(e))}))}),Array.from(e.removedNodes).forEach(function(t){1===t.nodeType&&(t.hasAttribute(\"data-simplebar\")?t.SimpleBar&&t.SimpleBar.unMount():Array.from(t.querySelectorAll(\"[data-simplebar]\")).forEach(function(t){t.SimpleBar&&t.SimpleBar.unMount()}))})})}),this.globalObserver.observe(document,{childList:!0,subtree:!0})),\"complete\"===document.readyState||\"loading\"!==document.readyState&&!document.documentElement.doScroll?window.setTimeout(this.initDOMLoadedElements.bind(this)):(document.addEventListener(\"DOMContentLoaded\",this.initDOMLoadedElements),window.addEventListener(\"load\",this.initDOMLoadedElements))}},{key:\"getElOptions\",value:function(e){return Object.keys(t.htmlAttributes).reduce(function(n,r){var i=t.htmlAttributes[r];return e.hasAttribute(i)&&(n[r]=JSON.parse(e.getAttribute(i)||!0)),n},{})}},{key:\"removeObserver\",value:function(){this.globalObserver.disconnect()}},{key:\"initDOMLoadedElements\",value:function(){document.removeEventListener(\"DOMContentLoaded\",this.initDOMLoadedElements),window.removeEventListener(\"load\",this.initDOMLoadedElements),Array.from(document.querySelectorAll(\"[data-simplebar]\")).forEach(function(e){e.SimpleBar||new t(e,t.getElOptions(e))})}},{key:\"defaultOptions\",get:function(){return{autoHide:!0,classNames:{content:\"simplebar-content\",scrollContent:\"simplebar-scroll-content\",scrollbar:\"simplebar-scrollbar\",track:\"simplebar-track\"},scrollbarMinSize:25}}},{key:\"htmlAttributes\",get:function(){return{autoHide:\"data-simplebar-autohide\",scrollbarMinSize:\"data-simplebar-scrollbar-min-size\"}}}]),t}();e.default=l,l.initHtmlApi()},function(t,e,n){n(29),n(46),t.exports=n(3).Array.from},function(t,e,n){\"use strict\";var r=n(30)(!0);n(31)(String,\"String\",function(t){this._t=String(t),this._i=0},function(){var t,e=this._t,n=this._i;return n>=e.length?{value:void 0,done:!0}:(t=r(e,n),this._i+=t.length,{value:t,done:!1})})},function(t,e,n){var r=n(8),i=n(9);t.exports=function(t){return function(e,n){var o,s,c=String(i(e)),a=r(n),u=c.length;return a<0||a>=u?t?\"\":void 0:(o=c.charCodeAt(a),o<55296||o>56319||a+1===u||(s=c.charCodeAt(a+1))<56320||s>57343?t?c.charAt(a):o:t?c.slice(a,a+2):s-56320+(o-55296<<10)+65536)}}},function(t,e,n){\"use strict\";var r=n(32),i=n(15),o=n(18),s=n(4),c=n(2),a=n(13),u=n(36),l=n(25),f=n(45),h=n(0)(\"iterator\"),d=!([].keys&&\"next\"in[].keys()),p=function(){return this};t.exports=function(t,e,n,v,b,y,m){u(n,e,v);var g,O,E,_=function(t){if(!d&&t in A)return A[t];switch(t){case\"keys\":case\"values\":return function(){return new n(this,t)}}return function(){return new n(this,t)}},x=e+\" Iterator\",w=\"values\"==b,S=!1,A=t.prototype,k=A[h]||A[\"@@iterator\"]||b&&A[b],j=k||_(b),M=b?w?_(\"entries\"):j:void 0,L=\"Array\"==e?A.entries||k:k;if(L&&(E=f(L.call(new t)))!==Object.prototype&&E.next&&(l(E,x,!0),r||c(E,h)||s(E,h,p)),w&&k&&\"values\"!==k.name&&(S=!0,j=function(){return k.call(this)}),r&&!m||!d&&!S&&A[h]||s(A,h,j),a[e]=j,a[x]=p,b)if(g={values:w?j:_(\"values\"),keys:y?j:_(\"keys\"),entries:M},m)for(O in g)O in A||o(A,O,g[O]);else i(i.P+i.F*(d||S),e,g);return g}},function(t,e){t.exports=!1},function(t,e,n){t.exports=!n(7)&&!n(16)(function(){return 7!=Object.defineProperty(n(17)(\"div\"),\"a\",{get:function(){return 7}}).a})},function(t,e,n){var r=n(10);t.exports=function(t,e){if(!r(t))return t;var n,i;if(e&&\"function\"==typeof(n=t.toString)&&!r(i=n.call(t)))return i;if(\"function\"==typeof(n=t.valueOf)&&!r(i=n.call(t)))return i;if(!e&&\"function\"==typeof(n=t.toString)&&!r(i=n.call(t)))return i;throw TypeError(\"Can't convert object to primitive value\")}},function(t,e){t.exports=function(t){if(\"function\"!=typeof t)throw TypeError(t+\" is not a function!\");return t}},function(t,e,n){\"use strict\";var r=n(37),i=n(11),o=n(25),s={};n(4)(s,n(0)(\"iterator\"),function(){return this}),t.exports=function(t,e,n){t.prototype=r(s,{next:i(1,n)}),o(t,e+\" Iterator\")}},function(t,e,n){var r=n(6),i=n(38),o=n(24),s=n(14)(\"IE_PROTO\"),c=function(){},a=function(){var t,e=n(17)(\"iframe\"),r=o.length;for(e.style.display=\"none\",n(44).appendChild(e),e.src=\"javascript:\",t=e.contentWindow.document,t.open(),t.write(\"<script>document.F=Object<\\/script>\"),t.close(),a=t.F;r--;)delete a.prototype[o[r]];return a()};t.exports=Object.create||function(t,e){var n;return null!==t?(c.prototype=r(t),n=new c,c.prototype=null,n[s]=t):n=a(),void 0===e?n:i(n,e)}},function(t,e,n){var r=n(5),i=n(6),o=n(39);t.exports=n(7)?Object.defineProperties:function(t,e){i(t);for(var n,s=o(e),c=s.length,a=0;c>a;)r.f(t,n=s[a++],e[n]);return t}},function(t,e,n){var r=n(40),i=n(24);t.exports=Object.keys||function(t){return r(t,i)}},function(t,e,n){var r=n(2),i=n(20),o=n(42)(!1),s=n(14)(\"IE_PROTO\");t.exports=function(t,e){var n,c=i(t),a=0,u=[];for(n in c)n!=s&&r(c,n)&&u.push(n);for(;e.length>a;)r(c,n=e[a++])&&(~o(u,n)||u.push(n));return u}},function(t,e,n){var r=n(21);t.exports=Object(\"z\").propertyIsEnumerable(0)?Object:function(t){return\"String\"==r(t)?t.split(\"\"):Object(t)}},function(t,e,n){var r=n(20),i=n(22),o=n(43);t.exports=function(t){return function(e,n,s){var c,a=r(e),u=i(a.length),l=o(s,u);if(t&&n!=n){for(;u>l;)if((c=a[l++])!=c)return!0}else for(;u>l;l++)if((t||l in a)&&a[l]===n)return t||l||0;return!t&&-1}}},function(t,e,n){var r=n(8),i=Math.max,o=Math.min;t.exports=function(t,e){return t=r(t),t<0?i(t+e,0):o(t,e)}},function(t,e,n){var r=n(1).document;t.exports=r&&r.documentElement},function(t,e,n){var r=n(2),i=n(26),o=n(14)(\"IE_PROTO\"),s=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=i(t),r(t,o)?t[o]:\"function\"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?s:null}},function(t,e,n){\"use strict\";var r=n(19),i=n(15),o=n(26),s=n(47),c=n(48),a=n(22),u=n(49),l=n(50);i(i.S+i.F*!n(52)(function(t){Array.from(t)}),\"Array\",{from:function(t){var e,n,i,f,h=o(t),d=\"function\"==typeof this?this:Array,p=arguments.length,v=p>1?arguments[1]:void 0,b=void 0!==v,y=0,m=l(h);if(b&&(v=r(v,p>2?arguments[2]:void 0,2)),void 0==m||d==Array&&c(m))for(e=a(h.length),n=new d(e);e>y;y++)u(n,y,b?v(h[y],y):h[y]);else for(f=m.call(h),n=new d;!(i=f.next()).done;y++)u(n,y,b?s(f,v,[i.value,y],!0):i.value);return n.length=y,n}})},function(t,e,n){var r=n(6);t.exports=function(t,e,n,i){try{return i?e(r(n)[0],n[1]):e(n)}catch(e){var o=t.return;throw void 0!==o&&r(o.call(t)),e}}},function(t,e,n){var r=n(13),i=n(0)(\"iterator\"),o=Array.prototype;t.exports=function(t){return void 0!==t&&(r.Array===t||o[i]===t)}},function(t,e,n){\"use strict\";var r=n(5),i=n(11);t.exports=function(t,e,n){e in t?r.f(t,e,i(0,n)):t[e]=n}},function(t,e,n){var r=n(51),i=n(0)(\"iterator\"),o=n(13);t.exports=n(3).getIteratorMethod=function(t){if(void 0!=t)return t[i]||t[\"@@iterator\"]||o[r(t)]}},function(t,e,n){var r=n(21),i=n(0)(\"toStringTag\"),o=\"Arguments\"==r(function(){return arguments}()),s=function(t,e){try{return t[e]}catch(t){}};t.exports=function(t){var e,n,c;return void 0===t?\"Undefined\":null===t?\"Null\":\"string\"==typeof(n=s(e=Object(t),i))?n:o?r(e):\"Object\"==(c=r(e))&&\"function\"==typeof e.callee?\"Arguments\":c}},function(t,e,n){var r=n(0)(\"iterator\"),i=!1;try{var o=[7][r]();o.return=function(){i=!0},Array.from(o,function(){throw 2})}catch(t){}t.exports=function(t,e){if(!e&&!i)return!1;var n=!1;try{var o=[7],s=o[r]();s.next=function(){return{done:n=!0}},o[r]=function(){return s},t(o)}catch(t){}return n}},function(t,e,n){var r,i,o;/*! scrollbarWidth.js v0.1.3 | felixexter | MIT | https://github.com/felixexter/scrollbarWidth */\n!function(n,s){i=[],r=s,void 0!==(o=\"function\"==typeof r?r.apply(e,i):r)&&(t.exports=o)}(0,function(){\"use strict\";function t(){if(\"undefined\"==typeof document)return 0;var t,e=document.body,n=document.createElement(\"div\"),r=n.style;return r.position=\"absolute\",r.top=r.left=\"-9999px\",r.width=r.height=\"100px\",r.overflow=\"scroll\",e.appendChild(n),t=n.offsetWidth-n.clientWidth,e.removeChild(n),t}return t})},function(t,e,n){(function(e){function n(t,e,n){function i(e){var n=v,r=b;return v=b=void 0,w=e,m=t.apply(r,n)}function o(t){return w=t,g=setTimeout(l,e),S?i(t):m}function a(t){var n=t-x,r=t-w,i=e-n;return A?E(i,y-r):i}function u(t){var n=t-x,r=t-w;return void 0===x||n>=e||n<0||A&&r>=y}function l(){var t=_();if(u(t))return f(t);g=setTimeout(l,a(t))}function f(t){return g=void 0,k&&v?i(t):(v=b=void 0,m)}function h(){void 0!==g&&clearTimeout(g),w=0,v=x=b=g=void 0}function d(){return void 0===g?m:f(_())}function p(){var t=_(),n=u(t);if(v=arguments,b=this,x=t,n){if(void 0===g)return o(x);if(A)return g=setTimeout(l,e),i(x)}return void 0===g&&(g=setTimeout(l,e)),m}var v,b,y,m,g,x,w=0,S=!1,A=!1,k=!0;if(\"function\"!=typeof t)throw new TypeError(c);return e=s(e)||0,r(n)&&(S=!!n.leading,A=\"maxWait\"in n,y=A?O(s(n.maxWait)||0,e):y,k=\"trailing\"in n?!!n.trailing:k),p.cancel=h,p.flush=d,p}function r(t){var e=typeof t;return!!t&&(\"object\"==e||\"function\"==e)}function i(t){return!!t&&\"object\"==typeof t}function o(t){return\"symbol\"==typeof t||i(t)&&g.call(t)==u}function s(t){if(\"number\"==typeof t)return t;if(o(t))return a;if(r(t)){var e=\"function\"==typeof t.valueOf?t.valueOf():t;t=r(e)?e+\"\":e}if(\"string\"!=typeof t)return 0===t?t:+t;t=t.replace(l,\"\");var n=h.test(t);return n||d.test(t)?p(t.slice(2),n?2:8):f.test(t)?a:+t}var c=\"Expected a function\",a=NaN,u=\"[object Symbol]\",l=/^\\s+|\\s+$/g,f=/^[-+]0x[0-9a-f]+$/i,h=/^0b[01]+$/i,d=/^0o[0-7]+$/i,p=parseInt,v=\"object\"==typeof e&&e&&e.Object===Object&&e,b=\"object\"==typeof self&&self&&self.Object===Object&&self,y=v||b||Function(\"return this\")(),m=Object.prototype,g=m.toString,O=Math.max,E=Math.min,_=function(){return y.Date.now()};t.exports=n}).call(e,n(55))},function(t,e){var n;n=function(){return this}();try{n=n||Function(\"return this\")()||(0,eval)(\"this\")}catch(t){\"object\"==typeof window&&(n=window)}t.exports=n},function(t,e,n){\"use strict\";function r(t){return parseFloat(t)||0}function i(t){return Array.prototype.slice.call(arguments,1).reduce(function(e,n){return e+r(t[\"border-\"+n+\"-width\"])},0)}function o(t){for(var e=[\"top\",\"right\",\"bottom\",\"left\"],n={},i=0,o=e;i<o.length;i+=1){var s=o[i],c=t[\"padding-\"+s];n[s]=r(c)}return n}function s(t){var e=t.getBBox();return f(0,0,e.width,e.height)}function c(t){var e=t.clientWidth,n=t.clientHeight;if(!e&&!n)return _;var s=getComputedStyle(t),c=o(s),u=c.left+c.right,l=c.top+c.bottom,h=r(s.width),d=r(s.height);if(\"border-box\"===s.boxSizing&&(Math.round(h+u)!==e&&(h-=i(s,\"left\",\"right\")+u),Math.round(d+l)!==n&&(d-=i(s,\"top\",\"bottom\")+l)),!a(t)){var p=Math.round(h+u)-e,v=Math.round(d+l)-n;1!==Math.abs(p)&&(h-=p),1!==Math.abs(v)&&(d-=v)}return f(c.left,c.top,h,d)}function a(t){return t===document.documentElement}function u(t){return d?x(t)?s(t):c(t):_}function l(t){var e=t.x,n=t.y,r=t.width,i=t.height,o=\"undefined\"!=typeof DOMRectReadOnly?DOMRectReadOnly:Object,s=Object.create(o.prototype);return E(s,{x:e,y:n,width:r,height:i,top:n,right:e+r,bottom:i+n,left:e}),s}function f(t,e,n,r){return{x:t,y:e,width:n,height:r}}Object.defineProperty(e,\"__esModule\",{value:!0});var h=function(){function t(t,e){var n=-1;return t.some(function(t,r){return t[0]===e&&(n=r,!0)}),n}return\"undefined\"!=typeof Map?Map:function(){function e(){this.__entries__=[]}var n={size:{}};return n.size.get=function(){return this.__entries__.length},e.prototype.get=function(e){var n=t(this.__entries__,e),r=this.__entries__[n];return r&&r[1]},e.prototype.set=function(e,n){var r=t(this.__entries__,e);~r?this.__entries__[r][1]=n:this.__entries__.push([e,n])},e.prototype.delete=function(e){var n=this.__entries__,r=t(n,e);~r&&n.splice(r,1)},e.prototype.has=function(e){return!!~t(this.__entries__,e)},e.prototype.clear=function(){this.__entries__.splice(0)},e.prototype.forEach=function(t,e){void 0===e&&(e=null);for(var n=0,r=this.__entries__;n<r.length;n+=1){var i=r[n];t.call(e,i[1],i[0])}},Object.defineProperties(e.prototype,n),e}()}(),d=\"undefined\"!=typeof window&&\"undefined\"!=typeof document&&window.document===document,p=function(){return\"function\"==typeof requestAnimationFrame?requestAnimationFrame:function(t){return setTimeout(function(){return t(Date.now())},1e3/60)}}(),v=2,b=function(t,e){function n(){o&&(o=!1,t()),s&&i()}function r(){p(n)}function i(){var t=Date.now();if(o){if(t-c<v)return;s=!0}else o=!0,s=!1,setTimeout(r,e);c=t}var o=!1,s=!1,c=0;return i},y=[\"top\",\"right\",\"bottom\",\"left\",\"width\",\"height\",\"size\",\"weight\"],m=\"undefined\"!=typeof navigator&&/Trident\\/.*rv:11/.test(navigator.userAgent),g=\"undefined\"!=typeof MutationObserver&&!m,O=function(){this.connected_=!1,this.mutationEventsAdded_=!1,this.mutationsObserver_=null,this.observers_=[],this.onTransitionEnd_=this.onTransitionEnd_.bind(this),this.refresh=b(this.refresh.bind(this),20)};O.prototype.addObserver=function(t){~this.observers_.indexOf(t)||this.observers_.push(t),this.connected_||this.connect_()},O.prototype.removeObserver=function(t){var e=this.observers_,n=e.indexOf(t);~n&&e.splice(n,1),!e.length&&this.connected_&&this.disconnect_()},O.prototype.refresh=function(){this.updateObservers_()&&this.refresh()},O.prototype.updateObservers_=function(){var t=this.observers_.filter(function(t){return t.gatherActive(),t.hasActive()});return t.forEach(function(t){return t.broadcastActive()}),t.length>0},O.prototype.connect_=function(){d&&!this.connected_&&(document.addEventListener(\"transitionend\",this.onTransitionEnd_),window.addEventListener(\"resize\",this.refresh),g?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener(\"DOMSubtreeModified\",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},O.prototype.disconnect_=function(){d&&this.connected_&&(document.removeEventListener(\"transitionend\",this.onTransitionEnd_),window.removeEventListener(\"resize\",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener(\"DOMSubtreeModified\",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},O.prototype.onTransitionEnd_=function(t){var e=t.propertyName;y.some(function(t){return!!~e.indexOf(t)})&&this.refresh()},O.getInstance=function(){return this.instance_||(this.instance_=new O),this.instance_},O.instance_=null;var E=function(t,e){for(var n=0,r=Object.keys(e);n<r.length;n+=1){var i=r[n];Object.defineProperty(t,i,{value:e[i],enumerable:!1,writable:!1,configurable:!0})}return t},_=f(0,0,0,0),x=function(){return\"undefined\"!=typeof SVGGraphicsElement?function(t){return t instanceof SVGGraphicsElement}:function(t){return t instanceof SVGElement&&\"function\"==typeof t.getBBox}}(),w=function(t){this.broadcastWidth=0,this.broadcastHeight=0,this.contentRect_=f(0,0,0,0),this.target=t};w.prototype.isActive=function(){var t=u(this.target);return this.contentRect_=t,t.width!==this.broadcastWidth||t.height!==this.broadcastHeight},w.prototype.broadcastRect=function(){var t=this.contentRect_;return this.broadcastWidth=t.width,this.broadcastHeight=t.height,t};var S=function(t,e){var n=l(e);E(this,{target:t,contentRect:n})},A=function(t,e,n){if(\"function\"!=typeof t)throw new TypeError(\"The callback provided as parameter 1 is not a function.\");this.activeObservations_=[],this.observations_=new h,this.callback_=t,this.controller_=e,this.callbackCtx_=n};A.prototype.observe=function(t){if(!arguments.length)throw new TypeError(\"1 argument required, but only 0 present.\");if(\"undefined\"!=typeof Element&&Element instanceof Object){if(!(t instanceof Element))throw new TypeError('parameter 1 is not of type \"Element\".');var e=this.observations_;e.has(t)||(e.set(t,new w(t)),this.controller_.addObserver(this),this.controller_.refresh())}},A.prototype.unobserve=function(t){if(!arguments.length)throw new TypeError(\"1 argument required, but only 0 present.\");if(\"undefined\"!=typeof Element&&Element instanceof Object){if(!(t instanceof Element))throw new TypeError('parameter 1 is not of type \"Element\".');var e=this.observations_;e.has(t)&&(e.delete(t),e.size||this.controller_.removeObserver(this))}},A.prototype.disconnect=function(){this.clearActive(),this.observations_.clear(),this.controller_.removeObserver(this)},A.prototype.gatherActive=function(){var t=this;this.clearActive(),this.observations_.forEach(function(e){e.isActive()&&t.activeObservations_.push(e)})},A.prototype.broadcastActive=function(){if(this.hasActive()){var t=this.callbackCtx_,e=this.activeObservations_.map(function(t){return new S(t.target,t.broadcastRect())});this.callback_.call(t,e,t),this.clearActive()}},A.prototype.clearActive=function(){this.activeObservations_.splice(0)},A.prototype.hasActive=function(){return this.activeObservations_.length>0};var k=\"undefined\"!=typeof WeakMap?new WeakMap:new h,j=function(t){if(!(this instanceof j))throw new TypeError(\"Cannot call a class as a function\");if(!arguments.length)throw new TypeError(\"1 argument required, but only 0 present.\");var e=O.getInstance(),n=new A(t,e,this);k.set(this,n)};[\"observe\",\"unobserve\",\"disconnect\"].forEach(function(t){j.prototype[t]=function(){return(e=k.get(this))[t].apply(e,arguments);var e}});var M=function(){return\"undefined\"!=typeof ResizeObserver?ResizeObserver:j}();e.default=M},function(t,e){},function(t,e,n){\"use strict\";function r(t){if(null===t||void 0===t)throw new TypeError(\"Object.assign cannot be called with null or undefined\");return Object(t)}/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\nvar i=Object.getOwnPropertySymbols,o=Object.prototype.hasOwnProperty,s=Object.prototype.propertyIsEnumerable;t.exports=function(){try{if(!Object.assign)return!1;var t=new String(\"abc\");if(t[5]=\"de\",\"5\"===Object.getOwnPropertyNames(t)[0])return!1;for(var e={},n=0;n<10;n++)e[\"_\"+String.fromCharCode(n)]=n;if(\"0123456789\"!==Object.getOwnPropertyNames(e).map(function(t){return e[t]}).join(\"\"))return!1;var r={};return\"abcdefghijklmnopqrst\".split(\"\").forEach(function(t){r[t]=t}),\"abcdefghijklmnopqrst\"===Object.keys(Object.assign({},r)).join(\"\")}catch(t){return!1}}()?Object.assign:function(t,e){for(var n,c,a=r(t),u=1;u<arguments.length;u++){n=Object(arguments[u]);for(var l in n)o.call(n,l)&&(a[l]=n[l]);if(i){c=i(n);for(var f=0;f<c.length;f++)s.call(n,c[f])&&(a[c[f]]=n[c[f]])}}return a}}]).default});\n\n/***/ })\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// js/app.min.js"," \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// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\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, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\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 \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 89);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 7a8a56ec867747e49762","/*!\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\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/jquery/dist/jquery.js\n// module id = 0\n// module chunks = 0","\"use strict\";\n\nexports.__esModule = true;\n\nexports.default = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/babel-runtime/helpers/classCallCheck.js\n// module id = 1\n// module chunks = 0","\"use strict\";\n\nexports.__esModule = true;\n\nvar _defineProperty = require(\"../core-js/object/define-property\");\n\nvar _defineProperty2 = _interopRequireDefault(_defineProperty);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = 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      (0, _defineProperty2.default)(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// WEBPACK FOOTER\n// ../~/babel-runtime/helpers/createClass.js\n// module id = 2\n// module chunks = 0","var core = module.exports = { version: '2.5.1' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_core.js\n// module id = 3\n// module chunks = 0","module.exports = { \"default\": require(\"core-js/library/fn/array/from\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/babel-runtime/core-js/array/from.js\n// module id = 4\n// module chunks = 0","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n  ? window : typeof self != 'undefined' && self.Math == Math ? self\n  // eslint-disable-next-line no-new-func\n  : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_global.js\n// module id = 5\n// module chunks = 0","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n  return store[name] || (store[name] =\n    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_wks.js\n// module id = 6\n// module chunks = 0","\"use strict\";\n\nexports.__esModule = true;\n\nvar _iterator = require(\"../core-js/symbol/iterator\");\n\nvar _iterator2 = _interopRequireDefault(_iterator);\n\nvar _symbol = require(\"../core-js/symbol\");\n\nvar _symbol2 = _interopRequireDefault(_symbol);\n\nvar _typeof = typeof _symbol2.default === \"function\" && typeof _iterator2.default === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === \"function\" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? \"symbol\" : typeof obj; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = typeof _symbol2.default === \"function\" && _typeof(_iterator2.default) === \"symbol\" ? function (obj) {\n  return typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj);\n} : function (obj) {\n  return obj && typeof _symbol2.default === \"function\" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? \"symbol\" : typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/babel-runtime/helpers/typeof.js\n// module id = 7\n// module chunks = 0","var global = require('./_global');\nvar core = require('./_core');\nvar ctx = require('./_ctx');\nvar hide = require('./_hide');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n  var IS_FORCED = type & $export.F;\n  var IS_GLOBAL = type & $export.G;\n  var IS_STATIC = type & $export.S;\n  var IS_PROTO = type & $export.P;\n  var IS_BIND = type & $export.B;\n  var IS_WRAP = type & $export.W;\n  var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n  var expProto = exports[PROTOTYPE];\n  var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];\n  var key, own, out;\n  if (IS_GLOBAL) source = name;\n  for (key in source) {\n    // contains in native\n    own = !IS_FORCED && target && target[key] !== undefined;\n    if (own && key in exports) continue;\n    // export native or passed\n    out = own ? target[key] : source[key];\n    // prevent global pollution for namespaces\n    exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n    // bind timers to global for call from export context\n    : IS_BIND && own ? ctx(out, global)\n    // wrap global constructors for prevent change them in library\n    : IS_WRAP && target[key] == out ? (function (C) {\n      var F = function (a, b, c) {\n        if (this instanceof C) {\n          switch (arguments.length) {\n            case 0: return new C();\n            case 1: return new C(a);\n            case 2: return new C(a, b);\n          } return new C(a, b, c);\n        } return C.apply(this, arguments);\n      };\n      F[PROTOTYPE] = C[PROTOTYPE];\n      return F;\n    // make static versions for prototype methods\n    })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n    // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n    if (IS_PROTO) {\n      (exports.virtual || (exports.virtual = {}))[key] = out;\n      // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n      if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);\n    }\n  }\n};\n// type bitmap\n$export.F = 1;   // forced\n$export.G = 2;   // global\n$export.S = 4;   // static\n$export.P = 8;   // proto\n$export.B = 16;  // bind\n$export.W = 32;  // wrap\n$export.U = 64;  // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_export.js\n// module id = 8\n// module chunks = 0","export * from './dom.helper';\r\nexport * from './platform.helper';\r\nexport * from './http.helper';\n\n\n// WEBPACK FOOTER //\n// ./js/newTube/helpers/index.ts","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n  if (!isObject(it)) throw TypeError(it + ' is not an object!');\n  return it;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_an-object.js\n// module id = 10\n// module chunks = 0","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPrimitive(P, true);\n  anObject(Attributes);\n  if (IE8_DOM_DEFINE) try {\n    return dP(O, P, Attributes);\n  } catch (e) { /* empty */ }\n  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n  if ('value' in Attributes) O[P] = Attributes.value;\n  return O;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_object-dp.js\n// module id = 11\n// module chunks = 0","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n  return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_descriptors.js\n// module id = 12\n// module chunks = 0","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n  return hasOwnProperty.call(it, key);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_has.js\n// module id = 13\n// module chunks = 0","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n  return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n  object[key] = value;\n  return object;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_hide.js\n// module id = 14\n// module chunks = 0","module.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (e) {\n    return true;\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_fails.js\n// module id = 15\n// module chunks = 0","module.exports = function (it) {\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_is-object.js\n// module id = 16\n// module chunks = 0","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n  return IObject(defined(it));\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_to-iobject.js\n// module id = 17\n// module chunks = 0","var toString = {}.toString;\n\nmodule.exports = function (it) {\n  return toString.call(it).slice(8, -1);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_cof.js\n// module id = 18\n// module chunks = 0","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n  aFunction(fn);\n  if (that === undefined) return fn;\n  switch (length) {\n    case 1: return function (a) {\n      return fn.call(that, a);\n    };\n    case 2: return function (a, b) {\n      return fn.call(that, a, b);\n    };\n    case 3: return function (a, b, c) {\n      return fn.call(that, a, b, c);\n    };\n  }\n  return function (/* ...args */) {\n    return fn.apply(that, arguments);\n  };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_ctx.js\n// module id = 19\n// module chunks = 0","module.exports = {};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_iterators.js\n// module id = 20\n// module chunks = 0","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n  return $keys(O, enumBugKeys);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_object-keys.js\n// module id = 21\n// module chunks = 0","module.exports = function (bitmap, value) {\n  return {\n    enumerable: !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable: !(bitmap & 4),\n    value: value\n  };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_property-desc.js\n// module id = 22\n// module chunks = 0","module.exports = { \"default\": require(\"core-js/library/fn/promise\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/babel-runtime/core-js/promise.js\n// module id = 23\n// module chunks = 0","module.exports = function (it) {\n  if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n  return it;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_a-function.js\n// module id = 24\n// module chunks = 0","module.exports = true;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_library.js\n// module id = 25\n// module chunks = 0","exports.f = {}.propertyIsEnumerable;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_object-pie.js\n// module id = 26\n// module chunks = 0","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n  if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_set-to-string-tag.js\n// module id = 27\n// module chunks = 0","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n  return Object(defined(it));\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_to-object.js\n// module id = 28\n// module chunks = 0","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_uid.js\n// module id = 29\n// module chunks = 0","'use strict';\nvar $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function (iterated) {\n  this._t = String(iterated); // target\n  this._i = 0;                // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n  var O = this._t;\n  var index = this._i;\n  var point;\n  if (index >= O.length) return { value: undefined, done: true };\n  point = $at(O, index);\n  this._i += point.length;\n  return { value: point, done: false };\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/es6.string.iterator.js\n// module id = 30\n// module chunks = 0","import './modals.src';\r\nimport * as jQuery from \"jquery\";\r\n\r\n/* THIS SHIT IS COPIED FROM ORIGINAL TUBE2016 */\r\n/* NO TIME FOR REFACTOR/REWRITE. CONRAD WNATS THIS TPL BY THE END OF NOVEMBER */\r\n\r\nvar $ = jQuery;\r\n(function ($) {\r\n    (<any>jQuery).modalWindows = function (options) {\r\n        var defaults = {\r\n            target: \".modal\",\r\n            trigger: \"[data-toggle-modal]\",\r\n            defaultOpen: false,\r\n            bodyClass: \"modal-open\",\r\n            \"nh_modalShow\": function () {\r\n            },\r\n            \"nh_modalHide\": function () {\r\n            },\r\n            \"nh_modalTriggerClick\": function () {\r\n            }\r\n        };\r\n\r\n        var opt = $.extend(true, {}, defaults, options);\r\n\r\n        var keys = { 37: 1, 38: 1, 39: 1, 40: 1 };\r\n\r\n\r\n        function preventDefault(e) {\r\n            e = e || window.event;\r\n            if (e.preventDefault)\r\n                e.preventDefault();\r\n            e.returnValue = false;\r\n        }\r\n\r\n        function preventDefaultForScrollKeys(e) {\r\n            if (keys[e.keyCode]) {\r\n                preventDefault(e);\r\n                return false;\r\n            }\r\n        }\r\n\r\n        function disableScroll() {\r\n            if (window.addEventListener) // older FF\r\n                window.addEventListener('DOMMouseScroll', preventDefault, false);\r\n            window.onwheel = preventDefault; // modern standard\r\n            window.onmousewheel = document.onmousewheel = preventDefault; // older browsers, IE\r\n            window.ontouchmove = preventDefault; // mobile\r\n            document.onkeydown = preventDefaultForScrollKeys;\r\n        }\r\n\r\n        function enableScroll() {\r\n            if (window.removeEventListener)\r\n                window.removeEventListener('DOMMouseScroll', preventDefault, false);\r\n            window.onmousewheel = document.onmousewheel = null;\r\n            window.onwheel = null;\r\n            window.ontouchmove = null;\r\n            document.onkeydown = null;\r\n        }\r\n\r\n\r\n\r\n        // SHOW\r\n        function showModal() {\r\n            if (opt.bodyClass) {\r\n                $(\"body\").addClass(opt.bodyClass);\r\n            }\r\n\r\n            (<any>$(opt.target)).modal(\"show\");\r\n            disableScroll();\r\n            opt.nh_modalShow.call(opt);\r\n        }\r\n\r\n        // HIDE\r\n        function hideModal() {\r\n            (<any>$(opt.target)).modal(\"hide\");\r\n            enableScroll();\r\n            if (opt.bodyClass) {\r\n                $(opt.target).on(\"hidden.bs.modal\", function (e) {\r\n                    $(\"body\").removeClass(opt.bodyClass);\r\n                });\r\n            }\r\n            //        opt.nh_modalHide.call(opt);\r\n        }\r\n\r\n\r\n        // TRIGGER FUNCTION\r\n        function trigger() {\r\n            $(opt.trigger).click(function (e) {\r\n                e.preventDefault();\r\n                showModal();\r\n                opt.nh_modalTriggerClick.call(opt);\r\n            });\r\n        }\r\n\r\n        // DEFAULT\r\n        function defaultOpen() {\r\n            if (opt.defaultOpen) {\r\n                showModal();\r\n            }\r\n        }\r\n\r\n        ////////////////////////////////////////////////////\r\n        ////////////////////////////////////////////////////\r\n        // INIT\r\n        defaultOpen();\r\n        trigger();\r\n        $(opt.target).on('hidden.bs.modal', function (e) {\r\n            enableScroll();\r\n            opt.nh_modalHide.call(opt);\r\n        });\r\n        if (opt.bodyClass) {\r\n            $(opt.target).on(\"hidden.bs.modal\", function (e) {\r\n                $(\"body\").removeClass(opt.bodyClass);\r\n            });\r\n        }\r\n\r\n    }\r\n}(jQuery));\r\n\r\nexport const getAttributes = (el) => {\r\n\r\n    var attributes = {};\r\n    if ($(el).length) {\r\n        $.each($(el)[0].attributes, function (index, attr) {\r\n            attributes[attr.name] = attr.value;\r\n        });\r\n    }\r\n    return attributes;\r\n}\r\n\r\n\r\nexport const buildNewModal = (content, options) => {\r\n    var defaults = {};\r\n    var settings = $.extend(true, {}, defaults, options);\r\n    var current_modal;\r\n    var modal_markup = '<div id=\"' + settings.id + '-modal\" class=\"modal fade\" tabindex=\"-1\" role=\"dialog\"><div class=\"modal-dialog\"><div class=\"modal-content\"><div class=\"modal-header\"><button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>'\r\n        + '<h4 class=\"modal-title\">' + settings.title + '</h4>'\r\n        + '</div><div class=\"modal-body\">'\r\n        + content\r\n        + '</div>'\r\n        + '<div class=\"modal-footer\"><button class=\"btn btn-default\" data-dismiss=\"modal\" type=\"button\">' + settings.closeTitle + '</button></div>'\r\n        + '</div></div></div>';\r\n    $(\"body\").append(modal_markup);\r\n    if (typeof content == \"object\") {\r\n        $(\"#\" + settings.id + \"-modal\").find(\".modal-body\").text(\"\").append(content);\r\n    }\r\n\r\n    current_modal = $(\"#\" + settings.id + \"-modal\");\r\n    current_modal.modal(\"show\");\r\n    // CLOSE MODAL\r\n    current_modal.on('hidden.bs.modal', function () {\r\n        current_modal.remove();\r\n    });\r\n};\r\n\r\n\r\n// report, addToFavs\r\nexport const modalWindows = (watIsDis?: any) => {\r\n    var sett = {\r\n        btn: $(\"[data-mb='modal']\"),\r\n    }\r\n    sett.btn.on(\"click\", function (e) {\r\n        e.preventDefault();\r\n\r\n        var aa = getAttributes($(this));\r\n\r\n        var bw = (aa[\"data-opt-iframe-width\"] ? aa[\"data-opt-iframe-width\"] : \"100%\");\r\n        var bh = (aa[\"data-opt-iframe-height\"] ? aa[\"data-opt-iframe-height\"] : \"150px\");\r\n\r\n        var modalOptions = {\r\n            rand: Math.floor((Math.random()) * 1000),\r\n            closeTitle: (aa[\"data-opt-close\"] ? aa[\"data-opt-close\"] : \"Close\"),\r\n            id: (aa[\"id\"] ? aa[\"id\"] : \"modal-\" + this.rand),\r\n            title: (aa[\"title\"] ? aa[\"title\"] : \"Popup\"),\r\n        };\r\n\r\n        if (aa[\"data-opt-type\"] == \"iframe\") {\r\n            var content = '<iframe src=\"' + aa[\"href\"] + '\" style=\"width:' + bw + ';height:' + bh + ';\"></iframe>';\r\n            buildNewModal(content, modalOptions);\r\n        } else {\r\n            var xhr;\r\n            if (typeof xhr == 'object') {\r\n                xhr.abort();\r\n            }\r\n            var cc: any;\r\n            xhr = $.ajax({\r\n                url: aa[\"href\"],\r\n                type: 'GET',\r\n                dataType: 'html',\r\n                cache: false,\r\n                crossDomain: false,\r\n                data: {\r\n                    //langSelected: langVal\r\n                },\r\n                success: function (data) {\r\n                    var decodedStr = $(\"<div/>\").html(data);\r\n                    if (!data.match(/<body>/)) {\r\n                        cc = data;\r\n                    } else {\r\n\r\n                        cc = decodedStr.children().not(\"meta, link\");\r\n\r\n                    }\r\n\r\n                    buildNewModal(cc, modalOptions);\r\n                },\r\n                error: function (data) {\r\n                    cc = data;\r\n                }\r\n            });\r\n        }\r\n    });\r\n};\r\n\r\nexport namespace Modals {\r\n    export const init = () => {\r\n        modalWindows();\r\n    }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./js/newTube/modals/modals.ts","\"use strict\";\r\nimport './interfaces/index';\r\n\r\nimport { Helpers } from './shared/index';\r\n// tslint:disable-next-line:no-namespace\r\nexport namespace NhanceTools {\r\n\r\n    const hasClass: Function = Helpers.hasClass;\r\n    const addClass: Function = Helpers.addClass;\r\n    const removeClass: Function = Helpers.removeClass;\r\n    const tempClass: Function = Helpers.tempClass;\r\n\r\n    const getScreenSize = (): any => {\r\n        let windowObject: any = window;\r\n        let windowInner: any = 'inner';\r\n\r\n        if (!('innerWidth' in window)) {\r\n            windowInner = 'client';\r\n            windowObject = document.documentElement || document.body;\r\n        }\r\n\r\n        return { width: windowObject[windowInner + 'Width'], height: windowObject[windowInner + 'Height'] };\r\n    }\r\n\r\n    export class ResponsiveTriggerClass {\r\n\r\n        private _defaultSettings: ISettings = {\r\n            triggerElement: document.querySelector('#nav-trigger'),\r\n            targetElement: document.querySelector('.nav-col'),\r\n\r\n            activeToMaxScreenWidth: 768,\r\n            onWindowResizeTimeout: 100,\r\n\r\n            anywhereActionClose: true,\r\n            anywhereExcludedElements: \"target\",\r\n            anywhereActionCloseMaxWindowWidth: true,\r\n\r\n            classes: {\r\n                in: 'main-nav-open',\r\n                animIn: 'main-nav-opening',\r\n                out: 'main-nav-closed',\r\n                animOut: 'main-nav-closing',\r\n                animProgress: 'main-nav-animating',\r\n\r\n                triggerActive: 'active',\r\n                targetActive: 'active',\r\n            },\r\n            setBodyClasses: true,\r\n\r\n            enableEvents: true,\r\n            events: {\r\n                onActivate: 'nrt.onActivate',\r\n                onDeactivate: 'nrt.onDeactivate',\r\n                onInit: 'nrt.onInit',\r\n            },\r\n            eventPrefixName: 'nav.',\r\n            eventAttachedTo: window,\r\n\r\n            animClasses: true,\r\n            animTimeout: 500,\r\n\r\n            preventDefaultTrigger: true, // TODO\r\n            stopPropagationTrigger: true, // TODO\r\n            preventDefaultTarget: true, // TODO\r\n            stopPropagationTarget: true, // TODO\r\n\r\n            defaultOpen: 100,\r\n\r\n            stateStorage: false,\r\n            stateStorageName: 'nrt',\r\n\r\n            onInit: function () { },\r\n            onTriggerClick: function () { },\r\n            onElementClick: function () { },\r\n            onAnywhereClick: function () { },\r\n            onChange: function () { },\r\n            onDestroy: function () { },\r\n            onBeforeHide: function () { },\r\n            onAfterHide: function () { },\r\n            onBeforeShow: function () { },\r\n            onAfterShow: function () { },\r\n        }\r\n        private isInitialized: boolean = false;\r\n        private _opts: any = {}\r\n\r\n        private _target: any = null;\r\n        private _trigger: HTMLElement = null;\r\n\r\n        private _notBubblingElement: any = false;\r\n\r\n\r\n        canUseTrigger: boolean = false;\r\n        isActive: boolean = false;\r\n        isDisabled: boolean = false;\r\n        eventInit: Event;\r\n        eventActivate: Event;\r\n        eventDeactivate: Event;\r\n\r\n        private _eventInitAttachedFunction: any = null; // TODO removeListener\r\n        private _eventActivateAttachedFunction: any = null; // TODO removeListener\r\n        private _eventDeactivateAttachedFunction: any = null; // TODO removeListener\r\n\r\n        api: any = {\r\n            deactivate: () => {\r\n                return this.deactivate();\r\n            },\r\n            acivate: () => {\r\n                return this.activate();\r\n            },\r\n            destroy: () => {\r\n                return this.destroy()\r\n            }\r\n        }\r\n\r\n        constructor(options?: Object) {\r\n\r\n            let tempOptionsObject: any = {}\r\n\r\n            let shouldSetNewOptions = options instanceof Object && Object.keys(options).length && this.validateInputSettings(options);\r\n            if (shouldSetNewOptions) {\r\n                tempOptionsObject = options;\r\n            }\r\n            this._opts = Object.assign({}, this._defaultSettings, tempOptionsObject);\r\n\r\n            this._setProperties();\r\n            if (this._trigger) {\r\n                this._registerEvents();\r\n\r\n                this._onInit();\r\n            }\r\n            return this.api;\r\n        }\r\n\r\n        private validateInputSettings(options: Object): boolean { // TODO - validate each property\r\n            return true;\r\n        }\r\n\r\n        private _setProperties() {\r\n\r\n\r\n            const setNotBubbleElements = (elements: any): any => {\r\n                let isMultiple = elements instanceof NodeList;\r\n                let isSingle = elements instanceof Element;\r\n\r\n                if (isSingle || isMultiple) {\r\n                    if (isSingle) {\r\n                        return elements;\r\n                    }\r\n                    if (isMultiple) {\r\n                        return Array.from(elements);\r\n                    }\r\n                }\r\n\r\n            }\r\n\r\n            this._trigger = this._opts.triggerElement instanceof NodeList ? Array.from(this._opts.triggerElement) : this._opts.triggerElement; /* Handle mutliple elements */\r\n\r\n            this._target = this._opts.targetElement;\r\n            switch (typeof this._opts.anywhereExcludedElements) {\r\n\r\n                case 'string':\r\n\r\n                    this._notBubblingElement = setNotBubbleElements(this._target);\r\n\r\n                    break;\r\n\r\n                case 'object':\r\n                    this._notBubblingElement = setNotBubbleElements(this._opts.anywhereExcludedElements);\r\n\r\n                    break;\r\n\r\n                default:\r\n                    this._notBubblingElement = false;\r\n            }\r\n        }\r\n\r\n        private _registerEvents() {\r\n\r\n\r\n\r\n            this._registerClickToElements(this._trigger, this._onClickTrigger.bind(this));\r\n\r\n            this._registerClickToElements(this._notBubblingElement, this._onClickTarget.bind(this));\r\n\r\n            window.addEventListener('resize', (e: any) => {\r\n\r\n                this._onScreenSizeChange();\r\n            });\r\n\r\n            window.addEventListener('click', ({ target }) => {\r\n\r\n                this._onClickWindow(target);\r\n            });\r\n\r\n\r\n            if (this._opts.enableEvents) {\r\n                let ev: any = this._opts.events;\r\n                let prefix: string = this._opts.eventPrefixName;\r\n                let attachTo: any = this._opts.eventAttachedTo;\r\n\r\n                this.eventInit = new Event(prefix + ev.onInit);\r\n                this.eventActivate = new Event(prefix + ev.onActivate);\r\n                this.eventDeactivate = new Event(prefix + ev.onDeactivate);\r\n\r\n                // Testing\r\n                attachTo.addEventListener(prefix + ev.onInit, function (e: Event) {\r\n                    // this._eventInitAttachedFunction = arguments.callee;\r\n\r\n                }, false);\r\n                attachTo.addEventListener(prefix + ev.onDeactivate, function (e: Event) {\r\n                    //this._eventDeactivateAttachedFunction = arguments.callee;\r\n\r\n                }, false);\r\n                attachTo.addEventListener(prefix + ev.onActivate, function (e: Event) {\r\n                    //this._eventActivateAttachedFunction = arguments.callee;\r\n\r\n                }, false);\r\n\r\n            }\r\n\r\n        }\r\n\r\n        private _dispatchEvent(event: Event) {\r\n            if (this._opts.enableEvents) {\r\n                this._opts.eventAttachedTo.dispatchEvent(event);\r\n            }\r\n        }\r\n\r\n        private _registerClickToElements(elements: any, callback: Function): void {\r\n\r\n            const _setRegister = (element: any, callback?: Function): void => {\r\n                element.addEventListener('click', (e: Event) => {\r\n\r\n                    e.stopPropagation();\r\n                    callback(e);\r\n\r\n                });\r\n            }\r\n            if (elements !== false) {\r\n\r\n                if (elements instanceof Array !== true) {\r\n\r\n                    _setRegister(elements, callback.bind(this))\r\n\r\n                } else if (elements instanceof Array && elements.length > 0) {\r\n\r\n                    elements.forEach(singleElement => {\r\n                        _setRegister(singleElement, callback);\r\n                    })\r\n\r\n                }\r\n\r\n            }\r\n        }\r\n\r\n        private _onInit() {\r\n\r\n\r\n            this.isInitialized = true;\r\n\r\n            this._opts.onInit.call();\r\n\r\n            this._dispatchEvent(this.eventInit);\r\n\r\n            this._actionController('initialized'); /* Do shit and delegate rest to controller */\r\n        }\r\n\r\n        private _onScreenSizeChange() {\r\n\r\n            setTimeout(() => {\r\n                this._actionController('resized'); /* TODO - make actions libraries */\r\n            }, this._opts.onWindowResizeTimeout); /* Do optional shit and delegate rest to controller */\r\n\r\n        }\r\n\r\n        private _actionController(action: string, options?: any) {\r\n\r\n            let windowWidth: number = getScreenSize().width;\r\n            this.canUseTrigger = this._opts.activeToMaxScreenWidth === true || windowWidth <= this._opts.activeToMaxScreenWidth;\r\n\r\n            switch (action) {\r\n                case 'resized':\r\n                    if (!this.canUseTrigger) {\r\n                        this._setToDisabled();\r\n                        return;\r\n                    }\r\n\r\n                    this._setToEnabled();\r\n\r\n                    break;\r\n\r\n                case 'trigger.clicked':\r\n                    //\r\n                    if (this.canUseTrigger) {\r\n                        if (this.isActive) {\r\n                            this.deactivate();\r\n                            return;\r\n                        }\r\n                        this.activate();\r\n                    }\r\n\r\n                    break;\r\n\r\n                case 'target.clicked':\r\n\r\n                    //\r\n\r\n                    break;\r\n\r\n                case 'window.clicked':\r\n\r\n                    let maxSizeCondition: boolean = true;\r\n\r\n                    let isParamFalseValue = typeof this._opts.anywhereActionCloseMaxWindowWidth === 'boolean' && this._opts.anywhereActionCloseMaxWindowWidth === false;\r\n\r\n                    if (isParamFalseValue) {\r\n                        maxSizeCondition = false;\r\n                    } else if (!isParamFalseValue) {\r\n                        maxSizeCondition = true;\r\n                    } else {\r\n                        maxSizeCondition = windowWidth <= this._opts.anywhereActionCloseMaxWindowWidth;\r\n                    }\r\n\r\n                    let shouldClose = this.isActive === true\r\n                        && this._opts.anywhereActionClose === true\r\n                        && maxSizeCondition\r\n                        && this.canUseTrigger;\r\n\r\n                    if (shouldClose) {\r\n\r\n                        this.deactivate();\r\n                    }\r\n\r\n                    break;\r\n\r\n                case 'initialized':\r\n\r\n                    let canSetDefaultOpenState = this._opts.defaultOpen !== false && !Number.isNaN(parseInt(this._opts.defaultOpen)) && windowWidth >= this._opts.defaultOpen && this.isActive === false;\r\n\r\n                    if (this.canUseTrigger && this._opts.defaultOpen === true) {\r\n                        this.activate();\r\n                        break;\r\n                    }\r\n\r\n                    if (canSetDefaultOpenState && this.canUseTrigger) {\r\n\r\n                        // storage support\r\n                        let isStorageEnabled = this._opts.stateStorage !== false;\r\n                        let storageStateIsDisabled = this._getStorageState() == 'false';\r\n\r\n                        if (isStorageEnabled && storageStateIsDisabled) {\r\n                            this.deactivate();\r\n                            return;\r\n                        }\r\n\r\n                        if (this._opts.defaultOpen === false) {\r\n                            return;\r\n                        }\r\n\r\n                        if (windowWidth <= this._opts.defaultOpen) {\r\n\r\n                            this.activate();\r\n                        }\r\n                    }\r\n\r\n                    break;\r\n            }\r\n\r\n            if (action === `initialized`) {\r\n                this._opts.onChange.call(this, this.isActive, this.canUseTrigger);\r\n            }\r\n\r\n        }\r\n\r\n        private _getStorageState() {\r\n            if (this._opts.stateStorage !== false) {\r\n                return window[this._opts.stateStorage][this._opts.stateStorageName];\r\n            }\r\n        }\r\n        private _setStorage(value: any) {\r\n            if (this._opts.stateStorage !== false) {\r\n                window[this._opts.stateStorage][this._opts.stateStorageName] = value;\r\n            }\r\n        }\r\n        private _purgeStorage() {\r\n            if (this._opts.stateStorage !== false) {\r\n                <WindowLocalStorage>window[this._opts.stateStorage].removeItem(this._opts.stateStorageName);\r\n            }\r\n        }\r\n\r\n        private _setToDisabled(): void {\r\n\r\n            this.isActive = false;\r\n            this.isDisabled = true;\r\n\r\n            this._unsetAllClasses();\r\n\r\n            this._opts.onChange(this.isActive, this.canUseTrigger);\r\n        }\r\n\r\n        private _setToEnabled(): void {\r\n\r\n            this.isDisabled = false;\r\n\r\n            this._setAllClasses();\r\n            this._opts.onChange(this.isActive, this.canUseTrigger);\r\n        }\r\n\r\n        private _unsetAllClasses(): void {\r\n\r\n            if (this._target) {\r\n                removeClass(this._target, this._opts.classes.targetActive);\r\n            }\r\n\r\n            removeClass(document.body, this._opts.classes.in, this._opts.classes.animIn, this._opts.classes.animOut, this._opts.classes.out, this._opts.classes.animProgress);\r\n            removeClass(this._trigger, this._opts.classes.triggerActive);\r\n\r\n        }\r\n\r\n        private _setAllClasses(): void {\r\n\r\n            let target: any = this._target;\r\n            let trigger: any = this._trigger;\r\n            let cls: any = this._opts.classes;\r\n\r\n            switch (this.isActive) {\r\n\r\n                case false:\r\n\r\n                    if (target) {\r\n                        removeClass(target, cls.targetActive);\r\n                    }\r\n                    removeClass(trigger, cls.triggerActive);\r\n                    removeClass(document.body, cls.in, cls.animIn, cls.animProgress, cls.animOut);\r\n                    addClass(document.body, cls.out);\r\n\r\n                    break;\r\n\r\n                default:\r\n\r\n                    if (target) {\r\n                        addClass(target, cls.targetActive);\r\n                    }\r\n                    addClass(trigger, cls.triggerActive);\r\n                    removeClass(document.body, cls.animOut, cls.animIn, cls.animProgress, cls.out);\r\n                    addClass(document.body, cls.in);\r\n\r\n            }\r\n\r\n        }\r\n\r\n        private _onClickTrigger(event: any) {\r\n            /* What happens when trigger is clicked? */\r\n            this._opts.onTriggerClick.call();\r\n\r\n            this._actionController('trigger.clicked');\r\n        }\r\n\r\n        private _onClickTarget(event: any) {\r\n            /* What happens when target is clicked */\r\n            this._opts.onElementClick.call();\r\n\r\n            this._actionController('target.clicked');\r\n        }\r\n\r\n        private _onClickWindow(target: any) {\r\n            /* What happens when window area is clicked? */\r\n            this._opts.onAnywhereClick.call(target);\r\n\r\n            this._actionController('window.clicked', { element: target });\r\n        }\r\n\r\n        deactivate() {\r\n            //\r\n            /* Hide procedure */\r\n            this._opts.onBeforeHide.call();\r\n\r\n            this.isActive = false;\r\n\r\n            //, this._opts.classes.triggerActive, this._opts.classes.triggerActive\r\n\r\n            if (this._target) {\r\n                removeClass(this._target, this._opts.classes.in, this._opts.classes.targetActive);\r\n            }\r\n            if (this._opts.setBodyClasses) {\r\n                removeClass(document.body, this._opts.classes.in, this._opts.classes.animIn);\r\n            }\r\n            removeClass(this._trigger, this._opts.classes.triggerActive);\r\n            if (this._opts.setBodyClasses) {\r\n                addClass(document.body, this._opts.classes.out);\r\n            }\r\n            let canUseAnimatedClasses: boolean = this._opts.animClasses && this._opts.animTimeout && this._opts.classes.animOut !== false;\r\n\r\n            if (canUseAnimatedClasses && this._opts.setBodyClasses) {\r\n                tempClass(document.body, this._opts.animTimeout, this._opts.classes.animOut, this._opts.classes.animProgress);\r\n            }\r\n\r\n            this._opts.onChange(this.isActive, this.canUseTrigger);\r\n\r\n            this._dispatchEvent(this.eventDeactivate);\r\n\r\n            this._opts.onAfterHide.call();\r\n\r\n            this._setStorage('false');\r\n            //\r\n        }\r\n\r\n        activate() {\r\n            //\r\n            /* Show procedure */\r\n            this._opts.onBeforeShow.call();\r\n\r\n            this.isActive = true;\r\n\r\n            if (this._opts.setBodyClasses) {\r\n                removeClass(document.body, this._opts.classes.out, this._opts.classes.animOut);\r\n                addClass(document.body, this._opts.classes.in);\r\n            }\r\n\r\n            if (this._opts.classes.triggerActive) {\r\n                addClass(this._trigger, this._opts.classes.triggerActive);\r\n            }\r\n\r\n            if (this._target && this._opts.classes.targetActive) {\r\n                addClass(this._target, this._opts.classes.targetActive);\r\n            }\r\n\r\n            let canUseAnimatedClasses: boolean = this._opts.animClasses && this._opts.animTimeout && this._opts.classes.animIn !== false;\r\n\r\n            if (canUseAnimatedClasses && this._opts.setBodyClasses) {\r\n                tempClass(document.body, this._opts.animTimeout, this._opts.classes.animIn, this._opts.classes.animProgress);\r\n            }\r\n\r\n            this._opts.onChange(this.isActive, this.canUseTrigger);\r\n\r\n            this._dispatchEvent(this.eventActivate);\r\n\r\n            this._opts.onAfterShow.call();\r\n\r\n            this._setStorage('true');\r\n            //\r\n        }\r\n\r\n        destroy() {\r\n            this._unsetAllClasses();\r\n            this._purgeStorage();\r\n            this._opts.onDestroy.call();\r\n            this._opts.onChange.call(this, false, false);\r\n\r\n            this.isInitialized = false;\r\n            this._target = null;\r\n            this._trigger = null;\r\n            this.isActive = false;\r\n            this.isDisabled = false;\r\n            this._notBubblingElement = false;\r\n\r\n            this._opts = {};\r\n\r\n        }\r\n\r\n\r\n\r\n    }\r\n\r\n}\r\nconst ResponsiveTrigger = NhanceTools.ResponsiveTriggerClass;\r\n\r\n// if(!window.NhanceRT) {\r\n//     window.NhanceRT = NhanceTools.ResponsiveTriggerClass;\r\n// }\r\n\r\nexport { ResponsiveTrigger }\n\n\n// WEBPACK FOOTER //\n// ./js/newTube/responsive-trigger/nhance.responsive-trigger.ts","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n  if (it == undefined) throw TypeError(\"Can't call method on  \" + it);\n  return it;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_defined.js\n// module id = 33\n// module chunks = 0","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n  return is ? document.createElement(it) : {};\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_dom-create.js\n// module id = 34\n// module chunks = 0","// IE 8- don't enum bug keys\nmodule.exports = (\n  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_enum-bug-keys.js\n// module id = 35\n// module chunks = 0","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n  var resolve, reject;\n  this.promise = new C(function ($$resolve, $$reject) {\n    if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n    resolve = $$resolve;\n    reject = $$reject;\n  });\n  this.resolve = aFunction(resolve);\n  this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n  return new PromiseCapability(C);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_new-promise-capability.js\n// module id = 36\n// module chunks = 0","exports.f = Object.getOwnPropertySymbols;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_object-gops.js\n// module id = 37\n// module chunks = 0","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n  return shared[key] || (shared[key] = uid(key));\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_shared-key.js\n// module id = 38\n// module chunks = 0","var global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function (key) {\n  return store[key] || (store[key] = {});\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_shared.js\n// module id = 39\n// module chunks = 0","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_to-integer.js\n// module id = 40\n// module chunks = 0","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_to-length.js\n// module id = 41\n// module chunks = 0","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n  if (!isObject(it)) return it;\n  var fn, val;\n  if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  throw TypeError(\"Can't convert object to primitive value\");\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_to-primitive.js\n// module id = 42\n// module chunks = 0","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n  var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n  if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_wks-define.js\n// module id = 43\n// module chunks = 0","exports.f = require('./_wks');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_wks-ext.js\n// module id = 44\n// module chunks = 0","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n  if (it != undefined) return it[ITERATOR]\n    || it['@@iterator']\n    || Iterators[classof(it)];\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/core.get-iterator-method.js\n// module id = 45\n// module chunks = 0","require('./es6.array.iterator');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar TO_STRING_TAG = require('./_wks')('toStringTag');\n\nvar DOMIterables = ('CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,' +\n  'DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,' +\n  'MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,' +\n  'SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,' +\n  'TextTrackList,TouchList').split(',');\n\nfor (var i = 0; i < DOMIterables.length; i++) {\n  var NAME = DOMIterables[i];\n  var Collection = global[NAME];\n  var proto = Collection && Collection.prototype;\n  if (proto && !proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n  Iterators[NAME] = Iterators.Array;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/web.dom.iterable.js\n// module id = 46\n// module chunks = 0","import jQuery from \"jquery\";\r\nvar $ = jQuery;\r\n/************************************************************************\r\n*************************************************************************\r\n@Name :       \tjRating - jQuery Plugin\r\n@Revison :    \t3.0\r\n@Date : \t\t28/01/2013 \r\n@Author:     \t ALPIXEL - (www.myjqueryplugins.com - www.alpixel.fr) \r\n@License :\t\t Open Source - MIT License : http://www.opensource.org/licenses/mit-license.php\r\n \r\n**************************************************************************\r\n*************************************************************************/\r\n(function($) {\r\n\t$.fn.jRating = function(op) {\r\n\t\tvar defaults = {\r\n\t\t\t/** String vars **/\r\n\t\t\tbigStarsPath : _basehttp + '/includes/rating/js/icons/stars.png', // path of the icon stars.png\r\n\t\t\tsmallStarsPath : _basehttp + '/includes/rating/js/icons/small.png', // path of the icon small.png\r\n\t\t\tphpPath : _basehttp + '/includes/rating/jRating.php', // path of the php file jRating.php\r\n\t\t\ttype : 'big', // can be set to 'small' or 'big'\r\n\r\n\t\t\t/** Boolean vars **/\r\n\t\t\tstep:false, // if true,  mouseover binded star by star,\r\n\t\t\tisDisabled:false,\r\n\t\t\tshowRateInfo: true,\r\n\t\t\tcanRateAgain : false,\r\n\r\n\t\t\t/** Integer vars **/\r\n\t\t\tlength:5, // number of star to display\r\n\t\t\tdecimalLength : 0, // number of decimals.. Max 3, but you can complete the function 'getNote'\r\n\t\t\trateMax : 20, // maximal rate - integer from 0 to 9999 (or more)\r\n\t\t\trateInfosX : -45, // relative position in X axis of the info box when mouseover\r\n\t\t\trateInfosY : 5, // relative position in Y axis of the info box when mouseover\r\n\t\t\tnbRates : 1,\r\n\r\n\t\t\t/** Functions **/\r\n\t\t\tonSuccess : null,\r\n\t\t\tonError : null\r\n\t\t}; \r\n\r\n\t\tif(this.length>0)\r\n\t\treturn this.each(function() {\r\n\t\t\t/*vars*/\r\n\t\t\tvar opts = $.extend(defaults, op),    \r\n\t\t\tnewWidth = 0,\r\n\t\t\tstarWidth = 0,\r\n\t\t\tstarHeight = 0,\r\n\t\t\tbgPath = '',\r\n\t\t\thasRated = false,\r\n\t\t\tglobalWidth = 0,\r\n\t\t\tnbOfRates = opts.nbRates;\r\n\r\n\t\t\tif($(this).hasClass('jDisabled') || opts.isDisabled)\r\n\t\t\t\tvar jDisabled = true;\r\n\t\t\telse\r\n\t\t\t\tvar jDisabled = false;\r\n\r\n\t\t\tgetStarWidth();\r\n\t\t\t$(this).height(starHeight);\r\n\r\n\t\t\tvar average = parseFloat($(this).attr('data-average')), // get the average of all rates\r\n\t\t\tidBox = parseInt($(this).attr('data-id')), // get the id of the box\r\n\t\t\ttypeBox = parseInt($(this).attr('data-type')), // get the id of the box\r\n\t\t\twidthRatingContainer = starWidth*opts.length, // Width of the Container\r\n\t\t\twidthColor = average/opts.rateMax*widthRatingContainer, // Width of the color Container\r\n\r\n\t\t\tquotient = \r\n\t\t\t$('<div>', \r\n\t\t\t{\r\n\t\t\t\t'class' : 'jRatingColor',\r\n\t\t\t\tcss:{\r\n\t\t\t\t\twidth:widthColor\r\n\t\t\t\t}\r\n\t\t\t}).appendTo($(this)),\r\n\r\n\t\t\taverage = \r\n\t\t\t$('<div>', \r\n\t\t\t{\r\n\t\t\t\t'class' : 'jRatingAverage',\r\n\t\t\t\tcss:{\r\n\t\t\t\t\twidth:0,\r\n\t\t\t\t\ttop:- starHeight\r\n\t\t\t\t}\r\n\t\t\t}).appendTo($(this)),\r\n\r\n\t\t\t jstar =\r\n\t\t\t$('<div>', \r\n\t\t\t{\r\n\t\t\t\t'class' : 'jStar',\r\n\t\t\t\tcss:{\r\n\t\t\t\t\twidth:widthRatingContainer,\r\n\t\t\t\t\theight:starHeight,\r\n\t\t\t\t\ttop:- (starHeight*2),\r\n\t\t\t\t\tbackground: 'url('+bgPath+') repeat-x'\r\n\t\t\t\t}\r\n\t\t\t}).appendTo($(this));\r\n\t\t\t\r\n\r\n\t\t\t$(this).css({width: widthRatingContainer,overflow:'hidden',zIndex:1,position:'relative'});\r\n\r\n\t\t\tif(!jDisabled)\r\n\t\t\t$(this).unbind().bind({\r\n\t\t\t\tmouseenter : function(e){\r\n\t\t\t\t\tvar realOffsetLeft = findRealLeft(this);\r\n\t\t\t\t\tvar relativeX = e.pageX - realOffsetLeft;\r\n\t\t\t\t\tif (opts.showRateInfo)\r\n\t\t\t\t\tvar tooltip = \r\n\t\t\t\t\t$('<p>',{\r\n\t\t\t\t\t\t'class' : 'jRatingInfos',\r\n\t\t\t\t\t\thtml : getNote(relativeX)+' <span class=\"maxRate\">/ '+opts.rateMax+'</span>',\r\n\t\t\t\t\t\tcss : {\r\n\t\t\t\t\t\t\ttop: (e.pageY + opts.rateInfosY),\r\n\t\t\t\t\t\t\tleft: (e.pageX + opts.rateInfosX)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}).appendTo('body').show();\r\n\t\t\t\t},\r\n\t\t\t\tmouseover : function(e){\r\n\t\t\t\t\t$(this).css('cursor','pointer');\t\r\n\t\t\t\t},\r\n\t\t\t\tmouseout : function(){\r\n\t\t\t\t\t$(this).css('cursor','default');\r\n\t\t\t\t\tif(hasRated) average.width(globalWidth);\r\n\t\t\t\t\telse average.width(0);\r\n\t\t\t\t},\r\n\t\t\t\tmousemove : function(e){\r\n\t\t\t\t\tvar realOffsetLeft = findRealLeft(this);\r\n\t\t\t\t\tvar relativeX = e.pageX - realOffsetLeft;\r\n\t\t\t\t\tif(opts.step) newWidth = Math.floor(relativeX/starWidth)*starWidth + starWidth;\r\n\t\t\t\t\telse newWidth = relativeX;\r\n\t\t\t\t\taverage.width(newWidth);\t\t\t\t\t\r\n\t\t\t\t\tif (opts.showRateInfo)\r\n\t\t\t\t\t$(\"p.jRatingInfos\")\r\n\t\t\t\t\t.css({\r\n\t\t\t\t\t\tleft: (e.pageX + opts.rateInfosX)\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.html(getNote(newWidth) +' <span class=\"maxRate\">/ '+opts.rateMax+'</span>');\r\n\t\t\t\t},\r\n\t\t\t\tmouseleave : function(){\r\n\t\t\t\t\t$(\"p.jRatingInfos\").remove();\r\n\t\t\t\t},\r\n\t\t\t\tclick : function(e){\r\n                    var element = this;\r\n\t\t\t\t\t\r\n\t\t\t\t\t/*set vars*/\r\n\t\t\t\t\thasRated = true;\r\n\t\t\t\t\tglobalWidth = newWidth;\r\n\t\t\t\t\tnbOfRates--;\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(!opts.canRateAgain || parseInt(nbOfRates) <= 0) $(this).unbind().css('cursor','default').addClass('jDisabled');\r\n\t\t\t\t\t\r\n\t\t\t\t\tif (opts.showRateInfo) $(\"p.jRatingInfos\").fadeOut('fast',function(){$(this).remove();});\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\tvar rate = getNote(newWidth);\r\n\t\t\t\t\taverage.width(newWidth);\r\n\t\t\t\t\t\r\n\r\n\t\t\t\t\t/** ONLY FOR THE DEMO, YOU CAN REMOVE THIS CODE **/\r\n\t\t\t\t\t\t$('.datasSent p').html('<strong>idBox : </strong>'+idBox+'<br /><strong>rate : </strong>'+rate+'<br /><strong>action :</strong> rating');\r\n\t\t\t\t\t\t$('.serverResponse p').html('<strong>Loading...</strong>');\r\n\t\t\t\t\t/** END ONLY FOR THE DEMO **/\r\n\r\n\t\t\t\t\t$.post(opts.phpPath,{\r\n\t\t\t\t\t\t\tidBox : idBox,\r\n\t\t\t\t\t\t\ttype : typeBox,\r\n\t\t\t\t\t\t\trate : rate,\r\n\t\t\t\t\t\t\taction : 'rating'\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tfunction(data) {\r\n\t\t\t\t\t\t\tif(!data.error)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t/** ONLY FOR THE DEMO, YOU CAN REMOVE THIS CODE **/\r\n\t\t\t\t\t\t\t\t\t$('.serverResponse p').html(data.server);\r\n\t\t\t\t\t\t\t\t/** END ONLY FOR THE DEMO **/\r\n\r\n\r\n\t\t\t\t\t\t\t\t/** Here you can display an alert box, \r\n\t\t\t\t\t\t\t\t\tor use the jNotify Plugin :) http://www.myqjqueryplugins.com/jNotify\r\n\t\t\t\t\t\t\t\t\texemple :\t*/\r\n\t\t\t\t\t\t\t\tif(opts.onSuccess) opts.onSuccess( element, rate );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t{\r\n\r\n\t\t\t\t\t\t\t\t/** ONLY FOR THE DEMO, YOU CAN REMOVE THIS CODE **/\r\n\t\t\t\t\t\t\t\t\t$('.serverResponse p').html(data.server);\r\n\t\t\t\t\t\t\t\t/** END ONLY FOR THE DEMO **/\r\n\r\n\t\t\t\t\t\t\t\t/** Here you can display an alert box, \r\n\t\t\t\t\t\t\t\t\tor use the jNotify Plugin :) http://www.myqjqueryplugins.com/jNotify\r\n\t\t\t\t\t\t\t\t\texemple :\t*/\r\n\t\t\t\t\t\t\t\tif(opts.onError) opts.onError( element, rate );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t'json'\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tfunction getNote(relativeX) {\r\n\t\t\t\tvar noteBrut = parseFloat((relativeX*100/widthRatingContainer)*opts.rateMax/100);\r\n\t\t\t\tswitch(opts.decimalLength) {\r\n\t\t\t\t\tcase 1 :\r\n\t\t\t\t\t\tvar note = Math.round(noteBrut*10)/10;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 2 :\r\n\t\t\t\t\t\tvar note = Math.round(noteBrut*100)/100;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 3 :\r\n\t\t\t\t\t\tvar note = Math.round(noteBrut*1000)/1000;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault :\r\n\t\t\t\t\t\tvar note = Math.round(noteBrut*1)/1;\r\n\t\t\t\t}\r\n\t\t\t\treturn note;\r\n\t\t\t};\r\n\r\n\t\t\tfunction getStarWidth(){\r\n\t\t\t\tswitch(opts.type) {\r\n\t\t\t\t\tcase 'small' :\r\n\t\t\t\t\t\tstarWidth = 12; // width of the picture small.png\r\n\t\t\t\t\t\tstarHeight = 10; // height of the picture small.png\r\n\t\t\t\t\t\tbgPath = opts.smallStarsPath;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault :\r\n\t\t\t\t\t\tstarWidth = 23; // width of the picture stars.png\r\n\t\t\t\t\t\tstarHeight = 20; // height of the picture stars.png\r\n\t\t\t\t\t\tbgPath = opts.bigStarsPath;\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tfunction findRealLeft(obj) {\r\n\t\t\t  if( !obj ) return 0;\r\n\t\t\t  return obj.offsetLeft + findRealLeft( obj.offsetParent );\r\n\t\t\t};\r\n\t\t});\r\n\r\n\t}\r\n})(jQuery);\n\n\n// WEBPACK FOOTER //\n// ./js/newTube/core/jRating.jquery.js","export namespace DomHelpers {\r\n\r\n    export const addClass = (elem: HTMLElement, ...classes: string[]) => {\r\n        classes.forEach((className: string) => {\r\n            if (!(<any>Array).from(elem.classList).includes(className)) {\r\n                elem.className = `${elem.className} ${className}`;\r\n            }\r\n        });\r\n    };\r\n\r\n    export const removeClass = (elem: HTMLElement, ...classes: string[]) => {\r\n        classes.forEach((className: string) => {\r\n            if ((<any>Array).from(elem.classList).includes(className)) {\r\n                elem.className = (<any>Array).from(elem.classList).filter((existingClass) => existingClass !== className).join(' ');\r\n            }\r\n        });\r\n    };\r\n\r\n    export const hasClass = (elem: HTMLElement, className): boolean => {\r\n        return !!(elem.className.indexOf(className) + 1);\r\n    };\r\n\r\n    export const toggleClass = (elem: HTMLElement, className): boolean => {\r\n        if (hasClass(elem, className)) {\r\n            removeClass(elem, className);\r\n            return false;\r\n        } else {\r\n            addClass(elem, className);\r\n            return true;\r\n        }\r\n    };\r\n\r\n    export const tempClass = (elem: HTMLElement, className: string, timeout: number = 500): Promise<any> => {\r\n        return new Promise((resolve) => {\r\n            addClass(elem, className);\r\n            setTimeout(() => {\r\n                removeClass(elem, className)\r\n                resolve(true);\r\n            }, timeout);\r\n        });\r\n    };\r\n\r\n}\n\n\n// WEBPACK FOOTER //\n// ./js/newTube/helpers/dom.helper.ts","// tslint:disable-next-line:no-namespace\r\nexport namespace PlatformHelper {\r\n\r\n    export const viewportSize = (): { width: number, height: number } => {\r\n        let win: Window | HTMLElement = window;\r\n        let prop: string = 'inner';\r\n        if (!('innerWidth' in window)) {\r\n            prop = 'client';\r\n            win = document.documentElement || document.body;\r\n        }\r\n        return { width: win[prop + 'Width'], height: win[prop + 'Height'] };\r\n    }\r\n\r\n    export const windowWidth = (): number => {\r\n        return viewportSize().width;\r\n    }\r\n\r\n    export const windowHeight = (): number => {\r\n        return viewportSize().height;\r\n    }\r\n\r\n    export const detectMobileDevice = (): boolean => {\r\n        return !!navigator.userAgent.match(/Mobi/);\r\n    }\r\n\r\n    export const detectIOS = (): boolean => {\r\n        return detectMobileDevice() && !!navigator.userAgent.match(/(iPod|iPhone|iPad)/);\r\n    }\r\n\r\n    export const doubleTap = (elem: HTMLElement): void => {\r\n        if(detectMobileDevice()) {\r\n            let touchCount: number = 0;\r\n            elem.addEventListener(`click`, (e: Event) => {\r\n                if(!touchCount) {\r\n                    touchCount++;\r\n                    e.preventDefault();\r\n                    return false;\r\n                }\r\n                touchCount = 0;\r\n                return true;\r\n            });\r\n\r\n            document.addEventListener(`touchstart`, (e: any) => {\r\n                if(e.target !== elem && e.target.parentElement !== elem) {\r\n                    touchCount = 0;\r\n                }\r\n            })\r\n        }\r\n    }\r\n}\n\n\n// WEBPACK FOOTER //\n// ./js/newTube/helpers/platform.helper.ts","let rAnimFrame: any;\r\n// tslint:disable:no-trailing-whitespace\r\n(function (w: any, callback?: any, reqFunc?: any) {\r\n\r\n    var window: any = w;\r\n    window.requestAnimFrame = rAnimFrame = (function (callback?: any) {\r\n        return window.requestAnimationFrame ||\r\n            window.webkitRequestAnimationFrame ||\r\n            window.mozRequestAnimationFrame ||\r\n\r\n            function (callback: any) {\r\n                if (callback) {\r\n                    window.setTimeout(callback, 1000 / 60);\r\n                }\r\n            };\r\n    })();\r\n\r\n}(window, null, rAnimFrame))\r\n\r\n// scroll it!\r\n//scrollToY(0, 1500, 'easeInOutQuint');\r\nexport class ScrollTop {\r\n    private _elem: HTMLElement;\r\n\r\n    constructor(addListener: boolean = true) {\r\n        if(!addListener) { return; };\r\n        this._elem = document.querySelector(`[data-mb=\"scrollup\"]`);\r\n        if(this._elem) {\r\n            this._init();\r\n        }\r\n    }\r\n    \r\n    private _init(): void {\r\n        this._elem.addEventListener(`click`, () => {\r\n            this.scroll(0, 1500, `easeInOutQuint`);\r\n        })\r\n    }\r\n\r\n    public scroll(scrollTargetY: any, speed?: number, easing?: string) {\r\n        try {\r\n            // scrollTargetY: the target scrollY property of the window\r\n            // speed: time in pixels per second\r\n            // easing: easing equation to use\r\n\r\n            var scrollY = window.scrollY,\r\n                scrollTargetY = scrollTargetY || 0,\r\n                speed = speed || 2000,\r\n                easing = easing || 'easeInOutCubic',\r\n                currentTime = 0;\r\n\r\n            // min time .1, max time .8 seconds\r\n            var time = Math.max(.01, Math.min(Math.abs(scrollY - scrollTargetY) / speed, 8));\r\n            // easing equations from https://github.com/danro/easing-js/blob/master/easing.js\r\n            var PI_D2 = Math.PI / 2,\r\n                easingEquations = {\r\n                    easeOutSine: function (pos: number) {\r\n                        return Math.sin(pos * (Math.PI / 2));\r\n                    },\r\n                    easeInOutSine: function (pos: number) {\r\n                        return (-0.5 * (Math.cos(Math.PI * pos) - 1));\r\n                    },\r\n                    easeInOutQuint: function (pos: number) {\r\n                        if ((pos /= 0.5) < 1) {\r\n                            return 0.5 * Math.pow(pos, 5);\r\n                        }\r\n                        return 0.5 * (Math.pow((pos - 2), 5) + 2);\r\n                    },\r\n                    easeInOutCubic: function (t: number) { return t < .5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1 },\r\n                };\r\n\r\n            // add animation loop\r\n            var tick = function () {\r\n                currentTime += 1 / 60;\r\n\r\n                var p = currentTime / time;\r\n                var t = easingEquations[easing](p);\r\n\r\n                if (p < 1) {\r\n                    rAnimFrame(tick);\r\n                    window.scrollTo(0, scrollY + ((scrollTargetY - scrollY) * t));\r\n                } else {\r\n                    window.scrollTo(0, scrollTargetY);\r\n                }\r\n            }\r\n\r\n            // call it once to get started\r\n            tick();\r\n        } catch (err) {\r\n            console.warn('scrollToY', err);\r\n        }\r\n\r\n    }\r\n}\n\n\n// WEBPACK FOOTER //\n// ./js/newTube/scroll-top/scroll-top.ts","module.exports = { \"default\": require(\"core-js/library/fn/number/is-nan\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/babel-runtime/core-js/number/is-nan.js\n// module id = 51\n// module chunks = 0","module.exports = { \"default\": require(\"core-js/library/fn/object/assign\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/babel-runtime/core-js/object/assign.js\n// module id = 52\n// module chunks = 0","module.exports = { \"default\": require(\"core-js/library/fn/object/keys\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/babel-runtime/core-js/object/keys.js\n// module id = 53\n// module chunks = 0","module.exports = require(\"regenerator-runtime\");\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/babel-runtime/regenerator/index.js\n// module id = 54\n// module chunks = 0","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar formatOptions = function formatOptions(o) {\n    var path = o.path,\n        domain = o.domain,\n        expires = o.expires,\n        secure = o.secure;\n\n    return [typeof path === 'undefined' || path === null ? '' : ';path=' + path, typeof domain === 'undefined' || domain === null ? '' : ';domain=' + domain, typeof expires === 'undefined' || expires === null ? '' : ';expires=' + expires.toUTCString(), typeof secure === 'undefined' || secure === null || secure === false ? '' : ';secure'].join('');\n};\nvar formatCookie = function formatCookie(k, d, o) {\n    return [encodeURIComponent(k), '=', encodeURIComponent(d), formatOptions(o)].join('');\n};\nexports.formatCookie = formatCookie;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/cookie-storage/lib/format-cookie.js\n// module id = 55\n// module chunks = 0","\"use strict\";\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar parseCookies = function parseCookies(s) {\n    if (s.length === 0) return {};\n    var parsed = {};\n    var pattern = new RegExp('\\\\s*;\\\\s*');\n    s.split(pattern).forEach(function (i) {\n        var _i$split = i.split('='),\n            _i$split2 = _slicedToArray(_i$split, 2),\n            encodedKey = _i$split2[0],\n            encodedValue = _i$split2[1];\n\n        var key = decodeURIComponent(encodedKey);\n        var value = decodeURIComponent(encodedValue);\n        parsed[key] = value;\n    });\n    return parsed;\n};\nexports.parseCookies = parseCookies;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/cookie-storage/lib/parse-cookies.js\n// module id = 56\n// module chunks = 0","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n  try {\n    return it[key];\n  } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n  var O, T, B;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n    // builtinTag case\n    : ARG ? cof(O)\n    // ES3 arguments fallback\n    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_classof.js\n// module id = 57\n// module chunks = 0","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_html.js\n// module id = 58\n// module chunks = 0","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n  return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_ie8-dom-define.js\n// module id = 59\n// module chunks = 0","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n  return cof(it) == 'String' ? it.split('') : Object(it);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_iobject.js\n// module id = 60\n// module chunks = 0","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n  return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_is-array-iter.js\n// module id = 61\n// module chunks = 0","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n  try {\n    return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n  // 7.4.6 IteratorClose(iterator, completion)\n  } catch (e) {\n    var ret = iterator['return'];\n    if (ret !== undefined) anObject(ret.call(iterator));\n    throw e;\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_iter-call.js\n// module id = 62\n// module chunks = 0","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n  $iterCreate(Constructor, NAME, next);\n  var getMethod = function (kind) {\n    if (!BUGGY && kind in proto) return proto[kind];\n    switch (kind) {\n      case KEYS: return function keys() { return new Constructor(this, kind); };\n      case VALUES: return function values() { return new Constructor(this, kind); };\n    } return function entries() { return new Constructor(this, kind); };\n  };\n  var TAG = NAME + ' Iterator';\n  var DEF_VALUES = DEFAULT == VALUES;\n  var VALUES_BUG = false;\n  var proto = Base.prototype;\n  var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n  var $default = $native || getMethod(DEFAULT);\n  var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n  var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n  var methods, key, IteratorPrototype;\n  // Fix native\n  if ($anyNative) {\n    IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n    if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n      // Set @@toStringTag to native iterators\n      setToStringTag(IteratorPrototype, TAG, true);\n      // fix for some old engines\n      if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);\n    }\n  }\n  // fix Array#{values, @@iterator}.name in V8 / FF\n  if (DEF_VALUES && $native && $native.name !== VALUES) {\n    VALUES_BUG = true;\n    $default = function values() { return $native.call(this); };\n  }\n  // Define iterator\n  if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n    hide(proto, ITERATOR, $default);\n  }\n  // Plug for library\n  Iterators[NAME] = $default;\n  Iterators[TAG] = returnThis;\n  if (DEFAULT) {\n    methods = {\n      values: DEF_VALUES ? $default : getMethod(VALUES),\n      keys: IS_SET ? $default : getMethod(KEYS),\n      entries: $entries\n    };\n    if (FORCED) for (key in methods) {\n      if (!(key in proto)) redefine(proto, key, methods[key]);\n    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n  }\n  return methods;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_iter-define.js\n// module id = 63\n// module chunks = 0","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n  var riter = [7][ITERATOR]();\n  riter['return'] = function () { SAFE_CLOSING = true; };\n  // eslint-disable-next-line no-throw-literal\n  Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n  if (!skipClosing && !SAFE_CLOSING) return false;\n  var safe = false;\n  try {\n    var arr = [7];\n    var iter = arr[ITERATOR]();\n    iter.next = function () { return { done: safe = true }; };\n    arr[ITERATOR] = function () { return iter; };\n    exec(arr);\n  } catch (e) { /* empty */ }\n  return safe;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_iter-detect.js\n// module id = 64\n// module chunks = 0","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = require('./_dom-create')('iframe');\n  var i = enumBugKeys.length;\n  var lt = '<';\n  var gt = '>';\n  var iframeDocument;\n  iframe.style.display = 'none';\n  require('./_html').appendChild(iframe);\n  iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n  // createDict = iframe.contentWindow.Object;\n  // html.removeChild(iframe);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n  iframeDocument.close();\n  createDict = iframeDocument.F;\n  while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n  return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n  var result;\n  if (O !== null) {\n    Empty[PROTOTYPE] = anObject(O);\n    result = new Empty();\n    Empty[PROTOTYPE] = null;\n    // add \"__proto__\" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = createDict();\n  return Properties === undefined ? result : dPs(result, Properties);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_object-create.js\n// module id = 65\n// module chunks = 0","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n  return $keys(O, hiddenKeys);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_object-gopn.js\n// module id = 66\n// module chunks = 0","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n  var O = toIObject(object);\n  var i = 0;\n  var result = [];\n  var key;\n  for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (has(O, key = names[i++])) {\n    ~arrayIndexOf(result, key) || result.push(key);\n  }\n  return result;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_object-keys-internal.js\n// module id = 67\n// module chunks = 0","module.exports = function (exec) {\n  try {\n    return { e: false, v: exec() };\n  } catch (e) {\n    return { e: true, v: e };\n  }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_perform.js\n// module id = 68\n// module chunks = 0","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n  anObject(C);\n  if (isObject(x) && x.constructor === C) return x;\n  var promiseCapability = newPromiseCapability.f(C);\n  var resolve = promiseCapability.resolve;\n  resolve(x);\n  return promiseCapability.promise;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_promise-resolve.js\n// module id = 69\n// module chunks = 0","module.exports = require('./_hide');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_redefine.js\n// module id = 70\n// module chunks = 0","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n  var C = anObject(O).constructor;\n  var S;\n  return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_species-constructor.js\n// module id = 71\n// module chunks = 0","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n  var id = +this;\n  // eslint-disable-next-line no-prototype-builtins\n  if (queue.hasOwnProperty(id)) {\n    var fn = queue[id];\n    delete queue[id];\n    fn();\n  }\n};\nvar listener = function (event) {\n  run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n  setTask = function setImmediate(fn) {\n    var args = [];\n    var i = 1;\n    while (arguments.length > i) args.push(arguments[i++]);\n    queue[++counter] = function () {\n      // eslint-disable-next-line no-new-func\n      invoke(typeof fn == 'function' ? fn : Function(fn), args);\n    };\n    defer(counter);\n    return counter;\n  };\n  clearTask = function clearImmediate(id) {\n    delete queue[id];\n  };\n  // Node.js 0.8-\n  if (require('./_cof')(process) == 'process') {\n    defer = function (id) {\n      process.nextTick(ctx(run, id, 1));\n    };\n  // Sphere (JS game engine) Dispatch API\n  } else if (Dispatch && Dispatch.now) {\n    defer = function (id) {\n      Dispatch.now(ctx(run, id, 1));\n    };\n  // Browsers with MessageChannel, includes WebWorkers\n  } else if (MessageChannel) {\n    channel = new MessageChannel();\n    port = channel.port2;\n    channel.port1.onmessage = listener;\n    defer = ctx(port.postMessage, port, 1);\n  // Browsers with postMessage, skip WebWorkers\n  // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n  } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n    defer = function (id) {\n      global.postMessage(id + '', '*');\n    };\n    global.addEventListener('message', listener, false);\n  // IE8-\n  } else if (ONREADYSTATECHANGE in cel('script')) {\n    defer = function (id) {\n      html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n        html.removeChild(this);\n        run.call(id);\n      };\n    };\n  // Rest old browsers\n  } else {\n    defer = function (id) {\n      setTimeout(ctx(run, id, 1), 0);\n    };\n  }\n}\nmodule.exports = {\n  set: setTask,\n  clear: clearTask\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_task.js\n// module id = 72\n// module chunks = 0","/* globals __webpack_amd_options__ */\r\nmodule.exports = __webpack_amd_options__;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/webpack/buildin/amd-options.js\n// module id = 74\n// module chunks = 0","export * from './main-nav/main-nav';\r\nexport * from './dropdowns/dropdowns';\r\nexport * from './rating/rating';\r\nexport * from './comments/comments';\r\nexport * from './tabs/tabs';\r\nexport * from './fake-upload/fake-upload';\r\nexport * from './gallery/gallery';\r\nexport * from './ad-in-items/ad-in-items';\r\nexport * from './double-tap/double-tap';\r\nexport * from './scroll-top/scroll-top';\r\nexport * from './simple-scrollbar/simple-scrollbar';\r\nexport * from './responsive-trigger/nhance.responsive-trigger';\r\nexport * from './expander/expander';\r\nexport * from './color-changer/color-changer';\r\nexport * from './search-selector/search-selector';\r\nexport * from './quick-hover/quick-hover';\r\nexport * from './thumb-shuffler/thumb-shuffler';\r\nexport * from './height-normalizer/height-normalizer';\r\nexport * from './modals/modals';\r\nexport * from './ion-range-slider/ion.range-slider';\r\nexport * from './helpers'; \n\n\n// WEBPACK FOOTER //\n// ./js/newTube/index.ts","import jQuery from \"jquery\";\r\nvar $ = jQuery;\r\n(function($, undefined) {\r\n\r\n$.easing['jswing'] = $.easing['swing'];\r\n\r\n$.extend( $.easing,\r\n{\r\n\tdef: 'easeOutQuad',\r\n\tswing: function (x, t, b, c, d) {\r\n\t\t//alert($.easing.default);\r\n\t\treturn $.easing[$.easing.def](x, t, b, c, d);\r\n\t},\r\n\teaseInQuad: function (x, t, b, c, d) {\r\n\t\treturn c*(t/=d)*t + b;\r\n\t},\r\n\teaseOutQuad: function (x, t, b, c, d) {\r\n\t\treturn -c *(t/=d)*(t-2) + b;\r\n\t},\r\n\teaseInOutQuad: function (x, t, b, c, d) {\r\n\t\tif ((t/=d/2) < 1) return c/2*t*t + b;\r\n\t\treturn -c/2 * ((--t)*(t-2) - 1) + b;\r\n\t},\r\n\teaseInCubic: function (x, t, b, c, d) {\r\n\t\treturn c*(t/=d)*t*t + b;\r\n\t},\r\n\teaseOutCubic: function (x, t, b, c, d) {\r\n\t\treturn c*((t=t/d-1)*t*t + 1) + b;\r\n\t},\r\n\teaseInOutCubic: function (x, t, b, c, d) {\r\n\t\tif ((t/=d/2) < 1) return c/2*t*t*t + b;\r\n\t\treturn c/2*((t-=2)*t*t + 2) + b;\r\n\t},\r\n\teaseInQuart: function (x, t, b, c, d) {\r\n\t\treturn c*(t/=d)*t*t*t + b;\r\n\t},\r\n\teaseOutQuart: function (x, t, b, c, d) {\r\n\t\treturn -c * ((t=t/d-1)*t*t*t - 1) + b;\r\n\t},\r\n\teaseInOutQuart: function (x, t, b, c, d) {\r\n\t\tif ((t/=d/2) < 1) return c/2*t*t*t*t + b;\r\n\t\treturn -c/2 * ((t-=2)*t*t*t - 2) + b;\r\n\t},\r\n\teaseInQuint: function (x, t, b, c, d) {\r\n\t\treturn c*(t/=d)*t*t*t*t + b;\r\n\t},\r\n\teaseOutQuint: function (x, t, b, c, d) {\r\n\t\treturn c*((t=t/d-1)*t*t*t*t + 1) + b;\r\n\t},\r\n\teaseInOutQuint: function (x, t, b, c, d) {\r\n\t\tif ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;\r\n\t\treturn c/2*((t-=2)*t*t*t*t + 2) + b;\r\n\t},\r\n\teaseInSine: function (x, t, b, c, d) {\r\n\t\treturn -c * Math.cos(t/d * (Math.PI/2)) + c + b;\r\n\t},\r\n\teaseOutSine: function (x, t, b, c, d) {\r\n\t\treturn c * Math.sin(t/d * (Math.PI/2)) + b;\r\n\t},\r\n\teaseInOutSine: function (x, t, b, c, d) {\r\n\t\treturn -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;\r\n\t},\r\n\teaseInExpo: function (x, t, b, c, d) {\r\n\t\treturn (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;\r\n\t},\r\n\teaseOutExpo: function (x, t, b, c, d) {\r\n\t\treturn (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;\r\n\t},\r\n\teaseInOutExpo: function (x, t, b, c, d) {\r\n\t\tif (t==0) return b;\r\n\t\tif (t==d) return b+c;\r\n\t\tif ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;\r\n\t\treturn c/2 * (-Math.pow(2, -10 * --t) + 2) + b;\r\n\t},\r\n\teaseInCirc: function (x, t, b, c, d) {\r\n\t\treturn -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;\r\n\t},\r\n\teaseOutCirc: function (x, t, b, c, d) {\r\n\t\treturn c * Math.sqrt(1 - (t=t/d-1)*t) + b;\r\n\t},\r\n\teaseInOutCirc: function (x, t, b, c, d) {\r\n\t\tif ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;\r\n\t\treturn c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;\r\n\t},\r\n\teaseInElastic: function (x, t, b, c, d) {\r\n\t\tvar s=1.70158;var p=0;var a=c;\r\n\t\tif (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;\r\n\t\tif (a < Math.abs(c)) { a=c; var s=p/4; }\r\n\t\telse var s = p/(2*Math.PI) * Math.asin (c/a);\r\n\t\treturn -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;\r\n\t},\r\n\teaseOutElastic: function (x, t, b, c, d) {\r\n\t\tvar s=1.70158;var p=0;var a=c;\r\n\t\tif (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;\r\n\t\tif (a < Math.abs(c)) { a=c; var s=p/4; }\r\n\t\telse var s = p/(2*Math.PI) * Math.asin (c/a);\r\n\t\treturn a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;\r\n\t},\r\n\teaseInOutElastic: function (x, t, b, c, d) {\r\n\t\tvar s=1.70158;var p=0;var a=c;\r\n\t\tif (t==0) return b;  if ((t/=d/2)==2) return b+c;  if (!p) p=d*(.3*1.5);\r\n\t\tif (a < Math.abs(c)) { a=c; var s=p/4; }\r\n\t\telse var s = p/(2*Math.PI) * Math.asin (c/a);\r\n\t\tif (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;\r\n\t\treturn a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;\r\n\t},\r\n\teaseInBack: function (x, t, b, c, d, s) {\r\n\t\tif (s == undefined) s = 1.70158;\r\n\t\treturn c*(t/=d)*t*((s+1)*t - s) + b;\r\n\t},\r\n\teaseOutBack: function (x, t, b, c, d, s) {\r\n\t\tif (s == undefined) s = 1.70158;\r\n\t\treturn c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;\r\n\t},\r\n\teaseInOutBack: function (x, t, b, c, d, s) {\r\n\t\tif (s == undefined) s = 1.70158; \r\n\t\tif ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;\r\n\t\treturn c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;\r\n\t},\r\n\teaseInBounce: function (x, t, b, c, d) {\r\n\t\treturn c - $.easing.easeOutBounce (x, d-t, 0, c, d) + b;\r\n\t},\r\n\teaseOutBounce: function (x, t, b, c, d) {\r\n\t\tif ((t/=d) < (1/2.75)) {\r\n\t\t\treturn c*(7.5625*t*t) + b;\r\n\t\t} else if (t < (2/2.75)) {\r\n\t\t\treturn c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;\r\n\t\t} else if (t < (2.5/2.75)) {\r\n\t\t\treturn c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;\r\n\t\t} else {\r\n\t\t\treturn c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;\r\n\t\t}\r\n\t},\r\n\teaseInOutBounce: function (x, t, b, c, d) {\r\n\t\tif (t < d/2) return $.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;\r\n\t\treturn $.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;\r\n\t}\r\n});\r\n}) (jQuery);\r\n/*\r\n *\r\n * TERMS OF USE - EASING EQUATIONS\r\n * \r\n * Open source under the BSD License. \r\n * \r\n * Copyright Š 2001 Robert Penner\r\n * All rights reserved.\r\n * \r\n * Redistribution and use in source and binary forms, with or without modification, \r\n * are permitted provided that the following conditions are met:\r\n * \r\n * Redistributions of source code must retain the above copyright notice, this list of \r\n * conditions and the following disclaimer.\r\n * Redistributions in binary form must reproduce the above copyright notice, this list \r\n * of conditions and the following disclaimer in the documentation and/or other materials \r\n * provided with the distribution.\r\n * \r\n * Neither the name of the author nor the names of contributors may be used to endorse \r\n * or promote products derived from this software without specific prior written permission.\r\n * \r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY \r\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r\n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\r\n *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\r\n *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\r\n *  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED \r\n * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r\n *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED \r\n * OF THE POSSIBILITY OF SUCH DAMAGE. \r\n *\r\n */\n\n\n// WEBPACK FOOTER //\n// ./js/newTube/core/easing.js","import jQuery from \"jquery\";\r\nvar $ = jQuery;\r\n(function( factory ) {\r\n\tif ( typeof define === \"function\" && define.amd ) {\r\n\r\n\t\t// AMD. Register as an anonymous module.\r\n\t\tdefine([ \"jquery\" ], factory );\r\n\t} else {\r\n\r\n\t\t// Browser globals\r\n\t\tfactory( jQuery );\r\n\t}\r\n}(function( $ ) {\r\n/*!\r\n * jQuery UI Core 1.11.4\r\n * http://jqueryui.com\r\n *\r\n * Copyright jQuery Foundation and other contributors\r\n * Released under the MIT license.\r\n * http://jquery.org/license\r\n *\r\n * http://api.jqueryui.com/category/ui-core/\r\n */\r\n\r\n\r\n// $.ui might exist from components with no dependencies, e.g., $.ui.position\r\n$.ui = $.ui || {};\r\n\r\n$.extend( $.ui, {\r\n\tversion: \"1.11.4\",\r\n\r\n\tkeyCode: {\r\n\t\tBACKSPACE: 8,\r\n\t\tCOMMA: 188,\r\n\t\tDELETE: 46,\r\n\t\tDOWN: 40,\r\n\t\tEND: 35,\r\n\t\tENTER: 13,\r\n\t\tESCAPE: 27,\r\n\t\tHOME: 36,\r\n\t\tLEFT: 37,\r\n\t\tPAGE_DOWN: 34,\r\n\t\tPAGE_UP: 33,\r\n\t\tPERIOD: 190,\r\n\t\tRIGHT: 39,\r\n\t\tSPACE: 32,\r\n\t\tTAB: 9,\r\n\t\tUP: 38\r\n\t}\r\n});\r\n\r\n// plugins\r\n$.fn.extend({\r\n\tscrollParent: function( includeHidden ) {\r\n\t\tvar position = this.css( \"position\" ),\r\n\t\t\texcludeStaticParent = position === \"absolute\",\r\n\t\t\toverflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/,\r\n\t\t\tscrollParent = this.parents().filter( function() {\r\n\t\t\t\tvar parent = $( this );\r\n\t\t\t\tif ( excludeStaticParent && parent.css( \"position\" ) === \"static\" ) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\treturn overflowRegex.test( parent.css( \"overflow\" ) + parent.css( \"overflow-y\" ) + parent.css( \"overflow-x\" ) );\r\n\t\t\t}).eq( 0 );\r\n\r\n\t\treturn position === \"fixed\" || !scrollParent.length ? $( this[ 0 ].ownerDocument || document ) : scrollParent;\r\n\t},\r\n\r\n\tuniqueId: (function() {\r\n\t\tvar uuid = 0;\r\n\r\n\t\treturn function() {\r\n\t\t\treturn this.each(function() {\r\n\t\t\t\tif ( !this.id ) {\r\n\t\t\t\t\tthis.id = \"ui-id-\" + ( ++uuid );\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t};\r\n\t})(),\r\n\r\n\tremoveUniqueId: function() {\r\n\t\treturn this.each(function() {\r\n\t\t\tif ( /^ui-id-\\d+$/.test( this.id ) ) {\r\n\t\t\t\t$( this ).removeAttr( \"id\" );\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n});\r\n\r\n// selectors\r\nfunction focusable( element, isTabIndexNotNaN ) {\r\n\tvar map, mapName, img,\r\n\t\tnodeName = element.nodeName.toLowerCase();\r\n\tif ( \"area\" === nodeName ) {\r\n\t\tmap = element.parentNode;\r\n\t\tmapName = map.name;\r\n\t\tif ( !element.href || !mapName || map.nodeName.toLowerCase() !== \"map\" ) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\timg = $( \"img[usemap='#\" + mapName + \"']\" )[ 0 ];\r\n\t\treturn !!img && visible( img );\r\n\t}\r\n\treturn ( /^(input|select|textarea|button|object)$/.test( nodeName ) ?\r\n\t\t!element.disabled :\r\n\t\t\"a\" === nodeName ?\r\n\t\t\telement.href || isTabIndexNotNaN :\r\n\t\t\tisTabIndexNotNaN) &&\r\n\t\t// the element and all of its ancestors must be visible\r\n\t\tvisible( element );\r\n}\r\n\r\nfunction visible( element ) {\r\n\treturn $.expr.filters.visible( element ) &&\r\n\t\t!$( element ).parents().addBack().filter(function() {\r\n\t\t\treturn $.css( this, \"visibility\" ) === \"hidden\";\r\n\t\t}).length;\r\n}\r\n\r\n$.extend( $.expr[ \":\" ], {\r\n\tdata: $.expr.createPseudo ?\r\n\t\t$.expr.createPseudo(function( dataName ) {\r\n\t\t\treturn function( elem ) {\r\n\t\t\t\treturn !!$.data( elem, dataName );\r\n\t\t\t};\r\n\t\t}) :\r\n\t\t// support: jQuery <1.8\r\n\t\tfunction( elem, i, match ) {\r\n\t\t\treturn !!$.data( elem, match[ 3 ] );\r\n\t\t},\r\n\r\n\tfocusable: function( element ) {\r\n\t\treturn focusable( element, !isNaN( $.attr( element, \"tabindex\" ) ) );\r\n\t},\r\n\r\n\ttabbable: function( element ) {\r\n\t\tvar tabIndex = $.attr( element, \"tabindex\" ),\r\n\t\t\tisTabIndexNaN = isNaN( tabIndex );\r\n\t\treturn ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN );\r\n\t}\r\n});\r\n\r\n// support: jQuery <1.8\r\nif ( !$( \"<a>\" ).outerWidth( 1 ).jquery ) {\r\n\t$.each( [ \"Width\", \"Height\" ], function( i, name ) {\r\n\t\tvar side = name === \"Width\" ? [ \"Left\", \"Right\" ] : [ \"Top\", \"Bottom\" ],\r\n\t\t\ttype = name.toLowerCase(),\r\n\t\t\torig = {\r\n\t\t\t\tinnerWidth: $.fn.innerWidth,\r\n\t\t\t\tinnerHeight: $.fn.innerHeight,\r\n\t\t\t\touterWidth: $.fn.outerWidth,\r\n\t\t\t\touterHeight: $.fn.outerHeight\r\n\t\t\t};\r\n\r\n\t\tfunction reduce( elem, size, border, margin ) {\r\n\t\t\t$.each( side, function() {\r\n\t\t\t\tsize -= parseFloat( $.css( elem, \"padding\" + this ) ) || 0;\r\n\t\t\t\tif ( border ) {\r\n\t\t\t\t\tsize -= parseFloat( $.css( elem, \"border\" + this + \"Width\" ) ) || 0;\r\n\t\t\t\t}\r\n\t\t\t\tif ( margin ) {\r\n\t\t\t\t\tsize -= parseFloat( $.css( elem, \"margin\" + this ) ) || 0;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\treturn size;\r\n\t\t}\r\n\r\n\t\t$.fn[ \"inner\" + name ] = function( size ) {\r\n\t\t\tif ( size === undefined ) {\r\n\t\t\t\treturn orig[ \"inner\" + name ].call( this );\r\n\t\t\t}\r\n\r\n\t\t\treturn this.each(function() {\r\n\t\t\t\t$( this ).css( type, reduce( this, size ) + \"px\" );\r\n\t\t\t});\r\n\t\t};\r\n\r\n\t\t$.fn[ \"outer\" + name] = function( size, margin ) {\r\n\t\t\tif ( typeof size !== \"number\" ) {\r\n\t\t\t\treturn orig[ \"outer\" + name ].call( this, size );\r\n\t\t\t}\r\n\r\n\t\t\treturn this.each(function() {\r\n\t\t\t\t$( this).css( type, reduce( this, size, true, margin ) + \"px\" );\r\n\t\t\t});\r\n\t\t};\r\n\t});\r\n}\r\n\r\n// support: jQuery <1.8\r\nif ( !$.fn.addBack ) {\r\n\t$.fn.addBack = function( selector ) {\r\n\t\treturn this.add( selector == null ?\r\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\r\n\t\t);\r\n\t};\r\n}\r\n\r\n// support: jQuery 1.6.1, 1.6.2 (http://bugs.jquery.com/ticket/9413)\r\nif ( $( \"<a>\" ).data( \"a-b\", \"a\" ).removeData( \"a-b\" ).data( \"a-b\" ) ) {\r\n\t$.fn.removeData = (function( removeData ) {\r\n\t\treturn function( key ) {\r\n\t\t\tif ( arguments.length ) {\r\n\t\t\t\treturn removeData.call( this, $.camelCase( key ) );\r\n\t\t\t} else {\r\n\t\t\t\treturn removeData.call( this );\r\n\t\t\t}\r\n\t\t};\r\n\t})( $.fn.removeData );\r\n}\r\n\r\n// deprecated\r\n$.ui.ie = !!/msie [\\w.]+/.exec( navigator.userAgent.toLowerCase() );\r\n\r\n$.fn.extend({\r\n\tfocus: (function( orig ) {\r\n\t\treturn function( delay, fn ) {\r\n\t\t\treturn typeof delay === \"number\" ?\r\n\t\t\t\tthis.each(function() {\r\n\t\t\t\t\tvar elem = this;\r\n\t\t\t\t\tsetTimeout(function() {\r\n\t\t\t\t\t\t$( elem ).focus();\r\n\t\t\t\t\t\tif ( fn ) {\r\n\t\t\t\t\t\t\tfn.call( elem );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}, delay );\r\n\t\t\t\t}) :\r\n\t\t\t\torig.apply( this, arguments );\r\n\t\t};\r\n\t})( $.fn.focus ),\r\n\r\n\tdisableSelection: (function() {\r\n\t\tvar eventType = \"onselectstart\" in document.createElement( \"div\" ) ?\r\n\t\t\t\"selectstart\" :\r\n\t\t\t\"mousedown\";\r\n\r\n\t\treturn function() {\r\n\t\t\treturn this.bind( eventType + \".ui-disableSelection\", function( event ) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t});\r\n\t\t};\r\n\t})(),\r\n\r\n\tenableSelection: function() {\r\n\t\treturn this.unbind( \".ui-disableSelection\" );\r\n\t},\r\n\r\n\tzIndex: function( zIndex ) {\r\n\t\tif ( zIndex !== undefined ) {\r\n\t\t\treturn this.css( \"zIndex\", zIndex );\r\n\t\t}\r\n\r\n\t\tif ( this.length ) {\r\n\t\t\tvar elem = $( this[ 0 ] ), position, value;\r\n\t\t\twhile ( elem.length && elem[ 0 ] !== document ) {\r\n\t\t\t\t// Ignore z-index if position is set to a value where z-index is ignored by the browser\r\n\t\t\t\t// This makes behavior of this function consistent across browsers\r\n\t\t\t\t// WebKit always returns auto if the element is positioned\r\n\t\t\t\tposition = elem.css( \"position\" );\r\n\t\t\t\tif ( position === \"absolute\" || position === \"relative\" || position === \"fixed\" ) {\r\n\t\t\t\t\t// IE returns 0 when zIndex is not specified\r\n\t\t\t\t\t// other browsers return a string\r\n\t\t\t\t\t// we ignore the case of nested elements with an explicit value of 0\r\n\t\t\t\t\t// <div style=\"z-index: -10;\"><div style=\"z-index: 0;\"></div></div>\r\n\t\t\t\t\tvalue = parseInt( elem.css( \"zIndex\" ), 10 );\r\n\t\t\t\t\tif ( !isNaN( value ) && value !== 0 ) {\r\n\t\t\t\t\t\treturn value;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telem = elem.parent();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn 0;\r\n\t}\r\n});\r\n\r\n// $.ui.plugin is deprecated. Use $.widget() extensions instead.\r\n$.ui.plugin = {\r\n\tadd: function( module, option, set ) {\r\n\t\tvar i,\r\n\t\t\tproto = $.ui[ module ].prototype;\r\n\t\tfor ( i in set ) {\r\n\t\t\tproto.plugins[ i ] = proto.plugins[ i ] || [];\r\n\t\t\tproto.plugins[ i ].push( [ option, set[ i ] ] );\r\n\t\t}\r\n\t},\r\n\tcall: function( instance, name, args, allowDisconnected ) {\r\n\t\tvar i,\r\n\t\t\tset = instance.plugins[ name ];\r\n\r\n\t\tif ( !set ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif ( !allowDisconnected && ( !instance.element[ 0 ].parentNode || instance.element[ 0 ].parentNode.nodeType === 11 ) ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfor ( i = 0; i < set.length; i++ ) {\r\n\t\t\tif ( instance.options[ set[ i ][ 0 ] ] ) {\r\n\t\t\t\tset[ i ][ 1 ].apply( instance.element, args );\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n\r\n\r\n/*!\r\n * jQuery UI Widget 1.11.4\r\n * http://jqueryui.com\r\n *\r\n * Copyright jQuery Foundation and other contributors\r\n * Released under the MIT license.\r\n * http://jquery.org/license\r\n *\r\n * http://api.jqueryui.com/jQuery.widget/\r\n */\r\n\r\n\r\nvar widget_uuid = 0,\r\n\twidget_slice = Array.prototype.slice;\r\n\r\n$.cleanData = (function( orig ) {\r\n\treturn function( elems ) {\r\n\t\tvar events, elem, i;\r\n\t\tfor ( i = 0; (elem = elems[i]) != null; i++ ) {\r\n\t\t\ttry {\r\n\r\n\t\t\t\t// Only trigger remove when necessary to save time\r\n\t\t\t\tevents = $._data( elem, \"events\" );\r\n\t\t\t\tif ( events && events.remove ) {\r\n\t\t\t\t\t$( elem ).triggerHandler( \"remove\" );\r\n\t\t\t\t}\r\n\r\n\t\t\t// http://bugs.jquery.com/ticket/8235\r\n\t\t\t} catch ( e ) {}\r\n\t\t}\r\n\t\torig( elems );\r\n\t};\r\n})( $.cleanData );\r\n\r\n$.widget = function( name, base, prototype ) {\r\n\tvar fullName, existingConstructor, constructor, basePrototype,\r\n\t\t// proxiedPrototype allows the provided prototype to remain unmodified\r\n\t\t// so that it can be used as a mixin for multiple widgets (#8876)\r\n\t\tproxiedPrototype = {},\r\n\t\tnamespace = name.split( \".\" )[ 0 ];\r\n\r\n\tname = name.split( \".\" )[ 1 ];\r\n\tfullName = namespace + \"-\" + name;\r\n\r\n\tif ( !prototype ) {\r\n\t\tprototype = base;\r\n\t\tbase = $.Widget;\r\n\t}\r\n\r\n\t// create selector for plugin\r\n\t$.expr[ \":\" ][ fullName.toLowerCase() ] = function( elem ) {\r\n\t\treturn !!$.data( elem, fullName );\r\n\t};\r\n\r\n\t$[ namespace ] = $[ namespace ] || {};\r\n\texistingConstructor = $[ namespace ][ name ];\r\n\tconstructor = $[ namespace ][ name ] = function( options, element ) {\r\n\t\t// allow instantiation without \"new\" keyword\r\n\t\tif ( !this._createWidget ) {\r\n\t\t\treturn new constructor( options, element );\r\n\t\t}\r\n\r\n\t\t// allow instantiation without initializing for simple inheritance\r\n\t\t// must use \"new\" keyword (the code above always passes args)\r\n\t\tif ( arguments.length ) {\r\n\t\t\tthis._createWidget( options, element );\r\n\t\t}\r\n\t};\r\n\t// extend with the existing constructor to carry over any static properties\r\n\t$.extend( constructor, existingConstructor, {\r\n\t\tversion: prototype.version,\r\n\t\t// copy the object used to create the prototype in case we need to\r\n\t\t// redefine the widget later\r\n\t\t_proto: $.extend( {}, prototype ),\r\n\t\t// track widgets that inherit from this widget in case this widget is\r\n\t\t// redefined after a widget inherits from it\r\n\t\t_childConstructors: []\r\n\t});\r\n\r\n\tbasePrototype = new base();\r\n\t// we need to make the options hash a property directly on the new instance\r\n\t// otherwise we'll modify the options hash on the prototype that we're\r\n\t// inheriting from\r\n\tbasePrototype.options = $.widget.extend( {}, basePrototype.options );\r\n\t$.each( prototype, function( prop, value ) {\r\n\t\tif ( !$.isFunction( value ) ) {\r\n\t\t\tproxiedPrototype[ prop ] = value;\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tproxiedPrototype[ prop ] = (function() {\r\n\t\t\tvar _super = function() {\r\n\t\t\t\t\treturn base.prototype[ prop ].apply( this, arguments );\r\n\t\t\t\t},\r\n\t\t\t\t_superApply = function( args ) {\r\n\t\t\t\t\treturn base.prototype[ prop ].apply( this, args );\r\n\t\t\t\t};\r\n\t\t\treturn function() {\r\n\t\t\t\tvar __super = this._super,\r\n\t\t\t\t\t__superApply = this._superApply,\r\n\t\t\t\t\treturnValue;\r\n\r\n\t\t\t\tthis._super = _super;\r\n\t\t\t\tthis._superApply = _superApply;\r\n\r\n\t\t\t\treturnValue = value.apply( this, arguments );\r\n\r\n\t\t\t\tthis._super = __super;\r\n\t\t\t\tthis._superApply = __superApply;\r\n\r\n\t\t\t\treturn returnValue;\r\n\t\t\t};\r\n\t\t})();\r\n\t});\r\n\tconstructor.prototype = $.widget.extend( basePrototype, {\r\n\t\t// TODO: remove support for widgetEventPrefix\r\n\t\t// always use the name + a colon as the prefix, e.g., draggable:start\r\n\t\t// don't prefix for widgets that aren't DOM-based\r\n\t\twidgetEventPrefix: existingConstructor ? (basePrototype.widgetEventPrefix || name) : name\r\n\t}, proxiedPrototype, {\r\n\t\tconstructor: constructor,\r\n\t\tnamespace: namespace,\r\n\t\twidgetName: name,\r\n\t\twidgetFullName: fullName\r\n\t});\r\n\r\n\t// If this widget is being redefined then we need to find all widgets that\r\n\t// are inheriting from it and redefine all of them so that they inherit from\r\n\t// the new version of this widget. We're essentially trying to replace one\r\n\t// level in the prototype chain.\r\n\tif ( existingConstructor ) {\r\n\t\t$.each( existingConstructor._childConstructors, function( i, child ) {\r\n\t\t\tvar childPrototype = child.prototype;\r\n\r\n\t\t\t// redefine the child widget using the same prototype that was\r\n\t\t\t// originally used, but inherit from the new version of the base\r\n\t\t\t$.widget( childPrototype.namespace + \".\" + childPrototype.widgetName, constructor, child._proto );\r\n\t\t});\r\n\t\t// remove the list of existing child constructors from the old constructor\r\n\t\t// so the old child constructors can be garbage collected\r\n\t\tdelete existingConstructor._childConstructors;\r\n\t} else {\r\n\t\tbase._childConstructors.push( constructor );\r\n\t}\r\n\r\n\t$.widget.bridge( name, constructor );\r\n\r\n\treturn constructor;\r\n};\r\n\r\n$.widget.extend = function( target ) {\r\n\tvar input = widget_slice.call( arguments, 1 ),\r\n\t\tinputIndex = 0,\r\n\t\tinputLength = input.length,\r\n\t\tkey,\r\n\t\tvalue;\r\n\tfor ( ; inputIndex < inputLength; inputIndex++ ) {\r\n\t\tfor ( key in input[ inputIndex ] ) {\r\n\t\t\tvalue = input[ inputIndex ][ key ];\r\n\t\t\tif ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {\r\n\t\t\t\t// Clone objects\r\n\t\t\t\tif ( $.isPlainObject( value ) ) {\r\n\t\t\t\t\ttarget[ key ] = $.isPlainObject( target[ key ] ) ?\r\n\t\t\t\t\t\t$.widget.extend( {}, target[ key ], value ) :\r\n\t\t\t\t\t\t// Don't extend strings, arrays, etc. with objects\r\n\t\t\t\t\t\t$.widget.extend( {}, value );\r\n\t\t\t\t// Copy everything else by reference\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttarget[ key ] = value;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn target;\r\n};\r\n\r\n$.widget.bridge = function( name, object ) {\r\n\tvar fullName = object.prototype.widgetFullName || name;\r\n\t$.fn[ name ] = function( options ) {\r\n\t\tvar isMethodCall = typeof options === \"string\",\r\n\t\t\targs = widget_slice.call( arguments, 1 ),\r\n\t\t\treturnValue = this;\r\n\r\n\t\tif ( isMethodCall ) {\r\n\t\t\tthis.each(function() {\r\n\t\t\t\tvar methodValue,\r\n\t\t\t\t\tinstance = $.data( this, fullName );\r\n\t\t\t\tif ( options === \"instance\" ) {\r\n\t\t\t\t\treturnValue = instance;\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\tif ( !instance ) {\r\n\t\t\t\t\treturn $.error( \"cannot call methods on \" + name + \" prior to initialization; \" +\r\n\t\t\t\t\t\t\"attempted to call method '\" + options + \"'\" );\r\n\t\t\t\t}\r\n\t\t\t\tif ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === \"_\" ) {\r\n\t\t\t\t\treturn $.error( \"no such method '\" + options + \"' for \" + name + \" widget instance\" );\r\n\t\t\t\t}\r\n\t\t\t\tmethodValue = instance[ options ].apply( instance, args );\r\n\t\t\t\tif ( methodValue !== instance && methodValue !== undefined ) {\r\n\t\t\t\t\treturnValue = methodValue && methodValue.jquery ?\r\n\t\t\t\t\t\treturnValue.pushStack( methodValue.get() ) :\r\n\t\t\t\t\t\tmethodValue;\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t} else {\r\n\r\n\t\t\t// Allow multiple hashes to be passed on init\r\n\t\t\tif ( args.length ) {\r\n\t\t\t\toptions = $.widget.extend.apply( null, [ options ].concat(args) );\r\n\t\t\t}\r\n\r\n\t\t\tthis.each(function() {\r\n\t\t\t\tvar instance = $.data( this, fullName );\r\n\t\t\t\tif ( instance ) {\r\n\t\t\t\t\tinstance.option( options || {} );\r\n\t\t\t\t\tif ( instance._init ) {\r\n\t\t\t\t\t\tinstance._init();\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\t$.data( this, fullName, new object( options, this ) );\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn returnValue;\r\n\t};\r\n};\r\n\r\n$.Widget = function( /* options, element */ ) {};\r\n$.Widget._childConstructors = [];\r\n\r\n$.Widget.prototype = {\r\n\twidgetName: \"widget\",\r\n\twidgetEventPrefix: \"\",\r\n\tdefaultElement: \"<div>\",\r\n\toptions: {\r\n\t\tdisabled: false,\r\n\r\n\t\t// callbacks\r\n\t\tcreate: null\r\n\t},\r\n\t_createWidget: function( options, element ) {\r\n\t\telement = $( element || this.defaultElement || this )[ 0 ];\r\n\t\tthis.element = $( element );\r\n\t\tthis.uuid = widget_uuid++;\r\n\t\tthis.eventNamespace = \".\" + this.widgetName + this.uuid;\r\n\r\n\t\tthis.bindings = $();\r\n\t\tthis.hoverable = $();\r\n\t\tthis.focusable = $();\r\n\r\n\t\tif ( element !== this ) {\r\n\t\t\t$.data( element, this.widgetFullName, this );\r\n\t\t\tthis._on( true, this.element, {\r\n\t\t\t\tremove: function( event ) {\r\n\t\t\t\t\tif ( event.target === element ) {\r\n\t\t\t\t\t\tthis.destroy();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tthis.document = $( element.style ?\r\n\t\t\t\t// element within the document\r\n\t\t\t\telement.ownerDocument :\r\n\t\t\t\t// element is window or document\r\n\t\t\t\telement.document || element );\r\n\t\t\tthis.window = $( this.document[0].defaultView || this.document[0].parentWindow );\r\n\t\t}\r\n\r\n\t\tthis.options = $.widget.extend( {},\r\n\t\t\tthis.options,\r\n\t\t\tthis._getCreateOptions(),\r\n\t\t\toptions );\r\n\r\n\t\tthis._create();\r\n\t\tthis._trigger( \"create\", null, this._getCreateEventData() );\r\n\t\tthis._init();\r\n\t},\r\n\t_getCreateOptions: $.noop,\r\n\t_getCreateEventData: $.noop,\r\n\t_create: $.noop,\r\n\t_init: $.noop,\r\n\r\n\tdestroy: function() {\r\n\t\tthis._destroy();\r\n\t\t// we can probably remove the unbind calls in 2.0\r\n\t\t// all event bindings should go through this._on()\r\n\t\tthis.element\r\n\t\t\t.unbind( this.eventNamespace )\r\n\t\t\t.removeData( this.widgetFullName )\r\n\t\t\t// support: jquery <1.6.3\r\n\t\t\t// http://bugs.jquery.com/ticket/9413\r\n\t\t\t.removeData( $.camelCase( this.widgetFullName ) );\r\n\t\tthis.widget()\r\n\t\t\t.unbind( this.eventNamespace )\r\n\t\t\t.removeAttr( \"aria-disabled\" )\r\n\t\t\t.removeClass(\r\n\t\t\t\tthis.widgetFullName + \"-disabled \" +\r\n\t\t\t\t\"ui-state-disabled\" );\r\n\r\n\t\t// clean up events and states\r\n\t\tthis.bindings.unbind( this.eventNamespace );\r\n\t\tthis.hoverable.removeClass( \"ui-state-hover\" );\r\n\t\tthis.focusable.removeClass( \"ui-state-focus\" );\r\n\t},\r\n\t_destroy: $.noop,\r\n\r\n\twidget: function() {\r\n\t\treturn this.element;\r\n\t},\r\n\r\n\toption: function( key, value ) {\r\n\t\tvar options = key,\r\n\t\t\tparts,\r\n\t\t\tcurOption,\r\n\t\t\ti;\r\n\r\n\t\tif ( arguments.length === 0 ) {\r\n\t\t\t// don't return a reference to the internal hash\r\n\t\t\treturn $.widget.extend( {}, this.options );\r\n\t\t}\r\n\r\n\t\tif ( typeof key === \"string\" ) {\r\n\t\t\t// handle nested keys, e.g., \"foo.bar\" => { foo: { bar: ___ } }\r\n\t\t\toptions = {};\r\n\t\t\tparts = key.split( \".\" );\r\n\t\t\tkey = parts.shift();\r\n\t\t\tif ( parts.length ) {\r\n\t\t\t\tcurOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );\r\n\t\t\t\tfor ( i = 0; i < parts.length - 1; i++ ) {\r\n\t\t\t\t\tcurOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};\r\n\t\t\t\t\tcurOption = curOption[ parts[ i ] ];\r\n\t\t\t\t}\r\n\t\t\t\tkey = parts.pop();\r\n\t\t\t\tif ( arguments.length === 1 ) {\r\n\t\t\t\t\treturn curOption[ key ] === undefined ? null : curOption[ key ];\r\n\t\t\t\t}\r\n\t\t\t\tcurOption[ key ] = value;\r\n\t\t\t} else {\r\n\t\t\t\tif ( arguments.length === 1 ) {\r\n\t\t\t\t\treturn this.options[ key ] === undefined ? null : this.options[ key ];\r\n\t\t\t\t}\r\n\t\t\t\toptions[ key ] = value;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._setOptions( options );\r\n\r\n\t\treturn this;\r\n\t},\r\n\t_setOptions: function( options ) {\r\n\t\tvar key;\r\n\r\n\t\tfor ( key in options ) {\r\n\t\t\tthis._setOption( key, options[ key ] );\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\t_setOption: function( key, value ) {\r\n\t\tthis.options[ key ] = value;\r\n\r\n\t\tif ( key === \"disabled\" ) {\r\n\t\t\tthis.widget()\r\n\t\t\t\t.toggleClass( this.widgetFullName + \"-disabled\", !!value );\r\n\r\n\t\t\t// If the widget is becoming disabled, then nothing is interactive\r\n\t\t\tif ( value ) {\r\n\t\t\t\tthis.hoverable.removeClass( \"ui-state-hover\" );\r\n\t\t\t\tthis.focusable.removeClass( \"ui-state-focus\" );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\tenable: function() {\r\n\t\treturn this._setOptions({ disabled: false });\r\n\t},\r\n\tdisable: function() {\r\n\t\treturn this._setOptions({ disabled: true });\r\n\t},\r\n\r\n\t_on: function( suppressDisabledCheck, element, handlers ) {\r\n\t\tvar delegateElement,\r\n\t\t\tinstance = this;\r\n\r\n\t\t// no suppressDisabledCheck flag, shuffle arguments\r\n\t\tif ( typeof suppressDisabledCheck !== \"boolean\" ) {\r\n\t\t\thandlers = element;\r\n\t\t\telement = suppressDisabledCheck;\r\n\t\t\tsuppressDisabledCheck = false;\r\n\t\t}\r\n\r\n\t\t// no element argument, shuffle and use this.element\r\n\t\tif ( !handlers ) {\r\n\t\t\thandlers = element;\r\n\t\t\telement = this.element;\r\n\t\t\tdelegateElement = this.widget();\r\n\t\t} else {\r\n\t\t\telement = delegateElement = $( element );\r\n\t\t\tthis.bindings = this.bindings.add( element );\r\n\t\t}\r\n\r\n\t\t$.each( handlers, function( event, handler ) {\r\n\t\t\tfunction handlerProxy() {\r\n\t\t\t\t// allow widgets to customize the disabled handling\r\n\t\t\t\t// - disabled as an array instead of boolean\r\n\t\t\t\t// - disabled class as method for disabling individual parts\r\n\t\t\t\tif ( !suppressDisabledCheck &&\r\n\t\t\t\t\t\t( instance.options.disabled === true ||\r\n\t\t\t\t\t\t\t$( this ).hasClass( \"ui-state-disabled\" ) ) ) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\r\n\t\t\t\t\t.apply( instance, arguments );\r\n\t\t\t}\r\n\r\n\t\t\t// copy the guid so direct unbinding works\r\n\t\t\tif ( typeof handler !== \"string\" ) {\r\n\t\t\t\thandlerProxy.guid = handler.guid =\r\n\t\t\t\t\thandler.guid || handlerProxy.guid || $.guid++;\r\n\t\t\t}\r\n\r\n\t\t\tvar match = event.match( /^([\\w:-]*)\\s*(.*)$/ ),\r\n\t\t\t\teventName = match[1] + instance.eventNamespace,\r\n\t\t\t\tselector = match[2];\r\n\t\t\tif ( selector ) {\r\n\t\t\t\tdelegateElement.delegate( selector, eventName, handlerProxy );\r\n\t\t\t} else {\r\n\t\t\t\telement.bind( eventName, handlerProxy );\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\t_off: function( element, eventName ) {\r\n\t\teventName = (eventName || \"\").split( \" \" ).join( this.eventNamespace + \" \" ) +\r\n\t\t\tthis.eventNamespace;\r\n\t\telement.unbind( eventName ).undelegate( eventName );\r\n\r\n\t\t// Clear the stack to avoid memory leaks (#10056)\r\n\t\tthis.bindings = $( this.bindings.not( element ).get() );\r\n\t\tthis.focusable = $( this.focusable.not( element ).get() );\r\n\t\tthis.hoverable = $( this.hoverable.not( element ).get() );\r\n\t},\r\n\r\n\t_delay: function( handler, delay ) {\r\n\t\tfunction handlerProxy() {\r\n\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\r\n\t\t\t\t.apply( instance, arguments );\r\n\t\t}\r\n\t\tvar instance = this;\r\n\t\treturn setTimeout( handlerProxy, delay || 0 );\r\n\t},\r\n\r\n\t_hoverable: function( element ) {\r\n\t\tthis.hoverable = this.hoverable.add( element );\r\n\t\tthis._on( element, {\r\n\t\t\tmouseenter: function( event ) {\r\n\t\t\t\t$( event.currentTarget ).addClass( \"ui-state-hover\" );\r\n\t\t\t},\r\n\t\t\tmouseleave: function( event ) {\r\n\t\t\t\t$( event.currentTarget ).removeClass( \"ui-state-hover\" );\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\t_focusable: function( element ) {\r\n\t\tthis.focusable = this.focusable.add( element );\r\n\t\tthis._on( element, {\r\n\t\t\tfocusin: function( event ) {\r\n\t\t\t\t$( event.currentTarget ).addClass( \"ui-state-focus\" );\r\n\t\t\t},\r\n\t\t\tfocusout: function( event ) {\r\n\t\t\t\t$( event.currentTarget ).removeClass( \"ui-state-focus\" );\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\t_trigger: function( type, event, data ) {\r\n\t\tvar prop, orig,\r\n\t\t\tcallback = this.options[ type ];\r\n\r\n\t\tdata = data || {};\r\n\t\tevent = $.Event( event );\r\n\t\tevent.type = ( type === this.widgetEventPrefix ?\r\n\t\t\ttype :\r\n\t\t\tthis.widgetEventPrefix + type ).toLowerCase();\r\n\t\t// the original event may come from any element\r\n\t\t// so we need to reset the target on the new event\r\n\t\tevent.target = this.element[ 0 ];\r\n\r\n\t\t// copy original event properties over to the new event\r\n\t\torig = event.originalEvent;\r\n\t\tif ( orig ) {\r\n\t\t\tfor ( prop in orig ) {\r\n\t\t\t\tif ( !( prop in event ) ) {\r\n\t\t\t\t\tevent[ prop ] = orig[ prop ];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.element.trigger( event, data );\r\n\t\treturn !( $.isFunction( callback ) &&\r\n\t\t\tcallback.apply( this.element[0], [ event ].concat( data ) ) === false ||\r\n\t\t\tevent.isDefaultPrevented() );\r\n\t}\r\n};\r\n\r\n$.each( { show: \"fadeIn\", hide: \"fadeOut\" }, function( method, defaultEffect ) {\r\n\t$.Widget.prototype[ \"_\" + method ] = function( element, options, callback ) {\r\n\t\tif ( typeof options === \"string\" ) {\r\n\t\t\toptions = { effect: options };\r\n\t\t}\r\n\t\tvar hasOptions,\r\n\t\t\teffectName = !options ?\r\n\t\t\t\tmethod :\r\n\t\t\t\toptions === true || typeof options === \"number\" ?\r\n\t\t\t\t\tdefaultEffect :\r\n\t\t\t\t\toptions.effect || defaultEffect;\r\n\t\toptions = options || {};\r\n\t\tif ( typeof options === \"number\" ) {\r\n\t\t\toptions = { duration: options };\r\n\t\t}\r\n\t\thasOptions = !$.isEmptyObject( options );\r\n\t\toptions.complete = callback;\r\n\t\tif ( options.delay ) {\r\n\t\t\telement.delay( options.delay );\r\n\t\t}\r\n\t\tif ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {\r\n\t\t\telement[ method ]( options );\r\n\t\t} else if ( effectName !== method && element[ effectName ] ) {\r\n\t\t\telement[ effectName ]( options.duration, options.easing, callback );\r\n\t\t} else {\r\n\t\t\telement.queue(function( next ) {\r\n\t\t\t\t$( this )[ method ]();\r\n\t\t\t\tif ( callback ) {\r\n\t\t\t\t\tcallback.call( element[ 0 ] );\r\n\t\t\t\t}\r\n\t\t\t\tnext();\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n});\r\n\r\nvar widget = $.widget;\r\n\r\n\r\n/*!\r\n * jQuery UI Mouse 1.11.4\r\n * http://jqueryui.com\r\n *\r\n * Copyright jQuery Foundation and other contributors\r\n * Released under the MIT license.\r\n * http://jquery.org/license\r\n *\r\n * http://api.jqueryui.com/mouse/\r\n */\r\n\r\n\r\nvar mouseHandled = false;\r\n$( document ).mouseup( function() {\r\n\tmouseHandled = false;\r\n});\r\n\r\nvar mouse = $.widget(\"ui.mouse\", {\r\n\tversion: \"1.11.4\",\r\n\toptions: {\r\n\t\tcancel: \"input,textarea,button,select,option\",\r\n\t\tdistance: 1,\r\n\t\tdelay: 0\r\n\t},\r\n\t_mouseInit: function() {\r\n\t\tvar that = this;\r\n\r\n\t\tthis.element\r\n\t\t\t.bind(\"mousedown.\" + this.widgetName, function(event) {\r\n\t\t\t\treturn that._mouseDown(event);\r\n\t\t\t})\r\n\t\t\t.bind(\"click.\" + this.widgetName, function(event) {\r\n\t\t\t\tif (true === $.data(event.target, that.widgetName + \".preventClickEvent\")) {\r\n\t\t\t\t\t$.removeData(event.target, that.widgetName + \".preventClickEvent\");\r\n\t\t\t\t\tevent.stopImmediatePropagation();\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\tthis.started = false;\r\n\t},\r\n\r\n\t// TODO: make sure destroying one instance of mouse doesn't mess with\r\n\t// other instances of mouse\r\n\t_mouseDestroy: function() {\r\n\t\tthis.element.unbind(\".\" + this.widgetName);\r\n\t\tif ( this._mouseMoveDelegate ) {\r\n\t\t\tthis.document\r\n\t\t\t\t.unbind(\"mousemove.\" + this.widgetName, this._mouseMoveDelegate)\r\n\t\t\t\t.unbind(\"mouseup.\" + this.widgetName, this._mouseUpDelegate);\r\n\t\t}\r\n\t},\r\n\r\n\t_mouseDown: function(event) {\r\n\t\t// don't let more than one widget handle mouseStart\r\n\t\tif ( mouseHandled ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._mouseMoved = false;\r\n\r\n\t\t// we may have missed mouseup (out of window)\r\n\t\t(this._mouseStarted && this._mouseUp(event));\r\n\r\n\t\tthis._mouseDownEvent = event;\r\n\r\n\t\tvar that = this,\r\n\t\t\tbtnIsLeft = (event.which === 1),\r\n\t\t\t// event.target.nodeName works around a bug in IE 8 with\r\n\t\t\t// disabled inputs (#7620)\r\n\t\t\telIsCancel = (typeof this.options.cancel === \"string\" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false);\r\n\t\tif (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tthis.mouseDelayMet = !this.options.delay;\r\n\t\tif (!this.mouseDelayMet) {\r\n\t\t\tthis._mouseDelayTimer = setTimeout(function() {\r\n\t\t\t\tthat.mouseDelayMet = true;\r\n\t\t\t}, this.options.delay);\r\n\t\t}\r\n\r\n\t\tif (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {\r\n\t\t\tthis._mouseStarted = (this._mouseStart(event) !== false);\r\n\t\t\tif (!this._mouseStarted) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Click event may never have fired (Gecko & Opera)\r\n\t\tif (true === $.data(event.target, this.widgetName + \".preventClickEvent\")) {\r\n\t\t\t$.removeData(event.target, this.widgetName + \".preventClickEvent\");\r\n\t\t}\r\n\r\n\t\t// these delegates are required to keep context\r\n\t\tthis._mouseMoveDelegate = function(event) {\r\n\t\t\treturn that._mouseMove(event);\r\n\t\t};\r\n\t\tthis._mouseUpDelegate = function(event) {\r\n\t\t\treturn that._mouseUp(event);\r\n\t\t};\r\n\r\n\t\tthis.document\r\n\t\t\t.bind( \"mousemove.\" + this.widgetName, this._mouseMoveDelegate )\r\n\t\t\t.bind( \"mouseup.\" + this.widgetName, this._mouseUpDelegate );\r\n\r\n\t\tevent.preventDefault();\r\n\r\n\t\tmouseHandled = true;\r\n\t\treturn true;\r\n\t},\r\n\r\n\t_mouseMove: function(event) {\r\n\t\t// Only check for mouseups outside the document if you've moved inside the document\r\n\t\t// at least once. This prevents the firing of mouseup in the case of IE<9, which will\r\n\t\t// fire a mousemove event if content is placed under the cursor. See #7778\r\n\t\t// Support: IE <9\r\n\t\tif ( this._mouseMoved ) {\r\n\t\t\t// IE mouseup check - mouseup happened when mouse was out of window\r\n\t\t\tif ($.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && !event.button) {\r\n\t\t\t\treturn this._mouseUp(event);\r\n\r\n\t\t\t// Iframe mouseup check - mouseup occurred in another document\r\n\t\t\t} else if ( !event.which ) {\r\n\t\t\t\treturn this._mouseUp( event );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif ( event.which || event.button ) {\r\n\t\t\tthis._mouseMoved = true;\r\n\t\t}\r\n\r\n\t\tif (this._mouseStarted) {\r\n\t\t\tthis._mouseDrag(event);\r\n\t\t\treturn event.preventDefault();\r\n\t\t}\r\n\r\n\t\tif (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {\r\n\t\t\tthis._mouseStarted =\r\n\t\t\t\t(this._mouseStart(this._mouseDownEvent, event) !== false);\r\n\t\t\t(this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));\r\n\t\t}\r\n\r\n\t\treturn !this._mouseStarted;\r\n\t},\r\n\r\n\t_mouseUp: function(event) {\r\n\t\tthis.document\r\n\t\t\t.unbind( \"mousemove.\" + this.widgetName, this._mouseMoveDelegate )\r\n\t\t\t.unbind( \"mouseup.\" + this.widgetName, this._mouseUpDelegate );\r\n\r\n\t\tif (this._mouseStarted) {\r\n\t\t\tthis._mouseStarted = false;\r\n\r\n\t\t\tif (event.target === this._mouseDownEvent.target) {\r\n\t\t\t\t$.data(event.target, this.widgetName + \".preventClickEvent\", true);\r\n\t\t\t}\r\n\r\n\t\t\tthis._mouseStop(event);\r\n\t\t}\r\n\r\n\t\tmouseHandled = false;\r\n\t\treturn false;\r\n\t},\r\n\r\n\t_mouseDistanceMet: function(event) {\r\n\t\treturn (Math.max(\r\n\t\t\t\tMath.abs(this._mouseDownEvent.pageX - event.pageX),\r\n\t\t\t\tMath.abs(this._mouseDownEvent.pageY - event.pageY)\r\n\t\t\t) >= this.options.distance\r\n\t\t);\r\n\t},\r\n\r\n\t_mouseDelayMet: function(/* event */) {\r\n\t\treturn this.mouseDelayMet;\r\n\t},\r\n\r\n\t// These are placeholder methods, to be overriden by extending plugin\r\n\t_mouseStart: function(/* event */) {},\r\n\t_mouseDrag: function(/* event */) {},\r\n\t_mouseStop: function(/* event */) {},\r\n\t_mouseCapture: function(/* event */) { return true; }\r\n});\r\n\r\n\r\n/*!\r\n * jQuery UI Position 1.11.4\r\n * http://jqueryui.com\r\n *\r\n * Copyright jQuery Foundation and other contributors\r\n * Released under the MIT license.\r\n * http://jquery.org/license\r\n *\r\n * http://api.jqueryui.com/position/\r\n */\r\n\r\n(function() {\r\n\r\n$.ui = $.ui || {};\r\n\r\nvar cachedScrollbarWidth, supportsOffsetFractions,\r\n\tmax = Math.max,\r\n\tabs = Math.abs,\r\n\tround = Math.round,\r\n\trhorizontal = /left|center|right/,\r\n\trvertical = /top|center|bottom/,\r\n\troffset = /[\\+\\-]\\d+(\\.[\\d]+)?%?/,\r\n\trposition = /^\\w+/,\r\n\trpercent = /%$/,\r\n\t_position = $.fn.position;\r\n\r\nfunction getOffsets( offsets, width, height ) {\r\n\treturn [\r\n\t\tparseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),\r\n\t\tparseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )\r\n\t];\r\n}\r\n\r\nfunction parseCss( element, property ) {\r\n\treturn parseInt( $.css( element, property ), 10 ) || 0;\r\n}\r\n\r\nfunction getDimensions( elem ) {\r\n\tvar raw = elem[0];\r\n\tif ( raw.nodeType === 9 ) {\r\n\t\treturn {\r\n\t\t\twidth: elem.width(),\r\n\t\t\theight: elem.height(),\r\n\t\t\toffset: { top: 0, left: 0 }\r\n\t\t};\r\n\t}\r\n\tif ( $.isWindow( raw ) ) {\r\n\t\treturn {\r\n\t\t\twidth: elem.width(),\r\n\t\t\theight: elem.height(),\r\n\t\t\toffset: { top: elem.scrollTop(), left: elem.scrollLeft() }\r\n\t\t};\r\n\t}\r\n\tif ( raw.preventDefault ) {\r\n\t\treturn {\r\n\t\t\twidth: 0,\r\n\t\t\theight: 0,\r\n\t\t\toffset: { top: raw.pageY, left: raw.pageX }\r\n\t\t};\r\n\t}\r\n\treturn {\r\n\t\twidth: elem.outerWidth(),\r\n\t\theight: elem.outerHeight(),\r\n\t\toffset: elem.offset()\r\n\t};\r\n}\r\n\r\n$.position = {\r\n\tscrollbarWidth: function() {\r\n\t\tif ( cachedScrollbarWidth !== undefined ) {\r\n\t\t\treturn cachedScrollbarWidth;\r\n\t\t}\r\n\t\tvar w1, w2,\r\n\t\t\tdiv = $( \"<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>\" ),\r\n\t\t\tinnerDiv = div.children()[0];\r\n\r\n\t\t$( \"body\" ).append( div );\r\n\t\tw1 = innerDiv.offsetWidth;\r\n\t\tdiv.css( \"overflow\", \"scroll\" );\r\n\r\n\t\tw2 = innerDiv.offsetWidth;\r\n\r\n\t\tif ( w1 === w2 ) {\r\n\t\t\tw2 = div[0].clientWidth;\r\n\t\t}\r\n\r\n\t\tdiv.remove();\r\n\r\n\t\treturn (cachedScrollbarWidth = w1 - w2);\r\n\t},\r\n\tgetScrollInfo: function( within ) {\r\n\t\tvar overflowX = within.isWindow || within.isDocument ? \"\" :\r\n\t\t\t\twithin.element.css( \"overflow-x\" ),\r\n\t\t\toverflowY = within.isWindow || within.isDocument ? \"\" :\r\n\t\t\t\twithin.element.css( \"overflow-y\" ),\r\n\t\t\thasOverflowX = overflowX === \"scroll\" ||\r\n\t\t\t\t( overflowX === \"auto\" && within.width < within.element[0].scrollWidth ),\r\n\t\t\thasOverflowY = overflowY === \"scroll\" ||\r\n\t\t\t\t( overflowY === \"auto\" && within.height < within.element[0].scrollHeight );\r\n\t\treturn {\r\n\t\t\twidth: hasOverflowY ? $.position.scrollbarWidth() : 0,\r\n\t\t\theight: hasOverflowX ? $.position.scrollbarWidth() : 0\r\n\t\t};\r\n\t},\r\n\tgetWithinInfo: function( element ) {\r\n\t\tvar withinElement = $( element || window ),\r\n\t\t\tisWindow = $.isWindow( withinElement[0] ),\r\n\t\t\tisDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9;\r\n\t\treturn {\r\n\t\t\telement: withinElement,\r\n\t\t\tisWindow: isWindow,\r\n\t\t\tisDocument: isDocument,\r\n\t\t\toffset: withinElement.offset() || { left: 0, top: 0 },\r\n\t\t\tscrollLeft: withinElement.scrollLeft(),\r\n\t\t\tscrollTop: withinElement.scrollTop(),\r\n\r\n\t\t\t// support: jQuery 1.6.x\r\n\t\t\t// jQuery 1.6 doesn't support .outerWidth/Height() on documents or windows\r\n\t\t\twidth: isWindow || isDocument ? withinElement.width() : withinElement.outerWidth(),\r\n\t\t\theight: isWindow || isDocument ? withinElement.height() : withinElement.outerHeight()\r\n\t\t};\r\n\t}\r\n};\r\n\r\n$.fn.position = function( options ) {\r\n\tif ( !options || !options.of ) {\r\n\t\treturn _position.apply( this, arguments );\r\n\t}\r\n\r\n\t// make a copy, we don't want to modify arguments\r\n\toptions = $.extend( {}, options );\r\n\r\n\tvar atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,\r\n\t\ttarget = $( options.of ),\r\n\t\twithin = $.position.getWithinInfo( options.within ),\r\n\t\tscrollInfo = $.position.getScrollInfo( within ),\r\n\t\tcollision = ( options.collision || \"flip\" ).split( \" \" ),\r\n\t\toffsets = {};\r\n\r\n\tdimensions = getDimensions( target );\r\n\tif ( target[0].preventDefault ) {\r\n\t\t// force left top to allow flipping\r\n\t\toptions.at = \"left top\";\r\n\t}\r\n\ttargetWidth = dimensions.width;\r\n\ttargetHeight = dimensions.height;\r\n\ttargetOffset = dimensions.offset;\r\n\t// clone to reuse original targetOffset later\r\n\tbasePosition = $.extend( {}, targetOffset );\r\n\r\n\t// force my and at to have valid horizontal and vertical positions\r\n\t// if a value is missing or invalid, it will be converted to center\r\n\t$.each( [ \"my\", \"at\" ], function() {\r\n\t\tvar pos = ( options[ this ] || \"\" ).split( \" \" ),\r\n\t\t\thorizontalOffset,\r\n\t\t\tverticalOffset;\r\n\r\n\t\tif ( pos.length === 1) {\r\n\t\t\tpos = rhorizontal.test( pos[ 0 ] ) ?\r\n\t\t\t\tpos.concat( [ \"center\" ] ) :\r\n\t\t\t\trvertical.test( pos[ 0 ] ) ?\r\n\t\t\t\t\t[ \"center\" ].concat( pos ) :\r\n\t\t\t\t\t[ \"center\", \"center\" ];\r\n\t\t}\r\n\t\tpos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : \"center\";\r\n\t\tpos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : \"center\";\r\n\r\n\t\t// calculate offsets\r\n\t\thorizontalOffset = roffset.exec( pos[ 0 ] );\r\n\t\tverticalOffset = roffset.exec( pos[ 1 ] );\r\n\t\toffsets[ this ] = [\r\n\t\t\thorizontalOffset ? horizontalOffset[ 0 ] : 0,\r\n\t\t\tverticalOffset ? verticalOffset[ 0 ] : 0\r\n\t\t];\r\n\r\n\t\t// reduce to just the positions without the offsets\r\n\t\toptions[ this ] = [\r\n\t\t\trposition.exec( pos[ 0 ] )[ 0 ],\r\n\t\t\trposition.exec( pos[ 1 ] )[ 0 ]\r\n\t\t];\r\n\t});\r\n\r\n\t// normalize collision option\r\n\tif ( collision.length === 1 ) {\r\n\t\tcollision[ 1 ] = collision[ 0 ];\r\n\t}\r\n\r\n\tif ( options.at[ 0 ] === \"right\" ) {\r\n\t\tbasePosition.left += targetWidth;\r\n\t} else if ( options.at[ 0 ] === \"center\" ) {\r\n\t\tbasePosition.left += targetWidth / 2;\r\n\t}\r\n\r\n\tif ( options.at[ 1 ] === \"bottom\" ) {\r\n\t\tbasePosition.top += targetHeight;\r\n\t} else if ( options.at[ 1 ] === \"center\" ) {\r\n\t\tbasePosition.top += targetHeight / 2;\r\n\t}\r\n\r\n\tatOffset = getOffsets( offsets.at, targetWidth, targetHeight );\r\n\tbasePosition.left += atOffset[ 0 ];\r\n\tbasePosition.top += atOffset[ 1 ];\r\n\r\n\treturn this.each(function() {\r\n\t\tvar collisionPosition, using,\r\n\t\t\telem = $( this ),\r\n\t\t\telemWidth = elem.outerWidth(),\r\n\t\t\telemHeight = elem.outerHeight(),\r\n\t\t\tmarginLeft = parseCss( this, \"marginLeft\" ),\r\n\t\t\tmarginTop = parseCss( this, \"marginTop\" ),\r\n\t\t\tcollisionWidth = elemWidth + marginLeft + parseCss( this, \"marginRight\" ) + scrollInfo.width,\r\n\t\t\tcollisionHeight = elemHeight + marginTop + parseCss( this, \"marginBottom\" ) + scrollInfo.height,\r\n\t\t\tposition = $.extend( {}, basePosition ),\r\n\t\t\tmyOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );\r\n\r\n\t\tif ( options.my[ 0 ] === \"right\" ) {\r\n\t\t\tposition.left -= elemWidth;\r\n\t\t} else if ( options.my[ 0 ] === \"center\" ) {\r\n\t\t\tposition.left -= elemWidth / 2;\r\n\t\t}\r\n\r\n\t\tif ( options.my[ 1 ] === \"bottom\" ) {\r\n\t\t\tposition.top -= elemHeight;\r\n\t\t} else if ( options.my[ 1 ] === \"center\" ) {\r\n\t\t\tposition.top -= elemHeight / 2;\r\n\t\t}\r\n\r\n\t\tposition.left += myOffset[ 0 ];\r\n\t\tposition.top += myOffset[ 1 ];\r\n\r\n\t\t// if the browser doesn't support fractions, then round for consistent results\r\n\t\tif ( !supportsOffsetFractions ) {\r\n\t\t\tposition.left = round( position.left );\r\n\t\t\tposition.top = round( position.top );\r\n\t\t}\r\n\r\n\t\tcollisionPosition = {\r\n\t\t\tmarginLeft: marginLeft,\r\n\t\t\tmarginTop: marginTop\r\n\t\t};\r\n\r\n\t\t$.each( [ \"left\", \"top\" ], function( i, dir ) {\r\n\t\t\tif ( $.ui.position[ collision[ i ] ] ) {\r\n\t\t\t\t$.ui.position[ collision[ i ] ][ dir ]( position, {\r\n\t\t\t\t\ttargetWidth: targetWidth,\r\n\t\t\t\t\ttargetHeight: targetHeight,\r\n\t\t\t\t\telemWidth: elemWidth,\r\n\t\t\t\t\telemHeight: elemHeight,\r\n\t\t\t\t\tcollisionPosition: collisionPosition,\r\n\t\t\t\t\tcollisionWidth: collisionWidth,\r\n\t\t\t\t\tcollisionHeight: collisionHeight,\r\n\t\t\t\t\toffset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],\r\n\t\t\t\t\tmy: options.my,\r\n\t\t\t\t\tat: options.at,\r\n\t\t\t\t\twithin: within,\r\n\t\t\t\t\telem: elem\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif ( options.using ) {\r\n\t\t\t// adds feedback as second argument to using callback, if present\r\n\t\t\tusing = function( props ) {\r\n\t\t\t\tvar left = targetOffset.left - position.left,\r\n\t\t\t\t\tright = left + targetWidth - elemWidth,\r\n\t\t\t\t\ttop = targetOffset.top - position.top,\r\n\t\t\t\t\tbottom = top + targetHeight - elemHeight,\r\n\t\t\t\t\tfeedback = {\r\n\t\t\t\t\t\ttarget: {\r\n\t\t\t\t\t\t\telement: target,\r\n\t\t\t\t\t\t\tleft: targetOffset.left,\r\n\t\t\t\t\t\t\ttop: targetOffset.top,\r\n\t\t\t\t\t\t\twidth: targetWidth,\r\n\t\t\t\t\t\t\theight: targetHeight\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\telement: {\r\n\t\t\t\t\t\t\telement: elem,\r\n\t\t\t\t\t\t\tleft: position.left,\r\n\t\t\t\t\t\t\ttop: position.top,\r\n\t\t\t\t\t\t\twidth: elemWidth,\r\n\t\t\t\t\t\t\theight: elemHeight\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\thorizontal: right < 0 ? \"left\" : left > 0 ? \"right\" : \"center\",\r\n\t\t\t\t\t\tvertical: bottom < 0 ? \"top\" : top > 0 ? \"bottom\" : \"middle\"\r\n\t\t\t\t\t};\r\n\t\t\t\tif ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {\r\n\t\t\t\t\tfeedback.horizontal = \"center\";\r\n\t\t\t\t}\r\n\t\t\t\tif ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {\r\n\t\t\t\t\tfeedback.vertical = \"middle\";\r\n\t\t\t\t}\r\n\t\t\t\tif ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {\r\n\t\t\t\t\tfeedback.important = \"horizontal\";\r\n\t\t\t\t} else {\r\n\t\t\t\t\tfeedback.important = \"vertical\";\r\n\t\t\t\t}\r\n\t\t\t\toptions.using.call( this, props, feedback );\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\telem.offset( $.extend( position, { using: using } ) );\r\n\t});\r\n};\r\n\r\n$.ui.position = {\r\n\tfit: {\r\n\t\tleft: function( position, data ) {\r\n\t\t\tvar within = data.within,\r\n\t\t\t\twithinOffset = within.isWindow ? within.scrollLeft : within.offset.left,\r\n\t\t\t\touterWidth = within.width,\r\n\t\t\t\tcollisionPosLeft = position.left - data.collisionPosition.marginLeft,\r\n\t\t\t\toverLeft = withinOffset - collisionPosLeft,\r\n\t\t\t\toverRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,\r\n\t\t\t\tnewOverRight;\r\n\r\n\t\t\t// element is wider than within\r\n\t\t\tif ( data.collisionWidth > outerWidth ) {\r\n\t\t\t\t// element is initially over the left side of within\r\n\t\t\t\tif ( overLeft > 0 && overRight <= 0 ) {\r\n\t\t\t\t\tnewOverRight = position.left + overLeft + data.collisionWidth - outerWidth - withinOffset;\r\n\t\t\t\t\tposition.left += overLeft - newOverRight;\r\n\t\t\t\t// element is initially over right side of within\r\n\t\t\t\t} else if ( overRight > 0 && overLeft <= 0 ) {\r\n\t\t\t\t\tposition.left = withinOffset;\r\n\t\t\t\t// element is initially over both left and right sides of within\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif ( overLeft > overRight ) {\r\n\t\t\t\t\t\tposition.left = withinOffset + outerWidth - data.collisionWidth;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tposition.left = withinOffset;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t// too far left -> align with left edge\r\n\t\t\t} else if ( overLeft > 0 ) {\r\n\t\t\t\tposition.left += overLeft;\r\n\t\t\t// too far right -> align with right edge\r\n\t\t\t} else if ( overRight > 0 ) {\r\n\t\t\t\tposition.left -= overRight;\r\n\t\t\t// adjust based on position and margin\r\n\t\t\t} else {\r\n\t\t\t\tposition.left = max( position.left - collisionPosLeft, position.left );\r\n\t\t\t}\r\n\t\t},\r\n\t\ttop: function( position, data ) {\r\n\t\t\tvar within = data.within,\r\n\t\t\t\twithinOffset = within.isWindow ? within.scrollTop : within.offset.top,\r\n\t\t\t\touterHeight = data.within.height,\r\n\t\t\t\tcollisionPosTop = position.top - data.collisionPosition.marginTop,\r\n\t\t\t\toverTop = withinOffset - collisionPosTop,\r\n\t\t\t\toverBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,\r\n\t\t\t\tnewOverBottom;\r\n\r\n\t\t\t// element is taller than within\r\n\t\t\tif ( data.collisionHeight > outerHeight ) {\r\n\t\t\t\t// element is initially over the top of within\r\n\t\t\t\tif ( overTop > 0 && overBottom <= 0 ) {\r\n\t\t\t\t\tnewOverBottom = position.top + overTop + data.collisionHeight - outerHeight - withinOffset;\r\n\t\t\t\t\tposition.top += overTop - newOverBottom;\r\n\t\t\t\t// element is initially over bottom of within\r\n\t\t\t\t} else if ( overBottom > 0 && overTop <= 0 ) {\r\n\t\t\t\t\tposition.top = withinOffset;\r\n\t\t\t\t// element is initially over both top and bottom of within\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif ( overTop > overBottom ) {\r\n\t\t\t\t\t\tposition.top = withinOffset + outerHeight - data.collisionHeight;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tposition.top = withinOffset;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t// too far up -> align with top\r\n\t\t\t} else if ( overTop > 0 ) {\r\n\t\t\t\tposition.top += overTop;\r\n\t\t\t// too far down -> align with bottom edge\r\n\t\t\t} else if ( overBottom > 0 ) {\r\n\t\t\t\tposition.top -= overBottom;\r\n\t\t\t// adjust based on position and margin\r\n\t\t\t} else {\r\n\t\t\t\tposition.top = max( position.top - collisionPosTop, position.top );\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\tflip: {\r\n\t\tleft: function( position, data ) {\r\n\t\t\tvar within = data.within,\r\n\t\t\t\twithinOffset = within.offset.left + within.scrollLeft,\r\n\t\t\t\touterWidth = within.width,\r\n\t\t\t\toffsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,\r\n\t\t\t\tcollisionPosLeft = position.left - data.collisionPosition.marginLeft,\r\n\t\t\t\toverLeft = collisionPosLeft - offsetLeft,\r\n\t\t\t\toverRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,\r\n\t\t\t\tmyOffset = data.my[ 0 ] === \"left\" ?\r\n\t\t\t\t\t-data.elemWidth :\r\n\t\t\t\t\tdata.my[ 0 ] === \"right\" ?\r\n\t\t\t\t\t\tdata.elemWidth :\r\n\t\t\t\t\t\t0,\r\n\t\t\t\tatOffset = data.at[ 0 ] === \"left\" ?\r\n\t\t\t\t\tdata.targetWidth :\r\n\t\t\t\t\tdata.at[ 0 ] === \"right\" ?\r\n\t\t\t\t\t\t-data.targetWidth :\r\n\t\t\t\t\t\t0,\r\n\t\t\t\toffset = -2 * data.offset[ 0 ],\r\n\t\t\t\tnewOverRight,\r\n\t\t\t\tnewOverLeft;\r\n\r\n\t\t\tif ( overLeft < 0 ) {\r\n\t\t\t\tnewOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - outerWidth - withinOffset;\r\n\t\t\t\tif ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {\r\n\t\t\t\t\tposition.left += myOffset + atOffset + offset;\r\n\t\t\t\t}\r\n\t\t\t} else if ( overRight > 0 ) {\r\n\t\t\t\tnewOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + atOffset + offset - offsetLeft;\r\n\t\t\t\tif ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {\r\n\t\t\t\t\tposition.left += myOffset + atOffset + offset;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\ttop: function( position, data ) {\r\n\t\t\tvar within = data.within,\r\n\t\t\t\twithinOffset = within.offset.top + within.scrollTop,\r\n\t\t\t\touterHeight = within.height,\r\n\t\t\t\toffsetTop = within.isWindow ? within.scrollTop : within.offset.top,\r\n\t\t\t\tcollisionPosTop = position.top - data.collisionPosition.marginTop,\r\n\t\t\t\toverTop = collisionPosTop - offsetTop,\r\n\t\t\t\toverBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,\r\n\t\t\t\ttop = data.my[ 1 ] === \"top\",\r\n\t\t\t\tmyOffset = top ?\r\n\t\t\t\t\t-data.elemHeight :\r\n\t\t\t\t\tdata.my[ 1 ] === \"bottom\" ?\r\n\t\t\t\t\t\tdata.elemHeight :\r\n\t\t\t\t\t\t0,\r\n\t\t\t\tatOffset = data.at[ 1 ] === \"top\" ?\r\n\t\t\t\t\tdata.targetHeight :\r\n\t\t\t\t\tdata.at[ 1 ] === \"bottom\" ?\r\n\t\t\t\t\t\t-data.targetHeight :\r\n\t\t\t\t\t\t0,\r\n\t\t\t\toffset = -2 * data.offset[ 1 ],\r\n\t\t\t\tnewOverTop,\r\n\t\t\t\tnewOverBottom;\r\n\t\t\tif ( overTop < 0 ) {\r\n\t\t\t\tnewOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - outerHeight - withinOffset;\r\n\t\t\t\tif ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) {\r\n\t\t\t\t\tposition.top += myOffset + atOffset + offset;\r\n\t\t\t\t}\r\n\t\t\t} else if ( overBottom > 0 ) {\r\n\t\t\t\tnewOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset + offset - offsetTop;\r\n\t\t\t\tif ( newOverTop > 0 || abs( newOverTop ) < overBottom ) {\r\n\t\t\t\t\tposition.top += myOffset + atOffset + offset;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\tflipfit: {\r\n\t\tleft: function() {\r\n\t\t\t$.ui.position.flip.left.apply( this, arguments );\r\n\t\t\t$.ui.position.fit.left.apply( this, arguments );\r\n\t\t},\r\n\t\ttop: function() {\r\n\t\t\t$.ui.position.flip.top.apply( this, arguments );\r\n\t\t\t$.ui.position.fit.top.apply( this, arguments );\r\n\t\t}\r\n\t}\r\n};\r\n\r\n// fraction support test\r\n(function() {\r\n\tvar testElement, testElementParent, testElementStyle, offsetLeft, i,\r\n\t\tbody = document.getElementsByTagName( \"body\" )[ 0 ],\r\n\t\tdiv = document.createElement( \"div\" );\r\n\r\n\t//Create a \"fake body\" for testing based on method used in jQuery.support\r\n\ttestElement = document.createElement( body ? \"div\" : \"body\" );\r\n\ttestElementStyle = {\r\n\t\tvisibility: \"hidden\",\r\n\t\twidth: 0,\r\n\t\theight: 0,\r\n\t\tborder: 0,\r\n\t\tmargin: 0,\r\n\t\tbackground: \"none\"\r\n\t};\r\n\tif ( body ) {\r\n\t\t$.extend( testElementStyle, {\r\n\t\t\tposition: \"absolute\",\r\n\t\t\tleft: \"-1000px\",\r\n\t\t\ttop: \"-1000px\"\r\n\t\t});\r\n\t}\r\n\tfor ( i in testElementStyle ) {\r\n\t\ttestElement.style[ i ] = testElementStyle[ i ];\r\n\t}\r\n\ttestElement.appendChild( div );\r\n\ttestElementParent = body || document.documentElement;\r\n\ttestElementParent.insertBefore( testElement, testElementParent.firstChild );\r\n\r\n\tdiv.style.cssText = \"position: absolute; left: 10.7432222px;\";\r\n\r\n\toffsetLeft = $( div ).offset().left;\r\n\tsupportsOffsetFractions = offsetLeft > 10 && offsetLeft < 11;\r\n\r\n\ttestElement.innerHTML = \"\";\r\n\ttestElementParent.removeChild( testElement );\r\n})();\r\n\r\n})();\r\n\r\nvar position = $.ui.position;\r\n\r\n\r\n/*!\r\n * jQuery UI Menu 1.11.4\r\n * http://jqueryui.com\r\n *\r\n * Copyright jQuery Foundation and other contributors\r\n * Released under the MIT license.\r\n * http://jquery.org/license\r\n *\r\n * http://api.jqueryui.com/menu/\r\n */\r\n\r\n\r\nvar menu = $.widget( \"ui.menu\", {\r\n\tversion: \"1.11.4\",\r\n\tdefaultElement: \"<ul>\",\r\n\tdelay: 300,\r\n\toptions: {\r\n\t\ticons: {\r\n\t\t\tsubmenu: \"ui-icon-carat-1-e\"\r\n\t\t},\r\n\t\titems: \"> *\",\r\n\t\tmenus: \"ul\",\r\n\t\tposition: {\r\n\t\t\tmy: \"left-1 top\",\r\n\t\t\tat: \"right top\"\r\n\t\t},\r\n\t\trole: \"menu\",\r\n\r\n\t\t// callbacks\r\n\t\tblur: null,\r\n\t\tfocus: null,\r\n\t\tselect: null\r\n\t},\r\n\r\n\t_create: function() {\r\n\t\tthis.activeMenu = this.element;\r\n\r\n\t\t// Flag used to prevent firing of the click handler\r\n\t\t// as the event bubbles up through nested menus\r\n\t\tthis.mouseHandled = false;\r\n\t\tthis.element\r\n\t\t\t.uniqueId()\r\n\t\t\t.addClass( \"ui-menu ui-widget ui-widget-content\" )\r\n\t\t\t.toggleClass( \"ui-menu-icons\", !!this.element.find( \".ui-icon\" ).length )\r\n\t\t\t.attr({\r\n\t\t\t\trole: this.options.role,\r\n\t\t\t\ttabIndex: 0\r\n\t\t\t});\r\n\r\n\t\tif ( this.options.disabled ) {\r\n\t\t\tthis.element\r\n\t\t\t\t.addClass( \"ui-state-disabled\" )\r\n\t\t\t\t.attr( \"aria-disabled\", \"true\" );\r\n\t\t}\r\n\r\n\t\tthis._on({\r\n\t\t\t// Prevent focus from sticking to links inside menu after clicking\r\n\t\t\t// them (focus should always stay on UL during navigation).\r\n\t\t\t\"mousedown .ui-menu-item\": function( event ) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t},\r\n\t\t\t\"click .ui-menu-item\": function( event ) {\r\n\t\t\t\tvar target = $( event.target );\r\n\t\t\t\tif ( !this.mouseHandled && target.not( \".ui-state-disabled\" ).length ) {\r\n\t\t\t\t\tthis.select( event );\r\n\r\n\t\t\t\t\t// Only set the mouseHandled flag if the event will bubble, see #9469.\r\n\t\t\t\t\tif ( !event.isPropagationStopped() ) {\r\n\t\t\t\t\t\tthis.mouseHandled = true;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Open submenu on click\r\n\t\t\t\t\tif ( target.has( \".ui-menu\" ).length ) {\r\n\t\t\t\t\t\tthis.expand( event );\r\n\t\t\t\t\t} else if ( !this.element.is( \":focus\" ) && $( this.document[ 0 ].activeElement ).closest( \".ui-menu\" ).length ) {\r\n\r\n\t\t\t\t\t\t// Redirect focus to the menu\r\n\t\t\t\t\t\tthis.element.trigger( \"focus\", [ true ] );\r\n\r\n\t\t\t\t\t\t// If the active item is on the top level, let it stay active.\r\n\t\t\t\t\t\t// Otherwise, blur the active item since it is no longer visible.\r\n\t\t\t\t\t\tif ( this.active && this.active.parents( \".ui-menu\" ).length === 1 ) {\r\n\t\t\t\t\t\t\tclearTimeout( this.timer );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t\"mouseenter .ui-menu-item\": function( event ) {\r\n\t\t\t\t// Ignore mouse events while typeahead is active, see #10458.\r\n\t\t\t\t// Prevents focusing the wrong item when typeahead causes a scroll while the mouse\r\n\t\t\t\t// is over an item in the menu\r\n\t\t\t\tif ( this.previousFilter ) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tvar target = $( event.currentTarget );\r\n\t\t\t\t// Remove ui-state-active class from siblings of the newly focused menu item\r\n\t\t\t\t// to avoid a jump caused by adjacent elements both having a class with a border\r\n\t\t\t\ttarget.siblings( \".ui-state-active\" ).removeClass( \"ui-state-active\" );\r\n\t\t\t\tthis.focus( event, target );\r\n\t\t\t},\r\n\t\t\tmouseleave: \"collapseAll\",\r\n\t\t\t\"mouseleave .ui-menu\": \"collapseAll\",\r\n\t\t\tfocus: function( event, keepActiveItem ) {\r\n\t\t\t\t// If there's already an active item, keep it active\r\n\t\t\t\t// If not, activate the first item\r\n\t\t\t\tvar item = this.active || this.element.find( this.options.items ).eq( 0 );\r\n\r\n\t\t\t\tif ( !keepActiveItem ) {\r\n\t\t\t\t\tthis.focus( event, item );\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tblur: function( event ) {\r\n\t\t\t\tthis._delay(function() {\r\n\t\t\t\t\tif ( !$.contains( this.element[0], this.document[0].activeElement ) ) {\r\n\t\t\t\t\t\tthis.collapseAll( event );\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t},\r\n\t\t\tkeydown: \"_keydown\"\r\n\t\t});\r\n\r\n\t\tthis.refresh();\r\n\r\n\t\t// Clicks outside of a menu collapse any open menus\r\n\t\tthis._on( this.document, {\r\n\t\t\tclick: function( event ) {\r\n\t\t\t\tif ( this._closeOnDocumentClick( event ) ) {\r\n\t\t\t\t\tthis.collapseAll( event );\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Reset the mouseHandled flag\r\n\t\t\t\tthis.mouseHandled = false;\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\t_destroy: function() {\r\n\t\t// Destroy (sub)menus\r\n\t\tthis.element\r\n\t\t\t.removeAttr( \"aria-activedescendant\" )\r\n\t\t\t.find( \".ui-menu\" ).addBack()\r\n\t\t\t\t.removeClass( \"ui-menu ui-widget ui-widget-content ui-menu-icons ui-front\" )\r\n\t\t\t\t.removeAttr( \"role\" )\r\n\t\t\t\t.removeAttr( \"tabIndex\" )\r\n\t\t\t\t.removeAttr( \"aria-labelledby\" )\r\n\t\t\t\t.removeAttr( \"aria-expanded\" )\r\n\t\t\t\t.removeAttr( \"aria-hidden\" )\r\n\t\t\t\t.removeAttr( \"aria-disabled\" )\r\n\t\t\t\t.removeUniqueId()\r\n\t\t\t\t.show();\r\n\r\n\t\t// Destroy menu items\r\n\t\tthis.element.find( \".ui-menu-item\" )\r\n\t\t\t.removeClass( \"ui-menu-item\" )\r\n\t\t\t.removeAttr( \"role\" )\r\n\t\t\t.removeAttr( \"aria-disabled\" )\r\n\t\t\t.removeUniqueId()\r\n\t\t\t.removeClass( \"ui-state-hover\" )\r\n\t\t\t.removeAttr( \"tabIndex\" )\r\n\t\t\t.removeAttr( \"role\" )\r\n\t\t\t.removeAttr( \"aria-haspopup\" )\r\n\t\t\t.children().each( function() {\r\n\t\t\t\tvar elem = $( this );\r\n\t\t\t\tif ( elem.data( \"ui-menu-submenu-carat\" ) ) {\r\n\t\t\t\t\telem.remove();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t// Destroy menu dividers\r\n\t\tthis.element.find( \".ui-menu-divider\" ).removeClass( \"ui-menu-divider ui-widget-content\" );\r\n\t},\r\n\r\n\t_keydown: function( event ) {\r\n\t\tvar match, prev, character, skip,\r\n\t\t\tpreventDefault = true;\r\n\r\n\t\tswitch ( event.keyCode ) {\r\n\t\tcase $.ui.keyCode.PAGE_UP:\r\n\t\t\tthis.previousPage( event );\r\n\t\t\tbreak;\r\n\t\tcase $.ui.keyCode.PAGE_DOWN:\r\n\t\t\tthis.nextPage( event );\r\n\t\t\tbreak;\r\n\t\tcase $.ui.keyCode.HOME:\r\n\t\t\tthis._move( \"first\", \"first\", event );\r\n\t\t\tbreak;\r\n\t\tcase $.ui.keyCode.END:\r\n\t\t\tthis._move( \"last\", \"last\", event );\r\n\t\t\tbreak;\r\n\t\tcase $.ui.keyCode.UP:\r\n\t\t\tthis.previous( event );\r\n\t\t\tbreak;\r\n\t\tcase $.ui.keyCode.DOWN:\r\n\t\t\tthis.next( event );\r\n\t\t\tbreak;\r\n\t\tcase $.ui.keyCode.LEFT:\r\n\t\t\tthis.collapse( event );\r\n\t\t\tbreak;\r\n\t\tcase $.ui.keyCode.RIGHT:\r\n\t\t\tif ( this.active && !this.active.is( \".ui-state-disabled\" ) ) {\r\n\t\t\t\tthis.expand( event );\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase $.ui.keyCode.ENTER:\r\n\t\tcase $.ui.keyCode.SPACE:\r\n\t\t\tthis._activate( event );\r\n\t\t\tbreak;\r\n\t\tcase $.ui.keyCode.ESCAPE:\r\n\t\t\tthis.collapse( event );\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\tpreventDefault = false;\r\n\t\t\tprev = this.previousFilter || \"\";\r\n\t\t\tcharacter = String.fromCharCode( event.keyCode );\r\n\t\t\tskip = false;\r\n\r\n\t\t\tclearTimeout( this.filterTimer );\r\n\r\n\t\t\tif ( character === prev ) {\r\n\t\t\t\tskip = true;\r\n\t\t\t} else {\r\n\t\t\t\tcharacter = prev + character;\r\n\t\t\t}\r\n\r\n\t\t\tmatch = this._filterMenuItems( character );\r\n\t\t\tmatch = skip && match.index( this.active.next() ) !== -1 ?\r\n\t\t\t\tthis.active.nextAll( \".ui-menu-item\" ) :\r\n\t\t\t\tmatch;\r\n\r\n\t\t\t// If no matches on the current filter, reset to the last character pressed\r\n\t\t\t// to move down the menu to the first item that starts with that character\r\n\t\t\tif ( !match.length ) {\r\n\t\t\t\tcharacter = String.fromCharCode( event.keyCode );\r\n\t\t\t\tmatch = this._filterMenuItems( character );\r\n\t\t\t}\r\n\r\n\t\t\tif ( match.length ) {\r\n\t\t\t\tthis.focus( event, match );\r\n\t\t\t\tthis.previousFilter = character;\r\n\t\t\t\tthis.filterTimer = this._delay(function() {\r\n\t\t\t\t\tdelete this.previousFilter;\r\n\t\t\t\t}, 1000 );\r\n\t\t\t} else {\r\n\t\t\t\tdelete this.previousFilter;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif ( preventDefault ) {\r\n\t\t\tevent.preventDefault();\r\n\t\t}\r\n\t},\r\n\r\n\t_activate: function( event ) {\r\n\t\tif ( !this.active.is( \".ui-state-disabled\" ) ) {\r\n\t\t\tif ( this.active.is( \"[aria-haspopup='true']\" ) ) {\r\n\t\t\t\tthis.expand( event );\r\n\t\t\t} else {\r\n\t\t\t\tthis.select( event );\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\trefresh: function() {\r\n\t\tvar menus, items,\r\n\t\t\tthat = this,\r\n\t\t\ticon = this.options.icons.submenu,\r\n\t\t\tsubmenus = this.element.find( this.options.menus );\r\n\r\n\t\tthis.element.toggleClass( \"ui-menu-icons\", !!this.element.find( \".ui-icon\" ).length );\r\n\r\n\t\t// Initialize nested menus\r\n\t\tsubmenus.filter( \":not(.ui-menu)\" )\r\n\t\t\t.addClass( \"ui-menu ui-widget ui-widget-content ui-front\" )\r\n\t\t\t.hide()\r\n\t\t\t.attr({\r\n\t\t\t\trole: this.options.role,\r\n\t\t\t\t\"aria-hidden\": \"true\",\r\n\t\t\t\t\"aria-expanded\": \"false\"\r\n\t\t\t})\r\n\t\t\t.each(function() {\r\n\t\t\t\tvar menu = $( this ),\r\n\t\t\t\t\titem = menu.parent(),\r\n\t\t\t\t\tsubmenuCarat = $( \"<span>\" )\r\n\t\t\t\t\t\t.addClass( \"ui-menu-icon ui-icon \" + icon )\r\n\t\t\t\t\t\t.data( \"ui-menu-submenu-carat\", true );\r\n\r\n\t\t\t\titem\r\n\t\t\t\t\t.attr( \"aria-haspopup\", \"true\" )\r\n\t\t\t\t\t.prepend( submenuCarat );\r\n\t\t\t\tmenu.attr( \"aria-labelledby\", item.attr( \"id\" ) );\r\n\t\t\t});\r\n\r\n\t\tmenus = submenus.add( this.element );\r\n\t\titems = menus.find( this.options.items );\r\n\r\n\t\t// Initialize menu-items containing spaces and/or dashes only as dividers\r\n\t\titems.not( \".ui-menu-item\" ).each(function() {\r\n\t\t\tvar item = $( this );\r\n\t\t\tif ( that._isDivider( item ) ) {\r\n\t\t\t\titem.addClass( \"ui-widget-content ui-menu-divider\" );\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// Don't refresh list items that are already adapted\r\n\t\titems.not( \".ui-menu-item, .ui-menu-divider\" )\r\n\t\t\t.addClass( \"ui-menu-item\" )\r\n\t\t\t.uniqueId()\r\n\t\t\t.attr({\r\n\t\t\t\ttabIndex: -1,\r\n\t\t\t\trole: this._itemRole()\r\n\t\t\t});\r\n\r\n\t\t// Add aria-disabled attribute to any disabled menu item\r\n\t\titems.filter( \".ui-state-disabled\" ).attr( \"aria-disabled\", \"true\" );\r\n\r\n\t\t// If the active item has been removed, blur the menu\r\n\t\tif ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {\r\n\t\t\tthis.blur();\r\n\t\t}\r\n\t},\r\n\r\n\t_itemRole: function() {\r\n\t\treturn {\r\n\t\t\tmenu: \"menuitem\",\r\n\t\t\tlistbox: \"option\"\r\n\t\t}[ this.options.role ];\r\n\t},\r\n\r\n\t_setOption: function( key, value ) {\r\n\t\tif ( key === \"icons\" ) {\r\n\t\t\tthis.element.find( \".ui-menu-icon\" )\r\n\t\t\t\t.removeClass( this.options.icons.submenu )\r\n\t\t\t\t.addClass( value.submenu );\r\n\t\t}\r\n\t\tif ( key === \"disabled\" ) {\r\n\t\t\tthis.element\r\n\t\t\t\t.toggleClass( \"ui-state-disabled\", !!value )\r\n\t\t\t\t.attr( \"aria-disabled\", value );\r\n\t\t}\r\n\t\tthis._super( key, value );\r\n\t},\r\n\r\n\tfocus: function( event, item ) {\r\n\t\tvar nested, focused;\r\n\t\tthis.blur( event, event && event.type === \"focus\" );\r\n\r\n\t\tthis._scrollIntoView( item );\r\n\r\n\t\tthis.active = item.first();\r\n\t\tfocused = this.active.addClass( \"ui-state-focus\" ).removeClass( \"ui-state-active\" );\r\n\t\t// Only update aria-activedescendant if there's a role\r\n\t\t// otherwise we assume focus is managed elsewhere\r\n\t\tif ( this.options.role ) {\r\n\t\t\tthis.element.attr( \"aria-activedescendant\", focused.attr( \"id\" ) );\r\n\t\t}\r\n\r\n\t\t// Highlight active parent menu item, if any\r\n\t\tthis.active\r\n\t\t\t.parent()\r\n\t\t\t.closest( \".ui-menu-item\" )\r\n\t\t\t.addClass( \"ui-state-active\" );\r\n\r\n\t\tif ( event && event.type === \"keydown\" ) {\r\n\t\t\tthis._close();\r\n\t\t} else {\r\n\t\t\tthis.timer = this._delay(function() {\r\n\t\t\t\tthis._close();\r\n\t\t\t}, this.delay );\r\n\t\t}\r\n\r\n\t\tnested = item.children( \".ui-menu\" );\r\n\t\tif ( nested.length && event && ( /^mouse/.test( event.type ) ) ) {\r\n\t\t\tthis._startOpening(nested);\r\n\t\t}\r\n\t\tthis.activeMenu = item.parent();\r\n\r\n\t\tthis._trigger( \"focus\", event, { item: item } );\r\n\t},\r\n\r\n\t_scrollIntoView: function( item ) {\r\n\t\tvar borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;\r\n\t\tif ( this._hasScroll() ) {\r\n\t\t\tborderTop = parseFloat( $.css( this.activeMenu[0], \"borderTopWidth\" ) ) || 0;\r\n\t\t\tpaddingTop = parseFloat( $.css( this.activeMenu[0], \"paddingTop\" ) ) || 0;\r\n\t\t\toffset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;\r\n\t\t\tscroll = this.activeMenu.scrollTop();\r\n\t\t\telementHeight = this.activeMenu.height();\r\n\t\t\titemHeight = item.outerHeight();\r\n\r\n\t\t\tif ( offset < 0 ) {\r\n\t\t\t\tthis.activeMenu.scrollTop( scroll + offset );\r\n\t\t\t} else if ( offset + itemHeight > elementHeight ) {\r\n\t\t\t\tthis.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight );\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tblur: function( event, fromFocus ) {\r\n\t\tif ( !fromFocus ) {\r\n\t\t\tclearTimeout( this.timer );\r\n\t\t}\r\n\r\n\t\tif ( !this.active ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.active.removeClass( \"ui-state-focus\" );\r\n\t\tthis.active = null;\r\n\r\n\t\tthis._trigger( \"blur\", event, { item: this.active } );\r\n\t},\r\n\r\n\t_startOpening: function( submenu ) {\r\n\t\tclearTimeout( this.timer );\r\n\r\n\t\t// Don't open if already open fixes a Firefox bug that caused a .5 pixel\r\n\t\t// shift in the submenu position when mousing over the carat icon\r\n\t\tif ( submenu.attr( \"aria-hidden\" ) !== \"true\" ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.timer = this._delay(function() {\r\n\t\t\tthis._close();\r\n\t\t\tthis._open( submenu );\r\n\t\t}, this.delay );\r\n\t},\r\n\r\n\t_open: function( submenu ) {\r\n\t\tvar position = $.extend({\r\n\t\t\tof: this.active\r\n\t\t}, this.options.position );\r\n\r\n\t\tclearTimeout( this.timer );\r\n\t\tthis.element.find( \".ui-menu\" ).not( submenu.parents( \".ui-menu\" ) )\r\n\t\t\t.hide()\r\n\t\t\t.attr( \"aria-hidden\", \"true\" );\r\n\r\n\t\tsubmenu\r\n\t\t\t.show()\r\n\t\t\t.removeAttr( \"aria-hidden\" )\r\n\t\t\t.attr( \"aria-expanded\", \"true\" )\r\n\t\t\t.position( position );\r\n\t},\r\n\r\n\tcollapseAll: function( event, all ) {\r\n\t\tclearTimeout( this.timer );\r\n\t\tthis.timer = this._delay(function() {\r\n\t\t\t// If we were passed an event, look for the submenu that contains the event\r\n\t\t\tvar currentMenu = all ? this.element :\r\n\t\t\t\t$( event && event.target ).closest( this.element.find( \".ui-menu\" ) );\r\n\r\n\t\t\t// If we found no valid submenu ancestor, use the main menu to close all sub menus anyway\r\n\t\t\tif ( !currentMenu.length ) {\r\n\t\t\t\tcurrentMenu = this.element;\r\n\t\t\t}\r\n\r\n\t\t\tthis._close( currentMenu );\r\n\r\n\t\t\tthis.blur( event );\r\n\t\t\tthis.activeMenu = currentMenu;\r\n\t\t}, this.delay );\r\n\t},\r\n\r\n\t// With no arguments, closes the currently active menu - if nothing is active\r\n\t// it closes all menus.  If passed an argument, it will search for menus BELOW\r\n\t_close: function( startMenu ) {\r\n\t\tif ( !startMenu ) {\r\n\t\t\tstartMenu = this.active ? this.active.parent() : this.element;\r\n\t\t}\r\n\r\n\t\tstartMenu\r\n\t\t\t.find( \".ui-menu\" )\r\n\t\t\t\t.hide()\r\n\t\t\t\t.attr( \"aria-hidden\", \"true\" )\r\n\t\t\t\t.attr( \"aria-expanded\", \"false\" )\r\n\t\t\t.end()\r\n\t\t\t.find( \".ui-state-active\" ).not( \".ui-state-focus\" )\r\n\t\t\t\t.removeClass( \"ui-state-active\" );\r\n\t},\r\n\r\n\t_closeOnDocumentClick: function( event ) {\r\n\t\treturn !$( event.target ).closest( \".ui-menu\" ).length;\r\n\t},\r\n\r\n\t_isDivider: function( item ) {\r\n\r\n\t\t// Match hyphen, em dash, en dash\r\n\t\treturn !/[^\\-\\u2014\\u2013\\s]/.test( item.text() );\r\n\t},\r\n\r\n\tcollapse: function( event ) {\r\n\t\tvar newItem = this.active &&\r\n\t\t\tthis.active.parent().closest( \".ui-menu-item\", this.element );\r\n\t\tif ( newItem && newItem.length ) {\r\n\t\t\tthis._close();\r\n\t\t\tthis.focus( event, newItem );\r\n\t\t}\r\n\t},\r\n\r\n\texpand: function( event ) {\r\n\t\tvar newItem = this.active &&\r\n\t\t\tthis.active\r\n\t\t\t\t.children( \".ui-menu \" )\r\n\t\t\t\t.find( this.options.items )\r\n\t\t\t\t.first();\r\n\r\n\t\tif ( newItem && newItem.length ) {\r\n\t\t\tthis._open( newItem.parent() );\r\n\r\n\t\t\t// Delay so Firefox will not hide activedescendant change in expanding submenu from AT\r\n\t\t\tthis._delay(function() {\r\n\t\t\t\tthis.focus( event, newItem );\r\n\t\t\t});\r\n\t\t}\r\n\t},\r\n\r\n\tnext: function( event ) {\r\n\t\tthis._move( \"next\", \"first\", event );\r\n\t},\r\n\r\n\tprevious: function( event ) {\r\n\t\tthis._move( \"prev\", \"last\", event );\r\n\t},\r\n\r\n\tisFirstItem: function() {\r\n\t\treturn this.active && !this.active.prevAll( \".ui-menu-item\" ).length;\r\n\t},\r\n\r\n\tisLastItem: function() {\r\n\t\treturn this.active && !this.active.nextAll( \".ui-menu-item\" ).length;\r\n\t},\r\n\r\n\t_move: function( direction, filter, event ) {\r\n\t\tvar next;\r\n\t\tif ( this.active ) {\r\n\t\t\tif ( direction === \"first\" || direction === \"last\" ) {\r\n\t\t\t\tnext = this.active\r\n\t\t\t\t\t[ direction === \"first\" ? \"prevAll\" : \"nextAll\" ]( \".ui-menu-item\" )\r\n\t\t\t\t\t.eq( -1 );\r\n\t\t\t} else {\r\n\t\t\t\tnext = this.active\r\n\t\t\t\t\t[ direction + \"All\" ]( \".ui-menu-item\" )\r\n\t\t\t\t\t.eq( 0 );\r\n\t\t\t}\r\n\t\t}\r\n\t\tif ( !next || !next.length || !this.active ) {\r\n\t\t\tnext = this.activeMenu.find( this.options.items )[ filter ]();\r\n\t\t}\r\n\r\n\t\tthis.focus( event, next );\r\n\t},\r\n\r\n\tnextPage: function( event ) {\r\n\t\tvar item, base, height;\r\n\r\n\t\tif ( !this.active ) {\r\n\t\t\tthis.next( event );\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif ( this.isLastItem() ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif ( this._hasScroll() ) {\r\n\t\t\tbase = this.active.offset().top;\r\n\t\t\theight = this.element.height();\r\n\t\t\tthis.active.nextAll( \".ui-menu-item\" ).each(function() {\r\n\t\t\t\titem = $( this );\r\n\t\t\t\treturn item.offset().top - base - height < 0;\r\n\t\t\t});\r\n\r\n\t\t\tthis.focus( event, item );\r\n\t\t} else {\r\n\t\t\tthis.focus( event, this.activeMenu.find( this.options.items )\r\n\t\t\t\t[ !this.active ? \"first\" : \"last\" ]() );\r\n\t\t}\r\n\t},\r\n\r\n\tpreviousPage: function( event ) {\r\n\t\tvar item, base, height;\r\n\t\tif ( !this.active ) {\r\n\t\t\tthis.next( event );\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif ( this.isFirstItem() ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif ( this._hasScroll() ) {\r\n\t\t\tbase = this.active.offset().top;\r\n\t\t\theight = this.element.height();\r\n\t\t\tthis.active.prevAll( \".ui-menu-item\" ).each(function() {\r\n\t\t\t\titem = $( this );\r\n\t\t\t\treturn item.offset().top - base + height > 0;\r\n\t\t\t});\r\n\r\n\t\t\tthis.focus( event, item );\r\n\t\t} else {\r\n\t\t\tthis.focus( event, this.activeMenu.find( this.options.items ).first() );\r\n\t\t}\r\n\t},\r\n\r\n\t_hasScroll: function() {\r\n\t\treturn this.element.outerHeight() < this.element.prop( \"scrollHeight\" );\r\n\t},\r\n\r\n\tselect: function( event ) {\r\n\t\t// TODO: It should never be possible to not have an active item at this\r\n\t\t// point, but the tests don't trigger mouseenter before click.\r\n\t\tthis.active = this.active || $( event.target ).closest( \".ui-menu-item\" );\r\n\t\tvar ui = { item: this.active };\r\n\t\tif ( !this.active.has( \".ui-menu\" ).length ) {\r\n\t\t\tthis.collapseAll( event, true );\r\n\t\t}\r\n\t\tthis._trigger( \"select\", event, ui );\r\n\t},\r\n\r\n\t_filterMenuItems: function(character) {\r\n\t\tvar escapedCharacter = character.replace( /[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\" ),\r\n\t\t\tregex = new RegExp( \"^\" + escapedCharacter, \"i\" );\r\n\r\n\t\treturn this.activeMenu\r\n\t\t\t.find( this.options.items )\r\n\r\n\t\t\t// Only match on items, not dividers or other content (#10571)\r\n\t\t\t.filter( \".ui-menu-item\" )\r\n\t\t\t.filter(function() {\r\n\t\t\t\treturn regex.test( $.trim( $( this ).text() ) );\r\n\t\t\t});\r\n\t}\r\n});\r\n\r\n\r\n/*!\r\n * jQuery UI Autocomplete 1.11.4\r\n * http://jqueryui.com\r\n *\r\n * Copyright jQuery Foundation and other contributors\r\n * Released under the MIT license.\r\n * http://jquery.org/license\r\n *\r\n * http://api.jqueryui.com/autocomplete/\r\n */\r\n\r\n\r\n$.widget( \"ui.autocomplete\", {\r\n\tversion: \"1.11.4\",\r\n\tdefaultElement: \"<input>\",\r\n\toptions: {\r\n\t\tappendTo: null,\r\n\t\tautoFocus: false,\r\n\t\tdelay: 300,\r\n\t\tminLength: 1,\r\n\t\tposition: {\r\n\t\t\tmy: \"left top\",\r\n\t\t\tat: \"left bottom\",\r\n\t\t\tcollision: \"none\"\r\n\t\t},\r\n\t\tsource: null,\r\n\r\n\t\t// callbacks\r\n\t\tchange: null,\r\n\t\tclose: null,\r\n\t\tfocus: null,\r\n\t\topen: null,\r\n\t\tresponse: null,\r\n\t\tsearch: null,\r\n\t\tselect: null\r\n\t},\r\n\r\n\trequestIndex: 0,\r\n\tpending: 0,\r\n\r\n\t_create: function() {\r\n\t\t// Some browsers only repeat keydown events, not keypress events,\r\n\t\t// so we use the suppressKeyPress flag to determine if we've already\r\n\t\t// handled the keydown event. #7269\r\n\t\t// Unfortunately the code for & in keypress is the same as the up arrow,\r\n\t\t// so we use the suppressKeyPressRepeat flag to avoid handling keypress\r\n\t\t// events when we know the keydown event was used to modify the\r\n\t\t// search term. #7799\r\n\t\tvar suppressKeyPress, suppressKeyPressRepeat, suppressInput,\r\n\t\t\tnodeName = this.element[ 0 ].nodeName.toLowerCase(),\r\n\t\t\tisTextarea = nodeName === \"textarea\",\r\n\t\t\tisInput = nodeName === \"input\";\r\n\r\n\t\tthis.isMultiLine =\r\n\t\t\t// Textareas are always multi-line\r\n\t\t\tisTextarea ? true :\r\n\t\t\t// Inputs are always single-line, even if inside a contentEditable element\r\n\t\t\t// IE also treats inputs as contentEditable\r\n\t\t\tisInput ? false :\r\n\t\t\t// All other element types are determined by whether or not they're contentEditable\r\n\t\t\tthis.element.prop( \"isContentEditable\" );\r\n\r\n\t\tthis.valueMethod = this.element[ isTextarea || isInput ? \"val\" : \"text\" ];\r\n\t\tthis.isNewMenu = true;\r\n\r\n\t\tthis.element\r\n\t\t\t.addClass( \"ui-autocomplete-input\" )\r\n\t\t\t.attr( \"autocomplete\", \"off\" );\r\n\r\n\t\tthis._on( this.element, {\r\n\t\t\tkeydown: function( event ) {\r\n\t\t\t\tif ( this.element.prop( \"readOnly\" ) ) {\r\n\t\t\t\t\tsuppressKeyPress = true;\r\n\t\t\t\t\tsuppressInput = true;\r\n\t\t\t\t\tsuppressKeyPressRepeat = true;\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsuppressKeyPress = false;\r\n\t\t\t\tsuppressInput = false;\r\n\t\t\t\tsuppressKeyPressRepeat = false;\r\n\t\t\t\tvar keyCode = $.ui.keyCode;\r\n\t\t\t\tswitch ( event.keyCode ) {\r\n\t\t\t\tcase keyCode.PAGE_UP:\r\n\t\t\t\t\tsuppressKeyPress = true;\r\n\t\t\t\t\tthis._move( \"previousPage\", event );\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase keyCode.PAGE_DOWN:\r\n\t\t\t\t\tsuppressKeyPress = true;\r\n\t\t\t\t\tthis._move( \"nextPage\", event );\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase keyCode.UP:\r\n\t\t\t\t\tsuppressKeyPress = true;\r\n\t\t\t\t\tthis._keyEvent( \"previous\", event );\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase keyCode.DOWN:\r\n\t\t\t\t\tsuppressKeyPress = true;\r\n\t\t\t\t\tthis._keyEvent( \"next\", event );\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase keyCode.ENTER:\r\n\t\t\t\t\t// when menu is open and has focus\r\n\t\t\t\t\tif ( this.menu.active ) {\r\n\t\t\t\t\t\t// #6055 - Opera still allows the keypress to occur\r\n\t\t\t\t\t\t// which causes forms to submit\r\n\t\t\t\t\t\tsuppressKeyPress = true;\r\n\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t\tthis.menu.select( event );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase keyCode.TAB:\r\n\t\t\t\t\tif ( this.menu.active ) {\r\n\t\t\t\t\t\tthis.menu.select( event );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase keyCode.ESCAPE:\r\n\t\t\t\t\tif ( this.menu.element.is( \":visible\" ) ) {\r\n\t\t\t\t\t\tif ( !this.isMultiLine ) {\r\n\t\t\t\t\t\t\tthis._value( this.term );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tthis.close( event );\r\n\t\t\t\t\t\t// Different browsers have different default behavior for escape\r\n\t\t\t\t\t\t// Single press can mean undo or clear\r\n\t\t\t\t\t\t// Double press in IE means clear the whole form\r\n\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tsuppressKeyPressRepeat = true;\r\n\t\t\t\t\t// search timeout should be triggered before the input value is changed\r\n\t\t\t\t\tthis._searchTimeout( event );\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tkeypress: function( event ) {\r\n\t\t\t\tif ( suppressKeyPress ) {\r\n\t\t\t\t\tsuppressKeyPress = false;\r\n\t\t\t\t\tif ( !this.isMultiLine || this.menu.element.is( \":visible\" ) ) {\r\n\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tif ( suppressKeyPressRepeat ) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// replicate some key handlers to allow them to repeat in Firefox and Opera\r\n\t\t\t\tvar keyCode = $.ui.keyCode;\r\n\t\t\t\tswitch ( event.keyCode ) {\r\n\t\t\t\tcase keyCode.PAGE_UP:\r\n\t\t\t\t\tthis._move( \"previousPage\", event );\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase keyCode.PAGE_DOWN:\r\n\t\t\t\t\tthis._move( \"nextPage\", event );\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase keyCode.UP:\r\n\t\t\t\t\tthis._keyEvent( \"previous\", event );\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase keyCode.DOWN:\r\n\t\t\t\t\tthis._keyEvent( \"next\", event );\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tinput: function( event ) {\r\n\t\t\t\tif ( suppressInput ) {\r\n\t\t\t\t\tsuppressInput = false;\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tthis._searchTimeout( event );\r\n\t\t\t},\r\n\t\t\tfocus: function() {\r\n\t\t\t\tthis.selectedItem = null;\r\n\t\t\t\tthis.previous = this._value();\r\n\t\t\t},\r\n\t\t\tblur: function( event ) {\r\n\t\t\t\tif ( this.cancelBlur ) {\r\n\t\t\t\t\tdelete this.cancelBlur;\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tclearTimeout( this.searching );\r\n\t\t\t\tthis.close( event );\r\n\t\t\t\tthis._change( event );\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis._initSource();\r\n\t\tthis.menu = $( \"<ul>\" )\r\n\t\t\t.addClass( \"ui-autocomplete ui-front\" )\r\n\t\t\t.appendTo( this._appendTo() )\r\n\t\t\t.menu({\r\n\t\t\t\t// disable ARIA support, the live region takes care of that\r\n\t\t\t\trole: null\r\n\t\t\t})\r\n\t\t\t.hide()\r\n\t\t\t.menu( \"instance\" );\r\n\r\n\t\tthis._on( this.menu.element, {\r\n\t\t\tmousedown: function( event ) {\r\n\t\t\t\t// prevent moving focus out of the text field\r\n\t\t\t\tevent.preventDefault();\r\n\r\n\t\t\t\t// IE doesn't prevent moving focus even with event.preventDefault()\r\n\t\t\t\t// so we set a flag to know when we should ignore the blur event\r\n\t\t\t\tthis.cancelBlur = true;\r\n\t\t\t\tthis._delay(function() {\r\n\t\t\t\t\tdelete this.cancelBlur;\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// clicking on the scrollbar causes focus to shift to the body\r\n\t\t\t\t// but we can't detect a mouseup or a click immediately afterward\r\n\t\t\t\t// so we have to track the next mousedown and close the menu if\r\n\t\t\t\t// the user clicks somewhere outside of the autocomplete\r\n\t\t\t\tvar menuElement = this.menu.element[ 0 ];\r\n\t\t\t\tif ( !$( event.target ).closest( \".ui-menu-item\" ).length ) {\r\n\t\t\t\t\tthis._delay(function() {\r\n\t\t\t\t\t\tvar that = this;\r\n\t\t\t\t\t\tthis.document.one( \"mousedown\", function( event ) {\r\n\t\t\t\t\t\t\tif ( event.target !== that.element[ 0 ] &&\r\n\t\t\t\t\t\t\t\t\tevent.target !== menuElement &&\r\n\t\t\t\t\t\t\t\t\t!$.contains( menuElement, event.target ) ) {\r\n\t\t\t\t\t\t\t\tthat.close();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tmenufocus: function( event, ui ) {\r\n\t\t\t\tvar label, item;\r\n\t\t\t\t// support: Firefox\r\n\t\t\t\t// Prevent accidental activation of menu items in Firefox (#7024 #9118)\r\n\t\t\t\tif ( this.isNewMenu ) {\r\n\t\t\t\t\tthis.isNewMenu = false;\r\n\t\t\t\t\tif ( event.originalEvent && /^mouse/.test( event.originalEvent.type ) ) {\r\n\t\t\t\t\t\tthis.menu.blur();\r\n\r\n\t\t\t\t\t\tthis.document.one( \"mousemove\", function() {\r\n\t\t\t\t\t\t\t$( event.target ).trigger( event.originalEvent );\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\titem = ui.item.data( \"ui-autocomplete-item\" );\r\n\t\t\t\tif ( false !== this._trigger( \"focus\", event, { item: item } ) ) {\r\n\t\t\t\t\t// use value to match what will end up in the input, if it was a key event\r\n\t\t\t\t\tif ( event.originalEvent && /^key/.test( event.originalEvent.type ) ) {\r\n\t\t\t\t\t\tthis._value( item.value );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Announce the value in the liveRegion\r\n\t\t\t\tlabel = ui.item.attr( \"aria-label\" ) || item.value;\r\n\t\t\t\tif ( label && $.trim( label ).length ) {\r\n\t\t\t\t\tthis.liveRegion.children().hide();\r\n\t\t\t\t\t$( \"<div>\" ).text( label ).appendTo( this.liveRegion );\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tmenuselect: function( event, ui ) {\r\n\t\t\t\tvar item = ui.item.data( \"ui-autocomplete-item\" ),\r\n\t\t\t\t\tprevious = this.previous;\r\n\r\n\t\t\t\t// only trigger when focus was lost (click on menu)\r\n\t\t\t\tif ( this.element[ 0 ] !== this.document[ 0 ].activeElement ) {\r\n\t\t\t\t\tthis.element.focus();\r\n\t\t\t\t\tthis.previous = previous;\r\n\t\t\t\t\t// #6109 - IE triggers two focus events and the second\r\n\t\t\t\t\t// is asynchronous, so we need to reset the previous\r\n\t\t\t\t\t// term synchronously and asynchronously :-(\r\n\t\t\t\t\tthis._delay(function() {\r\n\t\t\t\t\t\tthis.previous = previous;\r\n\t\t\t\t\t\tthis.selectedItem = item;\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( false !== this._trigger( \"select\", event, { item: item } ) ) {\r\n\t\t\t\t\tthis._value( item.value );\r\n\t\t\t\t}\r\n\t\t\t\t// reset the term after the select event\r\n\t\t\t\t// this allows custom select handling to work properly\r\n\t\t\t\tthis.term = this._value();\r\n\r\n\t\t\t\tthis.close( event );\r\n\t\t\t\tthis.selectedItem = item;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.liveRegion = $( \"<span>\", {\r\n\t\t\t\trole: \"status\",\r\n\t\t\t\t\"aria-live\": \"assertive\",\r\n\t\t\t\t\"aria-relevant\": \"additions\"\r\n\t\t\t})\r\n\t\t\t.addClass( \"ui-helper-hidden-accessible\" )\r\n\t\t\t.appendTo( this.document[ 0 ].body );\r\n\r\n\t\t// turning off autocomplete prevents the browser from remembering the\r\n\t\t// value when navigating through history, so we re-enable autocomplete\r\n\t\t// if the page is unloaded before the widget is destroyed. #7790\r\n\t\tthis._on( this.window, {\r\n\t\t\tbeforeunload: function() {\r\n\t\t\t\tthis.element.removeAttr( \"autocomplete\" );\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\t_destroy: function() {\r\n\t\tclearTimeout( this.searching );\r\n\t\tthis.element\r\n\t\t\t.removeClass( \"ui-autocomplete-input\" )\r\n\t\t\t.removeAttr( \"autocomplete\" );\r\n\t\tthis.menu.element.remove();\r\n\t\tthis.liveRegion.remove();\r\n\t},\r\n\r\n\t_setOption: function( key, value ) {\r\n\t\tthis._super( key, value );\r\n\t\tif ( key === \"source\" ) {\r\n\t\t\tthis._initSource();\r\n\t\t}\r\n\t\tif ( key === \"appendTo\" ) {\r\n\t\t\tthis.menu.element.appendTo( this._appendTo() );\r\n\t\t}\r\n\t\tif ( key === \"disabled\" && value && this.xhr ) {\r\n\t\t\tthis.xhr.abort();\r\n\t\t}\r\n\t},\r\n\r\n\t_appendTo: function() {\r\n\t\tvar element = this.options.appendTo;\r\n\r\n\t\tif ( element ) {\r\n\t\t\telement = element.jquery || element.nodeType ?\r\n\t\t\t\t$( element ) :\r\n\t\t\t\tthis.document.find( element ).eq( 0 );\r\n\t\t}\r\n\r\n\t\tif ( !element || !element[ 0 ] ) {\r\n\t\t\telement = this.element.closest( \".ui-front\" );\r\n\t\t}\r\n\r\n\t\tif ( !element.length ) {\r\n\t\t\telement = this.document[ 0 ].body;\r\n\t\t}\r\n\r\n\t\treturn element;\r\n\t},\r\n\r\n\t_initSource: function() {\r\n\t\tvar array, url,\r\n\t\t\tthat = this;\r\n\t\tif ( $.isArray( this.options.source ) ) {\r\n\t\t\tarray = this.options.source;\r\n\t\t\tthis.source = function( request, response ) {\r\n\t\t\t\tresponse( $.ui.autocomplete.filter( array, request.term ) );\r\n\t\t\t};\r\n\t\t} else if ( typeof this.options.source === \"string\" ) {\r\n\t\t\turl = this.options.source;\r\n\t\t\tthis.source = function( request, response ) {\r\n\t\t\t\tif ( that.xhr ) {\r\n\t\t\t\t\tthat.xhr.abort();\r\n\t\t\t\t}\r\n\t\t\t\tthat.xhr = $.ajax({\r\n\t\t\t\t\turl: url,\r\n\t\t\t\t\tdata: request,\r\n\t\t\t\t\tdataType: \"json\",\r\n\t\t\t\t\tsuccess: function( data ) {\r\n\t\t\t\t\t\tresponse( data );\r\n\t\t\t\t\t},\r\n\t\t\t\t\terror: function() {\r\n\t\t\t\t\t\tresponse([]);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t};\r\n\t\t} else {\r\n\t\t\tthis.source = this.options.source;\r\n\t\t}\r\n\t},\r\n\r\n\t_searchTimeout: function( event ) {\r\n\t\tclearTimeout( this.searching );\r\n\t\tthis.searching = this._delay(function() {\r\n\r\n\t\t\t// Search if the value has changed, or if the user retypes the same value (see #7434)\r\n\t\t\tvar equalValues = this.term === this._value(),\r\n\t\t\t\tmenuVisible = this.menu.element.is( \":visible\" ),\r\n\t\t\t\tmodifierKey = event.altKey || event.ctrlKey || event.metaKey || event.shiftKey;\r\n\r\n\t\t\tif ( !equalValues || ( equalValues && !menuVisible && !modifierKey ) ) {\r\n\t\t\t\tthis.selectedItem = null;\r\n\t\t\t\tthis.search( null, event );\r\n\t\t\t}\r\n\t\t}, this.options.delay );\r\n\t},\r\n\r\n\tsearch: function( value, event ) {\r\n\t\tvalue = value != null ? value : this._value();\r\n\r\n\t\t// always save the actual value, not the one passed as an argument\r\n\t\tthis.term = this._value();\r\n\r\n\t\tif ( value.length < this.options.minLength ) {\r\n\t\t\treturn this.close( event );\r\n\t\t}\r\n\r\n\t\tif ( this._trigger( \"search\", event ) === false ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\treturn this._search( value );\r\n\t},\r\n\r\n\t_search: function( value ) {\r\n\t\tthis.pending++;\r\n\t\tthis.element.addClass( \"ui-autocomplete-loading\" );\r\n\t\tthis.cancelSearch = false;\r\n\r\n\t\tthis.source( { term: value }, this._response() );\r\n\t},\r\n\r\n\t_response: function() {\r\n\t\tvar index = ++this.requestIndex;\r\n\r\n\t\treturn $.proxy(function( content ) {\r\n\t\t\tif ( index === this.requestIndex ) {\r\n\t\t\t\tthis.__response( content );\r\n\t\t\t}\r\n\r\n\t\t\tthis.pending--;\r\n\t\t\tif ( !this.pending ) {\r\n\t\t\t\tthis.element.removeClass( \"ui-autocomplete-loading\" );\r\n\t\t\t}\r\n\t\t}, this );\r\n\t},\r\n\r\n\t__response: function( content ) {\r\n\t\tif ( content ) {\r\n\t\t\tcontent = this._normalize( content );\r\n\t\t}\r\n\t\tthis._trigger( \"response\", null, { content: content } );\r\n\t\tif ( !this.options.disabled && content && content.length && !this.cancelSearch ) {\r\n\t\t\tthis._suggest( content );\r\n\t\t\tthis._trigger( \"open\" );\r\n\t\t} else {\r\n\t\t\t// use ._close() instead of .close() so we don't cancel future searches\r\n\t\t\tthis._close();\r\n\t\t}\r\n\t},\r\n\r\n\tclose: function( event ) {\r\n\t\tthis.cancelSearch = true;\r\n\t\tthis._close( event );\r\n\t},\r\n\r\n\t_close: function( event ) {\r\n\t\tif ( this.menu.element.is( \":visible\" ) ) {\r\n\t\t\tthis.menu.element.hide();\r\n\t\t\tthis.menu.blur();\r\n\t\t\tthis.isNewMenu = true;\r\n\t\t\tthis._trigger( \"close\", event );\r\n\t\t}\r\n\t},\r\n\r\n\t_change: function( event ) {\r\n\t\tif ( this.previous !== this._value() ) {\r\n\t\t\tthis._trigger( \"change\", event, { item: this.selectedItem } );\r\n\t\t}\r\n\t},\r\n\r\n\t_normalize: function( items ) {\r\n\t\t// assume all items have the right format when the first item is complete\r\n\t\tif ( items.length && items[ 0 ].label && items[ 0 ].value ) {\r\n\t\t\treturn items;\r\n\t\t}\r\n\t\treturn $.map( items, function( item ) {\r\n\t\t\tif ( typeof item === \"string\" ) {\r\n\t\t\t\treturn {\r\n\t\t\t\t\tlabel: item,\r\n\t\t\t\t\tvalue: item\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t\treturn $.extend( {}, item, {\r\n\t\t\t\tlabel: item.label || item.value,\r\n\t\t\t\tvalue: item.value || item.label\r\n\t\t\t});\r\n\t\t});\r\n\t},\r\n\r\n\t_suggest: function( items ) {\r\n\t\tvar ul = this.menu.element.empty();\r\n\t\tthis._renderMenu( ul, items );\r\n\t\tthis.isNewMenu = true;\r\n\t\tthis.menu.refresh();\r\n\r\n\t\t// size and position menu\r\n\t\tul.show();\r\n\t\tthis._resizeMenu();\r\n\t\tul.position( $.extend({\r\n\t\t\tof: this.element\r\n\t\t}, this.options.position ) );\r\n\r\n\t\tif ( this.options.autoFocus ) {\r\n\t\t\tthis.menu.next();\r\n\t\t}\r\n\t},\r\n\r\n\t_resizeMenu: function() {\r\n\t\tvar ul = this.menu.element;\r\n\t\tul.outerWidth( Math.max(\r\n\t\t\t// Firefox wraps long text (possibly a rounding bug)\r\n\t\t\t// so we add 1px to avoid the wrapping (#7513)\r\n\t\t\tul.width( \"\" ).outerWidth() + 1,\r\n\t\t\tthis.element.outerWidth()\r\n\t\t) );\r\n\t},\r\n\r\n\t_renderMenu: function( ul, items ) {\r\n\t\tvar that = this;\r\n\t\t$.each( items, function( index, item ) {\r\n\t\t\tthat._renderItemData( ul, item );\r\n\t\t});\r\n\t},\r\n\r\n\t_renderItemData: function( ul, item ) {\r\n\t\treturn this._renderItem( ul, item ).data( \"ui-autocomplete-item\", item );\r\n\t},\r\n\r\n\t_renderItem: function( ul, item ) {\r\n\t\treturn $( \"<li>\" ).text( item.label ).appendTo( ul );\r\n\t},\r\n\r\n\t_move: function( direction, event ) {\r\n\t\tif ( !this.menu.element.is( \":visible\" ) ) {\r\n\t\t\tthis.search( null, event );\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif ( this.menu.isFirstItem() && /^previous/.test( direction ) ||\r\n\t\t\t\tthis.menu.isLastItem() && /^next/.test( direction ) ) {\r\n\r\n\t\t\tif ( !this.isMultiLine ) {\r\n\t\t\t\tthis._value( this.term );\r\n\t\t\t}\r\n\r\n\t\t\tthis.menu.blur();\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.menu[ direction ]( event );\r\n\t},\r\n\r\n\twidget: function() {\r\n\t\treturn this.menu.element;\r\n\t},\r\n\r\n\t_value: function() {\r\n\t\treturn this.valueMethod.apply( this.element, arguments );\r\n\t},\r\n\r\n\t_keyEvent: function( keyEvent, event ) {\r\n\t\tif ( !this.isMultiLine || this.menu.element.is( \":visible\" ) ) {\r\n\t\t\tthis._move( keyEvent, event );\r\n\r\n\t\t\t// prevents moving cursor to beginning/end of the text field in some browsers\r\n\t\t\tevent.preventDefault();\r\n\t\t}\r\n\t}\r\n});\r\n\r\n$.extend( $.ui.autocomplete, {\r\n\tescapeRegex: function( value ) {\r\n\t\treturn value.replace( /[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\" );\r\n\t},\r\n\tfilter: function( array, term ) {\r\n\t\tvar matcher = new RegExp( $.ui.autocomplete.escapeRegex( term ), \"i\" );\r\n\t\treturn $.grep( array, function( value ) {\r\n\t\t\treturn matcher.test( value.label || value.value || value );\r\n\t\t});\r\n\t}\r\n});\r\n\r\n// live region extension, adding a `messages` option\r\n// NOTE: This is an experimental API. We are still investigating\r\n// a full solution for string manipulation and internationalization.\r\n$.widget( \"ui.autocomplete\", $.ui.autocomplete, {\r\n\toptions: {\r\n\t\tmessages: {\r\n\t\t\tnoResults: \"No search results.\",\r\n\t\t\tresults: function( amount ) {\r\n\t\t\t\treturn amount + ( amount > 1 ? \" results are\" : \" result is\" ) +\r\n\t\t\t\t\t\" available, use up and down arrow keys to navigate.\";\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t__response: function( content ) {\r\n\t\tvar message;\r\n\t\tthis._superApply( arguments );\r\n\t\tif ( this.options.disabled || this.cancelSearch ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif ( content && content.length ) {\r\n\t\t\tmessage = this.options.messages.results( content.length );\r\n\t\t} else {\r\n\t\t\tmessage = this.options.messages.noResults;\r\n\t\t}\r\n\t\tthis.liveRegion.children().hide();\r\n\t\t$( \"<div>\" ).text( message ).appendTo( this.liveRegion );\r\n\t}\r\n});\r\n\r\nvar autocomplete = $.ui.autocomplete;\r\n\r\n\r\n\r\n}));\n\n\n// WEBPACK FOOTER //\n// ./js/newTube/core/jquery-ui.js","import jQuery from \"jquery\";\r\nvar $ = jQuery;\r\nvar qq = function(element) {\r\n    \"use strict\";\r\n\r\n    return {\r\n        hide: function() {\r\n            element.style.display = 'none';\r\n            return this;\r\n        },\r\n\r\n        /** Returns the function which detaches attached event */\r\n        attach: function(type, fn) {\r\n            if (element.addEventListener){\r\n                element.addEventListener(type, fn, false);\r\n            } else if (element.attachEvent){\r\n                element.attachEvent('on' + type, fn);\r\n            }\r\n            return function() {\r\n                qq(element).detach(type, fn);\r\n            };\r\n        },\r\n\r\n        detach: function(type, fn) {\r\n            if (element.removeEventListener){\r\n                element.removeEventListener(type, fn, false);\r\n            } else if (element.attachEvent){\r\n                element.detachEvent('on' + type, fn);\r\n            }\r\n            return this;\r\n        },\r\n\r\n        contains: function(descendant) {\r\n            // compareposition returns false in this case\r\n            if (element === descendant) {\r\n                return true;\r\n            }\r\n\r\n            if (element.contains){\r\n                return element.contains(descendant);\r\n            } else {\r\n                /*jslint bitwise: true*/\r\n                return !!(descendant.compareDocumentPosition(element) & 8);\r\n            }\r\n        },\r\n\r\n        /**\r\n         * Insert this element before elementB.\r\n         */\r\n        insertBefore: function(elementB) {\r\n            elementB.parentNode.insertBefore(element, elementB);\r\n            return this;\r\n        },\r\n\r\n        remove: function() {\r\n            element.parentNode.removeChild(element);\r\n            return this;\r\n        },\r\n\r\n        /**\r\n         * Sets styles for an element.\r\n         * Fixes opacity in IE6-8.\r\n         */\r\n        css: function(styles) {\r\n            if (styles.opacity !== null){\r\n                if (typeof element.style.opacity !== 'string' && typeof(element.filters) !== 'undefined'){\r\n                    styles.filter = 'alpha(opacity=' + Math.round(100 * styles.opacity) + ')';\r\n                }\r\n            }\r\n            qq.extend(element.style, styles);\r\n\r\n            return this;\r\n        },\r\n\r\n        hasClass: function(name) {\r\n            var re = new RegExp('(^| )' + name + '( |$)');\r\n            return re.test(element.className);\r\n        },\r\n\r\n        addClass: function(name) {\r\n            if (!qq(element).hasClass(name)){\r\n                element.className += ' ' + name;\r\n            }\r\n            return this;\r\n        },\r\n\r\n        removeClass: function(name) {\r\n            var re = new RegExp('(^| )' + name + '( |$)');\r\n            element.className = element.className.replace(re, ' ').replace(/^\\s+|\\s+$/g, \"\");\r\n            return this;\r\n        },\r\n\r\n        getByClass: function(className) {\r\n            var candidates,\r\n                result = [];\r\n\r\n            if (element.querySelectorAll){\r\n                return element.querySelectorAll('.' + className);\r\n            }\r\n\r\n            candidates = element.getElementsByTagName(\"*\");\r\n\r\n            qq.each(candidates, function(idx, val) {\r\n                if (qq(val).hasClass(className)){\r\n                    result.push(val);\r\n                }\r\n            });\r\n            return result;\r\n        },\r\n\r\n        children: function() {\r\n            var children = [],\r\n                child = element.firstChild;\r\n\r\n            while (child){\r\n                if (child.nodeType === 1){\r\n                    children.push(child);\r\n                }\r\n                child = child.nextSibling;\r\n            }\r\n\r\n            return children;\r\n        },\r\n\r\n        setText: function(text) {\r\n            element.innerText = text;\r\n            element.textContent = text;\r\n            return this;\r\n        },\r\n\r\n        clearText: function() {\r\n            return qq(element).setText(\"\");\r\n        }\r\n    };\r\n};\r\n\r\nqq.log = function(message, level) {\r\n    \"use strict\";\r\n\r\n    if (window.console) {\r\n        if (!level || level === 'info') {\r\n            window.console.log(message);\r\n        }\r\n        else\r\n        {\r\n            if (window.console[level]) {\r\n                window.console[level](message);\r\n            }\r\n            else {\r\n                window.console.log('<' + level + '> ' + message);\r\n            }\r\n        }\r\n    }\r\n};\r\n\r\nqq.isObject = function(variable) {\r\n    \"use strict\";\r\n    return variable !== null && variable && typeof(variable) === \"object\" && variable.constructor === Object;\r\n};\r\n\r\nqq.isFunction = function(variable) {\r\n    \"use strict\";\r\n    return typeof(variable) === \"function\";\r\n};\r\n\r\nqq.isFileOrInput = function(maybeFileOrInput) {\r\n    \"use strict\";\r\n    if (window.File && maybeFileOrInput instanceof File) {\r\n        return true;\r\n    }\r\n    else if (window.HTMLInputElement) {\r\n        if (maybeFileOrInput instanceof HTMLInputElement) {\r\n            if (maybeFileOrInput.type && maybeFileOrInput.type.toLowerCase() === 'file') {\r\n                return true;\r\n            }\r\n        }\r\n    }\r\n    else if (maybeFileOrInput.tagName) {\r\n        if (maybeFileOrInput.tagName.toLowerCase() === 'input') {\r\n            if (maybeFileOrInput.type && maybeFileOrInput.type.toLowerCase() === 'file') {\r\n                return true;\r\n            }\r\n        }\r\n    }\r\n\r\n    return false;\r\n};\r\n\r\nqq.isXhrUploadSupported = function() {\r\n    \"use strict\";\r\n    var input = document.createElement('input');\r\n    input.type = 'file';\r\n\r\n    return (\r\n        input.multiple !== undefined &&\r\n            typeof File !== \"undefined\" &&\r\n            typeof FormData !== \"undefined\" &&\r\n            typeof (new XMLHttpRequest()).upload !== \"undefined\" );\r\n};\r\n\r\nqq.isFolderDropSupported = function(dataTransfer) {\r\n    \"use strict\";\r\n    return (dataTransfer.items && dataTransfer.items[0].webkitGetAsEntry);\r\n};\r\n\r\nqq.isFileChunkingSupported = function() {\r\n    \"use strict\";\r\n    return !qq.android() && //android's impl of Blob.slice is broken\r\n        qq.isXhrUploadSupported() &&\r\n        (File.prototype.slice || File.prototype.webkitSlice || File.prototype.mozSlice);\r\n};\r\n\r\nqq.extend = function (first, second, extendNested) {\r\n    \"use strict\";\r\n    qq.each(second, function(prop, val) {\r\n        if (extendNested && qq.isObject(val)) {\r\n            if (first[prop] === undefined) {\r\n                first[prop] = {};\r\n            }\r\n            qq.extend(first[prop], val, true);\r\n        }\r\n        else {\r\n            first[prop] = val;\r\n        }\r\n    });\r\n};\r\n\r\n/**\r\n * Searches for a given element in the array, returns -1 if it is not present.\r\n * @param {Number} [from] The index at which to begin the search\r\n */\r\nqq.indexOf = function(arr, elt, from){\r\n    \"use strict\";\r\n\r\n    if (arr.indexOf) {\r\n        return arr.indexOf(elt, from);\r\n    }\r\n\r\n    from = from || 0;\r\n    var len = arr.length;\r\n\r\n    if (from < 0) {\r\n        from += len;\r\n    }\r\n\r\n    for (; from < len; from+=1){\r\n        if (arr.hasOwnProperty(from) && arr[from] === elt){\r\n            return from;\r\n        }\r\n    }\r\n    return -1;\r\n};\r\n\r\n//this is a version 4 UUID\r\nqq.getUniqueId = function(){\r\n    \"use strict\";\r\n\r\n    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\r\n        /*jslint eqeq: true, bitwise: true*/\r\n        var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);\r\n        return v.toString(16);\r\n    });\r\n};\r\n\r\n//\r\n// Browsers and platforms detection\r\n\r\nqq.ie       = function(){\r\n    \"use strict\";\r\n    return navigator.userAgent.indexOf('MSIE') !== -1;\r\n};\r\nqq.ie10     = function(){\r\n    \"use strict\";\r\n    return navigator.userAgent.indexOf('MSIE 10') !== -1;\r\n};\r\nqq.safari   = function(){\r\n    \"use strict\";\r\n    return navigator.vendor !== undefined && navigator.vendor.indexOf(\"Apple\") !== -1;\r\n};\r\nqq.chrome   = function(){\r\n    \"use strict\";\r\n    return navigator.vendor !== undefined && navigator.vendor.indexOf('Google') !== -1;\r\n};\r\nqq.firefox  = function(){\r\n    \"use strict\";\r\n    return (navigator.userAgent.indexOf('Mozilla') !== -1 && navigator.vendor !== undefined && navigator.vendor === '');\r\n};\r\nqq.windows  = function(){\r\n    \"use strict\";\r\n    return navigator.platform === \"Win32\";\r\n};\r\nqq.android = function(){\r\n    \"use strict\";\r\n    return navigator.userAgent.toLowerCase().indexOf('android') !== -1;\r\n};\r\n\r\n//\r\n// Events\r\n\r\nqq.preventDefault = function(e){\r\n    \"use strict\";\r\n    if (e.preventDefault){\r\n        e.preventDefault();\r\n    } else{\r\n        e.returnValue = false;\r\n    }\r\n};\r\n\r\n/**\r\n * Creates and returns element from html string\r\n * Uses innerHTML to create an element\r\n */\r\nqq.toElement = (function(){\r\n    \"use strict\";\r\n    var div = document.createElement('div');\r\n    return function(html){\r\n        div.innerHTML = html;\r\n        var element = div.firstChild;\r\n        div.removeChild(element);\r\n        return element;\r\n    };\r\n}());\r\n\r\n//key and value are passed to callback for each item in the object or array\r\nqq.each = function(obj, callback) {\r\n    \"use strict\";\r\n    var key, retVal;\r\n    if (obj) {\r\n        for (key in obj) {\r\n            if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n                retVal = callback(key, obj[key]);\r\n                if (retVal === false) {\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n    }\r\n};\r\n\r\n/**\r\n * obj2url() takes a json-object as argument and generates\r\n * a querystring. pretty much like jQuery.param()\r\n *\r\n * how to use:\r\n *\r\n *    `qq.obj2url({a:'b',c:'d'},'http://any.url/upload?otherParam=value');`\r\n *\r\n * will result in:\r\n *\r\n *    `http://any.url/upload?otherParam=value&a=b&c=d`\r\n *\r\n * @param  Object JSON-Object\r\n * @param  String current querystring-part\r\n * @return String encoded querystring\r\n */\r\nqq.obj2url = function(obj, temp, prefixDone){\r\n    \"use strict\";\r\n    /*jshint laxbreak: true*/\r\n     var i, len,\r\n         uristrings = [],\r\n         prefix = '&',\r\n         add = function(nextObj, i){\r\n            var nextTemp = temp\r\n                ? (/\\[\\]$/.test(temp)) // prevent double-encoding\r\n                ? temp\r\n                : temp+'['+i+']'\r\n                : i;\r\n            if ((nextTemp !== 'undefined') && (i !== 'undefined')) {\r\n                uristrings.push(\r\n                    (typeof nextObj === 'object')\r\n                        ? qq.obj2url(nextObj, nextTemp, true)\r\n                        : (Object.prototype.toString.call(nextObj) === '[object Function]')\r\n                        ? encodeURIComponent(nextTemp) + '=' + encodeURIComponent(nextObj())\r\n                        : encodeURIComponent(nextTemp) + '=' + encodeURIComponent(nextObj)\r\n                );\r\n            }\r\n        };\r\n\r\n    if (!prefixDone && temp) {\r\n        prefix = (/\\?/.test(temp)) ? (/\\?$/.test(temp)) ? '' : '&' : '?';\r\n        uristrings.push(temp);\r\n        uristrings.push(qq.obj2url(obj));\r\n    } else if ((Object.prototype.toString.call(obj) === '[object Array]') && (typeof obj !== 'undefined') ) {\r\n        // we wont use a for-in-loop on an array (performance)\r\n        for (i = -1, len = obj.length; i < len; i+=1){\r\n            add(obj[i], i);\r\n        }\r\n    } else if ((typeof obj !== 'undefined') && (obj !== null) && (typeof obj === \"object\")){\r\n        // for anything else but a scalar, we will use for-in-loop\r\n        for (i in obj){\r\n            if (obj.hasOwnProperty(i)) {\r\n                add(obj[i], i);\r\n            }\r\n        }\r\n    } else {\r\n        uristrings.push(encodeURIComponent(temp) + '=' + encodeURIComponent(obj));\r\n    }\r\n\r\n    if (temp) {\r\n        return uristrings.join(prefix);\r\n    } else {\r\n        return uristrings.join(prefix)\r\n            .replace(/^&/, '')\r\n            .replace(/%20/g, '+');\r\n    }\r\n};\r\n\r\nqq.obj2FormData = function(obj, formData, arrayKeyName) {\r\n    \"use strict\";\r\n    if (!formData) {\r\n        formData = new FormData();\r\n    }\r\n\r\n    qq.each(obj, function(key, val) {\r\n        key = arrayKeyName ? arrayKeyName + '[' + key + ']' : key;\r\n\r\n        if (qq.isObject(val)) {\r\n            qq.obj2FormData(val, formData, key);\r\n        }\r\n        else if (qq.isFunction(val)) {\r\n            formData.append(encodeURIComponent(key), encodeURIComponent(val()));\r\n        }\r\n        else {\r\n            formData.append(encodeURIComponent(key), encodeURIComponent(val));\r\n        }\r\n    });\r\n\r\n    return formData;\r\n};\r\n\r\nqq.obj2Inputs = function(obj, form) {\r\n    \"use strict\";\r\n    var input;\r\n\r\n    if (!form) {\r\n        form = document.createElement('form');\r\n    }\r\n\r\n    qq.obj2FormData(obj, {\r\n        append: function(key, val) {\r\n            input = document.createElement('input');\r\n            input.setAttribute('name', key);\r\n            input.setAttribute('value', val);\r\n            form.appendChild(input);\r\n        }\r\n    });\r\n\r\n    return form;\r\n};\r\n\r\nqq.setCookie = function(name, value, days) {\r\n    var date = new Date(),\r\n        expires = \"\";\r\n\r\n\tif (days) {\r\n\t\tdate.setTime(date.getTime()+(days*24*60*60*1000));\r\n\t\texpires = \"; expires=\"+date.toGMTString();\r\n\t}\r\n\r\n\tdocument.cookie = name+\"=\"+value+expires+\"; path=/\";\r\n};\r\n\r\nqq.getCookie = function(name) {\r\n\tvar nameEQ = name + \"=\",\r\n        ca = document.cookie.split(';'),\r\n        c;\r\n\r\n\tfor(var i=0;i < ca.length;i++) {\r\n\t\tc = ca[i];\r\n\t\twhile (c.charAt(0)==' ') {\r\n            c = c.substring(1,c.length);\r\n        }\r\n\t\tif (c.indexOf(nameEQ) === 0) {\r\n            return c.substring(nameEQ.length,c.length);\r\n        }\r\n\t}\r\n};\r\n\r\nqq.getCookieNames = function(regexp) {\r\n    var cookies = document.cookie.split(';'),\r\n        cookieNames = [];\r\n\r\n    qq.each(cookies, function(idx, cookie) {\r\n        cookie = cookie.trim();\r\n\r\n        var equalsIdx = cookie.indexOf(\"=\");\r\n\r\n        if (cookie.match(regexp)) {\r\n            cookieNames.push(cookie.substr(0, equalsIdx));\r\n        }\r\n    });\r\n\r\n    return cookieNames;\r\n};\r\n\r\nqq.deleteCookie = function(name) {\r\n\tqq.setCookie(name, \"\", -1);\r\n};\r\n\r\nqq.areCookiesEnabled = function() {\r\n    var randNum = Math.random() * 100000,\r\n        name = \"qqCookieTest:\" + randNum;\r\n    qq.setCookie(name, 1);\r\n\r\n    if (qq.getCookie(name)) {\r\n        qq.deleteCookie(name);\r\n        return true;\r\n    }\r\n    return false;\r\n};\r\n\r\n/**\r\n * Not recommended for use outside of Fine Uploader since this falls back to an unchecked eval if JSON.parse is not\r\n * implemented.  For a more secure JSON.parse polyfill, use Douglas Crockford's json2.js.\r\n */\r\nqq.parseJson = function(json) {\r\n    /*jshint evil: true*/\r\n    if (typeof JSON.parse === \"function\") {\r\n        return JSON.parse(json);\r\n    } else {\r\n        return eval(\"(\" + json + \")\");\r\n    }\r\n};\r\n\r\n/**\r\n * A generic module which supports object disposing in dispose() method.\r\n * */\r\nqq.DisposeSupport = function() {\r\n    \"use strict\";\r\n    var disposers = [];\r\n\r\n    return {\r\n        /** Run all registered disposers */\r\n        dispose: function() {\r\n            var disposer;\r\n            do {\r\n                disposer = disposers.shift();\r\n                if (disposer) {\r\n                    disposer();\r\n                }\r\n            }\r\n            while (disposer);\r\n        },\r\n\r\n        /** Attach event handler and register de-attacher as a disposer */\r\n        attach: function() {\r\n            var args = arguments;\r\n            /*jslint undef:true*/\r\n            this.addDisposer(qq(args[0]).attach.apply(this, Array.prototype.slice.call(arguments, 1)));\r\n        },\r\n\r\n        /** Add disposer to the collection */\r\n        addDisposer: function(disposeFunction) {\r\n            disposers.push(disposeFunction);\r\n        }\r\n    };\r\n};\r\nqq.UploadButton = function(o){\r\n    this._options = {\r\n        element: null,\r\n        // if set to true adds multiple attribute to file input\r\n        multiple: false,\r\n        acceptFiles: null,\r\n        // name attribute of file input\r\n        name: 'file',\r\n        onChange: function(input){},\r\n        hoverClass: 'qq-upload-button-hover',\r\n        focusClass: 'qq-upload-button-focus'\r\n    };\r\n\r\n    qq.extend(this._options, o);\r\n    this._disposeSupport = new qq.DisposeSupport();\r\n\r\n    this._element = this._options.element;\r\n\r\n    // make button suitable container for input\r\n    qq(this._element).css({\r\n        position: 'relative',\r\n        overflow: 'hidden',\r\n        // Make sure browse button is in the right side\r\n        // in Internet Explorer\r\n        direction: 'ltr'\r\n    });\r\n\r\n    this._input = this._createInput();\r\n};\r\n\r\nqq.UploadButton.prototype = {\r\n    /* returns file input element */\r\n    getInput: function(){\r\n        return this._input;\r\n    },\r\n    /* cleans/recreates the file input */\r\n    reset: function(){\r\n        if (this._input.parentNode){\r\n            qq(this._input).remove();\r\n        }\r\n\r\n        qq(this._element).removeClass(this._options.focusClass);\r\n        this._input = this._createInput();\r\n    },\r\n    _createInput: function(){\r\n        var input = document.createElement(\"input\");\r\n\r\n        if (this._options.multiple){\r\n            input.setAttribute(\"multiple\", \"multiple\");\r\n        }\r\n\r\n        if (this._options.acceptFiles) input.setAttribute(\"accept\", this._options.acceptFiles);\r\n\r\n        input.setAttribute(\"type\", \"file\");\r\n\t\t//input.setAttribute(\"class\", \"validate[required]\");\r\n\t\tinput.setAttribute(\"id\", \"fileInput\");\r\n        input.setAttribute(\"name\", this._options.name);\r\n\r\n        qq(input).css({\r\n            position: 'absolute',\r\n            // in Opera only 'browse' button\r\n            // is clickable and it is located at\r\n            // the right side of the input\r\n            right: 0,\r\n            top: 0,\r\n            fontFamily: 'Arial',\r\n            // 4 persons reported this, the max values that worked for them were 243, 236, 236, 118\r\n            fontSize: '118px',\r\n            margin: 0,\r\n            padding: 0,\r\n            cursor: 'pointer',\r\n            opacity: 0\r\n        });\r\n\r\n        this._element.appendChild(input);\r\n\r\n        var self = this;\r\n        this._disposeSupport.attach(input, 'change', function(){\r\n            self._options.onChange(input);\r\n        });\r\n\r\n        this._disposeSupport.attach(input, 'mouseover', function(){\r\n            qq(self._element).addClass(self._options.hoverClass);\r\n        });\r\n        this._disposeSupport.attach(input, 'mouseout', function(){\r\n            qq(self._element).removeClass(self._options.hoverClass);\r\n        });\r\n        this._disposeSupport.attach(input, 'focus', function(){\r\n            qq(self._element).addClass(self._options.focusClass);\r\n        });\r\n        this._disposeSupport.attach(input, 'blur', function(){\r\n            qq(self._element).removeClass(self._options.focusClass);\r\n        });\r\n\r\n        // IE and Opera, unfortunately have 2 tab stops on file input\r\n        // which is unacceptable in our case, disable keyboard access\r\n        if (window.attachEvent){\r\n            // it is IE or Opera\r\n            input.setAttribute('tabIndex', \"-1\");\r\n        }\r\n\r\n        return input;\r\n    }\r\n};\r\nqq.FineUploaderBasic = function(o){\r\n    var that = this;\r\n    this._options = {\r\n        debug: false,\r\n        button: null,\r\n        multiple: true,\r\n        maxConnections: 3,\r\n        disableCancelForFormUploads: false,\r\n        autoUpload: true,\r\n        request: {\r\n            endpoint: '/server/upload',\r\n            params: {},\r\n            paramsInBody: false,\r\n            customHeaders: {},\r\n            forceMultipart: true,\r\n            inputName: 'qqfile',\r\n            uuidName: 'qquuid',\r\n            totalFileSizeName: 'qqtotalfilesize'\r\n        },\r\n        validation: {\r\n            allowedExtensions: [],\r\n            sizeLimit: 0,\r\n            minSizeLimit: 0,\r\n            stopOnFirstInvalidFile: true\r\n        },\r\n        callbacks: {\r\n            onSubmit: function(id, fileName){},\r\n            onComplete: function(id, fileName, responseJSON){},\r\n            onCancel: function(id, fileName){},\r\n            onUpload: function(id, fileName){},\r\n            onUploadChunk: function(id, fileName, chunkData){},\r\n            onResume: function(id, fileName, chunkData){},\r\n            onProgress: function(id, fileName, loaded, total){},\r\n            onError: function(id, fileName, reason) {},\r\n            onAutoRetry: function(id, fileName, attemptNumber) {},\r\n            onManualRetry: function(id, fileName) {},\r\n            onValidateBatch: function(fileData) {},\r\n            onValidate: function(fileData) {}\r\n        },\r\n        messages: {\r\n            typeError: \"{file} has an invalid extension. Valid extension(s): {extensions}.\",\r\n            sizeError: \"{file} is too large, maximum file size is {sizeLimit}.\",\r\n            minSizeError: \"{file} is too small, minimum file size is {minSizeLimit}.\",\r\n            emptyError: \"{file} is empty, please select files again without it.\",\r\n            noFilesError: \"No files to upload.\",\r\n            onLeave: \"The files are being uploaded, if you leave now the upload will be cancelled.\"\r\n        },\r\n        retry: {\r\n            enableAuto: false,\r\n            maxAutoAttempts: 3,\r\n            autoAttemptDelay: 5,\r\n            preventRetryResponseProperty: 'preventRetry'\r\n        },\r\n        classes: {\r\n            buttonHover: 'qq-upload-button-hover',\r\n            buttonFocus: 'qq-upload-button-focus'\r\n        },\r\n        chunking: {\r\n            enabled: false,\r\n            partSize: 2000000,\r\n            paramNames: {\r\n                partIndex: 'qqpartindex',\r\n                partByteOffset: 'qqpartbyteoffset',\r\n                chunkSize: 'qqchunksize',\r\n                totalFileSize: 'qqtotalfilesize',\r\n                totalParts: 'qqtotalparts',\r\n                filename: 'qqfilename'\r\n            }\r\n        },\r\n        resume: {\r\n            enabled: false,\r\n            id: null,\r\n            cookiesExpireIn: 7, //days\r\n            paramNames: {\r\n                resuming: \"qqresume\"\r\n            }\r\n        },\r\n        formatFileName: function(fileName) {\r\n            if (fileName.length > 33) {\r\n                fileName = fileName.slice(0, 19) + '...' + fileName.slice(-14);\r\n            }\r\n            return fileName;\r\n        },\r\n        text: {\r\n            sizeSymbols: ['kB', 'MB', 'GB', 'TB', 'PB', 'EB']\r\n        }\r\n    };\r\n\r\n    qq.extend(this._options, o, true);\r\n    this._wrapCallbacks();\r\n    this._disposeSupport =  new qq.DisposeSupport();\r\n\r\n    // number of files being uploaded\r\n    this._filesInProgress = [];\r\n\r\n    this._storedFileIds = [];\r\n\r\n    this._autoRetries = [];\r\n    this._retryTimeouts = [];\r\n    this._preventRetries = [];\r\n\r\n    this._paramsStore = this._createParamsStore();\r\n    this._endpointStore = this._createEndpointStore();\r\n\r\n    this._handler = this._createUploadHandler();\r\n\r\n    if (this._options.button){\r\n        this._button = this._createUploadButton(this._options.button);\r\n    }\r\n\r\n    this._preventLeaveInProgress();\r\n};\r\n\r\nqq.FineUploaderBasic.prototype = {\r\n    log: function(str, level) {\r\n        if (this._options.debug && (!level || level === 'info')) {\r\n            qq.log('[FineUploader] ' + str);\r\n        }\r\n        else if (level && level !== 'info') {\r\n            qq.log('[FineUploader] ' + str, level);\r\n\r\n        }\r\n    },\r\n    setParams: function(params, fileId) {\r\n        /*jshint eqeqeq: true, eqnull: true*/\r\n        if (fileId == null) {\r\n            this._options.request.params = params;\r\n        }\r\n        else {\r\n            this._paramsStore.setParams(params, fileId);\r\n        }\r\n    },\r\n    setEndpoint: function(endpoint, fileId) {\r\n        /*jshint eqeqeq: true, eqnull: true*/\r\n        if (fileId == null) {\r\n            this._options.request.endpoint = endpoint;\r\n        }\r\n        else {\r\n            this._endpointStore.setEndpoint(endpoint, fileId);\r\n        }\r\n    },\r\n    getInProgress: function(){\r\n        return this._filesInProgress.length;\r\n    },\r\n    uploadStoredFiles: function(){\r\n        \"use strict\";\r\n        var idToUpload;\r\n\r\n        while(this._storedFileIds.length) {\r\n            idToUpload = this._storedFileIds.shift();\r\n            this._filesInProgress.push(idToUpload);\r\n            this._handler.upload(idToUpload);\r\n        }\r\n    },\r\n    clearStoredFiles: function(){\r\n        this._storedFileIds = [];\r\n    },\r\n    retry: function(id) {\r\n        if (this._onBeforeManualRetry(id)) {\r\n            this._handler.retry(id);\r\n            return true;\r\n        }\r\n        else {\r\n            return false;\r\n        }\r\n    },\r\n    cancel: function(fileId) {\r\n        this._handler.cancel(fileId);\r\n    },\r\n    reset: function() {\r\n        this.log(\"Resetting uploader...\");\r\n        this._handler.reset();\r\n        this._filesInProgress = [];\r\n        this._storedFileIds = [];\r\n        this._autoRetries = [];\r\n        this._retryTimeouts = [];\r\n        this._preventRetries = [];\r\n        this._button.reset();\r\n        this._paramsStore.reset();\r\n        this._endpointStore.reset();\r\n    },\r\n    addFiles: function(filesOrInputs) {\r\n        var self = this,\r\n            verifiedFilesOrInputs = [],\r\n            index, fileOrInput;\r\n\r\n        if (filesOrInputs) {\r\n            if (!window.FileList || !(filesOrInputs instanceof FileList)) {\r\n                filesOrInputs = [].concat(filesOrInputs);\r\n            }\r\n\r\n            for (index = 0; index < filesOrInputs.length; index+=1) {\r\n                fileOrInput = filesOrInputs[index];\r\n\r\n                if (qq.isFileOrInput(fileOrInput)) {\r\n                    verifiedFilesOrInputs.push(fileOrInput);\r\n                }\r\n                else {\r\n                    self.log(fileOrInput + ' is not a File or INPUT element!  Ignoring!', 'warn');\r\n                }\r\n            }\r\n\r\n            this.log('Processing ' + verifiedFilesOrInputs.length + ' files or inputs...');\r\n            this._uploadFileList(verifiedFilesOrInputs);\r\n        }\r\n    },\r\n    getUuid: function(fileId) {\r\n        return this._handler.getUuid(fileId);\r\n    },\r\n    getResumableFilesData: function() {\r\n        return this._handler.getResumableFilesData();\r\n    },\r\n    getSize: function(fileId) {\r\n        return this._handler.getSize(fileId);\r\n    },\r\n    getFile: function(fileId) {\r\n        return this._handler.getFile(fileId);\r\n    },\r\n    _createUploadButton: function(element){\r\n        var self = this;\r\n\r\n        var button = new qq.UploadButton({\r\n            element: element,\r\n            multiple: this._options.multiple && qq.isXhrUploadSupported(),\r\n            acceptFiles: this._options.validation.acceptFiles,\r\n            onChange: function(input){\r\n                self._onInputChange(input);\r\n            },\r\n            hoverClass: this._options.classes.buttonHover,\r\n            focusClass: this._options.classes.buttonFocus\r\n        });\r\n\r\n        this._disposeSupport.addDisposer(function() { button.dispose(); });\r\n        return button;\r\n    },\r\n    _createUploadHandler: function(){\r\n        var self = this;\r\n\r\n        return new qq.UploadHandler({\r\n            debug: this._options.debug,\r\n            forceMultipart: this._options.request.forceMultipart,\r\n            maxConnections: this._options.maxConnections,\r\n            customHeaders: this._options.request.customHeaders,\r\n            inputName: this._options.request.inputName,\r\n            uuidParamName: this._options.request.uuidName,\r\n            totalFileSizeParamName: this._options.request.totalFileSizeName,\r\n            demoMode: this._options.demoMode,\r\n            paramsInBody: this._options.request.paramsInBody,\r\n            paramsStore: this._paramsStore,\r\n            endpointStore: this._endpointStore,\r\n            chunking: this._options.chunking,\r\n            resume: this._options.resume,\r\n            log: function(str, level) {\r\n                self.log(str, level);\r\n            },\r\n            onProgress: function(id, fileName, loaded, total){\r\n                self._onProgress(id, fileName, loaded, total);\r\n                self._options.callbacks.onProgress(id, fileName, loaded, total);\r\n            },\r\n            onComplete: function(id, fileName, result, xhr){\r\n                self._onComplete(id, fileName, result, xhr);\r\n                self._options.callbacks.onComplete(id, fileName, result);\r\n            },\r\n            onCancel: function(id, fileName){\r\n                self._onCancel(id, fileName);\r\n                self._options.callbacks.onCancel(id, fileName);\r\n            },\r\n            onUpload: function(id, fileName){\r\n                self._onUpload(id, fileName);\r\n                self._options.callbacks.onUpload(id, fileName);\r\n            },\r\n            onUploadChunk: function(id, fileName, chunkData){\r\n                self._options.callbacks.onUploadChunk(id, fileName, chunkData);\r\n            },\r\n            onResume: function(id, fileName, chunkData) {\r\n                return self._options.callbacks.onResume(id, fileName, chunkData);\r\n            },\r\n            onAutoRetry: function(id, fileName, responseJSON, xhr) {\r\n                self._preventRetries[id] = responseJSON[self._options.retry.preventRetryResponseProperty];\r\n\r\n                if (self._shouldAutoRetry(id, fileName, responseJSON)) {\r\n                    self._maybeParseAndSendUploadError(id, fileName, responseJSON, xhr);\r\n                    self._options.callbacks.onAutoRetry(id, fileName, self._autoRetries[id] + 1);\r\n                    self._onBeforeAutoRetry(id, fileName);\r\n\r\n                    self._retryTimeouts[id] = setTimeout(function() {\r\n                        self._onAutoRetry(id, fileName, responseJSON)\r\n                    }, self._options.retry.autoAttemptDelay * 1000);\r\n\r\n                    return true;\r\n                }\r\n                else {\r\n                    return false;\r\n                }\r\n            }\r\n        });\r\n    },\r\n    _preventLeaveInProgress: function(){\r\n        var self = this;\r\n\r\n        this._disposeSupport.attach(window, 'beforeunload', function(e){\r\n            if (!self._filesInProgress.length){return;}\r\n\r\n            var e = e || window.event;\r\n            // for ie, ff\r\n            e.returnValue = self._options.messages.onLeave;\r\n            // for webkit\r\n            return self._options.messages.onLeave;\r\n        });\r\n    },\r\n    _onSubmit: function(id, fileName){\r\n        if (this._options.autoUpload) {\r\n            this._filesInProgress.push(id);\r\n        }\r\n    },\r\n    _onProgress: function(id, fileName, loaded, total){\r\n    },\r\n    _onComplete: function(id, fileName, result, xhr){\r\n        this._removeFromFilesInProgress(id);\r\n        this._maybeParseAndSendUploadError(id, fileName, result, xhr);\r\n    },\r\n    _onCancel: function(id, fileName){\r\n        this._removeFromFilesInProgress(id);\r\n\r\n        clearTimeout(this._retryTimeouts[id]);\r\n\r\n        var storedFileIndex = qq.indexOf(this._storedFileIds, id);\r\n        if (!this._options.autoUpload && storedFileIndex >= 0) {\r\n            this._storedFileIds.splice(storedFileIndex, 1);\r\n        }\r\n    },\r\n    _removeFromFilesInProgress: function(id) {\r\n        var index = qq.indexOf(this._filesInProgress, id);\r\n        if (index >= 0) {\r\n            this._filesInProgress.splice(index, 1);\r\n        }\r\n    },\r\n    _onUpload: function(id, fileName){},\r\n    _onInputChange: function(input){\r\n        if (qq.isXhrUploadSupported()){\r\n            this.addFiles(input.files);\r\n        } else {\r\n            this.addFiles(input);\r\n        }\r\n        this._button.reset();\r\n    },\r\n    _onBeforeAutoRetry: function(id, fileName) {\r\n        this.log(\"Waiting \" + this._options.retry.autoAttemptDelay + \" seconds before retrying \" + fileName + \"...\");\r\n    },\r\n    _onAutoRetry: function(id, fileName, responseJSON) {\r\n        this.log(\"Retrying \" + fileName + \"...\");\r\n        this._autoRetries[id]++;\r\n        this._handler.retry(id);\r\n    },\r\n    _shouldAutoRetry: function(id, fileName, responseJSON) {\r\n        if (!this._preventRetries[id] && this._options.retry.enableAuto) {\r\n            if (this._autoRetries[id] === undefined) {\r\n                this._autoRetries[id] = 0;\r\n            }\r\n\r\n            return this._autoRetries[id] < this._options.retry.maxAutoAttempts\r\n        }\r\n\r\n        return false;\r\n    },\r\n    //return false if we should not attempt the requested retry\r\n    _onBeforeManualRetry: function(id) {\r\n        if (this._preventRetries[id]) {\r\n            this.log(\"Retries are forbidden for id \" + id, 'warn');\r\n            return false;\r\n        }\r\n        else if (this._handler.isValid(id)) {\r\n            var fileName = this._handler.getName(id);\r\n\r\n            if (this._options.callbacks.onManualRetry(id, fileName) === false) {\r\n                return false;\r\n            }\r\n\r\n            this.log(\"Retrying upload for '\" + fileName + \"' (id: \" + id + \")...\");\r\n            this._filesInProgress.push(id);\r\n            return true;\r\n        }\r\n        else {\r\n            this.log(\"'\" + id + \"' is not a valid file ID\", 'error');\r\n            return false;\r\n        }\r\n    },\r\n    _maybeParseAndSendUploadError: function(id, fileName, response, xhr) {\r\n        //assuming no one will actually set the response code to something other than 200 and still set 'success' to true\r\n        if (!response.success){\r\n            if (xhr && xhr.status !== 200 && !response.error) {\r\n                this._options.callbacks.onError(id, fileName, \"XHR returned response code \" + xhr.status);\r\n            }\r\n            else {\r\n                var errorReason = response.error ? response.error : \"Upload failure reason unknown\";\r\n                this._options.callbacks.onError(id, fileName, errorReason);\r\n            }\r\n        }\r\n    },\r\n    _uploadFileList: function(files){\r\n        var validationDescriptors, index, batchInvalid;\r\n\r\n        validationDescriptors = this._getValidationDescriptors(files);\r\n        batchInvalid = this._options.callbacks.onValidateBatch(validationDescriptors) === false;\r\n\r\n        if (!batchInvalid) {\r\n            if (files.length > 0) {\r\n                for (index = 0; index < files.length; index++){\r\n                    if (this._validateFile(files[index])){\r\n                        this._uploadFile(files[index]);\r\n                    } else {\r\n                        if (this._options.validation.stopOnFirstInvalidFile){\r\n                            return;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            else {\r\n                this._error('noFilesError', \"\");\r\n            }\r\n        }\r\n    },\r\n    _uploadFile: function(fileContainer){\r\n        var id = this._handler.add(fileContainer);\r\n        var fileName = this._handler.getName(id);\r\n\r\n        if (this._options.callbacks.onSubmit(id, fileName) !== false){\r\n            this._onSubmit(id, fileName);\r\n            if (this._options.autoUpload) {\r\n                this._handler.upload(id);\r\n            }\r\n            else {\r\n                this._storeFileForLater(id);\r\n            }\r\n        }\r\n    },\r\n    _storeFileForLater: function(id) {\r\n        this._storedFileIds.push(id);\r\n    },\r\n    _validateFile: function(file){\r\n        var validationDescriptor, name, size;\r\n\r\n        validationDescriptor = this._getValidationDescriptor(file);\r\n        name = validationDescriptor.name;\r\n        size = validationDescriptor.size;\r\n\r\n        if (this._options.callbacks.onValidate(validationDescriptor) === false) {\r\n            return false;\r\n        }\r\n\r\n        if (!this._isAllowedExtension(name)){\r\n            this._error('typeError', name);\r\n            return false;\r\n\r\n        }\r\n        else if (size === 0){\r\n            this._error('emptyError', name);\r\n            return false;\r\n\r\n        }\r\n        else if (size && this._options.validation.sizeLimit && size > this._options.validation.sizeLimit){\r\n            this._error('sizeError', name);\r\n            return false;\r\n\r\n        }\r\n        else if (size && size < this._options.validation.minSizeLimit){\r\n            this._error('minSizeError', name);\r\n            return false;\r\n        }\r\n\r\n        return true;\r\n    },\r\n    _error: function(code, fileName){\r\n        var message = this._options.messages[code];\r\n        function r(name, replacement){ message = message.replace(name, replacement); }\r\n\r\n        var extensions = this._options.validation.allowedExtensions.join(', ').toLowerCase();\r\n\r\n        r('{file}', this._options.formatFileName(fileName));\r\n        r('{extensions}', extensions);\r\n        r('{sizeLimit}', this._formatSize(this._options.validation.sizeLimit));\r\n        r('{minSizeLimit}', this._formatSize(this._options.validation.minSizeLimit));\r\n\r\n        this._options.callbacks.onError(null, fileName, message);\r\n\r\n        return message;\r\n    },\r\n    _isAllowedExtension: function(fileName){\r\n        var allowed = this._options.validation.allowedExtensions,\r\n            valid = false;\r\n\r\n        if (!allowed.length) {\r\n            return true;\r\n        }\r\n\r\n        qq.each(allowed, function(idx, allowedExt) {\r\n            /*jshint eqeqeq: true, eqnull: true*/\r\n            var extRegex = new RegExp('\\\\.' + allowedExt + \"$\", 'i');\r\n\r\n            if (fileName.match(extRegex) != null) {\r\n                valid = true;\r\n                return false;\r\n            }\r\n        });\r\n\r\n        return valid;\r\n    },\r\n    _formatSize: function(bytes){\r\n        var i = -1;\r\n        do {\r\n            bytes = bytes / 1024;\r\n            i++;\r\n        } while (bytes > 99);\r\n\r\n        return Math.max(bytes, 0.1).toFixed(1) + this._options.text.sizeSymbols[i];\r\n    },\r\n    _wrapCallbacks: function() {\r\n        var self, safeCallback;\r\n\r\n        self = this;\r\n\r\n        safeCallback = function(name, callback, args) {\r\n            try {\r\n                return callback.apply(self, args);\r\n            }\r\n            catch (exception) {\r\n                self.log(\"Caught exception in '\" + name + \"' callback - \" + exception.message, 'error');\r\n            }\r\n        }\r\n\r\n        for (var prop in this._options.callbacks) {\r\n            (function() {\r\n                var callbackName, callbackFunc;\r\n                callbackName = prop;\r\n                callbackFunc = self._options.callbacks[callbackName];\r\n                self._options.callbacks[callbackName] = function() {\r\n                    return safeCallback(callbackName, callbackFunc, arguments);\r\n                }\r\n            }());\r\n        }\r\n    },\r\n    _parseFileName: function(file) {\r\n        var name;\r\n\r\n        if (file.value){\r\n            // it is a file input\r\n            // get input value and remove path to normalize\r\n            name = file.value.replace(/.*(\\/|\\\\)/, \"\");\r\n        } else {\r\n            // fix missing properties in Safari 4 and firefox 11.0a2\r\n            name = (file.fileName !== null && file.fileName !== undefined) ? file.fileName : file.name;\r\n        }\r\n\r\n        return name;\r\n    },\r\n    _parseFileSize: function(file) {\r\n        var size;\r\n\r\n        if (!file.value){\r\n            // fix missing properties in Safari 4 and firefox 11.0a2\r\n            size = (file.fileSize !== null && file.fileSize !== undefined) ? file.fileSize : file.size;\r\n        }\r\n\r\n        return size;\r\n    },\r\n    _getValidationDescriptor: function(file) {\r\n        var name, size, fileDescriptor;\r\n\r\n        fileDescriptor = {};\r\n        name = this._parseFileName(file);\r\n        size = this._parseFileSize(file);\r\n\r\n        fileDescriptor.name = name;\r\n        if (size) {\r\n            fileDescriptor.size = size;\r\n        }\r\n\r\n        return fileDescriptor;\r\n    },\r\n    _getValidationDescriptors: function(files) {\r\n        var self = this,\r\n            fileDescriptors = [];\r\n\r\n        qq.each(files, function(idx, file) {\r\n            fileDescriptors.push(self._getValidationDescriptor(file));\r\n        });\r\n\r\n        return fileDescriptors;\r\n    },\r\n    _createParamsStore: function() {\r\n        var paramsStore = {},\r\n            self = this;\r\n\r\n        return {\r\n            setParams: function(params, fileId) {\r\n                var paramsCopy = {};\r\n                qq.extend(paramsCopy, params);\r\n                paramsStore[fileId] = paramsCopy;\r\n            },\r\n\r\n            getParams: function(fileId) {\r\n                /*jshint eqeqeq: true, eqnull: true*/\r\n                var paramsCopy = {};\r\n\r\n                if (fileId != null && paramsStore[fileId]) {\r\n                    qq.extend(paramsCopy, paramsStore[fileId]);\r\n                }\r\n                else {\r\n                    qq.extend(paramsCopy, self._options.request.params);\r\n                }\r\n\r\n                return paramsCopy;\r\n            },\r\n\r\n            remove: function(fileId) {\r\n                return delete paramsStore[fileId];\r\n            },\r\n\r\n            reset: function() {\r\n                paramsStore = {};\r\n            }\r\n        };\r\n    },\r\n    _createEndpointStore: function() {\r\n        var endpointStore = {},\r\n        self = this;\r\n\r\n        return {\r\n            setEndpoint: function(endpoint, fileId) {\r\n                endpointStore[fileId] = endpoint;\r\n            },\r\n\r\n            getEndpoint: function(fileId) {\r\n                /*jshint eqeqeq: true, eqnull: true*/\r\n                if (fileId != null && endpointStore[fileId]) {\r\n                    return endpointStore[fileId];\r\n                }\r\n\r\n                return self._options.request.endpoint;\r\n            },\r\n\r\n            remove: function(fileId) {\r\n                return delete endpointStore[fileId];\r\n            },\r\n\r\n            reset: function() {\r\n                endpointStore = {};\r\n            }\r\n        };\r\n    }\r\n};\r\n/*globals qq, document*/\r\nqq.DragAndDrop = function(o) {\r\n    \"use strict\";\r\n\r\n    var options, dz, dirPending,\r\n        droppedFiles = [],\r\n        droppedEntriesCount = 0,\r\n        droppedEntriesParsedCount = 0,\r\n        disposeSupport = new qq.DisposeSupport();\r\n\r\n     options = {\r\n        dropArea: null,\r\n        extraDropzones: [],\r\n        hideDropzones: true,\r\n        multiple: true,\r\n        classes: {\r\n            dropActive: null\r\n        },\r\n        callbacks: {\r\n            dropProcessing: function(isProcessing, files) {},\r\n            error: function(code, filename) {},\r\n            log: function(message, level) {}\r\n        }\r\n    };\r\n\r\n    qq.extend(options, o);\r\n\r\n    function maybeUploadDroppedFiles() {\r\n        if (droppedEntriesCount === droppedEntriesParsedCount && !dirPending) {\r\n            options.callbacks.log('Grabbed ' + droppedFiles.length + \" files after tree traversal.\");\r\n            dz.dropDisabled(false);\r\n            options.callbacks.dropProcessing(false, droppedFiles);\r\n        }\r\n    }\r\n    function addDroppedFile(file) {\r\n        droppedFiles.push(file);\r\n        droppedEntriesParsedCount+=1;\r\n        maybeUploadDroppedFiles();\r\n    }\r\n\r\n    function traverseFileTree(entry) {\r\n        var dirReader, i;\r\n\r\n        droppedEntriesCount+=1;\r\n\r\n        if (entry.isFile) {\r\n            entry.file(function(file) {\r\n                addDroppedFile(file);\r\n            });\r\n        }\r\n        else if (entry.isDirectory) {\r\n            dirPending = true;\r\n            dirReader = entry.createReader();\r\n            dirReader.readEntries(function(entries) {\r\n                droppedEntriesParsedCount+=1;\r\n                for (i = 0; i < entries.length; i+=1) {\r\n                    traverseFileTree(entries[i]);\r\n                }\r\n\r\n                dirPending = false;\r\n\r\n                if (!entries.length) {\r\n                    maybeUploadDroppedFiles();\r\n                }\r\n            });\r\n        }\r\n    }\r\n\r\n    function handleDataTransfer(dataTransfer) {\r\n        var i, items, entry;\r\n\r\n        options.callbacks.dropProcessing(true);\r\n        dz.dropDisabled(true);\r\n\r\n        if (dataTransfer.files.length > 1 && !options.multiple) {\r\n            options.callbacks.dropProcessing(false);\r\n            options.callbacks.error('tooManyFilesError', \"\");\r\n            dz.dropDisabled(false);\r\n        }\r\n        else {\r\n            droppedFiles = [];\r\n            droppedEntriesCount = 0;\r\n            droppedEntriesParsedCount = 0;\r\n\r\n            if (qq.isFolderDropSupported(dataTransfer)) {\r\n                items = dataTransfer.items;\r\n\r\n                for (i = 0; i < items.length; i+=1) {\r\n                    entry = items[i].webkitGetAsEntry();\r\n                    if (entry) {\r\n                        //due to a bug in Chrome's File System API impl - #149735\r\n                        if (entry.isFile) {\r\n                            droppedFiles.push(items[i].getAsFile());\r\n                            if (i === items.length-1) {\r\n                                maybeUploadDroppedFiles();\r\n                            }\r\n                        }\r\n\r\n                        else {\r\n                            traverseFileTree(entry);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            else {\r\n                options.callbacks.dropProcessing(false, dataTransfer.files);\r\n                dz.dropDisabled(false);\r\n            }\r\n        }\r\n    }\r\n\r\n    function setupDropzone(dropArea){\r\n        dz = new qq.UploadDropZone({\r\n            element: dropArea,\r\n            onEnter: function(e){\r\n                qq(dropArea).addClass(options.classes.dropActive);\r\n                e.stopPropagation();\r\n            },\r\n            onLeaveNotDescendants: function(e){\r\n                qq(dropArea).removeClass(options.classes.dropActive);\r\n            },\r\n            onDrop: function(e){\r\n                if (options.hideDropzones) {\r\n                    qq(dropArea).hide();\r\n                }\r\n                qq(dropArea).removeClass(options.classes.dropActive);\r\n\r\n                handleDataTransfer(e.dataTransfer);\r\n            }\r\n        });\r\n\r\n        disposeSupport.addDisposer(function() {\r\n            dz.dispose();\r\n        });\r\n\r\n        if (options.hideDropzones) {\r\n            qq(dropArea).hide();\r\n        }\r\n    }\r\n\r\n    function isFileDrag(dragEvent) {\r\n        var fileDrag;\r\n\r\n        qq.each(dragEvent.dataTransfer.types, function(key, val) {\r\n            if (val === 'Files') {\r\n                fileDrag = true;\r\n                return false;\r\n            }\r\n        });\r\n\r\n        return fileDrag;\r\n    }\r\n\r\n    function setupDragDrop(){\r\n        if (options.dropArea) {\r\n            options.extraDropzones.push(options.dropArea);\r\n        }\r\n\r\n        var i, dropzones = options.extraDropzones;\r\n\r\n        for (i=0; i < dropzones.length; i+=1){\r\n            setupDropzone(dropzones[i]);\r\n        }\r\n\r\n        // IE <= 9 does not support the File API used for drag+drop uploads\r\n        if (options.dropArea && (!qq.ie() || qq.ie10())) {\r\n            disposeSupport.attach(document, 'dragenter', function(e) {\r\n                if (!dz.dropDisabled() && isFileDrag(e)) {\r\n                    if (qq(options.dropArea).hasClass(options.classes.dropDisabled)) {\r\n                        return;\r\n                    }\r\n\r\n                    options.dropArea.style.display = 'block';\r\n                    for (i=0; i < dropzones.length; i+=1) {\r\n                        dropzones[i].style.display = 'block';\r\n                    }\r\n                }\r\n            });\r\n        }\r\n        disposeSupport.attach(document, 'dragleave', function(e){\r\n            if (options.hideDropzones && qq.FineUploader.prototype._leaving_document_out(e)) {\r\n                for (i=0; i < dropzones.length; i+=1) {\r\n                    qq(dropzones[i]).hide();\r\n                }\r\n            }\r\n        });\r\n        disposeSupport.attach(document, 'drop', function(e){\r\n            if (options.hideDropzones) {\r\n                for (i=0; i < dropzones.length; i+=1) {\r\n                    qq(dropzones[i]).hide();\r\n                }\r\n            }\r\n            e.preventDefault();\r\n        });\r\n    }\r\n\r\n    return {\r\n        setup: function() {\r\n            setupDragDrop();\r\n        },\r\n\r\n        setupExtraDropzone: function(element) {\r\n            options.extraDropzones.push(element);\r\n            setupDropzone(element);\r\n        },\r\n\r\n        removeExtraDropzone: function(element) {\r\n            var i, dzs = options.extraDropzones;\r\n            for(i in dzs) {\r\n                if (dzs[i] === element) {\r\n                    return dzs.splice(i, 1);\r\n                }\r\n            }\r\n        },\r\n\r\n        dispose: function() {\r\n            disposeSupport.dispose();\r\n            dz.dispose();\r\n        }\r\n    };\r\n};\r\n\r\n\r\nqq.UploadDropZone = function(o){\r\n    \"use strict\";\r\n\r\n    var options, element, preventDrop, dropOutsideDisabled, disposeSupport = new qq.DisposeSupport();\r\n\r\n    options = {\r\n        element: null,\r\n        onEnter: function(e){},\r\n        onLeave: function(e){},\r\n        // is not fired when leaving element by hovering descendants\r\n        onLeaveNotDescendants: function(e){},\r\n        onDrop: function(e){}\r\n    };\r\n\r\n    qq.extend(options, o);\r\n    element = options.element;\r\n\r\n    function dragover_should_be_canceled(){\r\n        return qq.safari() || (qq.firefox() && qq.windows());\r\n    }\r\n\r\n    function disableDropOutside(e){\r\n        // run only once for all instances\r\n        if (!dropOutsideDisabled ){\r\n\r\n            // for these cases we need to catch onDrop to reset dropArea\r\n            if (dragover_should_be_canceled){\r\n               disposeSupport.attach(document, 'dragover', function(e){\r\n                    e.preventDefault();\r\n                });\r\n            } else {\r\n                disposeSupport.attach(document, 'dragover', function(e){\r\n                    if (e.dataTransfer){\r\n                        e.dataTransfer.dropEffect = 'none';\r\n                        e.preventDefault();\r\n                    }\r\n                });\r\n            }\r\n\r\n            dropOutsideDisabled = true;\r\n        }\r\n    }\r\n\r\n    function isValidFileDrag(e){\r\n        // e.dataTransfer currently causing IE errors\r\n        // IE9 does NOT support file API, so drag-and-drop is not possible\r\n        if (qq.ie() && !qq.ie10()) {\r\n            return false;\r\n        }\r\n\r\n        var effectTest, dt = e.dataTransfer,\r\n        // do not check dt.types.contains in webkit, because it crashes safari 4\r\n        isSafari = qq.safari();\r\n\r\n        // dt.effectAllowed is none in Safari 5\r\n        // dt.types.contains check is for firefox\r\n        effectTest = qq.ie10() ? true : dt.effectAllowed !== 'none';\r\n        return dt && effectTest && (dt.files || (!isSafari && dt.types.contains && dt.types.contains('Files')));\r\n    }\r\n\r\n    function isOrSetDropDisabled(isDisabled) {\r\n        if (isDisabled !== undefined) {\r\n            preventDrop = isDisabled;\r\n        }\r\n        return preventDrop;\r\n    }\r\n\r\n    function attachEvents(){\r\n        disposeSupport.attach(element, 'dragover', function(e){\r\n            if (!isValidFileDrag(e)) {\r\n                return;\r\n            }\r\n\r\n            var effect = qq.ie() ? null : e.dataTransfer.effectAllowed;\r\n            if (effect === 'move' || effect === 'linkMove'){\r\n                e.dataTransfer.dropEffect = 'move'; // for FF (only move allowed)\r\n            } else {\r\n                e.dataTransfer.dropEffect = 'copy'; // for Chrome\r\n            }\r\n\r\n            e.stopPropagation();\r\n            e.preventDefault();\r\n        });\r\n\r\n        disposeSupport.attach(element, 'dragenter', function(e){\r\n            if (!isOrSetDropDisabled()) {\r\n                if (!isValidFileDrag(e)) {\r\n                    return;\r\n                }\r\n                options.onEnter(e);\r\n            }\r\n        });\r\n\r\n        disposeSupport.attach(element, 'dragleave', function(e){\r\n            if (!isValidFileDrag(e)) {\r\n                return;\r\n            }\r\n\r\n            options.onLeave(e);\r\n\r\n            var relatedTarget = document.elementFromPoint(e.clientX, e.clientY);\r\n            // do not fire when moving a mouse over a descendant\r\n            if (qq(this).contains(relatedTarget)) {\r\n                return;\r\n            }\r\n\r\n            options.onLeaveNotDescendants(e);\r\n        });\r\n\r\n        disposeSupport.attach(element, 'drop', function(e){\r\n            if (!isOrSetDropDisabled()) {\r\n                if (!isValidFileDrag(e)) {\r\n                    return;\r\n                }\r\n\r\n                e.preventDefault();\r\n                options.onDrop(e);\r\n            }\r\n        });\r\n    }\r\n\r\n    disableDropOutside();\r\n    attachEvents();\r\n\r\n    return {\r\n        dropDisabled: function(isDisabled) {\r\n            return isOrSetDropDisabled(isDisabled);\r\n        },\r\n\r\n        dispose: function() {\r\n            disposeSupport.dispose();\r\n        }\r\n    };\r\n};\r\n/**\r\n * Class that creates upload widget with drag-and-drop and file list\r\n * @inherits qq.FineUploaderBasic\r\n */\r\nqq.FineUploader = function(o){\r\n    // call parent constructor\r\n    qq.FineUploaderBasic.apply(this, arguments);\r\n\r\n    // additional options\r\n    qq.extend(this._options, {\r\n        element: null,\r\n        listElement: null,\r\n        dragAndDrop: {\r\n            extraDropzones: [],\r\n            hideDropzones: true,\r\n            disableDefaultDropzone: false\r\n        },\r\n        text: {\r\n            uploadButton: 'Upload a file',\r\n            cancelButton: 'Cancel',\r\n            retryButton: 'Retry',\r\n            failUpload: 'Upload failed',\r\n            dragZone: 'Drop files here to upload',\r\n            dropProcessing: 'Processing dropped files...',\r\n            formatProgress: \"{percent}% of {total_size}\",\r\n            waitingForResponse: \"Processing...\"\r\n        },\r\n        template: '<div class=\"qq-uploader\">' +\r\n            ((!this._options.dragAndDrop || !this._options.dragAndDrop.disableDefaultDropzone) ? '<div class=\"qq-upload-drop-area\"><span>{dragZoneText}</span></div>' : '') +\r\n            (!this._options.button ? '<div class=\"qq-upload-button\"><div>{uploadButtonText}</div></div>' : '') +\r\n            '<span class=\"qq-drop-processing\"><span>{dropProcessingText}</span><span class=\"qq-drop-processing-spinner\"></span></span>' +\r\n            (!this._options.listElement ? '<ul class=\"qq-upload-list\"></ul>' : '') +\r\n            '</div>',\r\n\r\n        // template for one item in file list\r\n        fileTemplate: '<li>' +\r\n            '<div class=\"qq-progress-bar\"></div>' +\r\n            '<span class=\"qq-upload-spinner\"></span>' +\r\n            '<span class=\"qq-upload-finished\"></span>' +\r\n            '<span class=\"qq-upload-file\"></span>' +\r\n            '<span class=\"qq-upload-size\"></span>' +\r\n            '<a class=\"qq-upload-cancel\" href=\"#\">{cancelButtonText}</a>' +\r\n            '<a class=\"qq-upload-retry\" href=\"#\">{retryButtonText}</a>' +\r\n            '<span class=\"qq-upload-status-text\">{statusText}</span>' +\r\n            '</li>',\r\n        classes: {\r\n            button: 'qq-upload-button',\r\n            drop: 'qq-upload-drop-area',\r\n            dropActive: 'qq-upload-drop-area-active',\r\n            dropDisabled: 'qq-upload-drop-area-disabled',\r\n            list: 'qq-upload-list',\r\n            progressBar: 'qq-progress-bar',\r\n            file: 'qq-upload-file',\r\n            spinner: 'qq-upload-spinner',\r\n            finished: 'qq-upload-finished',\r\n            retrying: 'qq-upload-retrying',\r\n            retryable: 'qq-upload-retryable',\r\n            size: 'qq-upload-size',\r\n            cancel: 'qq-upload-cancel',\r\n            retry: 'qq-upload-retry',\r\n            statusText: 'qq-upload-status-text',\r\n\r\n            success: 'qq-upload-success',\r\n            fail: 'qq-upload-fail',\r\n\r\n            successIcon: null,\r\n            failIcon: null,\r\n\r\n            dropProcessing: 'qq-drop-processing',\r\n            dropProcessingSpinner: 'qq-drop-processing-spinner'\r\n        },\r\n        failedUploadTextDisplay: {\r\n            mode: 'default', //default, custom, or none\r\n            maxChars: 50,\r\n            responseProperty: 'error',\r\n            enableTooltip: true\r\n        },\r\n        messages: {\r\n            tooManyFilesError: \"You may only drop one file\"\r\n        },\r\n        retry: {\r\n            showAutoRetryNote: true,\r\n            autoRetryNote: \"Retrying {retryNum}/{maxAuto}...\",\r\n            showButton: false\r\n        },\r\n        showMessage: function(message){\r\n            setTimeout(function() {\r\n                alert(message);\r\n            }, 0);\r\n        }\r\n    }, true);\r\n\r\n    // overwrite options with user supplied\r\n    qq.extend(this._options, o, true);\r\n    this._wrapCallbacks();\r\n\r\n    // overwrite the upload button text if any\r\n    // same for the Cancel button and Fail message text\r\n    this._options.template     = this._options.template.replace(/\\{dragZoneText\\}/g, this._options.text.dragZone);\r\n    this._options.template     = this._options.template.replace(/\\{uploadButtonText\\}/g, this._options.text.uploadButton);\r\n    this._options.template     = this._options.template.replace(/\\{dropProcessingText\\}/g, this._options.text.dropProcessing);\r\n    this._options.fileTemplate = this._options.fileTemplate.replace(/\\{cancelButtonText\\}/g, this._options.text.cancelButton);\r\n    this._options.fileTemplate = this._options.fileTemplate.replace(/\\{retryButtonText\\}/g, this._options.text.retryButton);\r\n    this._options.fileTemplate = this._options.fileTemplate.replace(/\\{statusText\\}/g, \"\");\r\n\r\n    this._element = this._options.element;\r\n    this._element.innerHTML = this._options.template;\r\n    this._listElement = this._options.listElement || this._find(this._element, 'list');\r\n\r\n    this._classes = this._options.classes;\r\n\r\n    if (!this._button) {\r\n        this._button = this._createUploadButton(this._find(this._element, 'button'));\r\n    }\r\n\r\n    this._bindCancelAndRetryEvents();\r\n\r\n    this._dnd = this._setupDragAndDrop();\r\n};\r\n\r\n// inherit from Basic Uploader\r\nqq.extend(qq.FineUploader.prototype, qq.FineUploaderBasic.prototype);\r\n\r\nqq.extend(qq.FineUploader.prototype, {\r\n    clearStoredFiles: function() {\r\n        qq.FineUploaderBasic.prototype.clearStoredFiles.apply(this, arguments);\r\n        this._listElement.innerHTML = \"\";\r\n    },\r\n    addExtraDropzone: function(element){\r\n        this._dnd.setupExtraDropzone(element);\r\n    },\r\n    removeExtraDropzone: function(element){\r\n        return this._dnd.removeExtraDropzone(element);\r\n    },\r\n    getItemByFileId: function(id){\r\n        var item = this._listElement.firstChild;\r\n\r\n        // there can't be txt nodes in dynamically created list\r\n        // and we can  use nextSibling\r\n        while (item){\r\n            if (item.qqFileId == id) return item;\r\n            item = item.nextSibling;\r\n        }\r\n    },\r\n    cancel: function(fileId) {\r\n        qq.FineUploaderBasic.prototype.cancel.apply(this, arguments);\r\n        var item = this.getItemByFileId(fileId);\r\n        qq(item).remove();\r\n    },\r\n    reset: function() {\r\n        qq.FineUploaderBasic.prototype.reset.apply(this, arguments);\r\n        this._element.innerHTML = this._options.template;\r\n        this._listElement = this._options.listElement || this._find(this._element, 'list');\r\n        if (!this._options.button) {\r\n            this._button = this._createUploadButton(this._find(this._element, 'button'));\r\n        }\r\n        this._bindCancelAndRetryEvents();\r\n        this._dnd.dispose();\r\n        this._dnd = this._setupDragAndDrop();\r\n    },\r\n    _setupDragAndDrop: function() {\r\n        var self = this,\r\n            dropProcessingEl = this._find(this._element, 'dropProcessing'),\r\n            dnd, preventSelectFiles, defaultDropAreaEl;\r\n\r\n        preventSelectFiles = function(event) {\r\n            event.preventDefault();\r\n        };\r\n\r\n        if (!this._options.dragAndDrop.disableDefaultDropzone) {\r\n            defaultDropAreaEl = this._find(this._options.element, 'drop');\r\n        }\r\n\r\n        dnd = new qq.DragAndDrop({\r\n            dropArea: defaultDropAreaEl,\r\n            extraDropzones: this._options.dragAndDrop.extraDropzones,\r\n            hideDropzones: this._options.dragAndDrop.hideDropzones,\r\n            multiple: this._options.multiple,\r\n            classes: {\r\n                dropActive: this._options.classes.dropActive\r\n            },\r\n            callbacks: {\r\n                dropProcessing: function(isProcessing, files) {\r\n                    var input = self._button.getInput();\r\n\r\n                    if (isProcessing) {\r\n                        qq(dropProcessingEl).css({display: 'block'});\r\n                        qq(input).attach('click', preventSelectFiles);\r\n                    }\r\n                    else {\r\n                        qq(dropProcessingEl).hide();\r\n                        qq(input).detach('click', preventSelectFiles);\r\n                    }\r\n\r\n                    if (files) {\r\n                        self.addFiles(files);\r\n                    }\r\n                },\r\n                error: function(code, filename) {\r\n                    self._error(code, filename);\r\n                },\r\n                log: function(message, level) {\r\n                    self.log(message, level);\r\n                }\r\n            }\r\n        });\r\n\r\n        dnd.setup();\r\n\r\n        return dnd;\r\n    },\r\n    _leaving_document_out: function(e){\r\n        return ((qq.chrome() || (qq.safari() && qq.windows())) && e.clientX == 0 && e.clientY == 0) // null coords for Chrome and Safari Windows\r\n            || (qq.firefox() && !e.relatedTarget); // null e.relatedTarget for Firefox\r\n    },\r\n    _storeFileForLater: function(id) {\r\n        qq.FineUploaderBasic.prototype._storeFileForLater.apply(this, arguments);\r\n        var item = this.getItemByFileId(id);\r\n        qq(this._find(item, 'spinner')).hide();\r\n    },\r\n    /**\r\n     * Gets one of the elements listed in this._options.classes\r\n     **/\r\n    _find: function(parent, type){\r\n        var element = qq(parent).getByClass(this._options.classes[type])[0];\r\n        if (!element){\r\n            throw new Error('element not found ' + type);\r\n        }\r\n\r\n        return element;\r\n    },\r\n    _onSubmit: function(id, fileName){\r\n        qq.FineUploaderBasic.prototype._onSubmit.apply(this, arguments);\r\n        this._addToList(id, fileName);\r\n    },\r\n    // Update the progress bar & percentage as the file is uploaded\r\n    _onProgress: function(id, fileName, loaded, total){\r\n        qq.FineUploaderBasic.prototype._onProgress.apply(this, arguments);\r\n\r\n        var item, progressBar, text, percent, cancelLink, size;\r\n\r\n        item = this.getItemByFileId(id);\r\n        progressBar = this._find(item, 'progressBar');\r\n        percent = Math.round(loaded / total * 100);\r\n\r\n        if (loaded === total) {\r\n            cancelLink = this._find(item, 'cancel');\r\n            qq(cancelLink).hide();\r\n\r\n            qq(progressBar).hide();\r\n            qq(this._find(item, 'statusText')).setText(this._options.text.waitingForResponse);\r\n\r\n            // If last byte was sent, just display final size\r\n            text = this._formatSize(total);\r\n        }\r\n        else {\r\n            // If still uploading, display percentage\r\n            text = this._formatProgress(loaded, total);\r\n\r\n            qq(progressBar).css({display: 'block'});\r\n        }\r\n\r\n        // Update progress bar element\r\n        qq(progressBar).css({width: percent + '%'});\r\n\r\n        size = this._find(item, 'size');\r\n        qq(size).css({display: 'inline'});\r\n        qq(size).setText(text);\r\n    },\r\n    _onComplete: function(id, fileName, result, xhr){\r\n        qq.FineUploaderBasic.prototype._onComplete.apply(this, arguments);\r\n\r\n        var item = this.getItemByFileId(id);\r\n\r\n        qq(this._find(item, 'statusText')).clearText();\r\n\r\n        qq(item).removeClass(this._classes.retrying);\r\n        qq(this._find(item, 'progressBar')).hide();\r\n\r\n        if (!this._options.disableCancelForFormUploads || qq.isXhrUploadSupported()) {\r\n            qq(this._find(item, 'cancel')).hide();\r\n        }\r\n        qq(this._find(item, 'spinner')).hide();\r\n\r\n        if (result.success){\r\n            qq(item).addClass(this._classes.success);\r\n            if (this._classes.successIcon) {\r\n                this._find(item, 'finished').style.display = \"inline-block\";\r\n                qq(item).addClass(this._classes.successIcon);\r\n            }\r\n        } else {\r\n            qq(item).addClass(this._classes.fail);\r\n            if (this._classes.failIcon) {\r\n                this._find(item, 'finished').style.display = \"inline-block\";\r\n                qq(item).addClass(this._classes.failIcon);\r\n            }\r\n            if (this._options.retry.showButton && !this._preventRetries[id]) {\r\n                qq(item).addClass(this._classes.retryable);\r\n            }\r\n            this._controlFailureTextDisplay(item, result);\r\n        }\r\n    },\r\n    _onUpload: function(id, fileName){\r\n        qq.FineUploaderBasic.prototype._onUpload.apply(this, arguments);\r\n\r\n        var item = this.getItemByFileId(id);\r\n        this._showSpinner(item);\r\n    },\r\n    _onBeforeAutoRetry: function(id) {\r\n        var item, progressBar, cancelLink, failTextEl, retryNumForDisplay, maxAuto, retryNote;\r\n\r\n        qq.FineUploaderBasic.prototype._onBeforeAutoRetry.apply(this, arguments);\r\n\r\n        item = this.getItemByFileId(id);\r\n        progressBar = this._find(item, 'progressBar');\r\n\r\n        this._showCancelLink(item);\r\n        progressBar.style.width = 0;\r\n        qq(progressBar).hide();\r\n\r\n        if (this._options.retry.showAutoRetryNote) {\r\n            failTextEl = this._find(item, 'statusText');\r\n            retryNumForDisplay = this._autoRetries[id] + 1;\r\n            maxAuto = this._options.retry.maxAutoAttempts;\r\n\r\n            retryNote = this._options.retry.autoRetryNote.replace(/\\{retryNum\\}/g, retryNumForDisplay);\r\n            retryNote = retryNote.replace(/\\{maxAuto\\}/g, maxAuto);\r\n\r\n            qq(failTextEl).setText(retryNote);\r\n            if (retryNumForDisplay === 1) {\r\n                qq(item).addClass(this._classes.retrying);\r\n            }\r\n        }\r\n    },\r\n    //return false if we should not attempt the requested retry\r\n    _onBeforeManualRetry: function(id) {\r\n        if (qq.FineUploaderBasic.prototype._onBeforeManualRetry.apply(this, arguments)) {\r\n            var item = this.getItemByFileId(id);\r\n            this._find(item, 'progressBar').style.width = 0;\r\n            qq(item).removeClass(this._classes.fail);\r\n            qq(this._find(item, 'statusText')).clearText();\r\n            this._showSpinner(item);\r\n            this._showCancelLink(item);\r\n            return true;\r\n        }\r\n        return false;\r\n    },\r\n    _addToList: function(id, fileName){\r\n        var item = qq.toElement(this._options.fileTemplate);\r\n        if (this._options.disableCancelForFormUploads && !qq.isXhrUploadSupported()) {\r\n            var cancelLink = this._find(item, 'cancel');\r\n            qq(cancelLink).remove();\r\n        }\r\n\r\n        item.qqFileId = id;\r\n\r\n        var fileElement = this._find(item, 'file');\r\n        qq(fileElement).setText(this._options.formatFileName(fileName));\r\n        qq(this._find(item, 'size')).hide();\r\n        if (!this._options.multiple) this._clearList();\r\n        this._listElement.appendChild(item);\r\n    },\r\n    _clearList: function(){\r\n        this._listElement.innerHTML = '';\r\n        this.clearStoredFiles();\r\n    },\r\n    /**\r\n     * delegate click event for cancel & retry links\r\n     **/\r\n    _bindCancelAndRetryEvents: function(){\r\n        var self = this,\r\n            list = this._listElement;\r\n\r\n        this._disposeSupport.attach(list, 'click', function(e){\r\n            e = e || window.event;\r\n            var target = e.target || e.srcElement;\r\n\r\n            if (qq(target).hasClass(self._classes.cancel) || qq(target).hasClass(self._classes.retry)){\r\n                qq.preventDefault(e);\r\n\r\n                var item = target.parentNode;\r\n                while(item.qqFileId == undefined) {\r\n                    item = target = target.parentNode;\r\n                }\r\n\r\n                if (qq(target).hasClass(self._classes.cancel)) {\r\n                    self.cancel(item.qqFileId);\r\n                }\r\n                else {\r\n                    qq(item).removeClass(self._classes.retryable);\r\n                    self.retry(item.qqFileId);\r\n                }\r\n            }\r\n        });\r\n    },\r\n    _formatProgress: function (uploadedSize, totalSize) {\r\n        var message = this._options.text.formatProgress;\r\n        function r(name, replacement) { message = message.replace(name, replacement); }\r\n\r\n        r('{percent}', Math.round(uploadedSize / totalSize * 100));\r\n        r('{total_size}', this._formatSize(totalSize));\r\n        return message;\r\n    },\r\n    _controlFailureTextDisplay: function(item, response) {\r\n        var mode, maxChars, responseProperty, failureReason, shortFailureReason;\r\n\r\n        mode = this._options.failedUploadTextDisplay.mode;\r\n        maxChars = this._options.failedUploadTextDisplay.maxChars;\r\n        responseProperty = this._options.failedUploadTextDisplay.responseProperty;\r\n\r\n        if (mode === 'custom') {\r\n            failureReason = response[responseProperty];\r\n            if (failureReason) {\r\n                if (failureReason.length > maxChars) {\r\n                    shortFailureReason = failureReason.substring(0, maxChars) + '...';\r\n                }\r\n            }\r\n            else {\r\n                failureReason = this._options.text.failUpload;\r\n                this.log(\"'\" + responseProperty + \"' is not a valid property on the server response.\", 'warn');\r\n            }\r\n\r\n            qq(this._find(item, 'statusText')).setText(shortFailureReason || failureReason);\r\n\r\n            if (this._options.failedUploadTextDisplay.enableTooltip) {\r\n                this._showTooltip(item, failureReason);\r\n            }\r\n        }\r\n        else if (mode === 'default') {\r\n            qq(this._find(item, 'statusText')).setText(this._options.text.failUpload);\r\n        }\r\n        else if (mode !== 'none') {\r\n            this.log(\"failedUploadTextDisplay.mode value of '\" + mode + \"' is not valid\", 'warn');\r\n        }\r\n    },\r\n    //TODO turn this into a real tooltip, with click trigger (so it is usable on mobile devices).  See case #355 for details.\r\n    _showTooltip: function(item, text) {\r\n        item.title = text;\r\n    },\r\n    _showSpinner: function(item) {\r\n        var spinnerEl = this._find(item, 'spinner');\r\n        spinnerEl.style.display = \"inline-block\";\r\n    },\r\n    _showCancelLink: function(item) {\r\n        if (!this._options.disableCancelForFormUploads || qq.isXhrUploadSupported()) {\r\n            var cancelLink = this._find(item, 'cancel');\r\n            cancelLink.style.display = 'inline';\r\n        }\r\n    },\r\n    _error: function(code, fileName){\r\n        var message = qq.FineUploaderBasic.prototype._error.apply(this, arguments);\r\n        this._options.showMessage(message);\r\n    }\r\n});\r\n/**\r\n * Class for uploading files, uploading itself is handled by child classes\r\n */\r\n/*globals qq*/\r\nqq.UploadHandler = function(o) {\r\n    \"use strict\";\r\n\r\n    var queue = [],\r\n        options, log, dequeue, handlerImpl;\r\n\r\n    // Default options, can be overridden by the user\r\n    options = {\r\n        debug: false,\r\n        forceMultipart: true,\r\n        paramsInBody: false,\r\n        paramsStore: {},\r\n        endpointStore: {},\r\n        maxConnections: 3, // maximum number of concurrent uploads\r\n        uuidParamName: 'qquuid',\r\n        totalFileSizeParamName: 'qqtotalfilesize',\r\n        chunking: {\r\n            enabled: false,\r\n            partSize: 2000000, //bytes\r\n            paramNames: {\r\n                partIndex: 'qqpartindex',\r\n                partByteOffset: 'qqpartbyteoffset',\r\n                chunkSize: 'qqchunksize',\r\n                totalParts: 'qqtotalparts',\r\n                filename: 'qqfilename'\r\n            }\r\n        },\r\n        resume: {\r\n            enabled: false,\r\n            id: null,\r\n            cookiesExpireIn: 7, //days\r\n            paramNames: {\r\n                resuming: \"qqresume\"\r\n            }\r\n        },\r\n        log: function(str, level) {},\r\n        onProgress: function(id, fileName, loaded, total){},\r\n        onComplete: function(id, fileName, response, xhr){},\r\n        onCancel: function(id, fileName){},\r\n        onUpload: function(id, fileName){},\r\n        onUploadChunk: function(id, fileName, chunkData){},\r\n        onAutoRetry: function(id, fileName, response, xhr){},\r\n        onResume: function(id, fileName, chunkData){}\r\n\r\n    };\r\n    qq.extend(options, o);\r\n\r\n    log = options.log;\r\n\r\n    /**\r\n     * Removes element from queue, starts upload of next\r\n     */\r\n    dequeue = function(id) {\r\n        var i = qq.indexOf(queue, id),\r\n            max = options.maxConnections,\r\n            nextId;\r\n\r\n        queue.splice(i, 1);\r\n\r\n        if (queue.length >= max && i < max){\r\n            nextId = queue[max-1];\r\n            handlerImpl.upload(nextId);\r\n        }\r\n    };\r\n\r\n    if (qq.isXhrUploadSupported()) {\r\n        handlerImpl = new qq.UploadHandlerXhr(options, dequeue, log);\r\n    }\r\n    else {\r\n        handlerImpl = new qq.UploadHandlerForm(options, dequeue, log);\r\n    }\r\n\r\n\r\n    return {\r\n        /**\r\n         * Adds file or file input to the queue\r\n         * @returns id\r\n         **/\r\n        add: function(file){\r\n            return handlerImpl.add(file);\r\n        },\r\n        /**\r\n         * Sends the file identified by id\r\n         */\r\n        upload: function(id){\r\n            var len = queue.push(id);\r\n\r\n            // if too many active uploads, wait...\r\n            if (len <= options.maxConnections){\r\n                return handlerImpl.upload(id);\r\n            }\r\n        },\r\n        retry: function(id) {\r\n            var i = qq.indexOf(queue, id);\r\n            if (i >= 0) {\r\n                return handlerImpl.upload(id, true);\r\n            }\r\n            else {\r\n                return this.upload(id);\r\n            }\r\n        },\r\n        /**\r\n         * Cancels file upload by id\r\n         */\r\n        cancel: function(id){\r\n            log('Cancelling ' + id);\r\n            options.paramsStore.remove(id);\r\n            handlerImpl.cancel(id);\r\n            dequeue(id);\r\n        },\r\n        /**\r\n         * Cancels all uploads\r\n         */\r\n        cancelAll: function(){\r\n            qq.each(queue, function(idx, fileId) {\r\n                this.cancel(fileId);\r\n            });\r\n\r\n            queue = [];\r\n        },\r\n        /**\r\n         * Returns name of the file identified by id\r\n         */\r\n        getName: function(id){\r\n            return handlerImpl.getName(id);\r\n        },\r\n        /**\r\n         * Returns size of the file identified by id\r\n         */\r\n        getSize: function(id){\r\n            if (handlerImpl.getSize) {\r\n                return handlerImpl.getSize(id);\r\n            }\r\n        },\r\n        getFile: function(id) {\r\n            if (handlerImpl.getFile) {\r\n                return handlerImpl.getFile(id);\r\n            }\r\n        },\r\n        /**\r\n         * Returns id of files being uploaded or\r\n         * waiting for their turn\r\n         */\r\n        getQueue: function(){\r\n            return queue;\r\n        },\r\n        reset: function() {\r\n            log('Resetting upload handler');\r\n            queue = [];\r\n            handlerImpl.reset();\r\n        },\r\n        getUuid: function(id) {\r\n            return handlerImpl.getUuid(id);\r\n        },\r\n        /**\r\n         * Determine if the file exists.\r\n         */\r\n        isValid: function(id) {\r\n            return handlerImpl.isValid(id);\r\n        },\r\n        getResumableFilesData: function() {\r\n            if (handlerImpl.getResumableFilesData) {\r\n                return handlerImpl.getResumableFilesData();\r\n            }\r\n            return [];\r\n        }\r\n    };\r\n};\r\n/*globals qq, document, setTimeout*/\r\n/*jslint white: true*/\r\nqq.UploadHandlerForm = function(o, uploadCompleteCallback, logCallback) {\r\n    \"use strict\";\r\n\r\n    var options = o,\r\n        inputs = [],\r\n        uuids = [],\r\n        detachLoadEvents = {},\r\n        uploadComplete = uploadCompleteCallback,\r\n        log = logCallback,\r\n        api;\r\n\r\n    function attachLoadEvent(iframe, callback) {\r\n        /*jslint eqeq: true*/\r\n\r\n        detachLoadEvents[iframe.id] = qq(iframe).attach('load', function(){\r\n            log('Received response for ' + iframe.id);\r\n\r\n            // when we remove iframe from dom\r\n            // the request stops, but in IE load\r\n            // event fires\r\n            if (!iframe.parentNode){\r\n                return;\r\n            }\r\n\r\n            try {\r\n                // fixing Opera 10.53\r\n                if (iframe.contentDocument &&\r\n                    iframe.contentDocument.body &&\r\n                    iframe.contentDocument.body.innerHTML == \"false\"){\r\n                    // In Opera event is fired second time\r\n                    // when body.innerHTML changed from false\r\n                    // to server response approx. after 1 sec\r\n                    // when we upload file with iframe\r\n                    return;\r\n                }\r\n            }\r\n            catch (error) {\r\n                //IE may throw an \"access is denied\" error when attempting to access contentDocument on the iframe in some cases\r\n                log('Error when attempting to access iframe during handling of upload response (' + error + \")\", 'error');\r\n            }\r\n\r\n            callback();\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Returns json object received by iframe from server.\r\n     */\r\n    function getIframeContentJson(iframe) {\r\n        /*jshint evil: true*/\r\n\r\n        var response;\r\n\r\n        //IE may throw an \"access is denied\" error when attempting to access contentDocument on the iframe in some cases\r\n        try {\r\n            // iframe.contentWindow.document - for IE<7\r\n            var doc = iframe.contentDocument || iframe.contentWindow.document,\r\n                innerHTML = doc.body.innerHTML;\r\n\r\n            log(\"converting iframe's innerHTML to JSON\");\r\n            log(\"innerHTML = \" + innerHTML);\r\n            //plain text response may be wrapped in <pre> tag\r\n            if (innerHTML && innerHTML.match(/^<pre/i)) {\r\n                innerHTML = doc.body.firstChild.firstChild.nodeValue;\r\n            }\r\n            response = eval(\"(\" + innerHTML + \")\");\r\n        } catch(error){\r\n            log('Error when attempting to parse form upload response (' + error + \")\", 'error');\r\n            response = {success: false};\r\n        }\r\n\r\n        return response;\r\n    }\r\n\r\n    /**\r\n     * Creates iframe with unique name\r\n     */\r\n    function createIframe(id){\r\n        // We can't use following code as the name attribute\r\n        // won't be properly registered in IE6, and new window\r\n        // on form submit will open\r\n        // var iframe = document.createElement('iframe');\r\n        // iframe.setAttribute('name', id);\r\n\r\n        var iframe = qq.toElement('<iframe src=\"javascript:false;\" name=\"' + id + '\" />');\r\n        // src=\"javascript:false;\" removes ie6 prompt on https\r\n\r\n        iframe.setAttribute('id', id);\r\n\r\n        iframe.style.display = 'none';\r\n        document.body.appendChild(iframe);\r\n\r\n        return iframe;\r\n    }\r\n\r\n    /**\r\n     * Creates form, that will be submitted to iframe\r\n     */\r\n    function createForm(id, iframe){\r\n        var params = options.paramsStore.getParams(id),\r\n            protocol = options.demoMode ? \"GET\" : \"POST\",\r\n            form = qq.toElement('<form method=\"' + protocol + '\" enctype=\"multipart/form-data\"></form>'),\r\n            endpoint = options.endpointStore.getEndpoint(id),\r\n            url = endpoint;\r\n\r\n        params[options.uuidParamName] = uuids[id];\r\n\r\n        if (!options.paramsInBody) {\r\n            url = qq.obj2url(params, endpoint);\r\n        }\r\n        else {\r\n            qq.obj2Inputs(params, form);\r\n        }\r\n\r\n        form.setAttribute('action', url);\r\n        form.setAttribute('target', iframe.name);\r\n        form.style.display = 'none';\r\n        document.body.appendChild(form);\r\n\r\n        return form;\r\n    }\r\n\r\n\r\n    api = {\r\n        add: function(fileInput) {\r\n            fileInput.setAttribute('name', options.inputName);\r\n\r\n            var id = inputs.push(fileInput) - 1;\r\n            uuids[id] = qq.getUniqueId();\r\n\r\n            // remove file input from DOM\r\n            if (fileInput.parentNode){\r\n                qq(fileInput).remove();\r\n            }\r\n\r\n            return id;\r\n        },\r\n        getName: function(id) {\r\n            /*jslint regexp: true*/\r\n\r\n            // get input value and remove path to normalize\r\n            return inputs[id].value.replace(/.*(\\/|\\\\)/, \"\");\r\n        },\r\n        isValid: function(id) {\r\n            return inputs[id] !== undefined;\r\n        },\r\n        reset: function() {\r\n            qq.UploadHandler.prototype.reset.apply(this, arguments);\r\n            inputs = [];\r\n            uuids = [];\r\n            detachLoadEvents = {};\r\n        },\r\n        getUuid: function(id) {\r\n            return uuids[id];\r\n        },\r\n        cancel: function(id) {\r\n            options.onCancel(id, this.getName(id));\r\n\r\n            delete inputs[id];\r\n            delete uuids[id];\r\n            delete detachLoadEvents[id];\r\n\r\n            var iframe = document.getElementById(id);\r\n            if (iframe) {\r\n                // to cancel request set src to something else\r\n                // we use src=\"javascript:false;\" because it doesn't\r\n                // trigger ie6 prompt on https\r\n                iframe.setAttribute('src', 'java' + String.fromCharCode(115) + 'cript:false;'); //deal with \"JSLint: javascript URL\" warning, which apparently cannot be turned off\r\n\r\n                qq(iframe).remove();\r\n            }\r\n        },\r\n        upload: function(id){\r\n            var input = inputs[id],\r\n                fileName = api.getName(id),\r\n                iframe = createIframe(id),\r\n                form = createForm(id, iframe);\r\n\r\n            if (!input){\r\n                throw new Error('file with passed id was not added, or already uploaded or cancelled');\r\n            }\r\n\r\n            options.onUpload(id, this.getName(id));\r\n\r\n            form.appendChild(input);\r\n\r\n            attachLoadEvent(iframe, function(){\r\n                log('iframe loaded');\r\n\r\n                var response = getIframeContentJson(iframe);\r\n\r\n                // timeout added to fix busy state in FF3.6\r\n                setTimeout(function(){\r\n                    detachLoadEvents[id]();\r\n                    delete detachLoadEvents[id];\r\n                    qq(iframe).remove();\r\n                }, 1);\r\n\r\n                if (!response.success) {\r\n                    if (options.onAutoRetry(id, fileName, response)) {\r\n                        return;\r\n                    }\r\n                }\r\n                options.onComplete(id, fileName, response);\r\n                uploadComplete(id);\r\n            });\r\n\r\n            log('Sending upload request for ' + id);\r\n            form.submit();\r\n            qq(form).remove();\r\n\r\n            return id;\r\n        }\r\n    };\r\n\r\n    return api;\r\n};\r\n/*globals qq, File, XMLHttpRequest, FormData*/\r\nqq.UploadHandlerXhr = function(o, uploadCompleteCallback, logCallback) {\r\n    \"use strict\";\r\n    \r\n    var options = o,\r\n        uploadComplete = uploadCompleteCallback,\r\n        log = logCallback,\r\n        fileState = [],\r\n        cookieItemDelimiter = \"|\",\r\n        chunkFiles = options.chunking.enabled && qq.isFileChunkingSupported(),\r\n        resumeEnabled = options.resume.enabled && chunkFiles && qq.areCookiesEnabled(),\r\n        resumeId = getResumeId(),\r\n        multipart = options.forceMultipart || options.paramsInBody,\r\n        api;\r\n\r\n\r\n     function addChunkingSpecificParams(id, params, chunkData) {\r\n        var size = api.getSize(id),\r\n            name = api.getName(id);\r\n\r\n        params[options.chunking.paramNames.partIndex] = chunkData.part;\r\n        params[options.chunking.paramNames.partByteOffset] = chunkData.start;\r\n        params[options.chunking.paramNames.chunkSize] = chunkData.end - chunkData.start;\r\n        params[options.chunking.paramNames.totalParts] = chunkData.count;\r\n        params[options.totalFileSizeParamName] = size;\r\n\r\n\r\n        /**\r\n         * When a Blob is sent in a multipart request, the filename value in the content-disposition header is either \"blob\"\r\n         * or an empty string.  So, we will need to include the actual file name as a param in this case.\r\n         */\r\n        if (multipart) {\r\n            params[options.chunking.paramNames.filename] = name;\r\n        }\r\n    }\r\n\r\n    function addResumeSpecificParams(params) {\r\n        params[options.resume.paramNames.resuming] = true;\r\n    }\r\n\r\n     function getChunk(file, startByte, endByte) {\r\n        if (file.slice) {\r\n            return file.slice(startByte, endByte);\r\n        }\r\n        else if (file.mozSlice) {\r\n            return file.mozSlice(startByte, endByte);\r\n        }\r\n        else if (file.webkitSlice) {\r\n            return file.webkitSlice(startByte, endByte);\r\n        }\r\n    }\r\n\r\n    function getChunkData(id, chunkIndex) {\r\n        var chunkSize = options.chunking.partSize,\r\n            fileSize = api.getSize(id),\r\n            file = fileState[id].file,\r\n            startBytes = chunkSize * chunkIndex,\r\n            endBytes = startBytes+chunkSize >= fileSize ? fileSize : startBytes+chunkSize,\r\n            totalChunks = getTotalChunks(id);\r\n\r\n        return {\r\n            part: chunkIndex,\r\n            start: startBytes,\r\n            end: endBytes,\r\n            count: totalChunks,\r\n            blob: getChunk(file, startBytes, endBytes)\r\n        };\r\n    }\r\n\r\n    function getTotalChunks(id) {\r\n        var fileSize = api.getSize(id),\r\n            chunkSize = options.chunking.partSize;\r\n\r\n        return Math.ceil(fileSize / chunkSize);\r\n    }\r\n\r\n    function createXhr(id) {\r\n        fileState[id].xhr = new XMLHttpRequest();\r\n        return fileState[id].xhr;\r\n    }\r\n\r\n    function setParamsAndGetEntityToSend(params, xhr, fileOrBlob, id) {\r\n        var formData = new FormData(),\r\n            protocol = options.demoMode ? \"GET\" : \"POST\",\r\n            endpoint = options.endpointStore.getEndpoint(id),\r\n            url = endpoint,\r\n            name = api.getName(id),\r\n            size = api.getSize(id);\r\n\r\n        params[options.uuidParamName] = fileState[id].uuid;\r\n\r\n        if (multipart) {\r\n            params[options.totalFileSizeParamName] = size;\r\n        }\r\n\r\n        //build query string\r\n        if (!options.paramsInBody) {\r\n            params[options.inputName] = name;\r\n            url = qq.obj2url(params, endpoint);\r\n        }\r\n\r\n        xhr.open(protocol, url, true);\r\n        if (multipart) {\r\n            if (options.paramsInBody) {\r\n                qq.obj2FormData(params, formData);\r\n            }\r\n\r\n            formData.append(options.inputName, fileOrBlob);\r\n            return formData;\r\n        }\r\n\r\n        return fileOrBlob;\r\n    }\r\n\r\n    function setHeaders(id, xhr) {\r\n        var extraHeaders = options.customHeaders,\r\n            name = api.getName(id),\r\n            file = fileState[id].file;\r\n\r\n        xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\r\n        xhr.setRequestHeader(\"Cache-Control\", \"no-cache\");\r\n\r\n        if (!multipart) {\r\n            xhr.setRequestHeader(\"Content-Type\", \"application/octet-stream\");\r\n            //NOTE: return mime type in xhr works on chrome 16.0.9 firefox 11.0a2\r\n            xhr.setRequestHeader(\"X-Mime-Type\", file.type);\r\n        }\r\n\r\n        qq.each(extraHeaders, function(name, val) {\r\n            xhr.setRequestHeader(name, val);\r\n        });\r\n    }\r\n\r\n    function handleCompletedFile(id, response, xhr) {\r\n        var name = api.getName(id),\r\n            size = api.getSize(id);\r\n\r\n        fileState[id].attemptingResume = false;\r\n\r\n        options.onProgress(id, name, size, size);\r\n\r\n        options.onComplete(id, name, response, xhr);\r\n        delete fileState[id].xhr;\r\n        uploadComplete(id);\r\n    }\r\n\r\n    function uploadNextChunk(id) {\r\n        var chunkData = getChunkData(id, fileState[id].remainingChunkIdxs[0]),\r\n            xhr = createXhr(id),\r\n            size = api.getSize(id),\r\n            name = api.getName(id),\r\n            toSend, params;\r\n\r\n        if (fileState[id].loaded === undefined) {\r\n            fileState[id].loaded = 0;\r\n        }\r\n\r\n        persistChunkData(id, chunkData);\r\n\r\n        xhr.onreadystatechange = getReadyStateChangeHandler(id, xhr);\r\n\r\n        xhr.upload.onprogress = function(e) {\r\n            if (e.lengthComputable) {\r\n                if (fileState[id].loaded < size) {\r\n                    var totalLoaded = e.loaded + fileState[id].loaded;\r\n                    options.onProgress(id, name, totalLoaded, size);\r\n                }\r\n            }\r\n        };\r\n\r\n        options.onUploadChunk(id, name, getChunkDataForCallback(chunkData));\r\n\r\n        params = options.paramsStore.getParams(id);\r\n        addChunkingSpecificParams(id, params, chunkData);\r\n\r\n        if (fileState[id].attemptingResume) {\r\n            addResumeSpecificParams(params);\r\n        }\r\n\r\n        toSend = setParamsAndGetEntityToSend(params, xhr, chunkData.blob, id);\r\n        setHeaders(id, xhr);\r\n\r\n        log('Sending chunked upload request for ' + id + \": bytes \" + (chunkData.start+1) + \"-\" + chunkData.end + \" of \" + size);\r\n        xhr.send(toSend);\r\n    }\r\n\r\n\r\n     function handleSuccessfullyCompletedChunk(id, response, xhr) {\r\n        var chunkIdx = fileState[id].remainingChunkIdxs.shift(),\r\n            chunkData = getChunkData(id, chunkIdx);\r\n\r\n        fileState[id].attemptingResume = false;\r\n        fileState[id].loaded += chunkData.end - chunkData.start;\r\n\r\n        if (fileState[id].remainingChunkIdxs.length > 0) {\r\n            uploadNextChunk(id);\r\n        }\r\n        else {\r\n            deletePersistedChunkData(id);\r\n            handleCompletedFile(id, response, xhr);\r\n        }\r\n    }\r\n\r\n    function isErrorResponse(xhr, response) {\r\n        return xhr.status !== 200 || !response.success || response.reset;\r\n    }\r\n\r\n    function parseResponse(xhr) {\r\n        var response;\r\n\r\n        try {\r\n            response = qq.parseJson(xhr.responseText);\r\n        }\r\n        catch(error) {\r\n            log('Error when attempting to parse xhr response text (' + error + ')', 'error');\r\n            response = {};\r\n        }\r\n\r\n        return response;\r\n    }\r\n\r\n    function handleResetResponse(id) {\r\n        log('Server has ordered chunking effort to be restarted on next attempt for file ID ' + id, 'error');\r\n\r\n        if (resumeEnabled) {\r\n            deletePersistedChunkData(id);\r\n        }\r\n        fileState[id].remainingChunkIdxs = [];\r\n        delete fileState[id].loaded;\r\n    }\r\n\r\n    function handleResetResponseOnResumeAttempt(id) {\r\n        fileState[id].attemptingResume = false;\r\n        log(\"Server has declared that it cannot handle resume for file ID \" + id + \" - starting from the first chunk\", 'error');\r\n        api.upload(id, true);\r\n    }\r\n\r\n    function handleNonResetErrorResponse(id, response, xhr) {\r\n        var name = api.getName(id);\r\n\r\n        if (options.onAutoRetry(id, name, response, xhr)) {\r\n            return;\r\n        }\r\n        else {\r\n            handleCompletedFile(id, response, xhr);\r\n        }\r\n    }\r\n\r\n    function onComplete(id, xhr) {\r\n        var response;\r\n\r\n        // the request was aborted/cancelled\r\n        if (!fileState[id]) {\r\n            return;\r\n        }\r\n\r\n        log(\"xhr - server response received for \" + id);\r\n        log(\"responseText = \" + xhr.responseText);\r\n        response = parseResponse(xhr);\r\n\r\n        if (isErrorResponse(xhr, response)) {\r\n            if (response.reset) {\r\n                handleResetResponse(id);\r\n            }\r\n\r\n            if (fileState[id].attemptingResume && response.reset) {\r\n                handleResetResponseOnResumeAttempt(id);\r\n            }\r\n            else {\r\n                handleNonResetErrorResponse(id, response, xhr);\r\n            }\r\n        }\r\n        else if (chunkFiles) {\r\n            handleSuccessfullyCompletedChunk(id, response, xhr);\r\n        }\r\n        else {\r\n            handleCompletedFile(id, response, xhr);\r\n        }\r\n    }\r\n\r\n    function getChunkDataForCallback(chunkData) {\r\n        return {\r\n            partIndex: chunkData.part,\r\n            startByte: chunkData.start + 1,\r\n            endByte: chunkData.end,\r\n            totalParts: chunkData.count\r\n        };\r\n    }\r\n\r\n    function getReadyStateChangeHandler(id, xhr) {\r\n        return function() {\r\n            if (xhr.readyState === 4) {\r\n                onComplete(id, xhr);\r\n            }\r\n        };\r\n    }\r\n\r\n    function persistChunkData(id, chunkData) {\r\n        var fileUuid = api.getUuid(id),\r\n            cookieName = getChunkDataCookieName(id),\r\n            cookieValue = fileUuid + cookieItemDelimiter + chunkData.part,\r\n            cookieExpDays = options.resume.cookiesExpireIn;\r\n\r\n        qq.setCookie(cookieName, cookieValue, cookieExpDays);\r\n    }\r\n\r\n    function deletePersistedChunkData(id) {\r\n        var cookieName = getChunkDataCookieName(id);\r\n\r\n        qq.deleteCookie(cookieName);\r\n    }\r\n\r\n    function getPersistedChunkData(id) {\r\n        var chunkCookieValue = qq.getCookie(getChunkDataCookieName(id)),\r\n            delimiterIndex, uuid, partIndex;\r\n\r\n        if (chunkCookieValue) {\r\n            delimiterIndex = chunkCookieValue.indexOf(cookieItemDelimiter);\r\n            uuid = chunkCookieValue.substr(0, delimiterIndex);\r\n            partIndex = parseInt(chunkCookieValue.substr(delimiterIndex + 1, chunkCookieValue.length - delimiterIndex), 10);\r\n\r\n            return {\r\n                uuid: uuid,\r\n                part: partIndex\r\n            };\r\n        }\r\n    }\r\n\r\n    function getChunkDataCookieName(id) {\r\n        var filename = api.getName(id),\r\n            fileSize = api.getSize(id),\r\n            maxChunkSize = options.chunking.partSize,\r\n            cookieName;\r\n\r\n        cookieName = \"qqfilechunk\" + cookieItemDelimiter + encodeURIComponent(filename) + cookieItemDelimiter + fileSize + cookieItemDelimiter + maxChunkSize;\r\n\r\n        if (resumeId !== undefined) {\r\n            cookieName += cookieItemDelimiter + resumeId;\r\n        }\r\n\r\n        return cookieName;\r\n    }\r\n\r\n    function getResumeId() {\r\n        if (options.resume.id !== null &&\r\n            options.resume.id !== undefined &&\r\n            !qq.isFunction(options.resume.id) &&\r\n            !qq.isObject(options.resume.id)) {\r\n\r\n            return options.resume.id;\r\n        }\r\n    }\r\n\r\n    function handleFileChunkingUpload(id, retry) {\r\n        var name = api.getName(id),\r\n            firstChunkIndex = 0,\r\n            persistedChunkInfoForResume, firstChunkDataForResume, currentChunkIndex;\r\n\r\n        if (!fileState[id].remainingChunkIdxs || fileState[id].remainingChunkIdxs.length === 0) {\r\n            fileState[id].remainingChunkIdxs = [];\r\n\r\n            if (resumeEnabled && !retry) {\r\n                persistedChunkInfoForResume = getPersistedChunkData(id);\r\n                if (persistedChunkInfoForResume) {\r\n                    firstChunkDataForResume = getChunkData(id, persistedChunkInfoForResume.part);\r\n                    if (options.onResume(id, name, getChunkDataForCallback(firstChunkDataForResume)) !== false) {\r\n                        firstChunkIndex = persistedChunkInfoForResume.part;\r\n                        fileState[id].uuid = persistedChunkInfoForResume.uuid;\r\n                        fileState[id].loaded = firstChunkDataForResume.start;\r\n                        fileState[id].attemptingResume = true;\r\n                        log('Resuming ' + name + \" at partition index \" + firstChunkIndex);\r\n                    }\r\n                }\r\n            }\r\n\r\n            for (currentChunkIndex = getTotalChunks(id)-1; currentChunkIndex >= firstChunkIndex; currentChunkIndex-=1) {\r\n                fileState[id].remainingChunkIdxs.unshift(currentChunkIndex);\r\n            }\r\n        }\r\n\r\n        uploadNextChunk(id);\r\n    }\r\n\r\n    function handleStandardFileUpload(id) {\r\n        var file = fileState[id].file,\r\n            name = api.getName(id),\r\n            xhr, params, toSend;\r\n\r\n        fileState[id].loaded = 0;\r\n\r\n        xhr = createXhr(id);\r\n\r\n        xhr.upload.onprogress = function(e){\r\n            if (e.lengthComputable){\r\n                fileState[id].loaded = e.loaded;\r\n                options.onProgress(id, name, e.loaded, e.total);\r\n            }\r\n        };\r\n\r\n        xhr.onreadystatechange = getReadyStateChangeHandler(id, xhr);\r\n\r\n        params = options.paramsStore.getParams(id);\r\n        toSend = setParamsAndGetEntityToSend(params, xhr, file, id);\r\n        setHeaders(id, xhr);\r\n\r\n        log('Sending upload request for ' + id);\r\n        xhr.send(toSend);\r\n    }\r\n\r\n\r\n    api = {\r\n        /**\r\n         * Adds file to the queue\r\n         * Returns id to use with upload, cancel\r\n         **/\r\n        add: function(file){\r\n            if (!(file instanceof File)){\r\n                throw new Error('Passed obj in not a File (in qq.UploadHandlerXhr)');\r\n            }\r\n\r\n\r\n            var id = fileState.push({file: file}) - 1;\r\n            fileState[id].uuid = qq.getUniqueId();\r\n\r\n            return id;\r\n        },\r\n        getName: function(id){\r\n            var file = fileState[id].file;\r\n            // fix missing name in Safari 4\r\n            //NOTE: fixed missing name firefox 11.0a2 file.fileName is actually undefined\r\n            return (file.fileName !== null && file.fileName !== undefined) ? file.fileName : file.name;\r\n        },\r\n        getSize: function(id){\r\n            /*jshint eqnull: true*/\r\n            var file = fileState[id].file;\r\n            return file.fileSize != null ? file.fileSize : file.size;\r\n        },\r\n        getFile: function(id) {\r\n            if (fileState[id]) {\r\n                return fileState[id].file;\r\n            }\r\n        },\r\n        /**\r\n         * Returns uploaded bytes for file identified by id\r\n         */\r\n        getLoaded: function(id){\r\n            return fileState[id].loaded || 0;\r\n        },\r\n        isValid: function(id) {\r\n            return fileState[id] !== undefined;\r\n        },\r\n        reset: function() {\r\n            fileState = [];\r\n        },\r\n        getUuid: function(id) {\r\n            return fileState[id].uuid;\r\n        },\r\n        /**\r\n         * Sends the file identified by id to the server\r\n         */\r\n        upload: function(id, retry){\r\n            var name = this.getName(id);\r\n\r\n            options.onUpload(id, name);\r\n\r\n            if (chunkFiles) {\r\n                handleFileChunkingUpload(id, retry);\r\n            }\r\n            else {\r\n                handleStandardFileUpload(id);\r\n            }\r\n        },\r\n        cancel: function(id){\r\n            options.onCancel(id, this.getName(id));\r\n\r\n            if (fileState[id].xhr){\r\n                fileState[id].xhr.abort();\r\n            }\r\n\r\n            if (resumeEnabled) {\r\n                deletePersistedChunkData(id);\r\n            }\r\n\r\n            delete fileState[id];\r\n        },\r\n        getResumableFilesData: function() {\r\n            var matchingCookieNames = [],\r\n                resumableFilesData = [];\r\n\r\n            if (chunkFiles && resumeEnabled) {\r\n                if (resumeId === undefined) {\r\n                    matchingCookieNames = qq.getCookieNames(new RegExp(\"^qqfilechunk\\\\\" + cookieItemDelimiter + \".+\\\\\" +\r\n                        cookieItemDelimiter + \"\\\\d+\\\\\" + cookieItemDelimiter + options.chunking.partSize + \"=\"));\r\n                }\r\n                else {\r\n                    matchingCookieNames = qq.getCookieNames(new RegExp(\"^qqfilechunk\\\\\" + cookieItemDelimiter + \".+\\\\\" +\r\n                        cookieItemDelimiter + \"\\\\d+\\\\\" + cookieItemDelimiter + options.chunking.partSize + \"\\\\\" +\r\n                        cookieItemDelimiter + resumeId + \"=\"));\r\n                }\r\n\r\n                qq.each(matchingCookieNames, function(idx, cookieName) {\r\n                    var cookiesNameParts = cookieName.split(cookieItemDelimiter);\r\n                    var cookieValueParts = qq.getCookie(cookieName).split(cookieItemDelimiter);\r\n\r\n                    resumableFilesData.push({\r\n                        name: decodeURIComponent(cookiesNameParts[1]),\r\n                        size: cookiesNameParts[2],\r\n                        uuid: cookieValueParts[0],\r\n                        partIdx: cookieValueParts[1]\r\n                    });\r\n                });\r\n\r\n                return resumableFilesData;\r\n            }\r\n            return [];\r\n        }\r\n    };\r\n\r\n    return api;\r\n};\r\n/*globals jQuery, qq*/\r\n(function($) {\r\n    \"use strict\";\r\n    var uploader, $el, init, dataStore, pluginOption, pluginOptions, addCallbacks, transformVariables, isValidCommand,\r\n        delegateCommand;\r\n\r\n    pluginOptions = ['uploaderType'];\r\n\r\n    init = function (options) {\r\n        if (options) {\r\n            var xformedOpts = transformVariables(options);\r\n            addCallbacks(xformedOpts);\r\n\r\n            if (pluginOption('uploaderType') === 'basic') {\r\n                uploader(new qq.FineUploaderBasic(xformedOpts));\r\n            }\r\n            else {\r\n                uploader(new qq.FineUploader(xformedOpts));\r\n            }\r\n        }\r\n\r\n        return $el;\r\n    };\r\n\r\n    dataStore = function(key, val) {\r\n        var data = $el.data('fineuploader');\r\n\r\n        if (val) {\r\n            if (data === undefined) {\r\n                data = {};\r\n            }\r\n            data[key] = val;\r\n            $el.data('fineuploader', data);\r\n        }\r\n        else {\r\n            if (data === undefined) {\r\n                return null;\r\n            }\r\n            return data[key];\r\n        }\r\n    };\r\n\r\n    //the underlying Fine Uploader instance is stored in jQuery's data stored, associated with the element\r\n    // tied to this instance of the plug-in\r\n    uploader = function(instanceToStore) {\r\n        return dataStore('uploader', instanceToStore);\r\n    };\r\n\r\n    pluginOption = function(option, optionVal) {\r\n        return dataStore(option, optionVal);\r\n    };\r\n\r\n    //implement all callbacks defined in Fine Uploader as functions that trigger appropriately names events and\r\n    // return the result of executing the bound handler back to Fine Uploader\r\n    addCallbacks = function(transformedOpts) {\r\n        var callbacks = transformedOpts.callbacks = {};\r\n\r\n        $.each(new qq.FineUploaderBasic()._options.callbacks, function(prop, func) {\r\n            var name, $callbackEl;\r\n\r\n            name = /^on(\\w+)/.exec(prop)[1];\r\n            name = name.substring(0, 1).toLowerCase() + name.substring(1);\r\n            $callbackEl = $el;\r\n\r\n            callbacks[prop] = function() {\r\n                var args = Array.prototype.slice.call(arguments);\r\n                return $callbackEl.triggerHandler(name, args);\r\n            };\r\n        });\r\n    };\r\n\r\n    //transform jQuery objects into HTMLElements, and pass along all other option properties\r\n    transformVariables = function(source, dest) {\r\n        var xformed, arrayVals;\r\n\r\n        if (dest === undefined) {\r\n            if (source.uploaderType !== 'basic') {\r\n                xformed = { element : $el[0] };\r\n            }\r\n            else {\r\n                xformed = {};\r\n            }\r\n        }\r\n        else {\r\n            xformed = dest;\r\n        }\r\n\r\n        $.each(source, function(prop, val) {\r\n            if ($.inArray(prop, pluginOptions) >= 0) {\r\n                pluginOption(prop, val);\r\n            }\r\n            else if (val instanceof $) {\r\n                xformed[prop] = val[0];\r\n            }\r\n            else if ($.isPlainObject(val)) {\r\n                xformed[prop] = {};\r\n                transformVariables(val, xformed[prop]);\r\n            }\r\n            else if ($.isArray(val)) {\r\n                arrayVals = [];\r\n                $.each(val, function(idx, arrayVal) {\r\n                    if (arrayVal instanceof $) {\r\n                        $.merge(arrayVals, arrayVal);\r\n                    }\r\n                    else {\r\n                        arrayVals.push(arrayVal);\r\n                    }\r\n                });\r\n                xformed[prop] = arrayVals;\r\n            }\r\n            else {\r\n                xformed[prop] = val;\r\n            }\r\n        });\r\n\r\n        if (dest === undefined) {\r\n            return xformed;\r\n        }\r\n    };\r\n\r\n    isValidCommand = function(command) {\r\n        return $.type(command) === \"string\" &&\r\n            !command.match(/^_/) && //enforce private methods convention\r\n            uploader()[command] !== undefined;\r\n    };\r\n\r\n    //assuming we have already verified that this is a valid command, call the associated function in the underlying\r\n    // Fine Uploader instance (passing along the arguments from the caller) and return the result of the call back to the caller\r\n    delegateCommand = function(command) {\r\n        var xformedArgs = [], origArgs = Array.prototype.slice.call(arguments, 1);\r\n\r\n        transformVariables(origArgs, xformedArgs);\r\n\r\n        return uploader()[command].apply(uploader(), xformedArgs);\r\n    };\r\n\r\n    $.fn.fineUploader = function(optionsOrCommand) {\r\n        var self = this, selfArgs = arguments, retVals = [];\r\n\r\n        this.each(function(index, el) {\r\n            $el = $(el);\r\n\r\n            if (uploader() && isValidCommand(optionsOrCommand)) {\r\n                retVals.push(delegateCommand.apply(self, selfArgs));\r\n\r\n                if (self.length === 1) {\r\n                    return false;\r\n                }\r\n            }\r\n            else if (typeof optionsOrCommand === 'object' || !optionsOrCommand) {\r\n                init.apply(self, selfArgs);\r\n            }\r\n            else {\r\n                $.error('Method ' +  optionsOrCommand + ' does not exist on jQuery.fineUploader');\r\n            }\r\n        });\r\n\r\n        if (retVals.length === 1) {\r\n            return retVals[0];\r\n        }\r\n        else if (retVals.length > 1) {\r\n            return retVals;\r\n        }\r\n\r\n        return this;\r\n    };\r\n\r\n}(jQuery));\r\n\n\n\n// WEBPACK FOOTER //\n// ./js/newTube/core/jquery.fineuploader-3.2.js","import jQuery from \"jquery\";\r\nvar $ = jQuery;\r\n(function(jQuery) {\r\n\r\n/**\r\n * Sets or gets the fullscreen state.\r\n * \r\n * @param {boolean=} state\r\n *            True to enable fullscreen mode, false to disable it. If not\r\n *            specified then the current fullscreen state is returned.\r\n * @return {boolean|Element|jQuery|null}\r\n *            When querying the fullscreen state then the current fullscreen\r\n *            element (or true if browser doesn't support it) is returned\r\n *            when browser is currently in full screen mode. False is returned\r\n *            if browser is not in full screen mode. Null is returned if \r\n *            browser doesn't support fullscreen mode at all. When setting \r\n *            the fullscreen state then the current jQuery selection is \r\n *            returned for chaining.\r\n * @this {jQuery}\r\n */\r\nfunction fullScreen(state)\r\n{\r\n    var e, func, doc;\r\n    \r\n    // Do nothing when nothing was selected\r\n    if (!this.length) return this;\r\n    \r\n    // We only use the first selected element because it doesn't make sense\r\n    // to fullscreen multiple elements.\r\n    e = (/** @type {Element} */ this[0]);\r\n    \r\n    // Find the real element and the document (Depends on whether the\r\n    // document itself or a HTML element was selected)\r\n    if (e.ownerDocument)\r\n    {\r\n        doc = e.ownerDocument;\r\n    }\r\n    else\r\n    {\r\n        doc = e;\r\n        e = doc.documentElement;\r\n    }\r\n    \r\n    // When no state was specified then return the current state.\r\n    if (state == null)\r\n    {\r\n        // When fullscreen mode is not supported then return null\r\n        if (!((/** @type {?Function} */ doc[\"exitFullscreen\"])\r\n            || (/** @type {?Function} */ doc[\"webkitExitFullscreen\"])\r\n            || (/** @type {?Function} */ doc[\"webkitCancelFullScreen\"])\r\n            || (/** @type {?Function} */ doc[\"msExitFullscreen\"])\r\n            || (/** @type {?Function} */ doc[\"mozCancelFullScreen\"])))\r\n        {\r\n            return null;\r\n        }\r\n        \r\n        // Check fullscreen state\r\n        state = !!doc[\"fullscreenElement\"]\r\n            || !!doc[\"msFullscreenElement\"]\r\n            || !!doc[\"webkitIsFullScreen\"]\r\n            || !!doc[\"mozFullScreen\"];\r\n        if (!state) return state;\r\n        \r\n        // Return current fullscreen element or \"true\" if browser doesn't\r\n        // support this\r\n        return (/** @type {?Element} */ doc[\"fullscreenElement\"])\r\n            || (/** @type {?Element} */ doc[\"webkitFullscreenElement\"])\r\n            || (/** @type {?Element} */ doc[\"webkitCurrentFullScreenElement\"])\r\n            || (/** @type {?Element} */ doc[\"msFullscreenElement\"])\r\n            || (/** @type {?Element} */ doc[\"mozFullScreenElement\"])\r\n            || state;\r\n    }\r\n    \r\n    // When state was specified then enter or exit fullscreen mode.\r\n    if (state)\r\n    {\r\n        // Enter fullscreen\r\n        func = (/** @type {?Function} */ e[\"requestFullscreen\"])\r\n            || (/** @type {?Function} */ e[\"webkitRequestFullscreen\"])\r\n            || (/** @type {?Function} */ e[\"webkitRequestFullScreen\"])\r\n            || (/** @type {?Function} */ e[\"msRequestFullscreen\"])\r\n            || (/** @type {?Function} */ e[\"mozRequestFullScreen\"]);\r\n        if (func) \r\n        {\r\n            func.call(e);\r\n        }\r\n        return this;\r\n    }\r\n    else\r\n    {\r\n        // Exit fullscreen\r\n        func = (/** @type {?Function} */ doc[\"exitFullscreen\"])\r\n            || (/** @type {?Function} */ doc[\"webkitExitFullscreen\"])\r\n            || (/** @type {?Function} */ doc[\"webkitCancelFullScreen\"])\r\n            || (/** @type {?Function} */ doc[\"msExitFullscreen\"])\r\n            || (/** @type {?Function} */ doc[\"mozCancelFullScreen\"]);\r\n        if (func) func.call(doc);\r\n        return this;\r\n    }\r\n}\r\n\r\n/**\r\n * Toggles the fullscreen mode.\r\n * \r\n * @return {!jQuery}\r\n *            The jQuery selection for chaining.\r\n * @this {jQuery}\r\n */\r\nfunction toggleFullScreen()\r\n{\r\n    return (/** @type {!jQuery} */ fullScreen.call(this, \r\n        !fullScreen.call(this)));\r\n}\r\n\r\n/**\r\n * Handles the browser-specific fullscreenchange event and triggers\r\n * a jquery event for it.\r\n *\r\n * @param {?Event} event\r\n *            The fullscreenchange event.\r\n */\r\nfunction fullScreenChangeHandler(event)\r\n{\r\n    jQuery(document).trigger(new jQuery.Event(\"fullscreenchange\"));\r\n}\r\n\r\n/**\r\n * Handles the browser-specific fullscreenerror event and triggers\r\n * a jquery event for it.\r\n *\r\n * @param {?Event} event\r\n *            The fullscreenerror event.\r\n */\r\nfunction fullScreenErrorHandler(event)\r\n{\r\n    jQuery(document).trigger(new jQuery.Event(\"fullscreenerror\"));\r\n}\r\n\r\n/**\r\n * Installs the fullscreenchange event handler.\r\n */\r\nfunction installFullScreenHandlers()\r\n{\r\n    var e, change, error;\r\n    \r\n    // Determine event name\r\n    e = document;\r\n    if (e[\"webkitCancelFullScreen\"])\r\n    {\r\n        change = \"webkitfullscreenchange\";\r\n        error = \"webkitfullscreenerror\";\r\n    }\r\n    else if (e[\"msExitFullscreen\"])\r\n    {\r\n        change = \"MSFullscreenChange\";\r\n        error = \"MSFullscreenError\";\r\n    }\r\n    else if (e[\"mozCancelFullScreen\"])\r\n    {\r\n        change = \"mozfullscreenchange\";\r\n        error = \"mozfullscreenerror\";\r\n    }\r\n    else \r\n    {\r\n        change = \"fullscreenchange\";\r\n        error = \"fullscreenerror\";\r\n    }\r\n\r\n    // Install the event handlers\r\n    jQuery(document).bind(change, fullScreenChangeHandler);\r\n    jQuery(document).bind(error, fullScreenErrorHandler);\r\n}\r\n\r\njQuery.fn[\"fullScreen\"] = fullScreen;\r\njQuery.fn[\"toggleFullScreen\"] = toggleFullScreen;\r\ninstallFullScreenHandlers();\r\n\r\n})(jQuery);\r\n\n\n\n// WEBPACK FOOTER //\n// ./js/newTube/core/jquery.fullscreen.js","import jQuery from \"jquery\";\r\nvar $ = jQuery;\r\n(function($){$.fn.pajinate=function(options){var current_page=\"current_page\";var items_per_page=\"items_per_page\";var meta;var defaults={item_container_id:\".content\",items_per_page:10,nav_panel_id:\".page_navigation\",nav_info_id:\".info_text\",num_page_links_to_display:20,start_page:0,wrap_around:false,nav_label_first:\"First\",nav_label_prev:\"Prev\",nav_label_next:\"Next\",nav_label_last:\"Last\",nav_order:[\"first\",\"prev\",\"num\",\"next\",\"last\"],nav_label_info:\"Showing {0}-{1} of {2} results\",show_first_last:true,abort_on_small_lists:false,jquery_ui:false,jquery_ui_active:\"ui-state-highlight\",jquery_ui_default:\"ui-state-default\",jquery_ui_disabled:\"ui-state-disabled\"};var options=$.extend(defaults,options);var $item_container;var $page_container;var $items;var $nav_panels;var total_page_no_links;var jquery_ui_default_class=options.jquery_ui?options.jquery_ui_default:\"\";var jquery_ui_active_class=options.jquery_ui?options.jquery_ui_active:\"\";var jquery_ui_disabled_class=options.jquery_ui?options.jquery_ui_disabled:\"\";return this.each(function(){$page_container=$(this);$item_container=$(this).find(options.item_container_id);$items=$page_container.find(options.item_container_id).children();if(options.abort_on_small_lists&&options.items_per_page>=$items.size())return $page_container;meta=$page_container;meta.data(current_page,0);meta.data(items_per_page,options.items_per_page);var total_items=$item_container.children().size();var number_of_pages=Math.ceil(total_items/options.items_per_page);var more='<span class=\"ellipse more\">...</span>';var less='<span class=\"ellipse less\">...</span>';var first=!options.show_first_last?\"\":'<a class=\"first_link '+jquery_ui_default_class+'\" href=\"\">'+options.nav_label_first+\"</a>\";var last=!options.show_first_last?\"\":'<a class=\"last_link '+jquery_ui_default_class+'\" href=\"\">'+options.nav_label_last+\"</a>\";var navigation_html=\"\";for(var i=0;i<options.nav_order.length;i++){switch(options.nav_order[i]){case\"first\":navigation_html+=first;break;case\"last\":navigation_html+=last;break;case\"next\":navigation_html+='<a class=\"next_link '+jquery_ui_default_class+'\" href=\"\">'+options.nav_label_next+\"</a>\";break;case\"prev\":navigation_html+='<a class=\"previous_link '+jquery_ui_default_class+'\" href=\"\">'+options.nav_label_prev+\"</a>\";break;case\"num\":navigation_html+=less;var current_link=0;while(number_of_pages>current_link){navigation_html+='<a class=\"page_link '+jquery_ui_default_class+'\" href=\"\" longdesc=\"'+current_link+'\">'+(current_link+1)+\"</a>\";current_link++}navigation_html+=more;break;default:break}}$nav_panels=$page_container.find(options.nav_panel_id);$nav_panels.html(navigation_html).each(function(){$(this).find(\".page_link:first\").addClass(\"first\");$(this).find(\".page_link:last\").addClass(\"last\")});$nav_panels.children(\".ellipse\").hide();$nav_panels.find(\".previous_link\").next().next().addClass(\"active_page \"+jquery_ui_active_class);$items.hide();$items.slice(0,meta.data(items_per_page)).show();total_page_no_links=$page_container.find(options.nav_panel_id+\":first\").children(\".page_link\").size();options.num_page_links_to_display=Math.min(options.num_page_links_to_display,total_page_no_links);$nav_panels.children(\".page_link\").hide();$nav_panels.each(function(){$(this).children(\".page_link\").slice(0,options.num_page_links_to_display).show()});$page_container.find(\".first_link\").click(function(e){e.preventDefault();movePageNumbersRight($(this),0);gotopage(0)});$page_container.find(\".last_link\").click(function(e){e.preventDefault();var lastPage=total_page_no_links-1;movePageNumbersLeft($(this),lastPage);gotopage(lastPage)});$page_container.find(\".previous_link\").click(function(e){e.preventDefault();showPrevPage($(this))});$page_container.find(\".next_link\").click(function(e){e.preventDefault();showNextPage($(this))});$page_container.find(\".page_link\").click(function(e){e.preventDefault();gotopage($(this).attr(\"longdesc\"))});gotopage(parseInt(options.start_page));toggleMoreLess();if(!options.wrap_around)tagNextPrev()});function showPrevPage(e){new_page=parseInt(meta.data(current_page))-1;if($(e).siblings(\".active_page\").prev(\".page_link\").length==true){movePageNumbersRight(e,new_page);gotopage(new_page)}else if(options.wrap_around){gotopage(total_page_no_links-1)}}function showNextPage(e){new_page=parseInt(meta.data(current_page))+1;if($(e).siblings(\".active_page\").next(\".page_link\").length==true){movePageNumbersLeft(e,new_page);gotopage(new_page)}else if(options.wrap_around){gotopage(0)}}function gotopage(page_num){page_num=parseInt(page_num,10);var ipp=parseInt(meta.data(items_per_page));start_from=page_num*ipp;end_on=start_from+ipp;var items=$items.hide().slice(start_from,end_on);items.show();$page_container.find(options.nav_panel_id).children(\".page_link[longdesc=\"+page_num+\"]\").addClass(\"active_page \"+jquery_ui_active_class).siblings(\".active_page\").removeClass(\"active_page \"+jquery_ui_active_class);meta.data(current_page,page_num);var $current_page=parseInt(meta.data(current_page)+1);var total_items=$item_container.children().size();var $number_of_pages=Math.ceil(total_items/options.items_per_page);$page_container.find(options.nav_info_id).html(options.nav_label_info.replace(\"{0}\",start_from+1).replace(\"{1}\",start_from+items.length).replace(\"{2}\",$items.length).replace(\"{3}\",$current_page).replace(\"{4}\",$number_of_pages));toggleMoreLess();tagNextPrev();if(typeof options.onPageDisplayed!==\"undefined\"){options.onPageDisplayed.call(this,page_num+1)}}function movePageNumbersLeft(e,new_p){var new_page=new_p;var $current_active_link=$(e).siblings(\".active_page\");if($current_active_link.siblings(\".page_link[longdesc=\"+new_page+\"]\").css(\"display\")==\"none\"){$nav_panels.each(function(){$(this).children(\".page_link\").hide().slice(parseInt(new_page-options.num_page_links_to_display+1),new_page+1).show()})}}function movePageNumbersRight(e,new_p){var new_page=new_p;var $current_active_link=$(e).siblings(\".active_page\");if($current_active_link.siblings(\".page_link[longdesc=\"+new_page+\"]\").css(\"display\")==\"none\"){$nav_panels.each(function(){$(this).children(\".page_link\").hide().slice(new_page,new_page+parseInt(options.num_page_links_to_display)).show()})}}function toggleMoreLess(){if(!$nav_panels.children(\".page_link:visible\").hasClass(\"last\")){$nav_panels.children(\".more\").show()}else{$nav_panels.children(\".more\").hide()}if(!$nav_panels.children(\".page_link:visible\").hasClass(\"first\")){$nav_panels.children(\".less\").show()}else{$nav_panels.children(\".less\").hide()}}function tagNextPrev(){if($nav_panels.children(\".last\").hasClass(\"active_page\")){$nav_panels.children(\".next_link\").add(\".last_link\").addClass(\"no_more \"+jquery_ui_disabled_class)}else{$nav_panels.children(\".next_link\").add(\".last_link\").removeClass(\"no_more \"+jquery_ui_disabled_class)}if($nav_panels.children(\".first\").hasClass(\"active_page\")){$nav_panels.children(\".previous_link\").add(\".first_link\").addClass(\"no_more \"+jquery_ui_disabled_class)}else{$nav_panels.children(\".previous_link\").add(\".first_link\").removeClass(\"no_more \"+jquery_ui_disabled_class)}}}})(jQuery);\n\n\n// WEBPACK FOOTER //\n// ./js/newTube/core/jquery.pajinate.min.js","import jQuery from \"jquery\";\r\nvar $ = jQuery;\r\n;(function(factory) {\r\n\t'use strict';\r\n\tif (typeof define === 'function' && define.amd) {\r\n\t\t// AMD\r\n\t\tdefine(['jquery'], factory);\r\n\t} else if (typeof module !== 'undefined' && module.exports) {\r\n\t\t// CommonJS\r\n\t\tmodule.exports = factory(require('jquery'));\r\n\t} else {\r\n\t\t// Global\r\n\t\tfactory(jQuery);\r\n\t}\r\n})(function($) {\r\n\t'use strict';\r\n\r\n\tvar $scrollTo = $.scrollTo = function(target, duration, settings) {\r\n\t\treturn $(window).scrollTo(target, duration, settings);\r\n\t};\r\n\r\n\t$scrollTo.defaults = {\r\n\t\taxis:'xy',\r\n\t\tduration: 0,\r\n\t\tlimit:true\r\n\t};\r\n\r\n\tfunction isWin(elem) {\r\n\t\treturn !elem.nodeName ||\r\n\t\t\t$.inArray(elem.nodeName.toLowerCase(), ['iframe','#document','html','body']) !== -1;\r\n\t}\t\t\r\n\r\n\t$.fn.scrollTo = function(target, duration, settings) {\r\n\t\tif (typeof duration === 'object') {\r\n\t\t\tsettings = duration;\r\n\t\t\tduration = 0;\r\n\t\t}\r\n\t\tif (typeof settings === 'function') {\r\n\t\t\tsettings = { onAfter:settings };\r\n\t\t}\r\n\t\tif (target === 'max') {\r\n\t\t\ttarget = 9e9;\r\n\t\t}\r\n\r\n\t\tsettings = $.extend({}, $scrollTo.defaults, settings);\r\n\t\t// Speed is still recognized for backwards compatibility\r\n\t\tduration = duration || settings.duration;\r\n\t\t// Make sure the settings are given right\r\n\t\tvar queue = settings.queue && settings.axis.length > 1;\r\n\t\tif (queue) {\r\n\t\t\t// Let's keep the overall duration\r\n\t\t\tduration /= 2;\r\n\t\t}\r\n\t\tsettings.offset = both(settings.offset);\r\n\t\tsettings.over = both(settings.over);\r\n\r\n\t\treturn this.each(function() {\r\n\t\t\t// Null target yields nothing, just like jQuery does\r\n\t\t\tif (target === null) return;\r\n\r\n\t\t\tvar win = isWin(this),\r\n\t\t\t\telem = win ? this.contentWindow || window : this,\r\n\t\t\t\t$elem = $(elem),\r\n\t\t\t\ttarg = target, \r\n\t\t\t\tattr = {},\r\n\t\t\t\ttoff;\r\n\r\n\t\t\tswitch (typeof targ) {\r\n\t\t\t\t// A number will pass the regex\r\n\t\t\t\tcase 'number':\r\n\t\t\t\tcase 'string':\r\n\t\t\t\t\tif (/^([+-]=?)?\\d+(\\.\\d+)?(px|%)?$/.test(targ)) {\r\n\t\t\t\t\t\ttarg = both(targ);\r\n\t\t\t\t\t\t// We are done\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// Relative/Absolute selector\r\n\t\t\t\t\ttarg = win ? $(targ) : $(targ, elem);\r\n\t\t\t\t\t/* falls through */\r\n\t\t\t\tcase 'object':\r\n\t\t\t\t\tif (targ.length === 0) return;\r\n\t\t\t\t\t// DOMElement / jQuery\r\n\t\t\t\t\tif (targ.is || targ.style) {\r\n\t\t\t\t\t\t// Get the real position of the target\r\n\t\t\t\t\t\ttoff = (targ = $(targ)).offset();\r\n\t\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvar offset = $.isFunction(settings.offset) && settings.offset(elem, targ) || settings.offset;\r\n\r\n\t\t\t$.each(settings.axis.split(''), function(i, axis) {\r\n\t\t\t\tvar Pos\t= axis === 'x' ? 'Left' : 'Top',\r\n\t\t\t\t\tpos = Pos.toLowerCase(),\r\n\t\t\t\t\tkey = 'scroll' + Pos,\r\n\t\t\t\t\tprev = $elem[key](),\r\n\t\t\t\t\tmax = $scrollTo.max(elem, axis);\r\n\r\n\t\t\t\tif (toff) {// jQuery / DOMElement\r\n\t\t\t\t\tattr[key] = toff[pos] + (win ? 0 : prev - $elem.offset()[pos]);\r\n\r\n\t\t\t\t\t// If it's a dom element, reduce the margin\r\n\t\t\t\t\tif (settings.margin) {\r\n\t\t\t\t\t\tattr[key] -= parseInt(targ.css('margin'+Pos), 10) || 0;\r\n\t\t\t\t\t\tattr[key] -= parseInt(targ.css('border'+Pos+'Width'), 10) || 0;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tattr[key] += offset[pos] || 0;\r\n\r\n\t\t\t\t\tif (settings.over[pos]) {\r\n\t\t\t\t\t\t// Scroll to a fraction of its width/height\r\n\t\t\t\t\t\tattr[key] += targ[axis === 'x'?'width':'height']() * settings.over[pos];\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar val = targ[pos];\r\n\t\t\t\t\t// Handle percentage values\r\n\t\t\t\t\tattr[key] = val.slice && val.slice(-1) === '%' ?\r\n\t\t\t\t\t\tparseFloat(val) / 100 * max\r\n\t\t\t\t\t\t: val;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Number or 'number'\r\n\t\t\t\tif (settings.limit && /^\\d+$/.test(attr[key])) {\r\n\t\t\t\t\t// Check the limits\r\n\t\t\t\t\tattr[key] = attr[key] <= 0 ? 0 : Math.min(attr[key], max);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Don't waste time animating, if there's no need.\r\n\t\t\t\tif (!i && settings.axis.length > 1) {\r\n\t\t\t\t\tif (prev === attr[key]) {\r\n\t\t\t\t\t\t// No animation needed\r\n\t\t\t\t\t\tattr = {};\r\n\t\t\t\t\t} else if (queue) {\r\n\t\t\t\t\t\t// Intermediate animation\r\n\t\t\t\t\t\tanimate(settings.onAfterFirst);\r\n\t\t\t\t\t\t// Don't animate this axis again in the next iteration.\r\n\t\t\t\t\t\tattr = {};\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tanimate(settings.onAfter);\r\n\r\n\t\t\tfunction animate(callback) {\r\n\t\t\t\tvar opts = $.extend({}, settings, {\r\n\t\t\t\t\t// The queue setting conflicts with animate()\r\n\t\t\t\t\t// Force it to always be true\r\n\t\t\t\t\tqueue: true,\r\n\t\t\t\t\tduration: duration,\r\n\t\t\t\t\tcomplete: callback && function() {\r\n\t\t\t\t\t\tcallback.call(elem, targ, settings);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\t$elem.animate(attr, opts);\r\n\t\t\t}\r\n\t\t});\r\n\t};\r\n\r\n\t// Max scrolling position, works on quirks mode\r\n\t// It only fails (not too badly) on IE, quirks mode.\r\n\t$scrollTo.max = function(elem, axis) {\r\n\t\tvar Dim = axis === 'x' ? 'Width' : 'Height',\r\n\t\t\tscroll = 'scroll'+Dim;\r\n\r\n\t\tif (!isWin(elem))\r\n\t\t\treturn elem[scroll] - $(elem)[Dim.toLowerCase()]();\r\n\r\n\t\tvar size = 'client' + Dim,\r\n\t\t\tdoc = elem.ownerDocument || elem.document,\r\n\t\t\thtml = doc.documentElement,\r\n\t\t\tbody = doc.body;\r\n\r\n\t\treturn Math.max(html[scroll], body[scroll]) - Math.min(html[size], body[size]);\r\n\t};\r\n\r\n\tfunction both(val) {\r\n\t\treturn $.isFunction(val) || $.isPlainObject(val) ? val : { top:val, left:val };\r\n\t}\r\n\r\n\t// Add special hooks so that window scroll properties can be animated\r\n\t$.Tween.propHooks.scrollLeft = \r\n\t$.Tween.propHooks.scrollTop = {\r\n\t\tget: function(t) {\r\n\t\t\treturn $(t.elem)[t.prop]();\r\n\t\t},\r\n\t\tset: function(t) {\r\n\t\t\tvar curr = this.get(t);\r\n\t\t\t// If interrupt is true and user scrolled, stop animating\r\n\t\t\tif (t.options.interrupt && t._last && t._last !== curr) {\r\n\t\t\t\treturn $(t.elem).stop();\r\n\t\t\t}\r\n\t\t\tvar next = Math.round(t.now);\r\n\t\t\t// Don't waste CPU\r\n\t\t\t// Browsers don't render floating point scroll\r\n\t\t\tif (curr !== next) {\r\n\t\t\t\t$(t.elem)[t.prop](next);\r\n\t\t\t\tt._last = this.get(t);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// AMD requirement\r\n\treturn $scrollTo;\r\n});\r\n\n\n\n// WEBPACK FOOTER //\n// ./js/newTube/core/jquery.scrollTo.js","import jQuery from \"jquery\";\r\nvar $ = jQuery;\r\n(function ($, window, document) {\r\n    'use strict';\r\n\r\n    // Main function\r\n    $.fn.scrollUp = function (options) {\r\n\r\n        // Ensure that only one scrollUp exists\r\n        if (!$.data(document.body, 'scrollUp')) {\r\n            $.data(document.body, 'scrollUp', true);\r\n            $.fn.scrollUp.init(options);\r\n        }\r\n    };\r\n\r\n    // Init\r\n    $.fn.scrollUp.init = function (options) {\r\n\r\n        // Define vars\r\n        var o = $.fn.scrollUp.settings = $.extend({}, $.fn.scrollUp.defaults, options),\r\n            triggerVisible = false,\r\n            animIn, animOut, animSpeed, scrollDis, scrollEvent, scrollTarget, $self;\r\n\r\n        // Create element\r\n        if (o.scrollTrigger) {\r\n            $self = $(o.scrollTrigger);\r\n        } else {\r\n            $self = $('<a/>', {\r\n                id: o.scrollName,\r\n                href: '#top'\r\n            });\r\n        }\r\n\r\n        // Set scrollTitle if there is one\r\n        if (o.scrollTitle) {\r\n            $self.attr('title', o.scrollTitle);\r\n        }\r\n\r\n        $self.appendTo('body');\r\n\r\n        // If not using an image display text\r\n        if (!(o.scrollImg || o.scrollTrigger)) {\r\n            $self.html(o.scrollText);\r\n        }\r\n\r\n        // Minimum CSS to make the magic happen\r\n        $self.css({\r\n            display: 'none',\r\n            position: 'fixed',\r\n            zIndex: o.zIndex\r\n        });\r\n\r\n        // Active point overlay\r\n        if (o.activeOverlay) {\r\n            $('<div/>', {\r\n                id: o.scrollName + '-active'\r\n            }).css({\r\n                position: 'absolute',\r\n                'top': o.scrollDistance + 'px',\r\n                width: '100%',\r\n                borderTop: '1px dotted' + o.activeOverlay,\r\n                zIndex: o.zIndex\r\n            }).appendTo('body');\r\n        }\r\n\r\n        // Switch animation type\r\n        switch (o.animation) {\r\n            case 'fade':\r\n                animIn = 'fadeIn';\r\n                animOut = 'fadeOut';\r\n                animSpeed = o.animationSpeed;\r\n                break;\r\n\r\n            case 'slide':\r\n                animIn = 'slideDown';\r\n                animOut = 'slideUp';\r\n                animSpeed = o.animationSpeed;\r\n                break;\r\n\r\n            default:\r\n                animIn = 'show';\r\n                animOut = 'hide';\r\n                animSpeed = 0;\r\n        }\r\n\r\n        // If from top or bottom\r\n        if (o.scrollFrom === 'top') {\r\n            scrollDis = o.scrollDistance;\r\n        } else {\r\n            scrollDis = $(document).height() - $(window).height() - o.scrollDistance;\r\n        }\r\n\r\n        // Scroll function\r\n        scrollEvent = $(window).scroll(function () {\r\n            if ($(window).scrollTop() > scrollDis) {\r\n                if (!triggerVisible) {\r\n                    $self[animIn](animSpeed);\r\n                    triggerVisible = true;\r\n                }\r\n            } else {\r\n                if (triggerVisible) {\r\n                    $self[animOut](animSpeed);\r\n                    triggerVisible = false;\r\n                }\r\n            }\r\n        });\r\n\r\n        if (o.scrollTarget) {\r\n            if (typeof o.scrollTarget === 'number') {\r\n                scrollTarget = o.scrollTarget;\r\n            } else if (typeof o.scrollTarget === 'string') {\r\n                scrollTarget = Math.floor($(o.scrollTarget).offset().top);\r\n            }\r\n        } else {\r\n            scrollTarget = 0;\r\n        }\r\n\r\n        // To the top\r\n        $self.click(function (e) {\r\n            e.preventDefault();\r\n\r\n            $('html, body').animate({\r\n                scrollTop: scrollTarget\r\n            }, o.scrollSpeed, o.easingType);\r\n        });\r\n    };\r\n\r\n    // Defaults\r\n    $.fn.scrollUp.defaults = {\r\n        scrollName: 'scrollUp',      // Element ID\r\n        scrollDistance: 300,         // Distance from top/bottom before showing element (px)\r\n        scrollFrom: 'top',           // 'top' or 'bottom'\r\n        scrollSpeed: 300,            // Speed back to top (ms)\r\n        easingType: 'linear',        // Scroll to top easing (see http://easings.net/)\r\n        animation: 'fade',           // Fade, slide, none\r\n        animationSpeed: 200,         // Animation in speed (ms)\r\n        scrollTrigger: false,        // Set a custom triggering element. Can be an HTML string or jQuery object\r\n        scrollTarget: false,         // Set a custom target element for scrolling to. Can be element or number\r\n        scrollText: 'Scroll to top', // Text for element, can contain HTML\r\n        scrollTitle: false,          // Set a custom <a> title if required. Defaults to scrollText\r\n        scrollImg: false,            // Set true to use image\r\n        activeOverlay: false,        // Set CSS color to display scrollUp active point, e.g '#00FFFF'\r\n        zIndex: 2147483647           // Z-Index for the overlay\r\n    };\r\n\r\n    // Destroy scrollUp plugin and clean all modifications to the DOM\r\n    $.fn.scrollUp.destroy = function (scrollEvent) {\r\n        $.removeData(document.body, 'scrollUp');\r\n        $('#' + $.fn.scrollUp.settings.scrollName).remove();\r\n        $('#' + $.fn.scrollUp.settings.scrollName + '-active').remove();\r\n\r\n        // If 1.7 or above use the new .off()\r\n        if ($.fn.jquery.split('.')[1] >= 7) {\r\n            $(window).off('scroll', scrollEvent);\r\n\r\n        // Else use the old .unbind()\r\n        } else {\r\n            $(window).unbind('scroll', scrollEvent);\r\n        }\r\n    };\r\n\r\n    $.scrollUp = $.fn.scrollUp;\r\n\r\n})(jQuery, window, document);\r\n\n\n\n// WEBPACK FOOTER //\n// ./js/newTube/core/jquery.scrollUp.js","import jQuery from \"jquery\";\r\nvar $ = jQuery;\r\n(function(a){if(typeof define===\"function\"&&define.amd&&define.amd.jQuery){define([\"jquery\"],a)}else{a(jQuery)}}(function(f){var p=\"left\",o=\"right\",e=\"up\",x=\"down\",c=\"in\",z=\"out\",m=\"none\",s=\"auto\",l=\"swipe\",t=\"pinch\",A=\"tap\",j=\"doubletap\",b=\"longtap\",y=\"hold\",D=\"horizontal\",u=\"vertical\",i=\"all\",r=10,g=\"start\",k=\"move\",h=\"end\",q=\"cancel\",a=\"ontouchstart\" in window,v=window.navigator.msPointerEnabled&&!window.navigator.pointerEnabled,d=window.navigator.pointerEnabled||window.navigator.msPointerEnabled,B=\"TouchSwipe\";var n={fingers:1,threshold:75,cancelThreshold:null,pinchThreshold:20,maxTimeThreshold:null,fingerReleaseThreshold:250,longTapThreshold:500,doubleTapThreshold:200,swipe:null,swipeLeft:null,swipeRight:null,swipeUp:null,swipeDown:null,swipeStatus:null,pinchIn:null,pinchOut:null,pinchStatus:null,click:null,tap:null,doubleTap:null,longTap:null,hold:null,triggerOnTouchEnd:true,triggerOnTouchLeave:false,allowPageScroll:\"auto\",fallbackToMouseEvents:true,excludedElements:\"label, button, input, select, textarea, a, .noSwipe\"};f.fn.swipe=function(G){var F=f(this),E=F.data(B);if(E&&typeof G===\"string\"){if(E[G]){return E[G].apply(this,Array.prototype.slice.call(arguments,1))}else{f.error(\"Method \"+G+\" does not exist on jQuery.swipe\")}}else{if(!E&&(typeof G===\"object\"||!G)){return w.apply(this,arguments)}}return F};f.fn.swipe.defaults=n;f.fn.swipe.phases={PHASE_START:g,PHASE_MOVE:k,PHASE_END:h,PHASE_CANCEL:q};f.fn.swipe.directions={LEFT:p,RIGHT:o,UP:e,DOWN:x,IN:c,OUT:z};f.fn.swipe.pageScroll={NONE:m,HORIZONTAL:D,VERTICAL:u,AUTO:s};f.fn.swipe.fingers={ONE:1,TWO:2,THREE:3,ALL:i};function w(E){if(E&&(E.allowPageScroll===undefined&&(E.swipe!==undefined||E.swipeStatus!==undefined))){E.allowPageScroll=m}if(E.click!==undefined&&E.tap===undefined){E.tap=E.click}if(!E){E={}}E=f.extend({},f.fn.swipe.defaults,E);return this.each(function(){var G=f(this);var F=G.data(B);if(!F){F=new C(this,E);G.data(B,F)}})}function C(a4,av){var az=(a||d||!av.fallbackToMouseEvents),J=az?(d?(v?\"MSPointerDown\":\"pointerdown\"):\"touchstart\"):\"mousedown\",ay=az?(d?(v?\"MSPointerMove\":\"pointermove\"):\"touchmove\"):\"mousemove\",U=az?(d?(v?\"MSPointerUp\":\"pointerup\"):\"touchend\"):\"mouseup\",S=az?null:\"mouseleave\",aD=(d?(v?\"MSPointerCancel\":\"pointercancel\"):\"touchcancel\");var ag=0,aP=null,ab=0,a1=0,aZ=0,G=1,aq=0,aJ=0,M=null;var aR=f(a4);var Z=\"start\";var W=0;var aQ=null;var T=0,a2=0,a5=0,ad=0,N=0;var aW=null,af=null;try{aR.bind(J,aN);aR.bind(aD,a9)}catch(ak){f.error(\"events not supported \"+J+\",\"+aD+\" on jQuery.swipe\")}this.enable=function(){aR.bind(J,aN);aR.bind(aD,a9);return aR};this.disable=function(){aK();return aR};this.destroy=function(){aK();aR.data(B,null);return aR};this.option=function(bc,bb){if(av[bc]!==undefined){if(bb===undefined){return av[bc]}else{av[bc]=bb}}else{f.error(\"Option \"+bc+\" does not exist on jQuery.swipe.options\")}return null};function aN(bd){if(aB()){return}if(f(bd.target).closest(av.excludedElements,aR).length>0){return}var be=bd.originalEvent?bd.originalEvent:bd;var bc,bb=a?be.touches[0]:be;Z=g;if(a){W=be.touches.length}else{bd.preventDefault()}ag=0;aP=null;aJ=null;ab=0;a1=0;aZ=0;G=1;aq=0;aQ=aj();M=aa();R();if(!a||(W===av.fingers||av.fingers===i)||aX()){ai(0,bb);T=at();if(W==2){ai(1,be.touches[1]);a1=aZ=au(aQ[0].start,aQ[1].start)}if(av.swipeStatus||av.pinchStatus){bc=O(be,Z)}}else{bc=false}if(bc===false){Z=q;O(be,Z);return bc}else{if(av.hold){af=setTimeout(f.proxy(function(){aR.trigger(\"hold\",[be.target]);if(av.hold){bc=av.hold.call(aR,be,be.target)}},this),av.longTapThreshold)}ao(true)}return null}function a3(be){var bh=be.originalEvent?be.originalEvent:be;if(Z===h||Z===q||am()){return}var bd,bc=a?bh.touches[0]:bh;var bf=aH(bc);a2=at();if(a){W=bh.touches.length}if(av.hold){clearTimeout(af)}Z=k;if(W==2){if(a1==0){ai(1,bh.touches[1]);a1=aZ=au(aQ[0].start,aQ[1].start)}else{aH(bh.touches[1]);aZ=au(aQ[0].end,aQ[1].end);aJ=ar(aQ[0].end,aQ[1].end)}G=a7(a1,aZ);aq=Math.abs(a1-aZ)}if((W===av.fingers||av.fingers===i)||!a||aX()){aP=aL(bf.start,bf.end);al(be,aP);ag=aS(bf.start,bf.end);ab=aM();aI(aP,ag);if(av.swipeStatus||av.pinchStatus){bd=O(bh,Z)}if(!av.triggerOnTouchEnd||av.triggerOnTouchLeave){var bb=true;if(av.triggerOnTouchLeave){var bg=aY(this);bb=E(bf.end,bg)}if(!av.triggerOnTouchEnd&&bb){Z=aC(k)}else{if(av.triggerOnTouchLeave&&!bb){Z=aC(h)}}if(Z==q||Z==h){O(bh,Z)}}}else{Z=q;O(bh,Z)}if(bd===false){Z=q;O(bh,Z)}}function L(bb){var bc=bb.originalEvent;if(a){if(bc.touches.length>0){F();return true}}if(am()){W=ad}a2=at();ab=aM();if(ba()||!an()){Z=q;O(bc,Z)}else{if(av.triggerOnTouchEnd||(av.triggerOnTouchEnd==false&&Z===k)){bb.preventDefault();Z=h;O(bc,Z)}else{if(!av.triggerOnTouchEnd&&a6()){Z=h;aF(bc,Z,A)}else{if(Z===k){Z=q;O(bc,Z)}}}}ao(false);return null}function a9(){W=0;a2=0;T=0;a1=0;aZ=0;G=1;R();ao(false)}function K(bb){var bc=bb.originalEvent;if(av.triggerOnTouchLeave){Z=aC(h);O(bc,Z)}}function aK(){aR.unbind(J,aN);aR.unbind(aD,a9);aR.unbind(ay,a3);aR.unbind(U,L);if(S){aR.unbind(S,K)}ao(false)}function aC(bf){var be=bf;var bd=aA();var bc=an();var bb=ba();if(!bd||bb){be=q}else{if(bc&&bf==k&&(!av.triggerOnTouchEnd||av.triggerOnTouchLeave)){be=h}else{if(!bc&&bf==h&&av.triggerOnTouchLeave){be=q}}}return be}function O(bd,bb){var bc=undefined;if(I()||V()){bc=aF(bd,bb,l)}else{if((P()||aX())&&bc!==false){bc=aF(bd,bb,t)}}if(aG()&&bc!==false){bc=aF(bd,bb,j)}else{if(ap()&&bc!==false){bc=aF(bd,bb,b)}else{if(ah()&&bc!==false){bc=aF(bd,bb,A)}}}if(bb===q){a9(bd)}if(bb===h){if(a){if(bd.touches.length==0){a9(bd)}}else{a9(bd)}}return bc}function aF(be,bb,bd){var bc=undefined;if(bd==l){aR.trigger(\"swipeStatus\",[bb,aP||null,ag||0,ab||0,W,aQ]);if(av.swipeStatus){bc=av.swipeStatus.call(aR,be,bb,aP||null,ag||0,ab||0,W,aQ);if(bc===false){return false}}if(bb==h&&aV()){aR.trigger(\"swipe\",[aP,ag,ab,W,aQ]);if(av.swipe){bc=av.swipe.call(aR,be,aP,ag,ab,W,aQ);if(bc===false){return false}}switch(aP){case p:aR.trigger(\"swipeLeft\",[aP,ag,ab,W,aQ]);if(av.swipeLeft){bc=av.swipeLeft.call(aR,be,aP,ag,ab,W,aQ)}break;case o:aR.trigger(\"swipeRight\",[aP,ag,ab,W,aQ]);if(av.swipeRight){bc=av.swipeRight.call(aR,be,aP,ag,ab,W,aQ)}break;case e:aR.trigger(\"swipeUp\",[aP,ag,ab,W,aQ]);if(av.swipeUp){bc=av.swipeUp.call(aR,be,aP,ag,ab,W,aQ)}break;case x:aR.trigger(\"swipeDown\",[aP,ag,ab,W,aQ]);if(av.swipeDown){bc=av.swipeDown.call(aR,be,aP,ag,ab,W,aQ)}break}}}if(bd==t){aR.trigger(\"pinchStatus\",[bb,aJ||null,aq||0,ab||0,W,G,aQ]);if(av.pinchStatus){bc=av.pinchStatus.call(aR,be,bb,aJ||null,aq||0,ab||0,W,G,aQ);if(bc===false){return false}}if(bb==h&&a8()){switch(aJ){case c:aR.trigger(\"pinchIn\",[aJ||null,aq||0,ab||0,W,G,aQ]);if(av.pinchIn){bc=av.pinchIn.call(aR,be,aJ||null,aq||0,ab||0,W,G,aQ)}break;case z:aR.trigger(\"pinchOut\",[aJ||null,aq||0,ab||0,W,G,aQ]);if(av.pinchOut){bc=av.pinchOut.call(aR,be,aJ||null,aq||0,ab||0,W,G,aQ)}break}}}if(bd==A){if(bb===q||bb===h){clearTimeout(aW);clearTimeout(af);if(Y()&&!H()){N=at();aW=setTimeout(f.proxy(function(){N=null;aR.trigger(\"tap\",[be.target]);if(av.tap){bc=av.tap.call(aR,be,be.target)}},this),av.doubleTapThreshold)}else{N=null;aR.trigger(\"tap\",[be.target]);if(av.tap){bc=av.tap.call(aR,be,be.target)}}}}else{if(bd==j){if(bb===q||bb===h){clearTimeout(aW);N=null;aR.trigger(\"doubletap\",[be.target]);if(av.doubleTap){bc=av.doubleTap.call(aR,be,be.target)}}}else{if(bd==b){if(bb===q||bb===h){clearTimeout(aW);N=null;aR.trigger(\"longtap\",[be.target]);if(av.longTap){bc=av.longTap.call(aR,be,be.target)}}}}}return bc}function an(){var bb=true;if(av.threshold!==null){bb=ag>=av.threshold}return bb}function ba(){var bb=false;if(av.cancelThreshold!==null&&aP!==null){bb=(aT(aP)-ag)>=av.cancelThreshold}return bb}function ae(){if(av.pinchThreshold!==null){return aq>=av.pinchThreshold}return true}function aA(){var bb;if(av.maxTimeThreshold){if(ab>=av.maxTimeThreshold){bb=false}else{bb=true}}else{bb=true}return bb}function al(bb,bc){if(av.allowPageScroll===m||aX()){bb.preventDefault()}else{var bd=av.allowPageScroll===s;switch(bc){case p:if((av.swipeLeft&&bd)||(!bd&&av.allowPageScroll!=D)){bb.preventDefault()}break;case o:if((av.swipeRight&&bd)||(!bd&&av.allowPageScroll!=D)){bb.preventDefault()}break;case e:if((av.swipeUp&&bd)||(!bd&&av.allowPageScroll!=u)){bb.preventDefault()}break;case x:if((av.swipeDown&&bd)||(!bd&&av.allowPageScroll!=u)){bb.preventDefault()}break}}}function a8(){var bc=aO();var bb=X();var bd=ae();return bc&&bb&&bd}function aX(){return !!(av.pinchStatus||av.pinchIn||av.pinchOut)}function P(){return !!(a8()&&aX())}function aV(){var be=aA();var bg=an();var bd=aO();var bb=X();var bc=ba();var bf=!bc&&bb&&bd&&bg&&be;return bf}function V(){return !!(av.swipe||av.swipeStatus||av.swipeLeft||av.swipeRight||av.swipeUp||av.swipeDown)}function I(){return !!(aV()&&V())}function aO(){return((W===av.fingers||av.fingers===i)||!a)}function X(){return aQ[0].end.x!==0}function a6(){return !!(av.tap)}function Y(){return !!(av.doubleTap)}function aU(){return !!(av.longTap)}function Q(){if(N==null){return false}var bb=at();return(Y()&&((bb-N)<=av.doubleTapThreshold))}function H(){return Q()}function ax(){return((W===1||!a)&&(isNaN(ag)||ag<av.threshold))}function a0(){return((ab>av.longTapThreshold)&&(ag<r))}function ah(){return !!(ax()&&a6())}function aG(){return !!(Q()&&Y())}function ap(){return !!(a0()&&aU())}function F(){a5=at();ad=event.touches.length+1}function R(){a5=0;ad=0}function am(){var bb=false;if(a5){var bc=at()-a5;if(bc<=av.fingerReleaseThreshold){bb=true}}return bb}function aB(){return !!(aR.data(B+\"_intouch\")===true)}function ao(bb){if(bb===true){aR.bind(ay,a3);aR.bind(U,L);if(S){aR.bind(S,K)}}else{aR.unbind(ay,a3,false);aR.unbind(U,L,false);if(S){aR.unbind(S,K,false)}}aR.data(B+\"_intouch\",bb===true)}function ai(bc,bb){var bd=bb.identifier!==undefined?bb.identifier:0;aQ[bc].identifier=bd;aQ[bc].start.x=aQ[bc].end.x=bb.pageX||bb.clientX;aQ[bc].start.y=aQ[bc].end.y=bb.pageY||bb.clientY;return aQ[bc]}function aH(bb){var bd=bb.identifier!==undefined?bb.identifier:0;var bc=ac(bd);bc.end.x=bb.pageX||bb.clientX;bc.end.y=bb.pageY||bb.clientY;return bc}function ac(bc){for(var bb=0;bb<aQ.length;bb++){if(aQ[bb].identifier==bc){return aQ[bb]}}}function aj(){var bb=[];for(var bc=0;bc<=5;bc++){bb.push({start:{x:0,y:0},end:{x:0,y:0},identifier:0})}return bb}function aI(bb,bc){bc=Math.max(bc,aT(bb));M[bb].distance=bc}function aT(bb){if(M[bb]){return M[bb].distance}return undefined}function aa(){var bb={};bb[p]=aw(p);bb[o]=aw(o);bb[e]=aw(e);bb[x]=aw(x);return bb}function aw(bb){return{direction:bb,distance:0}}function aM(){return a2-T}function au(be,bd){var bc=Math.abs(be.x-bd.x);var bb=Math.abs(be.y-bd.y);return Math.round(Math.sqrt(bc*bc+bb*bb))}function a7(bb,bc){var bd=(bc/bb)*1;return bd.toFixed(2)}function ar(){if(G<1){return z}else{return c}}function aS(bc,bb){return Math.round(Math.sqrt(Math.pow(bb.x-bc.x,2)+Math.pow(bb.y-bc.y,2)))}function aE(be,bc){var bb=be.x-bc.x;var bg=bc.y-be.y;var bd=Math.atan2(bg,bb);var bf=Math.round(bd*180/Math.PI);if(bf<0){bf=360-Math.abs(bf)}return bf}function aL(bc,bb){var bd=aE(bc,bb);if((bd<=45)&&(bd>=0)){return p}else{if((bd<=360)&&(bd>=315)){return p}else{if((bd>=135)&&(bd<=225)){return o}else{if((bd>45)&&(bd<135)){return x}else{return e}}}}}function at(){var bb=new Date();return bb.getTime()}function aY(bb){bb=f(bb);var bd=bb.offset();var bc={left:bd.left,right:bd.left+bb.outerWidth(),top:bd.top,bottom:bd.top+bb.outerHeight()};return bc}function E(bb,bc){return(bb.x>bc.left&&bb.x<bc.right&&bb.y>bc.top&&bb.y<bc.bottom)}}}));\n\n\n// WEBPACK FOOTER //\n// ./js/newTube/core/jquery.touchSwipe.min.js","import jQuery from \"jquery\";\r\nvar $ = jQuery;\r\n(function($){\r\n    $.fn.validationEngineLanguage = function(){\r\n    };\r\n    $.validationEngineLanguage = {\r\n        newLang: function(){\r\n            $.validationEngineLanguage.allRules = {\r\n                \"required\": { // Add your regex rules here, you can take telephone as an example\r\n                    \"regex\": \"none\",\r\n                    \"alertText\": \"* This field is required\",\r\n                    \"alertTextCheckboxMultiple\": \"* Please select an option\",\r\n                    \"alertTextCheckboxe\": \"* This checkbox is required\",\r\n                    \"alertTextDateRange\": \"* Both date range fields are required\"\r\n                },\r\n                \"requiredInFunction\": { \r\n                    \"func\": function(field, rules, i, options){\r\n                        return (field.val() == \"test\") ? true : false;\r\n                    },\r\n                    \"alertText\": \"* Field must equal test\"\r\n                },\r\n                \"dateRange\": {\r\n                    \"regex\": \"none\",\r\n                    \"alertText\": \"* Invalid \",\r\n                    \"alertText2\": \"Date Range\"\r\n                },\r\n                \"dateTimeRange\": {\r\n                    \"regex\": \"none\",\r\n                    \"alertText\": \"* Invalid \",\r\n                    \"alertText2\": \"Date Time Range\"\r\n                },\r\n                \"minSize\": {\r\n                    \"regex\": \"none\",\r\n                    \"alertText\": \"* Minimum \",\r\n                    \"alertText2\": \" characters allowed\"\r\n                },\r\n                \"maxSize\": {\r\n                    \"regex\": \"none\",\r\n                    \"alertText\": \"* Maximum \",\r\n                    \"alertText2\": \" characters allowed\"\r\n                },\r\n\t\t\t\t\"groupRequired\": {\r\n                    \"regex\": \"none\",\r\n                    \"alertText\": \"* You must fill one of the following fields\"\r\n                },\r\n                \"min\": {\r\n                    \"regex\": \"none\",\r\n                    \"alertText\": \"* Minimum value is \"\r\n                },\r\n                \"max\": {\r\n                    \"regex\": \"none\",\r\n                    \"alertText\": \"* Maximum value is \"\r\n                },\r\n                \"past\": {\r\n                    \"regex\": \"none\",\r\n                    \"alertText\": \"* Date prior to \"\r\n                },\r\n                \"future\": {\r\n                    \"regex\": \"none\",\r\n                    \"alertText\": \"* Date past \"\r\n                },\t\r\n                \"maxCheckbox\": {\r\n                    \"regex\": \"none\",\r\n                    \"alertText\": \"* Maximum \",\r\n                    \"alertText2\": \" options allowed\"\r\n                },\r\n                \"minCheckbox\": {\r\n                    \"regex\": \"none\",\r\n                    \"alertText\": \"* Please select \",\r\n                    \"alertText2\": \" options\"\r\n                },\r\n                \"equals\": {\r\n                    \"regex\": \"none\",\r\n                    \"alertText\": \"* Fields do not match\"\r\n                },\r\n                \"creditCard\": {\r\n                    \"regex\": \"none\",\r\n                    \"alertText\": \"* Invalid credit card number\"\r\n                },\r\n                \"phone\": {\r\n                    // credit: jquery.h5validate.js / orefalo\r\n                    \"regex\": /^([\\+][0-9]{1,3}[\\ \\.\\-])?([\\(]{1}[0-9]{2,6}[\\)])?([0-9\\ \\.\\-\\/]{3,20})((x|ext|extension)[\\ ]?[0-9]{1,4})?$/,\r\n                    \"alertText\": \"* Invalid phone number\"\r\n                },\r\n                \"email\": {\r\n                    // HTML5 compatible email regex ( http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html#    e-mail-state-%28type=email%29 )\r\n                    \"regex\": /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/,\r\n                    \"alertText\": \"* Invalid email address\"\r\n                },\r\n                \"integer\": {\r\n                    \"regex\": /^[\\-\\+]?\\d+$/,\r\n                    \"alertText\": \"* Not a valid integer\"\r\n                },\r\n                \"number\": {\r\n                    // Number, including positive, negative, and floating decimal. credit: orefalo\r\n                    \"regex\": /^[\\-\\+]?((([0-9]{1,3})([,][0-9]{3})*)|([0-9]+))?([\\.]([0-9]+))?$/,\r\n                    \"alertText\": \"* Invalid floating decimal number\"\r\n                },\r\n                \"date\": {                    \r\n                    //\tCheck if date is valid by leap year\r\n\t\t\t\"func\": function (field) {\r\n\t\t\t\t\tvar pattern = new RegExp(/^(\\d{4})[\\/\\-\\.](0?[1-9]|1[012])[\\/\\-\\.](0?[1-9]|[12][0-9]|3[01])$/);\r\n\t\t\t\t\tvar match = pattern.exec(field.val());\r\n\t\t\t\t\tif (match == null)\r\n\t\t\t\t\t   return false;\r\n\t\r\n\t\t\t\t\tvar year = match[1];\r\n\t\t\t\t\tvar month = match[2]*1;\r\n\t\t\t\t\tvar day = match[3]*1;\t\t\t\t\t\r\n\t\t\t\t\tvar date = new Date(year, month - 1, day); // because months starts from 0.\r\n\t\r\n\t\t\t\t\treturn (date.getFullYear() == year && date.getMonth() == (month - 1) && date.getDate() == day);\r\n\t\t\t\t},                \t\t\r\n\t\t\t \"alertText\": \"* Invalid date, must be in YYYY-MM-DD format\"\r\n                },\r\n                \"ipv4\": {\r\n                    \"regex\": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/,\r\n                    \"alertText\": \"* Invalid IP address\"\r\n                },\r\n                \"url\": {\r\n                    \"regex\": /^(https?|ftp):\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i,\r\n                    \"alertText\": \"* Invalid URL\"\r\n                },\r\n                \"onlyNumberSp\": {\r\n                    \"regex\": /^[0-9\\ ]+$/,\r\n                    \"alertText\": \"* Numbers only\"\r\n                },\r\n                \"onlyLetterSp\": {\r\n                    \"regex\": /^[a-zA-Z\\ \\']+$/,\r\n                    \"alertText\": \"* Letters only\"\r\n                },\r\n                \"onlyLetterNumber\": {\r\n                    \"regex\": /^[0-9a-zA-Z]+$/,\r\n                    \"alertText\": \"* No special characters allowed\"\r\n                },\r\n                // --- CUSTOM RULES -- Those are specific to the demos, they can be removed or changed to your likings\r\n                \"ajaxUserCall\": {\r\n                    \"url\": \"ajaxValidateFieldUser\",\r\n                    // you may want to pass extra data on the ajax call\r\n                    \"extraData\": \"name=eric\",\r\n                    \"alertText\": \"* This user is already taken\",\r\n                    \"alertTextLoad\": \"* Validating, please wait\"\r\n                },\r\n\t\t\t\t\"ajaxUserCallPhp\": {\r\n                    \"url\": \"phpajax/ajaxValidateFieldUser.php\",\r\n                    // you may want to pass extra data on the ajax call\r\n                    \"extraData\": \"name=eric\",\r\n                    // if you provide an \"alertTextOk\", it will show as a green prompt when the field validates\r\n                    \"alertTextOk\": \"* This username is available\",\r\n                    \"alertText\": \"* This user is already taken\",\r\n                    \"alertTextLoad\": \"* Validating, please wait\"\r\n                },\r\n                \"ajaxNameCall\": {\r\n                    // remote json service location\r\n                    \"url\": \"ajaxValidateFieldName\",\r\n                    // error\r\n                    \"alertText\": \"* This name is already taken\",\r\n                    // if you provide an \"alertTextOk\", it will show as a green prompt when the field validates\r\n                    \"alertTextOk\": \"* This name is available\",\r\n                    // speaks by itself\r\n                    \"alertTextLoad\": \"* Validating, please wait\"\r\n                },\r\n\t\t\t\t \"ajaxNameCallPhp\": {\r\n\t                    // remote json service location\r\n\t                    \"url\": \"phpajax/ajaxValidateFieldName.php\",\r\n\t                    // error\r\n\t                    \"alertText\": \"* This name is already taken\",\r\n\t                    // speaks by itself\r\n\t                    \"alertTextLoad\": \"* Validating, please wait\"\r\n\t                },\r\n                \"validate2fields\": {\r\n                    \"alertText\": \"* Please input HELLO\"\r\n                },\r\n\t            //tls warning:homegrown not fielded \r\n                \"dateFormat\":{\r\n                    \"regex\": /^\\d{4}[\\/\\-](0?[1-9]|1[012])[\\/\\-](0?[1-9]|[12][0-9]|3[01])$|^(?:(?:(?:0?[13578]|1[02])(\\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\\/|-)(?:29|30)))(\\/|-)(?:[1-9]\\d\\d\\d|\\d[1-9]\\d\\d|\\d\\d[1-9]\\d|\\d\\d\\d[1-9])$|^(?:(?:0?[1-9]|1[0-2])(\\/|-)(?:0?[1-9]|1\\d|2[0-8]))(\\/|-)(?:[1-9]\\d\\d\\d|\\d[1-9]\\d\\d|\\d\\d[1-9]\\d|\\d\\d\\d[1-9])$|^(0?2(\\/|-)29)(\\/|-)(?:(?:0[48]00|[13579][26]00|[2468][048]00)|(?:\\d\\d)?(?:0[48]|[2468][048]|[13579][26]))$/,\r\n                    \"alertText\": \"* Invalid Date\"\r\n                },\r\n                //tls warning:homegrown not fielded \r\n\t\t\t\t\"dateTimeFormat\": {\r\n\t                \"regex\": /^\\d{4}[\\/\\-](0?[1-9]|1[012])[\\/\\-](0?[1-9]|[12][0-9]|3[01])\\s+(1[012]|0?[1-9]){1}:(0?[1-5]|[0-6][0-9]){1}:(0?[0-6]|[0-6][0-9]){1}\\s+(am|pm|AM|PM){1}$|^(?:(?:(?:0?[13578]|1[02])(\\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\\/|-)(?:29|30)))(\\/|-)(?:[1-9]\\d\\d\\d|\\d[1-9]\\d\\d|\\d\\d[1-9]\\d|\\d\\d\\d[1-9])$|^((1[012]|0?[1-9]){1}\\/(0?[1-9]|[12][0-9]|3[01]){1}\\/\\d{2,4}\\s+(1[012]|0?[1-9]){1}:(0?[1-5]|[0-6][0-9]){1}:(0?[0-6]|[0-6][0-9]){1}\\s+(am|pm|AM|PM){1})$/,\r\n                    \"alertText\": \"* Invalid Date or Date Format\",\r\n                    \"alertText2\": \"Expected Format: \",\r\n                    \"alertText3\": \"mm/dd/yyyy hh:mm:ss AM|PM or \", \r\n                    \"alertText4\": \"yyyy-mm-dd hh:mm:ss AM|PM\"\r\n\t            }\r\n            };\r\n            \r\n        }\r\n    };\r\n\r\n    $.validationEngineLanguage.newLang();\r\n    \r\n})(jQuery);\r\n\n\n\n// WEBPACK FOOTER //\n// ./js/newTube/core/jquery.validationEngine-en.js","import jQuery from \"jquery\";\r\nvar $ = jQuery;\r\n/*\r\n * Inline Form Validation Engine 2.6.2, jQuery plugin\r\n *\r\n * Copyright(c) 2010, Cedric Dugas\r\n * http://www.position-absolute.com\r\n *\r\n * 2.0 Rewrite by Olivier Refalo\r\n * http://www.crionics.com\r\n *\r\n * Form validation engine allowing custom regex rules to be added.\r\n * Licensed under the MIT License\r\n */\r\n (function($) {\r\n\r\n\t \"use strict\";\r\n\r\n\t var methods = {\r\n\r\n\t\t /**\r\n\t\t * Kind of the constructor, called before any action\r\n\t\t * @param {Map} user options\r\n\t\t */\r\n\t\t init: function(options) {\r\n\t\t\t var form = this;\r\n\t\t\t if (!form.data('jqv') || form.data('jqv') == null ) {\r\n\t\t\t\t options = methods._saveOptions(form, options);\r\n\t\t\t\t // bind all formError elements to close on click\r\n\t\t\t\t $(\".formError\").on(\"click\", function() {\r\n\t\t\t\t\t $(this).fadeOut(150, function() {\r\n\t\t\t\t\t\t // remove prompt once invisible\r\n\t\t\t\t\t\t $(this).parent('.formErrorOuter').remove();\r\n\t\t\t\t\t\t $(this).remove();\r\n\t\t\t\t\t });\r\n\t\t\t\t });\r\n\t\t\t }\r\n\t\t\t return this;\r\n\t\t },\r\n\t\t/**\r\n\t\t* Attachs jQuery.validationEngine to form.submit and field.blur events\r\n\t\t* Takes an optional params: a list of options\r\n\t\t* ie. jQuery(\"#formID1\").validationEngine('attach', {promptPosition : \"centerRight\"});\r\n\t\t*/\r\n\t\tattach: function(userOptions) {\r\n\r\n\t\t\tvar form = this;\r\n\t\t\tvar options;\r\n\r\n\t\t\tif(userOptions)\r\n\t\t\t\toptions = methods._saveOptions(form, userOptions);\r\n\t\t\telse\r\n\t\t\t\toptions = form.data('jqv');\r\n\r\n\t\t\toptions.validateAttribute = (form.find(\"[data-validation-engine*=validate]\").length) ? \"data-validation-engine\" : \"class\";\r\n\t\t\tif (options.binded) {\r\n\r\n\t\t\t\t// delegate fields\r\n\t\t\t\tform.on(options.validationEventTrigger, \"[\"+options.validateAttribute+\"*=validate]:not([type=checkbox]):not([type=radio]):not(.datepicker)\", methods._onFieldEvent);\r\n\t\t\t\tform.on(\"click\", \"[\"+options.validateAttribute+\"*=validate][type=checkbox],[\"+options.validateAttribute+\"*=validate][type=radio]\", methods._onFieldEvent);\r\n\t\t\t\tform.on(options.validationEventTrigger,\"[\"+options.validateAttribute+\"*=validate][class*=datepicker]\", {\"delay\": 300}, methods._onFieldEvent);\r\n\t\t\t}\r\n\t\t\tif (options.autoPositionUpdate) {\r\n\t\t\t\t$(window).bind(\"resize\", {\r\n\t\t\t\t\t\"noAnimation\": true,\r\n\t\t\t\t\t\"formElem\": form\r\n\t\t\t\t}, methods.updatePromptsPosition);\r\n\t\t\t}\r\n\t\t\tform.on(\"click\",\"a[data-validation-engine-skip], a[class*='validate-skip'], button[data-validation-engine-skip], button[class*='validate-skip'], input[data-validation-engine-skip], input[class*='validate-skip']\", methods._submitButtonClick);\r\n\t\t\tform.removeData('jqv_submitButton');\r\n\r\n\t\t\t// bind form.submit\r\n\t\t\tform.on(\"submit\", methods._onSubmitEvent);\r\n\t\t\treturn this;\r\n\t\t},\r\n\t\t/**\r\n\t\t* Unregisters any bindings that may point to jQuery.validaitonEngine\r\n\t\t*/\r\n\t\tdetach: function() {\r\n\r\n\t\t\tvar form = this;\r\n\t\t\tvar options = form.data('jqv');\r\n\r\n\t\t\t// unbind fields\r\n\t\t\tform.find(\"[\"+options.validateAttribute+\"*=validate]\").not(\"[type=checkbox]\").off(options.validationEventTrigger, methods._onFieldEvent);\r\n\t\t\tform.find(\"[\"+options.validateAttribute+\"*=validate][type=checkbox],[class*=validate][type=radio]\").off(\"click\", methods._onFieldEvent);\r\n\r\n\t\t\t// unbind form.submit\r\n\t\t\tform.off(\"submit\", methods.onAjaxFormComplete);\r\n\r\n\t\t\t// unbind form.submit\r\n\t\t\tform.die(\"submit\", methods.onAjaxFormComplete);\r\n\t\t\tform.removeData('jqv');\r\n            \r\n\t\t\tform.off(\"click\", \"a[data-validation-engine-skip], a[class*='validate-skip'], button[data-validation-engine-skip], button[class*='validate-skip'], input[data-validation-engine-skip], input[class*='validate-skip']\", methods._submitButtonClick);\r\n\t\t\tform.removeData('jqv_submitButton');\r\n\r\n\t\t\tif (options.autoPositionUpdate)\r\n\t\t\t\t$(window).unbind(\"resize\", methods.updatePromptsPosition);\r\n\r\n\t\t\treturn this;\r\n\t\t},\r\n\t\t/**\r\n\t\t* Validates either a form or a list of fields, shows prompts accordingly.\r\n\t\t* Note: There is no ajax form validation with this method, only field ajax validation are evaluated\r\n\t\t*\r\n\t\t* @return true if the form validates, false if it fails\r\n\t\t*/\r\n\t\tvalidate: function() {\r\n\t\t\tvar element = $(this);\r\n\t\t\tvar valid = null;\r\n\r\n\t\t\tif((element.is(\"form\") || element.hasClass(\"validationEngineContainer\")) && !element.hasClass('validating')) {\r\n\t\t\t\telement.addClass('validating');\r\n\t\t\t\tvar options = element.data('jqv');\r\n\t\t\t\tvar valid = methods._validateFields(this);\r\n\t\t\t\t\r\n\t\t\t\t// If the form doesn't validate, clear the 'validating' class before the user has a chance to submit again\r\n\t\t\t\tsetTimeout(function(){\r\n\t\t\t\t\telement.removeClass('validating');\r\n\t\t\t\t}, 100);\r\n\t\t\t\tif (valid && options.onSuccess) {\r\n\t\t\t\t\toptions.onSuccess();\r\n\t\t\t\t} else if (!valid && options.onFailure) {\r\n\t\t\t\t\toptions.onFailure();\r\n\t\t\t\t}\r\n\t\t\t} else if (element.is('form') || element.hasClass('validationEngineContainer')) {\r\n\t\t\t\telement.removeClass('validating');\r\n\t\t\t} else {\r\n\t\t\t\t// field validation\r\n\t\t\t\tvar form = element.closest('form, .validationEngineContainer'),\r\n\t\t\t\t\toptions = (form.data('jqv')) ? form.data('jqv') : $.validationEngine.defaults,\r\n\t\t\t\t\tvalid = methods._validateField(element, options);\r\n\r\n\t\t\t\tif (valid && options.onFieldSuccess)\r\n\t\t\t\t\toptions.onFieldSuccess();\r\n\t\t\t\telse if (options.onFieldFailure && options.InvalidFields.length > 0) {\r\n\t\t\t\t\toptions.onFieldFailure();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif(options.onValidationComplete) {\r\n\t\t\t\t// !! ensures that an undefined return is interpreted as return false but allows a onValidationComplete() to possibly return true and have form continue processing\r\n\t\t\t\treturn !!options.onValidationComplete(form, valid);\r\n\t\t\t}\r\n\t\t\treturn valid;\r\n\t\t},\r\n\t\t/**\r\n\t\t*  Redraw prompts position, useful when you change the DOM state when validating\r\n\t\t*/\r\n\t\tupdatePromptsPosition: function(event) {\r\n\r\n\t\t\tif (event && this == window) {\r\n\t\t\t\tvar form = event.data.formElem;\r\n\t\t\t\tvar noAnimation = event.data.noAnimation;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\tvar form = $(this.closest('form, .validationEngineContainer'));\r\n\r\n\t\t\tvar options = form.data('jqv');\r\n\t\t\t// No option, take default one\r\n\t\t\tform.find('['+options.validateAttribute+'*=validate]').not(\":disabled\").each(function(){\r\n\t\t\t\tvar field = $(this);\r\n\t\t\t\tif (options.prettySelect && field.is(\":hidden\"))\r\n\t\t\t\t  field = form.find(\"#\" + options.usePrefix + field.attr('id') + options.useSuffix);\r\n\t\t\t\tvar prompt = methods._getPrompt(field);\r\n\t\t\t\tvar promptText = $(prompt).find(\".formErrorContent\").html();\r\n\r\n\t\t\t\tif(prompt)\r\n\t\t\t\t\tmethods._updatePrompt(field, $(prompt), promptText, undefined, false, options, noAnimation);\r\n\t\t\t});\r\n\t\t\treturn this;\r\n\t\t},\r\n\t\t/**\r\n\t\t* Displays a prompt on a element.\r\n\t\t* Note that the element needs an id!\r\n\t\t*\r\n\t\t* @param {String} promptText html text to display type\r\n\t\t* @param {String} type the type of bubble: 'pass' (green), 'load' (black) anything else (red)\r\n\t\t* @param {String} possible values topLeft, topRight, bottomLeft, centerRight, bottomRight\r\n\t\t*/\r\n\t\tshowPrompt: function(promptText, type, promptPosition, showArrow) {\r\n\t\t\tvar form = this.closest('form, .validationEngineContainer');\r\n\t\t\tvar options = form.data('jqv');\r\n\t\t\t// No option, take default one\r\n\t\t\tif(!options)\r\n\t\t\t\toptions = methods._saveOptions(this, options);\r\n\t\t\tif(promptPosition)\r\n\t\t\t\toptions.promptPosition=promptPosition;\r\n\t\t\toptions.showArrow = showArrow==true;\r\n\r\n\t\t\tmethods._showPrompt(this, promptText, type, false, options);\r\n\t\t\treturn this;\r\n\t\t},\r\n\t\t/**\r\n\t\t* Closes form error prompts, CAN be invidual\r\n\t\t*/\r\n\t\thide: function() {\r\n\t\t\t var form = $(this).closest('form, .validationEngineContainer');\r\n\t\t\t var options = form.data('jqv');\r\n\t\t\t var fadeDuration = (options && options.fadeDuration) ? options.fadeDuration : 0.3;\r\n\t\t\t var closingtag;\r\n\t\t\t \r\n\t\t\t if($(this).is(\"form\") || $(this).hasClass(\"validationEngineContainer\")) {\r\n\t\t\t\t closingtag = \"parentForm\"+methods._getClassName($(this).attr(\"id\"));\r\n\t\t\t } else {\r\n\t\t\t\t closingtag = methods._getClassName($(this).attr(\"id\")) +\"formError\";\r\n\t\t\t }\r\n\t\t\t $('.'+closingtag).fadeTo(fadeDuration, 0.3, function() {\r\n\t\t\t\t $(this).parent('.formErrorOuter').remove();\r\n\t\t\t\t $(this).remove();\r\n\t\t\t });\r\n\t\t\t return this;\r\n\t\t },\r\n\t\t /**\r\n\t\t * Closes all error prompts on the page\r\n\t\t */\r\n\t\t hideAll: function() {\r\n\r\n\t\t\t var form = this;\r\n\t\t\t var options = form.data('jqv');\r\n\t\t\t var duration = options ? options.fadeDuration:0.3;\r\n\t\t\t $('.formError').fadeTo(duration, 0.3, function() {\r\n\t\t\t\t $(this).parent('.formErrorOuter').remove();\r\n\t\t\t\t $(this).remove();\r\n\t\t\t });\r\n\t\t\t return this;\r\n\t\t },\r\n\t\t/**\r\n\t\t* Typically called when user exists a field using tab or a mouse click, triggers a field\r\n\t\t* validation\r\n\t\t*/\r\n\t\t_onFieldEvent: function(event) {\r\n\t\t\tvar field = $(this);\r\n\t\t\tvar form = field.closest('form, .validationEngineContainer');\r\n\t\t\tvar options = form.data('jqv');\r\n\t\t\toptions.eventTrigger = \"field\";\r\n\t\t\t// validate the current field\r\n\t\t\twindow.setTimeout(function() {\r\n\t\t\t\tmethods._validateField(field, options);\r\n\t\t\t\tif (options.InvalidFields.length == 0 && options.onFieldSuccess) {\r\n\t\t\t\t\toptions.onFieldSuccess();\r\n\t\t\t\t} else if (options.InvalidFields.length > 0 && options.onFieldFailure) {\r\n\t\t\t\t\toptions.onFieldFailure();\r\n\t\t\t\t}\r\n\t\t\t}, (event.data) ? event.data.delay : 0);\r\n\r\n\t\t},\r\n\t\t/**\r\n\t\t* Called when the form is submited, shows prompts accordingly\r\n\t\t*\r\n\t\t* @param {jqObject}\r\n\t\t*            form\r\n\t\t* @return false if form submission needs to be cancelled\r\n\t\t*/\r\n\t\t_onSubmitEvent: function() {\r\n\t\t\tvar form = $(this);\r\n\t\t\tvar options = form.data('jqv');\r\n\t\t\t\r\n\t\t\t//check if it is trigger from skipped button\r\n\t\t\tif (form.data(\"jqv_submitButton\")){\r\n\t\t\t\tvar submitButton = $(\"#\" + form.data(\"jqv_submitButton\"));\r\n\t\t\t\tif (submitButton){\r\n\t\t\t\t\tif (submitButton.length > 0){\r\n\t\t\t\t\t\tif (submitButton.hasClass(\"validate-skip\") || submitButton.attr(\"data-validation-engine-skip\") == \"true\")\r\n\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\toptions.eventTrigger = \"submit\";\r\n\r\n\t\t\t// validate each field \r\n\t\t\t// (- skip field ajax validation, not necessary IF we will perform an ajax form validation)\r\n\t\t\tvar r=methods._validateFields(form);\r\n\r\n\t\t\tif (r && options.ajaxFormValidation) {\r\n\t\t\t\tmethods._validateFormWithAjax(form, options);\r\n\t\t\t\t// cancel form auto-submission - process with async call onAjaxFormComplete\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tif(options.onValidationComplete) {\r\n\t\t\t\t// !! ensures that an undefined return is interpreted as return false but allows a onValidationComplete() to possibly return true and have form continue processing\r\n\t\t\t\treturn !!options.onValidationComplete(form, r);\r\n\t\t\t}\r\n\t\t\treturn r;\r\n\t\t},\r\n\t\t/**\r\n\t\t* Return true if the ajax field validations passed so far\r\n\t\t* @param {Object} options\r\n\t\t* @return true, is all ajax validation passed so far (remember ajax is async)\r\n\t\t*/\r\n\t\t_checkAjaxStatus: function(options) {\r\n\t\t\tvar status = true;\r\n\t\t\t$.each(options.ajaxValidCache, function(key, value) {\r\n\t\t\t\tif (!value) {\r\n\t\t\t\t\tstatus = false;\r\n\t\t\t\t\t// break the each\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\treturn status;\r\n\t\t},\r\n\t\t\r\n\t\t/**\r\n\t\t* Return true if the ajax field is validated\r\n\t\t* @param {String} fieldid\r\n\t\t* @param {Object} options\r\n\t\t* @return true, if validation passed, false if false or doesn't exist\r\n\t\t*/\r\n\t\t_checkAjaxFieldStatus: function(fieldid, options) {\r\n\t\t\treturn options.ajaxValidCache[fieldid] == true;\r\n\t\t},\r\n\t\t/**\r\n\t\t* Validates form fields, shows prompts accordingly\r\n\t\t*\r\n\t\t* @param {jqObject}\r\n\t\t*            form\r\n\t\t* @param {skipAjaxFieldValidation}\r\n\t\t*            boolean - when set to true, ajax field validation is skipped, typically used when the submit button is clicked\r\n\t\t*\r\n\t\t* @return true if form is valid, false if not, undefined if ajax form validation is done\r\n\t\t*/\r\n\t\t_validateFields: function(form) {\r\n\t\t\tvar options = form.data('jqv');\r\n\r\n\t\t\t// this variable is set to true if an error is found\r\n\t\t\tvar errorFound = false;\r\n\r\n\t\t\t// Trigger hook, start validation\r\n\t\t\tform.trigger(\"jqv.form.validating\");\r\n\t\t\t// first, evaluate status of non ajax fields\r\n\t\t\tvar first_err=null;\r\n\t\t\tform.find('['+options.validateAttribute+'*=validate]').not(\":disabled\").each( function() {\r\n\t\t\t\tvar field = $(this);\r\n\t\t\t\tvar names = [];\r\n\t\t\t\tif ($.inArray(field.attr('name'), names) < 0) {\r\n\t\t\t\t\terrorFound |= methods._validateField(field, options);\r\n\t\t\t\t\tif (errorFound && first_err==null)\r\n\t\t\t\t\t\tif (field.is(\":hidden\") && options.prettySelect)\r\n\t\t\t\t\t\t\t\t\t\t first_err = field = form.find(\"#\" + options.usePrefix + methods._jqSelector(field.attr('id')) + options.useSuffix);\r\n\t\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t\t\t first_err=field;\r\n\t\t\t\t\tif (options.doNotShowAllErrosOnSubmit)\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\tnames.push(field.attr('name'));\r\n\r\n\t\t\t\t\t//if option set, stop checking validation rules after one error is found\r\n\t\t\t\t\tif(options.showOneMessage == true && errorFound){\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t// second, check to see if all ajax calls completed ok\r\n\t\t\t// errorFound |= !methods._checkAjaxStatus(options);\r\n\r\n\t\t\t// third, check status and scroll the container accordingly\r\n\t\t\tform.trigger(\"jqv.form.result\", [errorFound]);\r\n\r\n\t\t\tif (errorFound) {\r\n\t\t\t\tif (options.scroll) {\r\n\t\t\t\t\tvar destination=first_err.offset().top;\r\n\t\t\t\t\tvar fixleft = first_err.offset().left;\r\n\r\n\t\t\t\t\t//prompt positioning adjustment support. Usage: positionType:Xshift,Yshift (for ex.: bottomLeft:+20 or bottomLeft:-20,+10)\r\n\t\t\t\t\tvar positionType=options.promptPosition;\r\n\t\t\t\t\tif (typeof(positionType)=='string' && positionType.indexOf(\":\")!=-1)\r\n\t\t\t\t\t\tpositionType=positionType.substring(0,positionType.indexOf(\":\"));\r\n\r\n\t\t\t\t\tif (positionType!=\"bottomRight\" && positionType!=\"bottomLeft\") {\r\n\t\t\t\t\t\tvar prompt_err= methods._getPrompt(first_err);\r\n\t\t\t\t\t\tif (prompt_err) {\r\n\t\t\t\t\t\t\tdestination=prompt_err.offset().top;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\t// Offset the amount the page scrolls by an amount in px to accomodate fixed elements at top of page\r\n\t\t\t\t\tif (options.scrollOffset) {\r\n\t\t\t\t\t\tdestination -= options.scrollOffset;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// get the position of the first error, there should be at least one, no need to check this\r\n\t\t\t\t\t//var destination = form.find(\".formError:not('.greenPopup'):first\").offset().top;\r\n\t\t\t\t\tif (options.isOverflown) {\r\n\t\t\t\t\t\tvar overflowDIV = $(options.overflownDIV);\r\n\t\t\t\t\t\tif(!overflowDIV.length) return false;\r\n\t\t\t\t\t\tvar scrollContainerScroll = overflowDIV.scrollTop();\r\n\t\t\t\t\t\tvar scrollContainerPos = -parseInt(overflowDIV.offset().top);\r\n\r\n\t\t\t\t\t\tdestination += scrollContainerScroll + scrollContainerPos - 5;\r\n\t\t\t\t\t\tvar scrollContainer = $(options.overflownDIV + \":not(:animated)\");\r\n\r\n\t\t\t\t\t\tscrollContainer.animate({ scrollTop: destination }, 1100, function(){\r\n\t\t\t\t\t\t\tif(options.focusFirstField) first_err.focus();\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t$(\"html, body\").animate({\r\n\t\t\t\t\t\t\tscrollTop: destination\r\n\t\t\t\t\t\t}, 1100, function(){\r\n\t\t\t\t\t\t\tif(options.focusFirstField) first_err.focus();\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\t$(\"html, body\").animate({scrollLeft: fixleft},1100)\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} else if(options.focusFirstField)\r\n\t\t\t\t\tfirst_err.focus();\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t},\r\n\t\t/**\r\n\t\t* This method is called to perform an ajax form validation.\r\n\t\t* During this process all the (field, value) pairs are sent to the server which returns a list of invalid fields or true\r\n\t\t*\r\n\t\t* @param {jqObject} form\r\n\t\t* @param {Map} options\r\n\t\t*/\r\n\t\t_validateFormWithAjax: function(form, options) {\r\n\r\n\t\t\tvar data = form.serialize();\r\n\t\t\t\t\t\t\t\t\tvar type = (options.ajaxFormValidationMethod) ? options.ajaxFormValidationMethod : \"GET\";\r\n\t\t\tvar url = (options.ajaxFormValidationURL) ? options.ajaxFormValidationURL : form.attr(\"action\");\r\n\t\t\t\t\t\t\t\t\tvar dataType = (options.dataType) ? options.dataType : \"json\";\r\n\t\t\t$.ajax({\r\n\t\t\t\ttype: type,\r\n\t\t\t\turl: url,\r\n\t\t\t\tcache: false,\r\n\t\t\t\tdataType: dataType,\r\n\t\t\t\tdata: data,\r\n\t\t\t\tform: form,\r\n\t\t\t\tmethods: methods,\r\n\t\t\t\toptions: options,\r\n\t\t\t\tbeforeSend: function() {\r\n\t\t\t\t\treturn options.onBeforeAjaxFormValidation(form, options);\r\n\t\t\t\t},\r\n\t\t\t\terror: function(data, transport) {\r\n\t\t\t\t\tmethods._ajaxError(data, transport);\r\n\t\t\t\t},\r\n\t\t\t\tsuccess: function(json) {\r\n\t\t\t\t\tif ((dataType == \"json\") && (json !== true)) {\r\n\t\t\t\t\t\t// getting to this case doesn't necessary means that the form is invalid\r\n\t\t\t\t\t\t// the server may return green or closing prompt actions\r\n\t\t\t\t\t\t// this flag helps figuring it out\r\n\t\t\t\t\t\tvar errorInForm=false;\r\n\t\t\t\t\t\tfor (var i = 0; i < json.length; i++) {\r\n\t\t\t\t\t\t\tvar value = json[i];\r\n\r\n\t\t\t\t\t\t\tvar errorFieldId = value[0];\r\n\t\t\t\t\t\t\tvar errorField = $($(\"#\" + errorFieldId)[0]);\r\n\r\n\t\t\t\t\t\t\t// make sure we found the element\r\n\t\t\t\t\t\t\tif (errorField.length == 1) {\r\n\r\n\t\t\t\t\t\t\t\t// promptText or selector\r\n\t\t\t\t\t\t\t\tvar msg = value[2];\r\n\t\t\t\t\t\t\t\t// if the field is valid\r\n\t\t\t\t\t\t\t\tif (value[1] == true) {\r\n\r\n\t\t\t\t\t\t\t\t\tif (msg == \"\"  || !msg){\r\n\t\t\t\t\t\t\t\t\t\t// if for some reason, status==true and error=\"\", just close the prompt\r\n\t\t\t\t\t\t\t\t\t\tmethods._closePrompt(errorField);\r\n\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\t// the field is valid, but we are displaying a green prompt\r\n\t\t\t\t\t\t\t\t\t\tif (options.allrules[msg]) {\r\n\t\t\t\t\t\t\t\t\t\t\tvar txt = options.allrules[msg].alertTextOk;\r\n\t\t\t\t\t\t\t\t\t\t\tif (txt)\r\n\t\t\t\t\t\t\t\t\t\t\t\tmsg = txt;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tif (options.showPrompts) methods._showPrompt(errorField, msg, \"pass\", false, options, true);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t// the field is invalid, show the red error prompt\r\n\t\t\t\t\t\t\t\t\terrorInForm|=true;\r\n\t\t\t\t\t\t\t\t\tif (options.allrules[msg]) {\r\n\t\t\t\t\t\t\t\t\t\tvar txt = options.allrules[msg].alertText;\r\n\t\t\t\t\t\t\t\t\t\tif (txt)\r\n\t\t\t\t\t\t\t\t\t\t\tmsg = txt;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\tif(options.showPrompts) methods._showPrompt(errorField, msg, \"\", false, options, true);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\toptions.onAjaxFormComplete(!errorInForm, form, json, options);\r\n\t\t\t\t\t} else\r\n\t\t\t\t\t\toptions.onAjaxFormComplete(true, form, json, options);\r\n\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t},\r\n\t\t/**\r\n\t\t* Validates field, shows prompts accordingly\r\n\t\t*\r\n\t\t* @param {jqObject}\r\n\t\t*            field\r\n\t\t* @param {Array[String]}\r\n\t\t*            field's validation rules\r\n\t\t* @param {Map}\r\n\t\t*            user options\r\n\t\t* @return false if field is valid (It is inversed for *fields*, it return false on validate and true on errors.)\r\n\t\t*/\r\n\t\t_validateField: function(field, options, skipAjaxValidation) {\r\n\t\t\tif (!field.attr(\"id\")) {\r\n\t\t\t\tfield.attr(\"id\", \"form-validation-field-\" + $.validationEngine.fieldIdCounter);\r\n\t\t\t\t++$.validationEngine.fieldIdCounter;\r\n\t\t\t}\r\n\r\n\t\t\tif (field.is(\":hidden\") && !options.prettySelect || field.parent().is(\":hidden\"))\r\n\t\t\t\treturn false;\r\n\r\n\t\t\tvar rulesParsing = field.attr(options.validateAttribute);\r\n\t\t\tvar getRules = /validate\\[(.*)\\]/.exec(rulesParsing);\r\n\r\n\t\t\tif (!getRules)\r\n\t\t\t\treturn false;\r\n\t\t\tvar str = getRules[1];\r\n\t\t\tvar rules = str.split(/\\[|,|\\]/);\r\n\r\n\t\t\t// true if we ran the ajax validation, tells the logic to stop messing with prompts\r\n\t\t\tvar isAjaxValidator = false;\r\n\t\t\tvar fieldName = field.attr(\"name\");\r\n\t\t\tvar promptText = \"\";\r\n\t\t\tvar promptType = \"\";\r\n\t\t\tvar required = false;\r\n\t\t\tvar limitErrors = false;\r\n\t\t\toptions.isError = false;\r\n\t\t\toptions.showArrow = true;\r\n\t\t\t\r\n\t\t\t// If the programmer wants to limit the amount of error messages per field,\r\n\t\t\tif (options.maxErrorsPerField > 0) {\r\n\t\t\t\tlimitErrors = true;\r\n\t\t\t}\r\n\r\n\t\t\tvar form = $(field.closest(\"form, .validationEngineContainer\"));\r\n\t\t\t// Fix for adding spaces in the rules\r\n\t\t\tfor (var i = 0; i < rules.length; i++) {\r\n\t\t\t\trules[i] = rules[i].replace(\" \", \"\");\r\n\t\t\t\t// Remove any parsing errors\r\n\t\t\t\tif (rules[i] === '') {\r\n\t\t\t\t\tdelete rules[i];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tfor (var i = 0, field_errors = 0; i < rules.length; i++) {\r\n\t\t\t\t\r\n\t\t\t\t// If we are limiting errors, and have hit the max, break\r\n\t\t\t\tif (limitErrors && field_errors >= options.maxErrorsPerField) {\r\n\t\t\t\t\t// If we haven't hit a required yet, check to see if there is one in the validation rules for this\r\n\t\t\t\t\t// field and that it's index is greater or equal to our current index\r\n\t\t\t\t\tif (!required) {\r\n\t\t\t\t\t\tvar have_required = $.inArray('required', rules);\r\n\t\t\t\t\t\trequired = (have_required != -1 &&  have_required >= i);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\tvar errorMsg = undefined;\r\n\t\t\t\tswitch (rules[i]) {\r\n\r\n\t\t\t\t\tcase \"required\":\r\n\t\t\t\t\t\trequired = true;\r\n\t\t\t\t\t\terrorMsg = methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._required);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"custom\":\r\n\t\t\t\t\t\terrorMsg = methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._custom);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"groupRequired\":\r\n\t\t\t\t\t\t// Check is its the first of group, if not, reload validation with first field\r\n\t\t\t\t\t\t// AND continue normal validation on present field\r\n\t\t\t\t\t\tvar classGroup = \"[\"+options.validateAttribute+\"*=\" +rules[i + 1] +\"]\";\r\n\t\t\t\t\t\tvar firstOfGroup = form.find(classGroup).eq(0);\r\n\t\t\t\t\t\tif(firstOfGroup[0] != field[0]){\r\n\r\n\t\t\t\t\t\t\tmethods._validateField(firstOfGroup, options, skipAjaxValidation); \r\n\t\t\t\t\t\t\toptions.showArrow = true;\r\n\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\terrorMsg = methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._groupRequired);\r\n\t\t\t\t\t\tif(errorMsg)  required = true;\r\n\t\t\t\t\t\toptions.showArrow = false;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"ajax\":\r\n\t\t\t\t\t\t// AJAX defaults to returning it's loading message\r\n\t\t\t\t\t\terrorMsg = methods._ajax(field, rules, i, options);\r\n\t\t\t\t\t\tif (errorMsg) {\r\n\t\t\t\t\t\t\tpromptType = \"load\";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"minSize\":\r\n\t\t\t\t\t\terrorMsg = methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._minSize);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"maxSize\":\r\n\t\t\t\t\t\terrorMsg = methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._maxSize);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"min\":\r\n\t\t\t\t\t\terrorMsg = methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._min);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"max\":\r\n\t\t\t\t\t\terrorMsg = methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._max);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"past\":\r\n\t\t\t\t\t\terrorMsg = methods._getErrorMessage(form, field,rules[i], rules, i, options, methods._past);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"future\":\r\n\t\t\t\t\t\terrorMsg = methods._getErrorMessage(form, field,rules[i], rules, i, options, methods._future);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"dateRange\":\r\n\t\t\t\t\t\tvar classGroup = \"[\"+options.validateAttribute+\"*=\" + rules[i + 1] + \"]\";\r\n\t\t\t\t\t\toptions.firstOfGroup = form.find(classGroup).eq(0);\r\n\t\t\t\t\t\toptions.secondOfGroup = form.find(classGroup).eq(1);\r\n\r\n\t\t\t\t\t\t//if one entry out of the pair has value then proceed to run through validation\r\n\t\t\t\t\t\tif (options.firstOfGroup[0].value || options.secondOfGroup[0].value) {\r\n\t\t\t\t\t\t\terrorMsg = methods._getErrorMessage(form, field,rules[i], rules, i, options, methods._dateRange);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (errorMsg) required = true;\r\n\t\t\t\t\t\toptions.showArrow = false;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"dateTimeRange\":\r\n\t\t\t\t\t\tvar classGroup = \"[\"+options.validateAttribute+\"*=\" + rules[i + 1] + \"]\";\r\n\t\t\t\t\t\toptions.firstOfGroup = form.find(classGroup).eq(0);\r\n\t\t\t\t\t\toptions.secondOfGroup = form.find(classGroup).eq(1);\r\n\r\n\t\t\t\t\t\t//if one entry out of the pair has value then proceed to run through validation\r\n\t\t\t\t\t\tif (options.firstOfGroup[0].value || options.secondOfGroup[0].value) {\r\n\t\t\t\t\t\t\terrorMsg = methods._getErrorMessage(form, field,rules[i], rules, i, options, methods._dateTimeRange);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (errorMsg) required = true;\r\n\t\t\t\t\t\toptions.showArrow = false;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"maxCheckbox\":\r\n\t\t\t\t\t\tfield = $(form.find(\"input[name='\" + fieldName + \"']\"));\r\n\t\t\t\t\t\terrorMsg = methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._maxCheckbox);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"minCheckbox\":\r\n\t\t\t\t\t\tfield = $(form.find(\"input[name='\" + fieldName + \"']\"));\r\n\t\t\t\t\t\terrorMsg = methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._minCheckbox);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"equals\":\r\n\t\t\t\t\t\terrorMsg = methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._equals);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"funcCall\":\r\n\t\t\t\t\t\terrorMsg = methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._funcCall);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"creditCard\":\r\n\t\t\t\t\t\terrorMsg = methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._creditCard);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"condRequired\":\r\n\t\t\t\t\t\terrorMsg = methods._getErrorMessage(form, field, rules[i], rules, i, options, methods._condRequired);\r\n\t\t\t\t\t\tif (errorMsg !== undefined) {\r\n\t\t\t\t\t\t\trequired = true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tvar end_validation = false;\r\n\t\t\t\t\r\n\t\t\t\t// If we were passed back an message object, check what the status was to determine what to do\r\n\t\t\t\tif (typeof errorMsg == \"object\") {\r\n\t\t\t\t\tswitch (errorMsg.status) {\r\n\t\t\t\t\t\tcase \"_break\":\r\n\t\t\t\t\t\t\tend_validation = true;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t// If we have an error message, set errorMsg to the error message\r\n\t\t\t\t\t\tcase \"_error\":\r\n\t\t\t\t\t\t\terrorMsg = errorMsg.message;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t// If we want to throw an error, but not show a prompt, return early with true\r\n\t\t\t\t\t\tcase \"_error_no_prompt\":\r\n\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t// Anything else we continue on\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\t// If it has been specified that validation should end now, break\r\n\t\t\t\tif (end_validation) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\t// If we have a string, that means that we have an error, so add it to the error message.\r\n\t\t\t\tif (typeof errorMsg == 'string') {\r\n\t\t\t\t\tpromptText += errorMsg + \"<br/>\";\r\n\t\t\t\t\toptions.isError = true;\r\n\t\t\t\t\tfield_errors++;\r\n\t\t\t\t}\t\r\n\t\t\t}\r\n\t\t\t// If the rules required is not added, an empty field is not validated\r\n\t\t\tif(!required && !(field.val()) && field.val().length < 1) options.isError = false;\r\n\r\n\t\t\t// Hack for radio/checkbox group button, the validation go into the\r\n\t\t\t// first radio/checkbox of the group\r\n\t\t\tvar fieldType = field.prop(\"type\");\r\n\t\t\tvar positionType=field.data(\"promptPosition\") || options.promptPosition;\r\n\r\n\t\t\tif ((fieldType == \"radio\" || fieldType == \"checkbox\") && form.find(\"input[name='\" + fieldName + \"']\").size() > 1) {\r\n\t\t\t\tif(positionType === 'inline') {\r\n\t\t\t\t\tfield = $(form.find(\"input[name='\" + fieldName + \"'][type!=hidden]:last\"));\r\n\t\t\t\t} else {\r\n\t\t\t\tfield = $(form.find(\"input[name='\" + fieldName + \"'][type!=hidden]:first\"));\r\n\t\t\t\t}\r\n\t\t\t\toptions.showArrow = false;\r\n\t\t\t}\r\n\r\n\t\t\tif(field.is(\":hidden\") && options.prettySelect) {\r\n\t\t\t\tfield = form.find(\"#\" + options.usePrefix + methods._jqSelector(field.attr('id')) + options.useSuffix);\r\n\t\t\t}\r\n\r\n\t\t\tif (options.isError && options.showPrompts){\r\n\t\t\t\tmethods._showPrompt(field, promptText, promptType, false, options);\r\n\t\t\t}else{\r\n\t\t\t\tif (!isAjaxValidator) methods._closePrompt(field);\r\n\t\t\t}\r\n\r\n\t\t\tif (!isAjaxValidator) {\r\n\t\t\t\tfield.trigger(\"jqv.field.result\", [field, options.isError, promptText]);\r\n\t\t\t}\r\n\r\n\t\t\t/* Record error */\r\n\t\t\tvar errindex = $.inArray(field[0], options.InvalidFields);\r\n\t\t\tif (errindex == -1) {\r\n\t\t\t\tif (options.isError)\r\n\t\t\t\toptions.InvalidFields.push(field[0]);\r\n\t\t\t} else if (!options.isError) {\r\n\t\t\t\toptions.InvalidFields.splice(errindex, 1);\r\n\t\t\t}\r\n\t\t\t\t\r\n\t\t\tmethods._handleStatusCssClasses(field, options);\r\n\t\r\n\t\t\t/* run callback function for each field */\r\n\t\t\tif (options.isError && options.onFieldFailure)\r\n\t\t\t\toptions.onFieldFailure(field);\r\n\r\n\t\t\tif (!options.isError && options.onFieldSuccess)\r\n\t\t\t\toptions.onFieldSuccess(field);\r\n\r\n\t\t\treturn options.isError;\r\n\t\t},\r\n\t\t/**\r\n\t\t* Handling css classes of fields indicating result of validation \r\n\t\t*\r\n\t\t* @param {jqObject}\r\n\t\t*            field\r\n\t\t* @param {Array[String]}\r\n\t\t*            field's validation rules            \r\n\t\t* @private\r\n\t\t*/\r\n\t\t_handleStatusCssClasses: function(field, options) {\r\n\t\t\t/* remove all classes */\r\n\t\t\tif(options.addSuccessCssClassToField)\r\n\t\t\t\tfield.removeClass(options.addSuccessCssClassToField);\r\n\t\t\t\r\n\t\t\tif(options.addFailureCssClassToField)\r\n\t\t\t\tfield.removeClass(options.addFailureCssClassToField);\r\n\t\t\t\r\n\t\t\t/* Add classes */\r\n\t\t\tif (options.addSuccessCssClassToField && !options.isError)\r\n\t\t\t\tfield.addClass(options.addSuccessCssClassToField);\r\n\t\t\t\r\n\t\t\tif (options.addFailureCssClassToField && options.isError)\r\n\t\t\t\tfield.addClass(options.addFailureCssClassToField);\t\t\r\n\t\t},\r\n\t\t\r\n\t\t /********************\r\n\t\t  * _getErrorMessage\r\n\t\t  *\r\n\t\t  * @param form\r\n\t\t  * @param field\r\n\t\t  * @param rule\r\n\t\t  * @param rules\r\n\t\t  * @param i\r\n\t\t  * @param options\r\n\t\t  * @param originalValidationMethod\r\n\t\t  * @return {*}\r\n\t\t  * @private\r\n\t\t  */\r\n\t\t _getErrorMessage:function (form, field, rule, rules, i, options, originalValidationMethod) {\r\n\t\t\t // If we are using the custon validation type, build the index for the rule.\r\n\t\t\t // Otherwise if we are doing a function call, make the call and return the object\r\n\t\t\t // that is passed back.\r\n\t \t\t var rule_index = jQuery.inArray(rule, rules);\r\n\t\t\t if (rule === \"custom\" || rule === \"funcCall\") {\r\n\t\t\t\t var custom_validation_type = rules[rule_index + 1];\r\n\t\t\t\t rule = rule + \"[\" + custom_validation_type + \"]\";\r\n\t\t\t\t // Delete the rule from the rules array so that it doesn't try to call the\r\n\t\t\t    // same rule over again\r\n\t\t\t    delete(rules[rule_index]);\r\n\t\t\t }\r\n\t\t\t // Change the rule to the composite rule, if it was different from the original\r\n\t\t\t var alteredRule = rule;\r\n\r\n\r\n\t\t\t var element_classes = (field.attr(\"data-validation-engine\")) ? field.attr(\"data-validation-engine\") : field.attr(\"class\");\r\n\t\t\t var element_classes_array = element_classes.split(\" \");\r\n\r\n\t\t\t // Call the original validation method. If we are dealing with dates or checkboxes, also pass the form\r\n\t\t\t var errorMsg;\r\n\t\t\t if (rule == \"future\" || rule == \"past\"  || rule == \"maxCheckbox\" || rule == \"minCheckbox\") {\r\n\t\t\t\t errorMsg = originalValidationMethod(form, field, rules, i, options);\r\n\t\t\t } else {\r\n\t\t\t\t errorMsg = originalValidationMethod(field, rules, i, options);\r\n\t\t\t }\r\n\r\n\t\t\t // If the original validation method returned an error and we have a custom error message,\r\n\t\t\t // return the custom message instead. Otherwise return the original error message.\r\n\t\t\t if (errorMsg != undefined) {\r\n\t\t\t\t var custom_message = methods._getCustomErrorMessage($(field), element_classes_array, alteredRule, options);\r\n\t\t\t\t if (custom_message) errorMsg = custom_message;\r\n\t\t\t }\r\n\t\t\t return errorMsg;\r\n\r\n\t\t },\r\n\t\t _getCustomErrorMessage:function (field, classes, rule, options) {\r\n\t\t\tvar custom_message = false;\r\n\t\t\tvar validityProp = methods._validityProp[rule];\r\n\t\t\t // If there is a validityProp for this rule, check to see if the field has an attribute for it\r\n\t\t\tif (validityProp != undefined) {\r\n\t\t\t\tcustom_message = field.attr(\"data-errormessage-\"+validityProp);\r\n\t\t\t\t// If there was an error message for it, return the message\r\n\t\t\t\tif (custom_message != undefined) \r\n\t\t\t\t\treturn custom_message;\r\n\t\t\t}\r\n\t\t\tcustom_message = field.attr(\"data-errormessage\");\r\n\t\t\t // If there is an inline custom error message, return it\r\n\t\t\tif (custom_message != undefined) \r\n\t\t\t\treturn custom_message;\r\n\t\t\tvar id = '#' + field.attr(\"id\");\r\n\t\t\t// If we have custom messages for the element's id, get the message for the rule from the id.\r\n\t\t\t// Otherwise, if we have custom messages for the element's classes, use the first class message we find instead.\r\n\t\t\tif (typeof options.custom_error_messages[id] != \"undefined\" &&\r\n\t\t\t\ttypeof options.custom_error_messages[id][rule] != \"undefined\" ) {\r\n\t\t\t\t\t\t  custom_message = options.custom_error_messages[id][rule]['message'];\r\n\t\t\t} else if (classes.length > 0) {\r\n\t\t\t\tfor (var i = 0; i < classes.length && classes.length > 0; i++) {\r\n\t\t\t\t\t var element_class = \".\" + classes[i];\r\n\t\t\t\t\tif (typeof options.custom_error_messages[element_class] != \"undefined\" &&\r\n\t\t\t\t\t\ttypeof options.custom_error_messages[element_class][rule] != \"undefined\") {\r\n\t\t\t\t\t\t\tcustom_message = options.custom_error_messages[element_class][rule]['message'];\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (!custom_message &&\r\n\t\t\t\ttypeof options.custom_error_messages[rule] != \"undefined\" &&\r\n\t\t\t\ttypeof options.custom_error_messages[rule]['message'] != \"undefined\"){\r\n\t\t\t\t\t custom_message = options.custom_error_messages[rule]['message'];\r\n\t\t\t }\r\n\t\t\t return custom_message;\r\n\t\t },\r\n\t\t _validityProp: {\r\n\t\t\t \"required\": \"value-missing\",\r\n\t\t\t \"custom\": \"custom-error\",\r\n\t\t\t \"groupRequired\": \"value-missing\",\r\n\t\t\t \"ajax\": \"custom-error\",\r\n\t\t\t \"minSize\": \"range-underflow\",\r\n\t\t\t \"maxSize\": \"range-overflow\",\r\n\t\t\t \"min\": \"range-underflow\",\r\n\t\t\t \"max\": \"range-overflow\",\r\n\t\t\t \"past\": \"type-mismatch\",\r\n\t\t\t \"future\": \"type-mismatch\",\r\n\t\t\t \"dateRange\": \"type-mismatch\",\r\n\t\t\t \"dateTimeRange\": \"type-mismatch\",\r\n\t\t\t \"maxCheckbox\": \"range-overflow\",\r\n\t\t\t \"minCheckbox\": \"range-underflow\",\r\n\t\t\t \"equals\": \"pattern-mismatch\",\r\n\t\t\t \"funcCall\": \"custom-error\",\r\n\t\t\t \"creditCard\": \"pattern-mismatch\",\r\n\t\t\t \"condRequired\": \"value-missing\"\r\n\t\t },\r\n\t\t/**\r\n\t\t* Required validation\r\n\t\t*\r\n\t\t* @param {jqObject} field\r\n\t\t* @param {Array[String]} rules\r\n\t\t* @param {int} i rules index\r\n\t\t* @param {Map}\r\n\t\t*            user options\r\n\t\t* @param {bool} condRequired flag when method is used for internal purpose in condRequired check\r\n\t\t* @return an error string if validation failed\r\n\t\t*/\r\n\t\t_required: function(field, rules, i, options, condRequired) {\r\n\t\t\tswitch (field.prop(\"type\")) {\r\n\t\t\t\tcase \"text\":\r\n\t\t\t\tcase \"password\":\r\n\t\t\t\tcase \"textarea\":\r\n\t\t\t\tcase \"file\":\r\n\t\t\t\tcase \"select-one\":\r\n\t\t\t\tcase \"select-multiple\":\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tif (! $.trim(field.val()) && ((field.val() != field.attr(\"data-validation-placeholder\")) || (field.val() !== field.attr(\"placeholder\"))))\r\n\t\t\t\t\t\treturn options.allrules[rules[i]].alertText;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"radio\":\r\n\t\t\t\tcase \"checkbox\":\r\n\t\t\t\t\t// new validation style to only check dependent field\r\n\t\t\t\t\tif (condRequired) {\r\n\t\t\t\t\t\tif (!field.attr('checked')) {\r\n\t\t\t\t\t\t\treturn options.allrules[rules[i]].alertTextCheckboxMultiple;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// old validation style\r\n\t\t\t\t\tvar form = field.closest(\"form, .validationEngineContainer\");\r\n\t\t\t\t\tvar name = field.attr(\"name\");\r\n\t\t\t\t\tif (form.find(\"input[name='\" + name + \"']:checked\").size() == 0) {\r\n\t\t\t\t\t\tif (form.find(\"input[name='\" + name + \"']:visible\").size() == 1)\r\n\t\t\t\t\t\t\treturn options.allrules[rules[i]].alertTextCheckboxe;\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\treturn options.allrules[rules[i]].alertTextCheckboxMultiple;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t},\r\n\t\t/**\r\n\t\t* Validate that 1 from the group field is required\r\n\t\t*\r\n\t\t* @param {jqObject} field\r\n\t\t* @param {Array[String]} rules\r\n\t\t* @param {int} i rules index\r\n\t\t* @param {Map}\r\n\t\t*            user options\r\n\t\t* @return an error string if validation failed\r\n\t\t*/\r\n\t\t_groupRequired: function(field, rules, i, options) {\r\n\t\t\tvar classGroup = \"[\"+options.validateAttribute+\"*=\" +rules[i + 1] +\"]\";\r\n\t\t\tvar isValid = false;\r\n\t\t\t// Check all fields from the group\r\n\t\t\tfield.closest(\"form, .validationEngineContainer\").find(classGroup).each(function(){\r\n\t\t\t\tif(!methods._required($(this), rules, i, options)){\r\n\t\t\t\t\tisValid = true;\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}); \r\n\r\n\t\t\tif(!isValid) {\r\n\t\t  return options.allrules[rules[i]].alertText;\r\n\t\t}\r\n\t\t},\r\n\t\t/**\r\n\t\t* Validate rules\r\n\t\t*\r\n\t\t* @param {jqObject} field\r\n\t\t* @param {Array[String]} rules\r\n\t\t* @param {int} i rules index\r\n\t\t* @param {Map}\r\n\t\t*            user options\r\n\t\t* @return an error string if validation failed\r\n\t\t*/\r\n\t\t_custom: function(field, rules, i, options) {\r\n\t\t\tvar customRule = rules[i + 1];\r\n\t\t\tvar rule = options.allrules[customRule];\r\n\t\t\tvar fn;\r\n\t\t\tif(!rule) {\r\n\t\t\t\talert(\"jqv:custom rule not found - \"+customRule);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(rule[\"regex\"]) {\r\n\t\t\t\t var ex=rule.regex;\r\n\t\t\t\t\tif(!ex) {\r\n\t\t\t\t\t\talert(\"jqv:custom regex not found - \"+customRule);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvar pattern = new RegExp(ex);\r\n\r\n\t\t\t\t\tif (!pattern.test(field.val())) return options.allrules[customRule].alertText;\r\n\t\t\t\t\t\r\n\t\t\t} else if(rule[\"func\"]) {\r\n\t\t\t\tfn = rule[\"func\"]; \r\n\t\t\t\t \r\n\t\t\t\tif (typeof(fn) !== \"function\") {\r\n\t\t\t\t\talert(\"jqv:custom parameter 'function' is no function - \"+customRule);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\t \r\n\t\t\t\tif (!fn(field, rules, i, options))\r\n\t\t\t\t\treturn options.allrules[customRule].alertText;\r\n\t\t\t} else {\r\n\t\t\t\talert(\"jqv:custom type not allowed \"+customRule);\r\n\t\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t},\r\n\t\t/**\r\n\t\t* Validate custom function outside of the engine scope\r\n\t\t*\r\n\t\t* @param {jqObject} field\r\n\t\t* @param {Array[String]} rules\r\n\t\t* @param {int} i rules index\r\n\t\t* @param {Map}\r\n\t\t*            user options\r\n\t\t* @return an error string if validation failed\r\n\t\t*/\r\n\t\t_funcCall: function(field, rules, i, options) {\r\n\t\t\tvar functionName = rules[i + 1];\r\n\t\t\tvar fn;\r\n\t\t\tif(functionName.indexOf('.') >-1)\r\n\t\t\t{\r\n\t\t\t\tvar namespaces = functionName.split('.');\r\n\t\t\t\tvar scope = window;\r\n\t\t\t\twhile(namespaces.length)\r\n\t\t\t\t{\r\n\t\t\t\t\tscope = scope[namespaces.shift()];\r\n\t\t\t\t}\r\n\t\t\t\tfn = scope;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\tfn = window[functionName] || options.customFunctions[functionName];\r\n\t\t\tif (typeof(fn) == 'function')\r\n\t\t\t\treturn fn(field, rules, i, options);\r\n\r\n\t\t},\r\n\t\t/**\r\n\t\t* Field match\r\n\t\t*\r\n\t\t* @param {jqObject} field\r\n\t\t* @param {Array[String]} rules\r\n\t\t* @param {int} i rules index\r\n\t\t* @param {Map}\r\n\t\t*            user options\r\n\t\t* @return an error string if validation failed\r\n\t\t*/\r\n\t\t_equals: function(field, rules, i, options) {\r\n\t\t\tvar equalsField = rules[i + 1];\r\n\r\n\t\t\tif (field.val() != $(\"#\" + equalsField).val())\r\n\t\t\t\treturn options.allrules.equals.alertText;\r\n\t\t},\r\n\t\t/**\r\n\t\t* Check the maximum size (in characters)\r\n\t\t*\r\n\t\t* @param {jqObject} field\r\n\t\t* @param {Array[String]} rules\r\n\t\t* @param {int} i rules index\r\n\t\t* @param {Map}\r\n\t\t*            user options\r\n\t\t* @return an error string if validation failed\r\n\t\t*/\r\n\t\t_maxSize: function(field, rules, i, options) {\r\n\t\t\tvar max = rules[i + 1];\r\n\t\t\tvar len = field.val().length;\r\n\r\n\t\t\tif (len > max) {\r\n\t\t\t\tvar rule = options.allrules.maxSize;\r\n\t\t\t\treturn rule.alertText + max + rule.alertText2;\r\n\t\t\t}\r\n\t\t},\r\n\t\t/**\r\n\t\t* Check the minimum size (in characters)\r\n\t\t*\r\n\t\t* @param {jqObject} field\r\n\t\t* @param {Array[String]} rules\r\n\t\t* @param {int} i rules index\r\n\t\t* @param {Map}\r\n\t\t*            user options\r\n\t\t* @return an error string if validation failed\r\n\t\t*/\r\n\t\t_minSize: function(field, rules, i, options) {\r\n\t\t\tvar min = rules[i + 1];\r\n\t\t\tvar len = field.val().length;\r\n\r\n\t\t\tif (len < min) {\r\n\t\t\t\tvar rule = options.allrules.minSize;\r\n\t\t\t\treturn rule.alertText + min + rule.alertText2;\r\n\t\t\t}\r\n\t\t},\r\n\t\t/**\r\n\t\t* Check number minimum value\r\n\t\t*\r\n\t\t* @param {jqObject} field\r\n\t\t* @param {Array[String]} rules\r\n\t\t* @param {int} i rules index\r\n\t\t* @param {Map}\r\n\t\t*            user options\r\n\t\t* @return an error string if validation failed\r\n\t\t*/\r\n\t\t_min: function(field, rules, i, options) {\r\n\t\t\tvar min = parseFloat(rules[i + 1]);\r\n\t\t\tvar len = parseFloat(field.val());\r\n\r\n\t\t\tif (len < min) {\r\n\t\t\t\tvar rule = options.allrules.min;\r\n\t\t\t\tif (rule.alertText2) return rule.alertText + min + rule.alertText2;\r\n\t\t\t\treturn rule.alertText + min;\r\n\t\t\t}\r\n\t\t},\r\n\t\t/**\r\n\t\t* Check number maximum value\r\n\t\t*\r\n\t\t* @param {jqObject} field\r\n\t\t* @param {Array[String]} rules\r\n\t\t* @param {int} i rules index\r\n\t\t* @param {Map}\r\n\t\t*            user options\r\n\t\t* @return an error string if validation failed\r\n\t\t*/\r\n\t\t_max: function(field, rules, i, options) {\r\n\t\t\tvar max = parseFloat(rules[i + 1]);\r\n\t\t\tvar len = parseFloat(field.val());\r\n\r\n\t\t\tif (len >max ) {\r\n\t\t\t\tvar rule = options.allrules.max;\r\n\t\t\t\tif (rule.alertText2) return rule.alertText + max + rule.alertText2;\r\n\t\t\t\t//orefalo: to review, also do the translations\r\n\t\t\t\treturn rule.alertText + max;\r\n\t\t\t}\r\n\t\t},\r\n\t\t/**\r\n\t\t* Checks date is in the past\r\n\t\t*\r\n\t\t* @param {jqObject} field\r\n\t\t* @param {Array[String]} rules\r\n\t\t* @param {int} i rules index\r\n\t\t* @param {Map}\r\n\t\t*            user options\r\n\t\t* @return an error string if validation failed\r\n\t\t*/\r\n\t\t_past: function(form, field, rules, i, options) {\r\n\r\n\t\t\tvar p=rules[i + 1];\r\n\t\t\tvar fieldAlt = $(form.find(\"input[name='\" + p.replace(/^#+/, '') + \"']\"));\r\n\t\t\tvar pdate;\r\n\r\n\t\t\tif (p.toLowerCase() == \"now\") {\r\n\t\t\t\tpdate = new Date();\r\n\t\t\t} else if (undefined != fieldAlt.val()) {\r\n\t\t\t\tif (fieldAlt.is(\":disabled\"))\r\n\t\t\t\t\treturn;\r\n\t\t\t\tpdate = methods._parseDate(fieldAlt.val());\r\n\t\t\t} else {\r\n\t\t\t\tpdate = methods._parseDate(p);\r\n\t\t\t}\r\n\t\t\tvar vdate = methods._parseDate(field.val());\r\n\r\n\t\t\tif (vdate > pdate ) {\r\n\t\t\t\tvar rule = options.allrules.past;\r\n\t\t\t\tif (rule.alertText2) return rule.alertText + methods._dateToString(pdate) + rule.alertText2;\r\n\t\t\t\treturn rule.alertText + methods._dateToString(pdate);\r\n\t\t\t}\r\n\t\t},\r\n\t\t/**\r\n\t\t* Checks date is in the future\r\n\t\t*\r\n\t\t* @param {jqObject} field\r\n\t\t* @param {Array[String]} rules\r\n\t\t* @param {int} i rules index\r\n\t\t* @param {Map}\r\n\t\t*            user options\r\n\t\t* @return an error string if validation failed\r\n\t\t*/\r\n\t\t_future: function(form, field, rules, i, options) {\r\n\r\n\t\t\tvar p=rules[i + 1];\r\n\t\t\tvar fieldAlt = $(form.find(\"input[name='\" + p.replace(/^#+/, '') + \"']\"));\r\n\t\t\tvar pdate;\r\n\r\n\t\t\tif (p.toLowerCase() == \"now\") {\r\n\t\t\t\tpdate = new Date();\r\n\t\t\t} else if (undefined != fieldAlt.val()) {\r\n\t\t\t\tif (fieldAlt.is(\":disabled\"))\r\n\t\t\t\t\treturn;\r\n\t\t\t\tpdate = methods._parseDate(fieldAlt.val());\r\n\t\t\t} else {\r\n\t\t\t\tpdate = methods._parseDate(p);\r\n\t\t\t}\r\n\t\t\tvar vdate = methods._parseDate(field.val());\r\n\r\n\t\t\tif (vdate < pdate ) {\r\n\t\t\t\tvar rule = options.allrules.future;\r\n\t\t\t\tif (rule.alertText2)\r\n\t\t\t\t\treturn rule.alertText + methods._dateToString(pdate) + rule.alertText2;\r\n\t\t\t\treturn rule.alertText + methods._dateToString(pdate);\r\n\t\t\t}\r\n\t\t},\r\n\t\t/**\r\n\t\t* Checks if valid date\r\n\t\t*\r\n\t\t* @param {string} date string\r\n\t\t* @return a bool based on determination of valid date\r\n\t\t*/\r\n\t\t_isDate: function (value) {\r\n\t\t\tvar dateRegEx = new RegExp(/^\\d{4}[\\/\\-](0?[1-9]|1[012])[\\/\\-](0?[1-9]|[12][0-9]|3[01])$|^(?:(?:(?:0?[13578]|1[02])(\\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\\/|-)(?:29|30)))(\\/|-)(?:[1-9]\\d\\d\\d|\\d[1-9]\\d\\d|\\d\\d[1-9]\\d|\\d\\d\\d[1-9])$|^(?:(?:0?[1-9]|1[0-2])(\\/|-)(?:0?[1-9]|1\\d|2[0-8]))(\\/|-)(?:[1-9]\\d\\d\\d|\\d[1-9]\\d\\d|\\d\\d[1-9]\\d|\\d\\d\\d[1-9])$|^(0?2(\\/|-)29)(\\/|-)(?:(?:0[48]00|[13579][26]00|[2468][048]00)|(?:\\d\\d)?(?:0[48]|[2468][048]|[13579][26]))$/);\r\n\t\t\treturn dateRegEx.test(value);\r\n\t\t},\r\n\t\t/**\r\n\t\t* Checks if valid date time\r\n\t\t*\r\n\t\t* @param {string} date string\r\n\t\t* @return a bool based on determination of valid date time\r\n\t\t*/\r\n\t\t_isDateTime: function (value){\r\n\t\t\tvar dateTimeRegEx = new RegExp(/^\\d{4}[\\/\\-](0?[1-9]|1[012])[\\/\\-](0?[1-9]|[12][0-9]|3[01])\\s+(1[012]|0?[1-9]){1}:(0?[1-5]|[0-6][0-9]){1}:(0?[0-6]|[0-6][0-9]){1}\\s+(am|pm|AM|PM){1}$|^(?:(?:(?:0?[13578]|1[02])(\\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\\/|-)(?:29|30)))(\\/|-)(?:[1-9]\\d\\d\\d|\\d[1-9]\\d\\d|\\d\\d[1-9]\\d|\\d\\d\\d[1-9])$|^((1[012]|0?[1-9]){1}\\/(0?[1-9]|[12][0-9]|3[01]){1}\\/\\d{2,4}\\s+(1[012]|0?[1-9]){1}:(0?[1-5]|[0-6][0-9]){1}:(0?[0-6]|[0-6][0-9]){1}\\s+(am|pm|AM|PM){1})$/);\r\n\t\t\treturn dateTimeRegEx.test(value);\r\n\t\t},\r\n\t\t//Checks if the start date is before the end date\r\n\t\t//returns true if end is later than start\r\n\t\t_dateCompare: function (start, end) {\r\n\t\t\treturn (new Date(start.toString()) < new Date(end.toString()));\r\n\t\t},\r\n\t\t/**\r\n\t\t* Checks date range\r\n\t\t*\r\n\t\t* @param {jqObject} first field name\r\n\t\t* @param {jqObject} second field name\r\n\t\t* @return an error string if validation failed\r\n\t\t*/\r\n\t\t_dateRange: function (field, rules, i, options) {\r\n\t\t\t//are not both populated\r\n\t\t\tif ((!options.firstOfGroup[0].value && options.secondOfGroup[0].value) || (options.firstOfGroup[0].value && !options.secondOfGroup[0].value)) {\r\n\t\t\t\treturn options.allrules[rules[i]].alertText + options.allrules[rules[i]].alertText2;\r\n\t\t\t}\r\n\r\n\t\t\t//are not both dates\r\n\t\t\tif (!methods._isDate(options.firstOfGroup[0].value) || !methods._isDate(options.secondOfGroup[0].value)) {\r\n\t\t\t\treturn options.allrules[rules[i]].alertText + options.allrules[rules[i]].alertText2;\r\n\t\t\t}\r\n\r\n\t\t\t//are both dates but range is off\r\n\t\t\tif (!methods._dateCompare(options.firstOfGroup[0].value, options.secondOfGroup[0].value)) {\r\n\t\t\t\treturn options.allrules[rules[i]].alertText + options.allrules[rules[i]].alertText2;\r\n\t\t\t}\r\n\t\t},\r\n\t\t/**\r\n\t\t* Checks date time range\r\n\t\t*\r\n\t\t* @param {jqObject} first field name\r\n\t\t* @param {jqObject} second field name\r\n\t\t* @return an error string if validation failed\r\n\t\t*/\r\n\t\t_dateTimeRange: function (field, rules, i, options) {\r\n\t\t\t//are not both populated\r\n\t\t\tif ((!options.firstOfGroup[0].value && options.secondOfGroup[0].value) || (options.firstOfGroup[0].value && !options.secondOfGroup[0].value)) {\r\n\t\t\t\treturn options.allrules[rules[i]].alertText + options.allrules[rules[i]].alertText2;\r\n\t\t\t}\r\n\t\t\t//are not both dates\r\n\t\t\tif (!methods._isDateTime(options.firstOfGroup[0].value) || !methods._isDateTime(options.secondOfGroup[0].value)) {\r\n\t\t\t\treturn options.allrules[rules[i]].alertText + options.allrules[rules[i]].alertText2;\r\n\t\t\t}\r\n\t\t\t//are both dates but range is off\r\n\t\t\tif (!methods._dateCompare(options.firstOfGroup[0].value, options.secondOfGroup[0].value)) {\r\n\t\t\t\treturn options.allrules[rules[i]].alertText + options.allrules[rules[i]].alertText2;\r\n\t\t\t}\r\n\t\t},\r\n\t\t/**\r\n\t\t* Max number of checkbox selected\r\n\t\t*\r\n\t\t* @param {jqObject} field\r\n\t\t* @param {Array[String]} rules\r\n\t\t* @param {int} i rules index\r\n\t\t* @param {Map}\r\n\t\t*            user options\r\n\t\t* @return an error string if validation failed\r\n\t\t*/\r\n\t\t_maxCheckbox: function(form, field, rules, i, options) {\r\n\r\n\t\t\tvar nbCheck = rules[i + 1];\r\n\t\t\tvar groupname = field.attr(\"name\");\r\n\t\t\tvar groupSize = form.find(\"input[name='\" + groupname + \"']:checked\").size();\r\n\t\t\tif (groupSize > nbCheck) {\r\n\t\t\t\toptions.showArrow = false;\r\n\t\t\t\tif (options.allrules.maxCheckbox.alertText2)\r\n\t\t\t\t\t return options.allrules.maxCheckbox.alertText + \" \" + nbCheck + \" \" + options.allrules.maxCheckbox.alertText2;\r\n\t\t\t\treturn options.allrules.maxCheckbox.alertText;\r\n\t\t\t}\r\n\t\t},\r\n\t\t/**\r\n\t\t* Min number of checkbox selected\r\n\t\t*\r\n\t\t* @param {jqObject} field\r\n\t\t* @param {Array[String]} rules\r\n\t\t* @param {int} i rules index\r\n\t\t* @param {Map}\r\n\t\t*            user options\r\n\t\t* @return an error string if validation failed\r\n\t\t*/\r\n\t\t_minCheckbox: function(form, field, rules, i, options) {\r\n\r\n\t\t\tvar nbCheck = rules[i + 1];\r\n\t\t\tvar groupname = field.attr(\"name\");\r\n\t\t\tvar groupSize = form.find(\"input[name='\" + groupname + \"']:checked\").size();\r\n\t\t\tif (groupSize < nbCheck) {\r\n\t\t\t\toptions.showArrow = false;\r\n\t\t\t\treturn options.allrules.minCheckbox.alertText + \" \" + nbCheck + \" \" + options.allrules.minCheckbox.alertText2;\r\n\t\t\t}\r\n\t\t},\r\n\t\t/**\r\n\t\t* Checks that it is a valid credit card number according to the\r\n\t\t* Luhn checksum algorithm.\r\n\t\t*\r\n\t\t* @param {jqObject} field\r\n\t\t* @param {Array[String]} rules\r\n\t\t* @param {int} i rules index\r\n\t\t* @param {Map}\r\n\t\t*            user options\r\n\t\t* @return an error string if validation failed\r\n\t\t*/\r\n\t\t_creditCard: function(field, rules, i, options) {\r\n\t\t\t//spaces and dashes may be valid characters, but must be stripped to calculate the checksum.\r\n\t\t\tvar valid = false, cardNumber = field.val().replace(/ +/g, '').replace(/-+/g, '');\r\n\r\n\t\t\tvar numDigits = cardNumber.length;\r\n\t\t\tif (numDigits >= 14 && numDigits <= 16 && parseInt(cardNumber) > 0) {\r\n\r\n\t\t\t\tvar sum = 0, i = numDigits - 1, pos = 1, digit, luhn = new String();\r\n\t\t\t\tdo {\r\n\t\t\t\t\tdigit = parseInt(cardNumber.charAt(i));\r\n\t\t\t\t\tluhn += (pos++ % 2 == 0) ? digit * 2 : digit;\r\n\t\t\t\t} while (--i >= 0)\r\n\r\n\t\t\t\tfor (i = 0; i < luhn.length; i++) {\r\n\t\t\t\t\tsum += parseInt(luhn.charAt(i));\r\n\t\t\t\t}\r\n\t\t\t\tvalid = sum % 10 == 0;\r\n\t\t\t}\r\n\t\t\tif (!valid) return options.allrules.creditCard.alertText;\r\n\t\t},\r\n\t\t/**\r\n\t\t* Ajax field validation\r\n\t\t*\r\n\t\t* @param {jqObject} field\r\n\t\t* @param {Array[String]} rules\r\n\t\t* @param {int} i rules index\r\n\t\t* @param {Map}\r\n\t\t*            user options\r\n\t\t* @return nothing! the ajax validator handles the prompts itself\r\n\t\t*/\r\n\t\t _ajax: function(field, rules, i, options) {\r\n\r\n\t\t\t var errorSelector = rules[i + 1];\r\n\t\t\t var rule = options.allrules[errorSelector];\r\n\t\t\t var extraData = rule.extraData;\r\n\t\t\t var extraDataDynamic = rule.extraDataDynamic;\r\n\t\t\t var data = {\r\n\t\t\t\t\"fieldId\" : field.attr(\"id\"),\r\n\t\t\t\t\"fieldValue\" : field.val()\r\n\t\t\t };\r\n\r\n\t\t\t if (typeof extraData === \"object\") {\r\n\t\t\t\t$.extend(data, extraData);\r\n\t\t\t } else if (typeof extraData === \"string\") {\r\n\t\t\t\tvar tempData = extraData.split(\"&\");\r\n\t\t\t\tfor(var i = 0; i < tempData.length; i++) {\r\n\t\t\t\t\tvar values = tempData[i].split(\"=\");\r\n\t\t\t\t\tif (values[0] && values[0]) {\r\n\t\t\t\t\t\tdata[values[0]] = values[1];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t }\r\n\r\n\t\t\t if (extraDataDynamic) {\r\n\t\t\t\t var tmpData = [];\r\n\t\t\t\t var domIds = String(extraDataDynamic).split(\",\");\r\n\t\t\t\t for (var i = 0; i < domIds.length; i++) {\r\n\t\t\t\t\t var id = domIds[i];\r\n\t\t\t\t\t if ($(id).length) {\r\n\t\t\t\t\t\t var inputValue = field.closest(\"form, .validationEngineContainer\").find(id).val();\r\n\t\t\t\t\t\t var keyValue = id.replace('#', '') + '=' + escape(inputValue);\r\n\t\t\t\t\t\t data[id.replace('#', '')] = inputValue;\r\n\t\t\t\t\t }\r\n\t\t\t\t }\r\n\t\t\t }\r\n\t\t\t \r\n\t\t\t // If a field change event triggered this we want to clear the cache for this ID\r\n\t\t\t if (options.eventTrigger == \"field\") {\r\n\t\t\t\tdelete(options.ajaxValidCache[field.attr(\"id\")]);\r\n\t\t\t }\r\n\r\n\t\t\t // If there is an error or if the the field is already validated, do not re-execute AJAX\r\n\t\t\t if (!options.isError && !methods._checkAjaxFieldStatus(field.attr(\"id\"), options)) {\r\n\t\t\t\t $.ajax({\r\n\t\t\t\t\t type: options.ajaxFormValidationMethod,\r\n\t\t\t\t\t url: rule.url,\r\n\t\t\t\t\t cache: false,\r\n\t\t\t\t\t dataType: \"json\",\r\n\t\t\t\t\t data: data,\r\n\t\t\t\t\t field: field,\r\n\t\t\t\t\t rule: rule,\r\n\t\t\t\t\t methods: methods,\r\n\t\t\t\t\t options: options,\r\n\t\t\t\t\t beforeSend: function() {},\r\n\t\t\t\t\t error: function(data, transport) {\r\n\t\t\t\t\t\t methods._ajaxError(data, transport);\r\n\t\t\t\t\t },\r\n\t\t\t\t\t success: function(json) {\r\n\r\n\t\t\t\t\t\t // asynchronously called on success, data is the json answer from the server\r\n\t\t\t\t\t\t var errorFieldId = json[0];\r\n\t\t\t\t\t\t //var errorField = $($(\"#\" + errorFieldId)[0]);\r\n\t\t\t\t\t\t var errorField = $(\"#\"+ errorFieldId).eq(0);\r\n\r\n\t\t\t\t\t\t // make sure we found the element\r\n\t\t\t\t\t\t if (errorField.length == 1) {\r\n\t\t\t\t\t\t\t var status = json[1];\r\n\t\t\t\t\t\t\t // read the optional msg from the server\r\n\t\t\t\t\t\t\t var msg = json[2];\r\n\t\t\t\t\t\t\t if (!status) {\r\n\t\t\t\t\t\t\t\t // Houston we got a problem - display an red prompt\r\n\t\t\t\t\t\t\t\t options.ajaxValidCache[errorFieldId] = false;\r\n\t\t\t\t\t\t\t\t options.isError = true;\r\n\r\n\t\t\t\t\t\t\t\t // resolve the msg prompt\r\n\t\t\t\t\t\t\t\t if(msg) {\r\n\t\t\t\t\t\t\t\t\t if (options.allrules[msg]) {\r\n\t\t\t\t\t\t\t\t\t\t var txt = options.allrules[msg].alertText;\r\n\t\t\t\t\t\t\t\t\t\t if (txt) {\r\n\t\t\t\t\t\t\t\t\t\t\tmsg = txt;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t }\r\n\t\t\t\t\t\t\t\t }\r\n\t\t\t\t\t\t\t\t else\r\n\t\t\t\t\t\t\t\t\tmsg = rule.alertText;\r\n\r\n\t\t\t\t\t\t\t\t if (options.showPrompts) methods._showPrompt(errorField, msg, \"\", true, options);\r\n\t\t\t\t\t\t\t } else {\r\n\t\t\t\t\t\t\t\t options.ajaxValidCache[errorFieldId] = true;\r\n\r\n\t\t\t\t\t\t\t\t // resolves the msg prompt\r\n\t\t\t\t\t\t\t\t if(msg) {\r\n\t\t\t\t\t\t\t\t\t if (options.allrules[msg]) {\r\n\t\t\t\t\t\t\t\t\t\t var txt = options.allrules[msg].alertTextOk;\r\n\t\t\t\t\t\t\t\t\t\t if (txt) {\r\n\t\t\t\t\t\t\t\t\t\t\tmsg = txt;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t }\r\n\t\t\t\t\t\t\t\t }\r\n\t\t\t\t\t\t\t\t else\r\n\t\t\t\t\t\t\t\t msg = rule.alertTextOk;\r\n\r\n\t\t\t\t\t\t\t\t if (options.showPrompts) {\r\n\t\t\t\t\t\t\t\t\t // see if we should display a green prompt\r\n\t\t\t\t\t\t\t\t\t if (msg)\r\n\t\t\t\t\t\t\t\t\t\tmethods._showPrompt(errorField, msg, \"pass\", true, options);\r\n\t\t\t\t\t\t\t\t\t else\r\n\t\t\t\t\t\t\t\t\t\tmethods._closePrompt(errorField);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t // If a submit form triggered this, we want to re-submit the form\r\n\t\t\t\t\t\t\t\t if (options.eventTrigger == \"submit\")\r\n\t\t\t\t\t\t\t\t\tfield.closest(\"form\").submit();\r\n\t\t\t\t\t\t\t }\r\n\t\t\t\t\t\t }\r\n\t\t\t\t\t\t errorField.trigger(\"jqv.field.result\", [errorField, options.isError, msg]);\r\n\t\t\t\t\t }\r\n\t\t\t\t });\r\n\t\t\t\t \r\n\t\t\t\t return rule.alertTextLoad;\r\n\t\t\t }\r\n\t\t },\r\n\t\t/**\r\n\t\t* Common method to handle ajax errors\r\n\t\t*\r\n\t\t* @param {Object} data\r\n\t\t* @param {Object} transport\r\n\t\t*/\r\n\t\t_ajaxError: function(data, transport) {\r\n\t\t\tif(data.status == 0 && transport == null)\r\n\t\t\t\talert(\"The page is not served from a server! ajax call failed\");\r\n\t\t\telse if(typeof console != \"undefined\")\r\n\t\t\t\tconsole.log(\"Ajax error: \" + data.status + \" \" + transport);\r\n\t\t},\r\n\t\t/**\r\n\t\t* date -> string\r\n\t\t*\r\n\t\t* @param {Object} date\r\n\t\t*/\r\n\t\t_dateToString: function(date) {\r\n\t\t\treturn date.getFullYear()+\"-\"+(date.getMonth()+1)+\"-\"+date.getDate();\r\n\t\t},\r\n\t\t/**\r\n\t\t* Parses an ISO date\r\n\t\t* @param {String} d\r\n\t\t*/\r\n\t\t_parseDate: function(d) {\r\n\r\n\t\t\tvar dateParts = d.split(\"-\");\r\n\t\t\tif(dateParts==d)\r\n\t\t\t\tdateParts = d.split(\"/\");\r\n\t\t\treturn new Date(dateParts[0], (dateParts[1] - 1) ,dateParts[2]);\r\n\t\t},\r\n\t\t/**\r\n\t\t* Builds or updates a prompt with the given information\r\n\t\t*\r\n\t\t* @param {jqObject} field\r\n\t\t* @param {String} promptText html text to display type\r\n\t\t* @param {String} type the type of bubble: 'pass' (green), 'load' (black) anything else (red)\r\n\t\t* @param {boolean} ajaxed - use to mark fields than being validated with ajax\r\n\t\t* @param {Map} options user options\r\n\t\t*/\r\n\t\t _showPrompt: function(field, promptText, type, ajaxed, options, ajaxform) {\r\n\t\t\t var prompt = methods._getPrompt(field);\r\n\t\t\t // The ajax submit errors are not see has an error in the form,\r\n\t\t\t // When the form errors are returned, the engine see 2 bubbles, but those are ebing closed by the engine at the same time\r\n\t\t\t // Because no error was found befor submitting\r\n\t\t\t if(ajaxform) prompt = false;\r\n\t\t\t // Check that there is indded text\r\n\t\t\t if($.trim(promptText)){ \r\n\t\t\t\t if (prompt)\r\n\t\t\t\t\tmethods._updatePrompt(field, prompt, promptText, type, ajaxed, options);\r\n\t\t\t\t else\r\n\t\t\t\t\tmethods._buildPrompt(field, promptText, type, ajaxed, options);\r\n\t\t\t}\r\n\t\t },\r\n\t\t/**\r\n\t\t* Builds and shades a prompt for the given field.\r\n\t\t*\r\n\t\t* @param {jqObject} field\r\n\t\t* @param {String} promptText html text to display type\r\n\t\t* @param {String} type the type of bubble: 'pass' (green), 'load' (black) anything else (red)\r\n\t\t* @param {boolean} ajaxed - use to mark fields than being validated with ajax\r\n\t\t* @param {Map} options user options\r\n\t\t*/\r\n\t\t_buildPrompt: function(field, promptText, type, ajaxed, options) {\r\n\r\n\t\t\t// create the prompt\r\n\t\t\tvar prompt = $('<div>');\r\n\t\t\tprompt.addClass(methods._getClassName(field.attr(\"id\")) + \"formError\");\r\n\t\t\t// add a class name to identify the parent form of the prompt\r\n\t\t\tprompt.addClass(\"parentForm\"+methods._getClassName(field.closest('form, .validationEngineContainer').attr(\"id\")));\r\n\t\t\tprompt.addClass(\"formError\");\r\n\r\n\t\t\tswitch (type) {\r\n\t\t\t\tcase \"pass\":\r\n\t\t\t\t\tprompt.addClass(\"greenPopup\");\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"load\":\r\n\t\t\t\t\tprompt.addClass(\"blackPopup\");\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\t/* it has error  */\r\n\t\t\t\t\t//alert(\"unknown popup type:\"+type);\r\n\t\t\t}\r\n\t\t\tif (ajaxed)\r\n\t\t\t\tprompt.addClass(\"ajaxed\");\r\n\r\n\t\t\t// create the prompt content\r\n\t\t\tvar promptContent = $('<div>').addClass(\"formErrorContent\").html(promptText).appendTo(prompt);\r\n\r\n\t\t\t// determine position type\r\n\t\t\tvar positionType=field.data(\"promptPosition\") || options.promptPosition;\r\n\r\n\t\t\t// create the css arrow pointing at the field\r\n\t\t\t// note that there is no triangle on max-checkbox and radio\r\n\t\t\tif (options.showArrow) {\r\n\t\t\t\tvar arrow = $('<div>').addClass(\"formErrorArrow\");\r\n\r\n\t\t\t\t//prompt positioning adjustment support. Usage: positionType:Xshift,Yshift (for ex.: bottomLeft:+20 or bottomLeft:-20,+10)\r\n\t\t\t\tif (typeof(positionType)=='string') \r\n\t\t\t\t{\r\n\t\t\t\t\tvar pos=positionType.indexOf(\":\");\r\n\t\t\t\t\tif(pos!=-1)\r\n\t\t\t\t\t\tpositionType=positionType.substring(0,pos);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tswitch (positionType) {\r\n\t\t\t\t\tcase \"bottomLeft\":\r\n\t\t\t\t\tcase \"bottomRight\":\r\n\t\t\t\t\t\tprompt.find(\".formErrorContent\").before(arrow);\r\n\t\t\t\t\t\tarrow.addClass(\"formErrorArrowBottom\").html('<div class=\"line1\"><!-- --></div><div class=\"line2\"><!-- --></div><div class=\"line3\"><!-- --></div><div class=\"line4\"><!-- --></div><div class=\"line5\"><!-- --></div><div class=\"line6\"><!-- --></div><div class=\"line7\"><!-- --></div><div class=\"line8\"><!-- --></div><div class=\"line9\"><!-- --></div><div class=\"line10\"><!-- --></div>');\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"topLeft\":\r\n\t\t\t\t\tcase \"topRight\":\r\n\t\t\t\t\t\tarrow.html('<div class=\"line10\"><!-- --></div><div class=\"line9\"><!-- --></div><div class=\"line8\"><!-- --></div><div class=\"line7\"><!-- --></div><div class=\"line6\"><!-- --></div><div class=\"line5\"><!-- --></div><div class=\"line4\"><!-- --></div><div class=\"line3\"><!-- --></div><div class=\"line2\"><!-- --></div><div class=\"line1\"><!-- --></div>');\r\n\t\t\t\t\t\tprompt.append(arrow);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// Add custom prompt class\r\n\t\t\tif (options.addPromptClass)\r\n\t\t\t\tprompt.addClass(options.addPromptClass);\r\n\r\n\t\t\tprompt.css({\r\n\t\t\t\t\"opacity\": 0\r\n\t\t\t});\r\n\t\t\tif(positionType === 'inline') {\r\n\t\t\t\tprompt.addClass(\"inline\");\r\n\t\t\t\tif(typeof field.attr('data-prompt-target') !== 'undefined' && $('#'+field.attr('data-prompt-target')).length > 0) {\r\n\t\t\t\t\tprompt.appendTo($('#'+field.attr('data-prompt-target')));\r\n\t\t\t\t} else {\r\n\t\t\t\t\tfield.after(prompt);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tfield.before(prompt);\t\t\t\t\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tvar pos = methods._calculatePosition(field, prompt, options);\r\n\t\t\tprompt.css({\r\n\t\t\t\t'position': positionType === 'inline' ? 'relative' : 'absolute',\r\n\t\t\t\t\"top\": pos.callerTopPosition,\r\n\t\t\t\t\"left\": pos.callerleftPosition,\r\n\t\t\t\t\"marginTop\": pos.marginTopSize,\r\n\t\t\t\t\"opacity\": 0\r\n\t\t\t}).data(\"callerField\", field);\r\n\t\t\t\r\n\r\n\t\t\tif (options.autoHidePrompt) {\r\n\t\t\t\tsetTimeout(function(){\r\n\t\t\t\t\tprompt.animate({\r\n\t\t\t\t\t\t\"opacity\": 0\r\n\t\t\t\t\t},function(){\r\n\t\t\t\t\t\tprompt.closest('.formErrorOuter').remove();\r\n\t\t\t\t\t\tprompt.remove();\r\n\t\t\t\t\t});\r\n\t\t\t\t}, options.autoHideDelay);\r\n\t\t\t} \r\n\t\t\treturn prompt.animate({\r\n\t\t\t\t\"opacity\": 0.87\r\n\t\t\t});\r\n\t\t},\r\n\t\t/**\r\n\t\t* Updates the prompt text field - the field for which the prompt\r\n\t\t* @param {jqObject} field\r\n\t\t* @param {String} promptText html text to display type\r\n\t\t* @param {String} type the type of bubble: 'pass' (green), 'load' (black) anything else (red)\r\n\t\t* @param {boolean} ajaxed - use to mark fields than being validated with ajax\r\n\t\t* @param {Map} options user options\r\n\t\t*/\r\n\t\t_updatePrompt: function(field, prompt, promptText, type, ajaxed, options, noAnimation) {\r\n\r\n\t\t\tif (prompt) {\r\n\t\t\t\tif (typeof type !== \"undefined\") {\r\n\t\t\t\t\tif (type == \"pass\")\r\n\t\t\t\t\t\tprompt.addClass(\"greenPopup\");\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tprompt.removeClass(\"greenPopup\");\r\n\r\n\t\t\t\t\tif (type == \"load\")\r\n\t\t\t\t\t\tprompt.addClass(\"blackPopup\");\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tprompt.removeClass(\"blackPopup\");\r\n\t\t\t\t}\r\n\t\t\t\tif (ajaxed)\r\n\t\t\t\t\tprompt.addClass(\"ajaxed\");\r\n\t\t\t\telse\r\n\t\t\t\t\tprompt.removeClass(\"ajaxed\");\r\n\r\n\t\t\t\tprompt.find(\".formErrorContent\").html(promptText);\r\n\r\n\t\t\t\tvar pos = methods._calculatePosition(field, prompt, options);\r\n\t\t\t\tvar css = {\"top\": pos.callerTopPosition,\r\n\t\t\t\t\"left\": pos.callerleftPosition,\r\n\t\t\t\t\"marginTop\": pos.marginTopSize};\r\n\r\n\t\t\t\tif (noAnimation)\r\n\t\t\t\t\tprompt.css(css);\r\n\t\t\t\telse\r\n\t\t\t\t\tprompt.animate(css);\r\n\t\t\t}\r\n\t\t},\r\n\t\t/**\r\n\t\t* Closes the prompt associated with the given field\r\n\t\t*\r\n\t\t* @param {jqObject}\r\n\t\t*            field\r\n\t\t*/\r\n\t\t _closePrompt: function(field) {\r\n\t\t\t var prompt = methods._getPrompt(field);\r\n\t\t\t if (prompt)\r\n\t\t\t\t prompt.fadeTo(\"fast\", 0, function() {\r\n\t\t\t\t\t prompt.parent('.formErrorOuter').remove();\r\n\t\t\t\t\t prompt.remove();\r\n\t\t\t\t });\r\n\t\t },\r\n\t\t closePrompt: function(field) {\r\n\t\t\t return methods._closePrompt(field);\r\n\t\t },\r\n\t\t/**\r\n\t\t* Returns the error prompt matching the field if any\r\n\t\t*\r\n\t\t* @param {jqObject}\r\n\t\t*            field\r\n\t\t* @return undefined or the error prompt (jqObject)\r\n\t\t*/\r\n\t\t_getPrompt: function(field) {\r\n\t\t\t\tvar formId = $(field).closest('form, .validationEngineContainer').attr('id');\r\n\t\t\tvar className = methods._getClassName(field.attr(\"id\")) + \"formError\";\r\n\t\t\t\tvar match = $(\".\" + methods._escapeExpression(className) + '.parentForm' + formId)[0];\r\n\t\t\tif (match)\r\n\t\t\treturn $(match);\r\n\t\t},\r\n\t\t/**\r\n\t\t  * Returns the escapade classname\r\n\t\t  *\r\n\t\t  * @param {selector}\r\n\t\t  *            className\r\n\t\t  */\r\n\t\t  _escapeExpression: function (selector) {\r\n\t\t\t  return selector.replace(/([#;&,\\.\\+\\*\\~':\"\\!\\^$\\[\\]\\(\\)=>\\|])/g, \"\\\\$1\");\r\n\t\t  },\r\n\t\t/**\r\n\t\t * returns true if we are in a RTLed document\r\n\t\t *\r\n\t\t * @param {jqObject} field\r\n\t\t */\r\n\t\tisRTL: function(field)\r\n\t\t{\r\n\t\t\tvar $document = $(document);\r\n\t\t\tvar $body = $('body');\r\n\t\t\tvar rtl =\r\n\t\t\t\t(field && field.hasClass('rtl')) ||\r\n\t\t\t\t(field && (field.attr('dir') || '').toLowerCase()==='rtl') ||\r\n\t\t\t\t$document.hasClass('rtl') ||\r\n\t\t\t\t($document.attr('dir') || '').toLowerCase()==='rtl' ||\r\n\t\t\t\t$body.hasClass('rtl') ||\r\n\t\t\t\t($body.attr('dir') || '').toLowerCase()==='rtl';\r\n\t\t\treturn Boolean(rtl);\r\n\t\t},\r\n\t\t/**\r\n\t\t* Calculates prompt position\r\n\t\t*\r\n\t\t* @param {jqObject}\r\n\t\t*            field\r\n\t\t* @param {jqObject}\r\n\t\t*            the prompt\r\n\t\t* @param {Map}\r\n\t\t*            options\r\n\t\t* @return positions\r\n\t\t*/\r\n\t\t_calculatePosition: function (field, promptElmt, options) {\r\n\r\n\t\t\tvar promptTopPosition, promptleftPosition, marginTopSize;\r\n\t\t\tvar fieldWidth \t= field.width();\r\n\t\t\tvar fieldLeft \t= field.position().left; \r\n\t\t\tvar fieldTop \t=  field.position().top;\r\n\t\t\tvar fieldHeight \t=  field.height();\t\r\n\t\t\tvar promptHeight = promptElmt.height();\r\n\r\n\r\n\t\t\t// is the form contained in an overflown container?\r\n\t\t\tpromptTopPosition = promptleftPosition = 0;\r\n\t\t\t// compensation for the arrow\r\n\t\t\tmarginTopSize = -promptHeight;\r\n\t\t\r\n\r\n\t\t\t//prompt positioning adjustment support\r\n\t\t\t//now you can adjust prompt position\r\n\t\t\t//usage: positionType:Xshift,Yshift\r\n\t\t\t//for example:\r\n\t\t\t//   bottomLeft:+20 means bottomLeft position shifted by 20 pixels right horizontally\r\n\t\t\t//   topRight:20, -15 means topRight position shifted by 20 pixels to right and 15 pixels to top\r\n\t\t\t//You can use +pixels, - pixels. If no sign is provided than + is default.\r\n\t\t\tvar positionType=field.data(\"promptPosition\") || options.promptPosition;\r\n\t\t\tvar shift1=\"\";\r\n\t\t\tvar shift2=\"\";\r\n\t\t\tvar shiftX=0;\r\n\t\t\tvar shiftY=0;\r\n\t\t\tif (typeof(positionType)=='string') {\r\n\t\t\t\t//do we have any position adjustments ?\r\n\t\t\t\tif (positionType.indexOf(\":\")!=-1) {\r\n\t\t\t\t\tshift1=positionType.substring(positionType.indexOf(\":\")+1);\r\n\t\t\t\t\tpositionType=positionType.substring(0,positionType.indexOf(\":\"));\r\n\r\n\t\t\t\t\t//if any advanced positioning will be needed (percents or something else) - parser should be added here\r\n\t\t\t\t\t//for now we use simple parseInt()\r\n\r\n\t\t\t\t\t//do we have second parameter?\r\n\t\t\t\t\tif (shift1.indexOf(\",\") !=-1) {\r\n\t\t\t\t\t\tshift2=shift1.substring(shift1.indexOf(\",\") +1);\r\n\t\t\t\t\t\tshift1=shift1.substring(0,shift1.indexOf(\",\"));\r\n\t\t\t\t\t\tshiftY=parseInt(shift2);\r\n\t\t\t\t\t\tif (isNaN(shiftY)) shiftY=0;\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tshiftX=parseInt(shift1);\r\n\t\t\t\t\tif (isNaN(shift1)) shift1=0;\r\n\r\n\t\t\t\t};\r\n\t\t\t};\r\n\r\n\t\t\t\r\n\t\t\tswitch (positionType) {\r\n\t\t\t\tdefault:\r\n\t\t\t\tcase \"topRight\":\r\n\t\t\t\t\tpromptleftPosition +=  fieldLeft + fieldWidth - 30;\r\n\t\t\t\t\tpromptTopPosition +=  fieldTop;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"topLeft\":\r\n\t\t\t\t\tpromptTopPosition +=  fieldTop;\r\n\t\t\t\t\tpromptleftPosition += fieldLeft; \r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"centerRight\":\r\n\t\t\t\t\tpromptTopPosition = fieldTop+4;\r\n\t\t\t\t\tmarginTopSize = 0;\r\n\t\t\t\t\tpromptleftPosition= fieldLeft + field.outerWidth(true)+5;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"centerLeft\":\r\n\t\t\t\t\tpromptleftPosition = fieldLeft - (promptElmt.width() + 2);\r\n\t\t\t\t\tpromptTopPosition = fieldTop+4;\r\n\t\t\t\t\tmarginTopSize = 0;\r\n\t\t\t\t\t\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"bottomLeft\":\r\n\t\t\t\t\tpromptTopPosition = fieldTop + field.height() + 5;\r\n\t\t\t\t\tmarginTopSize = 0;\r\n\t\t\t\t\tpromptleftPosition = fieldLeft;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"bottomRight\":\r\n\t\t\t\t\tpromptleftPosition = fieldLeft + fieldWidth - 30;\r\n\t\t\t\t\tpromptTopPosition =  fieldTop +  field.height() + 5;\r\n\t\t\t\t\tmarginTopSize = 0;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"inline\":\r\n\t\t\t\t\tpromptleftPosition = 0;\r\n\t\t\t\t\tpromptTopPosition = 0;\r\n\t\t\t\t\tmarginTopSize = 0;\r\n\t\t\t};\r\n\r\n\t\t\r\n\r\n\t\t\t//apply adjusments if any\r\n\t\t\tpromptleftPosition += shiftX;\r\n\t\t\tpromptTopPosition  += shiftY;\r\n\r\n\t\t\treturn {\r\n\t\t\t\t\"callerTopPosition\": promptTopPosition + \"px\",\r\n\t\t\t\t\"callerleftPosition\": promptleftPosition + \"px\",\r\n\t\t\t\t\"marginTopSize\": marginTopSize + \"px\"\r\n\t\t\t};\r\n\t\t},\r\n\t\t/**\r\n\t\t* Saves the user options and variables in the form.data\r\n\t\t*\r\n\t\t* @param {jqObject}\r\n\t\t*            form - the form where the user option should be saved\r\n\t\t* @param {Map}\r\n\t\t*            options - the user options\r\n\t\t* @return the user options (extended from the defaults)\r\n\t\t*/\r\n\t\t _saveOptions: function(form, options) {\r\n\r\n\t\t\t // is there a language localisation ?\r\n\t\t\t if ($.validationEngineLanguage)\r\n\t\t\t var allRules = $.validationEngineLanguage.allRules;\r\n\t\t\t else\r\n\t\t\t $.error(\"jQuery.validationEngine rules are not loaded, plz add localization files to the page\");\r\n\t\t\t // --- Internals DO NOT TOUCH or OVERLOAD ---\r\n\t\t\t // validation rules and i18\r\n\t\t\t $.validationEngine.defaults.allrules = allRules;\r\n\r\n\t\t\t var userOptions = $.extend(true,{},$.validationEngine.defaults,options);\r\n\r\n\t\t\t form.data('jqv', userOptions);\r\n\t\t\t return userOptions;\r\n\t\t },\r\n\r\n\t\t /**\r\n\t\t * Removes forbidden characters from class name\r\n\t\t * @param {String} className\r\n\t\t */\r\n\t\t _getClassName: function(className) {\r\n\t\t\t if(className)\r\n\t\t\t\t return className.replace(/:/g, \"_\").replace(/\\./g, \"_\");\r\n\t\t\t\t\t  },\r\n\t\t/**\r\n\t\t * Escape special character for jQuery selector\r\n\t\t * http://totaldev.com/content/escaping-characters-get-valid-jquery-id\r\n\t\t * @param {String} selector\r\n\t\t */\r\n\t\t _jqSelector: function(str){\r\n\t\t\treturn str.replace(/([;&,\\.\\+\\*\\~':\"\\!\\^#$%@\\[\\]\\(\\)=>\\|])/g, '\\\\$1');\r\n\t\t},\r\n\t\t/**\r\n\t\t* Conditionally required field\r\n\t\t*\r\n\t\t* @param {jqObject} field\r\n\t\t* @param {Array[String]} rules\r\n\t\t* @param {int} i rules index\r\n\t\t* @param {Map}\r\n\t\t* user options\r\n\t\t* @return an error string if validation failed\r\n\t\t*/\r\n\t\t_condRequired: function(field, rules, i, options) {\r\n\t\t\tvar idx, dependingField;\r\n\r\n\t\t\tfor(idx = (i + 1); idx < rules.length; idx++) {\r\n\t\t\t\tdependingField = jQuery(\"#\" + rules[idx]).first();\r\n\r\n\t\t\t\t/* Use _required for determining wether dependingField has a value.\r\n\t\t\t\t * There is logic there for handling all field types, and default value; so we won't replicate that here\r\n\t\t\t\t * Indicate this special use by setting the last parameter to true so we only validate the dependingField on chackboxes and radio buttons (#462)\r\n\t\t\t\t */\r\n\t\t\t\tif (dependingField.length && methods._required(dependingField, [\"required\"], 0, options, true) == undefined) {\r\n\t\t\t\t\t/* We now know any of the depending fields has a value,\r\n\t\t\t\t\t * so we can validate this field as per normal required code\r\n\t\t\t\t\t */\r\n\t\t\t\t\treturn methods._required(field, [\"required\"], 0, options);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t    _submitButtonClick: function(event) {\r\n\t        var button = $(this);\r\n\t        var form = button.closest('form, .validationEngineContainer');\r\n\t        form.data(\"jqv_submitButton\", button.attr(\"id\"));\r\n\t    }\r\n\t\t  };\r\n\r\n\t /**\r\n\t * Plugin entry point.\r\n\t * You may pass an action as a parameter or a list of options.\r\n\t * if none, the init and attach methods are being called.\r\n\t * Remember: if you pass options, the attached method is NOT called automatically\r\n\t *\r\n\t * @param {String}\r\n\t *            method (optional) action\r\n\t */\r\n\t $.fn.validationEngine = function(method) {\r\n\r\n\t\t var form = $(this);\r\n\t\t if(!form[0]) return form;  // stop here if the form does not exist\r\n\r\n\t\t if (typeof(method) == 'string' && method.charAt(0) != '_' && methods[method]) {\r\n\r\n\t\t\t // make sure init is called once\r\n\t\t\t if(method != \"showPrompt\" && method != \"hide\" && method != \"hideAll\")\r\n\t\t\t methods.init.apply(form);\r\n\r\n\t\t\t return methods[method].apply(form, Array.prototype.slice.call(arguments, 1));\r\n\t\t } else if (typeof method == 'object' || !method) {\r\n\r\n\t\t\t // default constructor with or without arguments\r\n\t\t\t methods.init.apply(form, arguments);\r\n\t\t\t return methods.attach.apply(form);\r\n\t\t } else {\r\n\t\t\t $.error('Method ' + method + ' does not exist in jQuery.validationEngine');\r\n\t\t }\r\n\t};\r\n\r\n\r\n\r\n\t// LEAK GLOBAL OPTIONS\r\n\t$.validationEngine= {fieldIdCounter: 0,defaults:{\r\n\r\n\t\t// Name of the event triggering field validation\r\n\t\tvalidationEventTrigger: \"blur\",\r\n\t\t// Automatically scroll viewport to the first error\r\n\t\tscroll: true,\r\n\t\t// Focus on the first input\r\n\t\tfocusFirstField:true,\r\n\t\t// Show prompts, set to false to disable prompts\r\n\t\tshowPrompts: true,\r\n\t\t// Opening box position, possible locations are: topLeft,\r\n\t\t// topRight, bottomLeft, centerRight, bottomRight, inline\r\n\t\t// inline gets inserted after the validated field or into an element specified in data-prompt-target\r\n\t\tpromptPosition: \"topRight\",\r\n\t\tbindMethod:\"bind\",\r\n\t\t// internal, automatically set to true when it parse a _ajax rule\r\n\t\tinlineAjax: false,\r\n\t\t// if set to true, the form data is sent asynchronously via ajax to the form.action url (get)\r\n\t\tajaxFormValidation: false,\r\n\t\t// The url to send the submit ajax validation (default to action)\r\n\t\tajaxFormValidationURL: false,\r\n\t\t// HTTP method used for ajax validation\r\n\t\tajaxFormValidationMethod: 'get',\r\n\t\t// Ajax form validation callback method: boolean onComplete(form, status, errors, options)\r\n\t\t// retuns false if the form.submit event needs to be canceled.\r\n\t\tonAjaxFormComplete: $.noop,\r\n\t\t// called right before the ajax call, may return false to cancel\r\n\t\tonBeforeAjaxFormValidation: $.noop,\r\n\t\t// Stops form from submitting and execute function assiciated with it\r\n\t\tonValidationComplete: false,\r\n\r\n\t\t// Used when you have a form fields too close and the errors messages are on top of other disturbing viewing messages\r\n\t\tdoNotShowAllErrosOnSubmit: false,\r\n\t\t// Object where you store custom messages to override the default error messages\r\n\t\tcustom_error_messages:{},\r\n\t\t// true if you want to vind the input fields\r\n\t\tbinded: true,\r\n\t\t// set to true, when the prompt arrow needs to be displayed\r\n\t\tshowArrow: true,\r\n\t\t// did one of the validation fail ? kept global to stop further ajax validations\r\n\t\tisError: false,\r\n\t\t// Limit how many displayed errors a field can have\r\n\t\tmaxErrorsPerField: false,\r\n\t\t\r\n\t\t// Caches field validation status, typically only bad status are created.\r\n\t\t// the array is used during ajax form validation to detect issues early and prevent an expensive submit\r\n\t\tajaxValidCache: {},\r\n\t\t// Auto update prompt position after window resize\r\n\t\tautoPositionUpdate: false,\r\n\r\n\t\tInvalidFields: [],\r\n\t\tonFieldSuccess: false,\r\n\t\tonFieldFailure: false,\r\n\t\tonSuccess: false,\r\n\t\tonFailure: false,\r\n\t\tvalidateAttribute: \"class\",\r\n\t\taddSuccessCssClassToField: false,\r\n\t\taddFailureCssClassToField: false,\r\n\t\t\r\n\t\t// Auto-hide prompt\r\n\t\tautoHidePrompt: false,\r\n\t\t// Delay before auto-hide\r\n\t\tautoHideDelay: 10000,\r\n\t\t// Fade out duration while hiding the validations\r\n\t\tfadeDuration: 0.3,\r\n\t // Use Prettify select library\r\n\t prettySelect: false,\r\n\t // Add css class on prompt\r\n\t addPromptClass : \"\",\r\n\t // Custom ID uses prefix\r\n\t usePrefix: \"\",\r\n\t // Custom ID uses suffix\r\n\t useSuffix: \"\",\r\n\t // Only show one message per error prompt\r\n\t showOneMessage: false\r\n\t}};\r\n\t$(function(){$.validationEngine.defaults.promptPosition = methods.isRTL()?'topLeft':\"topRight\"});\r\n})(jQuery);\r\n\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// ./js/newTube/core/jquery.validationEngine.js","import jQuery from \"jquery\";\r\nvar $ = jQuery;\r\n//fgnass.github.com/spin.js#v1.3.3\r\n!function(a,b){\"object\"==typeof exports?module.exports=b():\"function\"==typeof define&&define.amd?define(b):a.Spinner=b()}(this,function(){\"use strict\";function a(a,b){var c,d=document.createElement(a||\"div\");for(c in b)d[c]=b[c];return d}function b(a){for(var b=1,c=arguments.length;c>b;b++)a.appendChild(arguments[b]);return a}function c(a,b,c,d){var e=[\"opacity\",b,~~(100*a),c,d].join(\"-\"),f=.01+c/d*100,g=Math.max(1-(1-a)/b*(100-f),a),h=k.substring(0,k.indexOf(\"Animation\")).toLowerCase(),i=h&&\"-\"+h+\"-\"||\"\";return m[e]||(n.insertRule(\"@\"+i+\"keyframes \"+e+\"{0%{opacity:\"+g+\"}\"+f+\"%{opacity:\"+a+\"}\"+(f+.01)+\"%{opacity:1}\"+(f+b)%100+\"%{opacity:\"+a+\"}100%{opacity:\"+g+\"}}\",n.cssRules.length),m[e]=1),e}function d(a,b){var c,d,e=a.style;for(b=b.charAt(0).toUpperCase()+b.slice(1),d=0;d<l.length;d++)if(c=l[d]+b,void 0!==e[c])return c;return void 0!==e[b]?b:void 0}function e(a,b){for(var c in b)a.style[d(a,c)||c]=b[c];return a}function f(a){for(var b=1;b<arguments.length;b++){var c=arguments[b];for(var d in c)void 0===a[d]&&(a[d]=c[d])}return a}function g(a){for(var b={x:a.offsetLeft,y:a.offsetTop};a=a.offsetParent;)b.x+=a.offsetLeft,b.y+=a.offsetTop;return b}function h(a,b){return\"string\"==typeof a?a:a[b%a.length]}function i(a){return\"undefined\"==typeof this?new i(a):(this.opts=f(a||{},i.defaults,o),void 0)}function j(){function c(b,c){return a(\"<\"+b+' xmlns=\"urn:schemas-microsoft.com:vml\" class=\"spin-vml\">',c)}n.addRule(\".spin-vml\",\"behavior:url(#default#VML)\"),i.prototype.lines=function(a,d){function f(){return e(c(\"group\",{coordsize:k+\" \"+k,coordorigin:-j+\" \"+-j}),{width:k,height:k})}function g(a,g,i){b(m,b(e(f(),{rotation:360/d.lines*a+\"deg\",left:~~g}),b(e(c(\"roundrect\",{arcsize:d.corners}),{width:j,height:d.width,left:d.radius,top:-d.width>>1,filter:i}),c(\"fill\",{color:h(d.color,a),opacity:d.opacity}),c(\"stroke\",{opacity:0}))))}var i,j=d.length+d.width,k=2*j,l=2*-(d.width+d.length)+\"px\",m=e(f(),{position:\"absolute\",top:l,left:l});if(d.shadow)for(i=1;i<=d.lines;i++)g(i,-2,\"progid:DXImageTransform.Microsoft.Blur(pixelradius=2,makeshadow=1,shadowopacity=.3)\");for(i=1;i<=d.lines;i++)g(i);return b(a,m)},i.prototype.opacity=function(a,b,c,d){var e=a.firstChild;d=d.shadow&&d.lines||0,e&&b+d<e.childNodes.length&&(e=e.childNodes[b+d],e=e&&e.firstChild,e=e&&e.firstChild,e&&(e.opacity=c))}}var k,l=[\"webkit\",\"Moz\",\"ms\",\"O\"],m={},n=function(){var c=a(\"style\",{type:\"text/css\"});return b(document.getElementsByTagName(\"head\")[0],c),c.sheet||c.styleSheet}(),o={lines:12,length:7,width:5,radius:10,rotate:0,corners:1,color:\"#000\",direction:1,speed:1,trail:100,opacity:.25,fps:20,zIndex:2e9,className:\"spinner\",top:\"auto\",left:\"auto\",position:\"relative\"};i.defaults={},f(i.prototype,{spin:function(b){this.stop();var c,d,f=this,h=f.opts,i=f.el=e(a(0,{className:h.className}),{position:h.position,width:0,zIndex:h.zIndex}),j=h.radius+h.length+h.width;if(b&&(b.insertBefore(i,b.firstChild||null),d=g(b),c=g(i),e(i,{left:(\"auto\"==h.left?d.x-c.x+(b.offsetWidth>>1):parseInt(h.left,10)+j)+\"px\",top:(\"auto\"==h.top?d.y-c.y+(b.offsetHeight>>1):parseInt(h.top,10)+j)+\"px\"})),i.setAttribute(\"role\",\"progressbar\"),f.lines(i,f.opts),!k){var l,m=0,n=(h.lines-1)*(1-h.direction)/2,o=h.fps,p=o/h.speed,q=(1-h.opacity)/(p*h.trail/100),r=p/h.lines;!function s(){m++;for(var a=0;a<h.lines;a++)l=Math.max(1-(m+(h.lines-a)*r)%p*q,h.opacity),f.opacity(i,a*h.direction+n,l,h);f.timeout=f.el&&setTimeout(s,~~(1e3/o))}()}return f},stop:function(){var a=this.el;return a&&(clearTimeout(this.timeout),a.parentNode&&a.parentNode.removeChild(a),this.el=void 0),this},lines:function(d,f){function g(b,c){return e(a(),{position:\"absolute\",width:f.length+f.width+\"px\",height:f.width+\"px\",background:b,boxShadow:c,transformOrigin:\"left\",transform:\"rotate(\"+~~(360/f.lines*j+f.rotate)+\"deg) translate(\"+f.radius+\"px,0)\",borderRadius:(f.corners*f.width>>1)+\"px\"})}for(var i,j=0,l=(f.lines-1)*(1-f.direction)/2;j<f.lines;j++)i=e(a(),{position:\"absolute\",top:1+~(f.width/2)+\"px\",transform:f.hwaccel?\"translate3d(0,0,0)\":\"\",opacity:f.opacity,animation:k&&c(f.opacity,f.trail,l+j*f.direction,f.lines)+\" \"+1/f.speed+\"s linear infinite\"}),f.shadow&&b(i,e(g(\"#000\",\"0 0 4px #000\"),{top:\"2px\"})),b(d,b(i,g(h(f.color,j),\"0 0 1px rgba(0,0,0,.1)\")));return d},opacity:function(a,b,c){b<a.childNodes.length&&(a.childNodes[b].style.opacity=c)}});var p=e(a(\"group\"),{behavior:\"url(#default#VML)\"});return!d(p,\"transform\")&&p.adj?j():k=d(p,\"animation\"),i});\r\n(function($) {\r\n\t$.fn.spin = function(opts, color) {\r\n\t\tvar presets = {\r\n\t\t\t\"tiny\": { lines: 8, length: 2, width: 2, radius: 3 },\r\n\t\t\t\"small\": { lines: 8, length: 4, width: 3, radius: 5 },\r\n\t\t\t\"large\": { lines: 10, length: 8, width: 4, radius: 8 }\r\n\t\t};\r\n\t\tif (Spinner) {\r\n\t\t\treturn this.each(function() {\r\n\t\t\t\tvar $this = $(this),\r\n\t\t\t\t\tdata = $this.data();\r\n\t\t\t\t\r\n\t\t\t\tif (data.spinner) {\r\n\t\t\t\t\tdata.spinner.stop();\r\n\t\t\t\t\tdelete data.spinner;\r\n\t\t\t\t}\r\n\t\t\t\tif (opts !== false) {\r\n\t\t\t\t\tif (typeof opts === \"string\") {\r\n\t\t\t\t\t\tif (opts in presets) {\r\n\t\t\t\t\t\t\topts = presets[opts];\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\topts = {};\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (color) {\r\n\t\t\t\t\t\t\topts.color = color;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tdata.spinner = new Spinner($.extend({color: $this.css('color')}, opts)).spin(this);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tthrow \"Spinner class not available.\";\r\n\t\t}\r\n\t};\r\n})(jQuery);\n\n\n// WEBPACK FOOTER //\n// ./js/newTube/core/spin.min.js","import jQuery from \"jquery\";\r\nvar $ = jQuery;\r\n\"use strict\"; jQuery.base64 = (function($){var _PADCHAR = \"=\", _ALPHA = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\", _VERSION = \"1.0\"; function _getbyte64(s, i){var idx = _ALPHA.indexOf(s.charAt(i)); if (idx === - 1){throw\"Cannot decode base64\"}return idx}function _decode(s){var pads = 0, i, b10, imax = s.length, x = []; s = String(s); if (imax === 0){return s}if (imax % 4 !== 0){throw\"Cannot decode base64\"}if (s.charAt(imax - 1) === _PADCHAR){pads = 1; if (s.charAt(imax - 2) === _PADCHAR){pads = 2}imax -= 4}for (i = 0; i < imax; i += 4){b10 = (_getbyte64(s, i) << 18) | (_getbyte64(s, i + 1) << 12) | (_getbyte64(s, i + 2) << 6) | _getbyte64(s, i + 3); x.push(String.fromCharCode(b10 >> 16, (b10 >> 8) & 255, b10 & 255))}switch (pads){case 1:b10 = (_getbyte64(s, i) << 18) | (_getbyte64(s, i + 1) << 12) | (_getbyte64(s, i + 2) << 6); x.push(String.fromCharCode(b10 >> 16, (b10 >> 8) & 255)); break; case 2:b10 = (_getbyte64(s, i) << 18) | (_getbyte64(s, i + 1) << 12); x.push(String.fromCharCode(b10 >> 16)); break}return x.join(\"\")}function _getbyte(s, i){var x = s.charCodeAt(i); if (x > 255){throw\"INVALID_CHARACTER_ERR: DOM Exception 5\"}return x}function _encode(s){if (arguments.length !== 1){throw\"SyntaxError: exactly one argument required\"}s = String(s); var i, b10, x = [], imax = s.length - s.length % 3; if (s.length === 0){return s}for (i = 0; i < imax; i += 3){b10 = (_getbyte(s, i) << 16) | (_getbyte(s, i + 1) << 8) | _getbyte(s, i + 2); x.push(_ALPHA.charAt(b10 >> 18)); x.push(_ALPHA.charAt((b10 >> 12) & 63)); x.push(_ALPHA.charAt((b10 >> 6) & 63)); x.push(_ALPHA.charAt(b10 & 63))}switch (s.length - imax){case 1:b10 = _getbyte(s, i) << 16; x.push(_ALPHA.charAt(b10 >> 18) + _ALPHA.charAt((b10 >> 12) & 63) + _PADCHAR + _PADCHAR); break; case 2:b10 = (_getbyte(s, i) << 16) | (_getbyte(s, i + 1) << 8); x.push(_ALPHA.charAt(b10 >> 18) + _ALPHA.charAt((b10 >> 12) & 63) + _ALPHA.charAt((b10 >> 6) & 63) + _PADCHAR); break}return x.join(\"\")}return{decode:_decode, encode:_encode, VERSION:_VERSION}}(jQuery));\r\n \n\n\n// WEBPACK FOOTER //\n// ./js/newTube/core/tubebase.js","import jQuery from \"jquery\";\r\nvar $ = jQuery;\r\n/**\r\n * jQuery Validation Plugin @VERSION\r\n *\r\n * http://bassistance.de/jquery-plugins/jquery-plugin-validation/\r\n * http://docs.jquery.com/Plugins/Validation\r\n *\r\n * Copyright (c) 2012 JAsrn Zaefferer\r\n *\r\n * Dual licensed under the MIT and GPL licenses:\r\n *   http://www.opensource.org/licenses/mit-license.php\r\n *   http://www.gnu.org/licenses/gpl.html\r\n */\r\n\r\n(function($) {\r\n\r\n$.extend($.fn, {\r\n\t// http://docs.jquery.com/Plugins/Validation/validate\r\n\tvalidate: function( options ) {\r\n\r\n\t\t// if nothing is selected, return nothing; can't chain anyway\r\n\t\tif (!this.length) {\r\n\t\t\tif (options && options.debug && window.console) {\r\n\t\t\t\tconsole.warn( \"nothing selected, can't validate, returning nothing\" );\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// check if a validator for this form was already created\r\n\t\tvar validator = $.data(this[0], 'validator');\r\n\t\tif ( validator ) {\r\n\t\t\treturn validator;\r\n\t\t}\r\n\r\n\t\t// Add novalidate tag if HTML5.\r\n\t\tthis.attr('novalidate', 'novalidate');\r\n\r\n\t\tvalidator = new $.validator( options, this[0] );\r\n\t\t$.data(this[0], 'validator', validator);\r\n\r\n\t\tif ( validator.settings.onsubmit ) {\r\n\r\n\t\t\tthis.validateDelegate( \":submit\", \"click\", function(ev) {\r\n\t\t\t\tif ( validator.settings.submitHandler ) {\r\n\t\t\t\t\tvalidator.submitButton = ev.target;\r\n\t\t\t\t}\r\n\t\t\t\t// allow suppressing validation by adding a cancel class to the submit button\r\n\t\t\t\tif ( $(ev.target).hasClass('cancel') ) {\r\n\t\t\t\t\tvalidator.cancelSubmit = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t// validate the form on submit\r\n\t\t\tthis.submit( function( event ) {\r\n\t\t\t\tif ( validator.settings.debug ) {\r\n\t\t\t\t\t// prevent form submit to be able to see console output\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t}\r\n\t\t\t\tfunction handle() {\r\n\t\t\t\t\tvar hidden;\r\n\t\t\t\t\tif ( validator.settings.submitHandler ) {\r\n\t\t\t\t\t\tif (validator.submitButton) {\r\n\t\t\t\t\t\t\t// insert a hidden input as a replacement for the missing submit button\r\n\t\t\t\t\t\t\thidden = $(\"<input type='hidden'/>\").attr(\"name\", validator.submitButton.name).val(validator.submitButton.value).appendTo(validator.currentForm);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tvalidator.settings.submitHandler.call( validator, validator.currentForm, event );\r\n\t\t\t\t\t\tif (validator.submitButton) {\r\n\t\t\t\t\t\t\t// and clean up afterwards; thanks to no-block-scope, hidden can be referenced\r\n\t\t\t\t\t\t\thidden.remove();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// prevent submit for invalid forms or custom submit handlers\r\n\t\t\t\tif ( validator.cancelSubmit ) {\r\n\t\t\t\t\tvalidator.cancelSubmit = false;\r\n\t\t\t\t\treturn handle();\r\n\t\t\t\t}\r\n\t\t\t\tif ( validator.form() ) {\r\n\t\t\t\t\tif ( validator.pendingRequest ) {\r\n\t\t\t\t\t\tvalidator.formSubmitted = true;\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn handle();\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvalidator.focusInvalid();\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn validator;\r\n\t},\r\n\t// http://docs.jquery.com/Plugins/Validation/valid\r\n\tvalid: function() {\r\n\t\tif ( $(this[0]).is('form')) {\r\n\t\t\treturn this.validate().form();\r\n\t\t} else {\r\n\t\t\tvar valid = true;\r\n\t\t\tvar validator = $(this[0].form).validate();\r\n\t\t\tthis.each(function() {\r\n\t\t\t\tvalid &= validator.element(this);\r\n\t\t\t});\r\n\t\t\treturn valid;\r\n\t\t}\r\n\t},\r\n\t// attributes: space seperated list of attributes to retrieve and remove\r\n\tremoveAttrs: function(attributes) {\r\n\t\tvar result = {},\r\n\t\t\t$element = this;\r\n\t\t$.each(attributes.split(/\\s/), function(index, value) {\r\n\t\t\tresult[value] = $element.attr(value);\r\n\t\t\t$element.removeAttr(value);\r\n\t\t});\r\n\t\treturn result;\r\n\t},\r\n\t// http://docs.jquery.com/Plugins/Validation/rules\r\n\trules: function(command, argument) {\r\n\t\tvar element = this[0];\r\n\r\n\t\tif (command) {\r\n\t\t\tvar settings = $.data(element.form, 'validator').settings;\r\n\t\t\tvar staticRules = settings.rules;\r\n\t\t\tvar existingRules = $.validator.staticRules(element);\r\n\t\t\tswitch(command) {\r\n\t\t\tcase \"add\":\r\n\t\t\t\t$.extend(existingRules, $.validator.normalizeRule(argument));\r\n\t\t\t\tstaticRules[element.name] = existingRules;\r\n\t\t\t\tif (argument.messages) {\r\n\t\t\t\t\tsettings.messages[element.name] = $.extend( settings.messages[element.name], argument.messages );\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"remove\":\r\n\t\t\t\tif (!argument) {\r\n\t\t\t\t\tdelete staticRules[element.name];\r\n\t\t\t\t\treturn existingRules;\r\n\t\t\t\t}\r\n\t\t\t\tvar filtered = {};\r\n\t\t\t\t$.each(argument.split(/\\s/), function(index, method) {\r\n\t\t\t\t\tfiltered[method] = existingRules[method];\r\n\t\t\t\t\tdelete existingRules[method];\r\n\t\t\t\t});\r\n\t\t\t\treturn filtered;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar data = $.validator.normalizeRules(\r\n\t\t$.extend(\r\n\t\t\t{},\r\n\t\t\t$.validator.metadataRules(element),\r\n\t\t\t$.validator.classRules(element),\r\n\t\t\t$.validator.attributeRules(element),\r\n\t\t\t$.validator.staticRules(element)\r\n\t\t), element);\r\n\r\n\t\t// make sure required is at front\r\n\t\tif (data.required) {\r\n\t\t\tvar param = data.required;\r\n\t\t\tdelete data.required;\r\n\t\t\tdata = $.extend({required: param}, data);\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n});\r\n\r\n// Custom selectors\r\n$.extend($.expr[\":\"], {\r\n\t// http://docs.jquery.com/Plugins/Validation/blank\r\n\tblank: function(a) {return !$.trim(\"\" + a.value);},\r\n\t// http://docs.jquery.com/Plugins/Validation/filled\r\n\tfilled: function(a) {return !!$.trim(\"\" + a.value);},\r\n\t// http://docs.jquery.com/Plugins/Validation/unchecked\r\n\tunchecked: function(a) {return !a.checked;}\r\n});\r\n\r\n// constructor for validator\r\n$.validator = function( options, form ) {\r\n\tthis.settings = $.extend( true, {}, $.validator.defaults, options );\r\n\tthis.currentForm = form;\r\n\tthis.init();\r\n};\r\n\r\n$.validator.format = function(source, params) {\r\n\tif ( arguments.length === 1 ) {\r\n\t\treturn function() {\r\n\t\t\tvar args = $.makeArray(arguments);\r\n\t\t\targs.unshift(source);\r\n\t\t\treturn $.validator.format.apply( this, args );\r\n\t\t};\r\n\t}\r\n\tif ( arguments.length > 2 && params.constructor !== Array  ) {\r\n\t\tparams = $.makeArray(arguments).slice(1);\r\n\t}\r\n\tif ( params.constructor !== Array ) {\r\n\t\tparams = [ params ];\r\n\t}\r\n\t$.each(params, function(i, n) {\r\n\t\tsource = source.replace(new RegExp(\"\\\\{\" + i + \"\\\\}\", \"g\"), n);\r\n\t});\r\n\treturn source;\r\n};\r\n\r\n$.extend($.validator, {\r\n\r\n\tdefaults: {\r\n\t\tmessages: {},\r\n\t\tgroups: {},\r\n\t\trules: {},\r\n\t\terrorClass: \"text-form-red\",\r\n\t\tvalidClass: \"valid\",\r\n\t\terrorElement: \"span\",\r\n\t\tfocusInvalid: true,\r\n\t\terrorContainer: $( [] ),\r\n\t\terrorLabelContainer: $( [] ),\r\n\t\tonsubmit: true,\r\n\t\tignore: \":hidden\",\r\n\t\tignoreTitle: false,\r\n\t\tonfocusin: function(element, event) {\r\n\t\t\tthis.lastActive = element;\r\n\r\n\t\t\t// hide error label and remove error class on focus if enabled\r\n\t\t\tif ( this.settings.focusCleanup && !this.blockFocusCleanup ) {\r\n\t\t\t\tif ( this.settings.unhighlight ) {\r\n\t\t\t\t\tthis.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );\r\n\t\t\t\t}\r\n\t\t\t\tthis.addWrapper(this.errorsFor(element)).hide();\r\n\t\t\t}\r\n\t\t},\r\n\t\tonfocusout: function(element, event) {\r\n\t\t\tif ( !this.checkable(element) && (element.name in this.submitted || !this.optional(element)) ) {\r\n\t\t\t\tthis.element(element);\r\n\t\t\t}\r\n\t\t},\r\n\t\tonkeyup: function(element, event) {\r\n\t\t\tif ( event.which == 9 && this.elementValue(element) === '' ) {\r\n\t\t\t\treturn;\r\n\t\t\t} else if ( element.name in this.submitted || element === this.lastActive ) {\r\n\t\t\t\tthis.element(element);\r\n\t\t\t}\r\n\t\t},\r\n\t\tonclick: function(element, event) {\r\n\t\t\t// click on selects, radiobuttons and checkboxes\r\n\t\t\tif ( element.name in this.submitted ) {\r\n\t\t\t\tthis.element(element);\r\n\t\t\t}\r\n\t\t\t// or option elements, check parent select in that case\r\n\t\t\telse if (element.parentNode.name in this.submitted) {\r\n\t\t\t\tthis.element(element.parentNode);\r\n\t\t\t}\r\n\t\t},\r\n\t\thighlight: function(element, errorClass, validClass) {\r\n\t\t\tif (element.type === 'radio') {\r\n\t\t\t\tthis.findByName(element.name).addClass(errorClass).removeClass(validClass);\t\t\t\r\n\t\t\t} else {\r\n\t\t\t\t$(element).parent().addClass('error').removeClass(validClass);\r\n\t\t\t}\r\n\t\t},\r\n\t\tunhighlight: function(element, errorClass, validClass) {\r\n\t\t\tif (element.type === 'radio') {\r\n\t\t\t\tthis.findByName(element.name).removeClass(errorClass).parent().addClass(validClass);\r\n\t\t\t} else {\r\n\t\t\t\t$(element).removeClass(errorClass).parent().addClass(validClass);\r\n\t\t\t\t$(element).parent().removeClass('error').addClass(validClass);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t// http://docs.jquery.com/Plugins/Validation/Validator/setDefaults\r\n\tsetDefaults: function(settings) {\r\n\t\t$.extend( $.validator.defaults, settings );\r\n\t},\r\n\r\n\tmessages: {\r\n\t\trequired: \"This field is required.\",\r\n\t\tremote: \"Please fix this field.\",\r\n\t\temail: \"Please enter a valid email address.\",\r\n\t\turl: \"Please enter a valid URL.\",\r\n\t\tdate: \"Please enter a valid date.\",\r\n\t\tdateISO: \"Please enter a valid date (ISO).\",\r\n\t\tnumber: \"Please enter a valid number.\",\r\n\t\tdigits: \"Please enter only digits.\",\r\n\t\tcreditcard: \"Please enter a valid credit card number.\",\r\n\t\tequalTo: \"Please enter the same value again.\",\r\n\t\tmaxlength: $.validator.format(\"Please enter no more than {0} characters.\"),\r\n\t\tminlength: $.validator.format(\"Please enter at least {0} characters.\"),\r\n\t\trangelength: $.validator.format(\"Please enter a value between {0} and {1} characters long.\"),\r\n\t\trange: $.validator.format(\"Please enter a value between {0} and {1}.\"),\r\n\t\tmax: $.validator.format(\"Please enter a value less than or equal to {0}.\"),\r\n\t\tmin: $.validator.format(\"Please enter a value greater than or equal to {0}.\")\r\n\t},\r\n\r\n\tautoCreateRanges: false,\r\n\r\n\tprototype: {\r\n\r\n\t\tinit: function() {\r\n\t\t\tthis.labelContainer = $(this.settings.errorLabelContainer);\r\n\t\t\tthis.errorContext = this.labelContainer.length && this.labelContainer || $(this.currentForm);\r\n\t\t\tthis.containers = $(this.settings.errorContainer).add( this.settings.errorLabelContainer );\r\n\t\t\tthis.submitted = {};\r\n\t\t\tthis.valueCache = {};\r\n\t\t\tthis.pendingRequest = 0;\r\n\t\t\tthis.pending = {};\r\n\t\t\tthis.invalid = {};\r\n\t\t\tthis.reset();\r\n\r\n\t\t\tvar groups = (this.groups = {});\r\n\t\t\t$.each(this.settings.groups, function(key, value) {\r\n\t\t\t\t$.each(value.split(/\\s/), function(index, name) {\r\n\t\t\t\t\tgroups[name] = key;\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t\tvar rules = this.settings.rules;\r\n\t\t\t$.each(rules, function(key, value) {\r\n\t\t\t\trules[key] = $.validator.normalizeRule(value);\r\n\t\t\t});\r\n\r\n\t\t\tfunction delegate(event) {\r\n\t\t\t\tvar validator = $.data(this[0].form, \"validator\"),\r\n\t\t\t\t\teventType = \"on\" + event.type.replace(/^validate/, \"\");\r\n\t\t\t\tif (validator.settings[eventType]) {\r\n\t\t\t\t\tvalidator.settings[eventType].call(validator, this[0], event);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t$(this.currentForm)\r\n\t\t\t\t.validateDelegate(\":text, [type='password'], [type='file'], select, textarea, \" +\r\n\t\t\t\t\t\"[type='number'], [type='search'] ,[type='tel'], [type='url'], \" +\r\n\t\t\t\t\t\"[type='email'], [type='datetime'], [type='date'], [type='month'], \" +\r\n\t\t\t\t\t\"[type='week'], [type='time'], [type='datetime-local'], \" +\r\n\t\t\t\t\t\"[type='range'], [type='color'] \",\r\n\t\t\t\t\t\"focusin focusout keyup\", delegate)\r\n\t\t\t\t.validateDelegate(\"[type='radio'], [type='checkbox'], select, option\", \"click\", delegate);\r\n\r\n\t\t\tif (this.settings.invalidHandler) {\r\n\t\t\t\t$(this.currentForm).bind(\"invalid-form.validate\", this.settings.invalidHandler);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// http://docs.jquery.com/Plugins/Validation/Validator/form\r\n\t\tform: function() {\r\n\t\t\tthis.checkForm();\r\n\t\t\t$.extend(this.submitted, this.errorMap);\r\n\t\t\tthis.invalid = $.extend({}, this.errorMap);\r\n\t\t\tif (!this.valid()) {\r\n\t\t\t\t$(this.currentForm).triggerHandler(\"invalid-form\", [this]);\r\n\t\t\t}\r\n\t\t\tthis.showErrors();\r\n\t\t\treturn this.valid();\r\n\t\t},\r\n\r\n\t\tcheckForm: function() {\r\n\t\t\tthis.prepareForm();\r\n\t\t\tfor ( var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++ ) {\r\n\t\t\t\tthis.check( elements[i] );\r\n\t\t\t}\r\n\t\t\treturn this.valid();\r\n\t\t},\r\n\r\n\t\t// http://docs.jquery.com/Plugins/Validation/Validator/element\r\n\t\telement: function( element ) {\r\n\t\t\telement = this.validationTargetFor( this.clean( element ) );\r\n\t\t\tthis.lastElement = element;\r\n\t\t\tthis.prepareElement( element );\r\n\t\t\tthis.currentElements = $(element);\r\n\t\t\tvar result = this.check( element ) !== false;\r\n\t\t\tif (result) {\r\n\t\t\t\tdelete this.invalid[element.name];\r\n\t\t\t} else {\r\n\t\t\t\tthis.invalid[element.name] = true;\r\n\t\t\t}\r\n\t\t\tif ( !this.numberOfInvalids() ) {\r\n\t\t\t\t// Hide error containers on last error\r\n\t\t\t\tthis.toHide = this.toHide.add( this.containers );\r\n\t\t\t}\r\n\t\t\tthis.showErrors();\r\n\t\t\treturn result;\r\n\t\t},\r\n\r\n\t\t// http://docs.jquery.com/Plugins/Validation/Validator/showErrors\r\n\t\tshowErrors: function(errors) {\r\n\t\t\tif(errors) {\r\n\t\t\t\t// add items to error list and map\r\n\t\t\t\t$.extend( this.errorMap, errors );\r\n\t\t\t\tthis.errorList = [];\r\n\t\t\t\tfor ( var name in errors ) {\r\n\t\t\t\t\tthis.errorList.push({\r\n\t\t\t\t\t\tmessage: errors[name],\r\n\t\t\t\t\t\telement: this.findByName(name)[0]\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\t// remove items from success list\r\n\t\t\t\tthis.successList = $.grep( this.successList, function(element) {\r\n\t\t\t\t\treturn !(element.name in errors);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tif (this.settings.showErrors) {\r\n\t\t\t\tthis.settings.showErrors.call( this, this.errorMap, this.errorList );\r\n\t\t\t} else {\r\n\t\t\t\tthis.defaultShowErrors();\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// http://docs.jquery.com/Plugins/Validation/Validator/resetForm\r\n\t\tresetForm: function() {\r\n\t\t\tif ( $.fn.resetForm ) {\r\n\t\t\t\t$( this.currentForm ).resetForm();\r\n\t\t\t}\r\n\t\t\tthis.submitted = {};\r\n\t\t\tthis.lastElement = null;\r\n\t\t\tthis.prepareForm();\r\n\t\t\tthis.hideErrors();\r\n\t\t\tthis.elements().removeClass( this.settings.errorClass ).removeData( \"previousValue\" );\r\n\t\t},\r\n\r\n\t\tnumberOfInvalids: function() {\r\n\t\t\treturn this.objectLength(this.invalid);\r\n\t\t},\r\n\r\n\t\tobjectLength: function( obj ) {\r\n\t\t\tvar count = 0;\r\n\t\t\tfor ( var i in obj ) {\r\n\t\t\t\tcount++;\r\n\t\t\t}\r\n\t\t\treturn count;\r\n\t\t},\r\n\r\n\t\thideErrors: function() {\r\n\t\t\tthis.addWrapper( this.toHide ).hide();\r\n\t\t},\r\n\r\n\t\tvalid: function() {\r\n\t\t\treturn this.size() === 0;\r\n\t\t},\r\n\r\n\t\tsize: function() {\r\n\t\t\treturn this.errorList.length;\r\n\t\t},\r\n\r\n\t\tfocusInvalid: function() {\r\n\t\t\tif( this.settings.focusInvalid ) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\t$(this.findLastActive() || this.errorList.length && this.errorList[0].element || [])\r\n\t\t\t\t\t.filter(\":visible\")\r\n\t\t\t\t\t.focus()\r\n\t\t\t\t\t// manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find\r\n\t\t\t\t\t.trigger(\"focusin\");\r\n\t\t\t\t} catch(e) {\r\n\t\t\t\t\t// ignore IE throwing errors when focusing hidden elements\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tfindLastActive: function() {\r\n\t\t\tvar lastActive = this.lastActive;\r\n\t\t\treturn lastActive && $.grep(this.errorList, function(n) {\r\n\t\t\t\treturn n.element.name === lastActive.name;\r\n\t\t\t}).length === 1 && lastActive;\r\n\t\t},\r\n\r\n\t\telements: function() {\r\n\t\t\tvar validator = this,\r\n\t\t\t\trulesCache = {};\r\n\r\n\t\t\t// select all valid inputs inside the form (no submit or reset buttons)\r\n\t\t\treturn $(this.currentForm)\r\n\t\t\t.find(\"input, select, textarea\")\r\n\t\t\t.not(\":submit, :reset, :image, [disabled]\")\r\n\t\t\t.not( this.settings.ignore )\r\n\t\t\t.filter(function() {\r\n\t\t\t\tif ( !this.name && validator.settings.debug && window.console ) {\r\n\t\t\t\t\tconsole.error( \"%o has no name assigned\", this);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// select only the first element for each name, and only those with rules specified\r\n\t\t\t\tif ( this.name in rulesCache || !validator.objectLength($(this).rules()) ) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\trulesCache[this.name] = true;\r\n\t\t\t\treturn true;\r\n\t\t\t});\r\n\t\t},\r\n\r\n\t\tclean: function( selector ) {\r\n\t\t\treturn $( selector )[0];\r\n\t\t},\r\n\r\n\t\terrors: function() {\r\n\t\t\tvar errorClass = this.settings.errorClass.replace(' ', '.');\r\n\t\t\treturn $( this.settings.errorElement + \".\" + errorClass, this.errorContext );\r\n\t\t},\r\n\r\n\t\treset: function() {\r\n\t\t\tthis.successList = [];\r\n\t\t\tthis.errorList = [];\r\n\t\t\tthis.errorMap = {};\r\n\t\t\tthis.toShow = $([]);\r\n\t\t\tthis.toHide = $([]);\r\n\t\t\tthis.currentElements = $([]);\r\n\t\t},\r\n\r\n\t\tprepareForm: function() {\r\n\t\t\tthis.reset();\r\n\t\t\tthis.toHide = this.errors().add( this.containers );\r\n\t\t},\r\n\r\n\t\tprepareElement: function( element ) {\r\n\t\t\tthis.reset();\r\n\t\t\tthis.toHide = this.errorsFor(element);\r\n\t\t},\r\n\r\n\t\telementValue: function( element ) {\r\n\t\t\tvar type = $(element).attr('type'),\r\n\t\t\t\tval = $(element).val();\r\n\r\n\t\t\tif ( type === 'radio' || type === 'checkbox' ) {\r\n\t\t\t\treturn $('input[name=\"' + $(element).attr('name') + '\"]:checked').val();\r\n\t\t\t}\r\n\r\n\t\t\tif ( typeof val === 'string' ) {\r\n\t\t\t\treturn val.replace(/\\r/g, \"\");\r\n\t\t\t}\r\n\t\t\treturn val;\r\n\t\t},\r\n\r\n\t\tcheck: function( element ) {\r\n\t\t\telement = this.validationTargetFor( this.clean( element ) );\r\n\r\n\t\t\tvar rules = $(element).rules();\r\n\t\t\tvar dependencyMismatch = false;\r\n\t\t\tvar val = this.elementValue(element);\r\n\t\t\tvar result;\r\n\r\n\t\t\tfor (var method in rules ) {\r\n\t\t\t\tvar rule = { method: method, parameters: rules[method] };\r\n\t\t\t\ttry {\r\n\r\n\t\t\t\t\tresult = $.validator.methods[method].call( this, val, element, rule.parameters );\r\n\r\n\t\t\t\t\t// if a method indicates that the field is optional and therefore valid,\r\n\t\t\t\t\t// don't mark it as valid when there are no other rules\r\n\t\t\t\t\tif ( result === \"dependency-mismatch\" ) {\r\n\t\t\t\t\t\tdependencyMismatch = true;\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tdependencyMismatch = false;\r\n\r\n\t\t\t\t\tif ( result === \"pending\" ) {\r\n\t\t\t\t\t\tthis.toHide = this.toHide.not( this.errorsFor(element) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif( !result ) {\r\n\t\t\t\t\t\tthis.formatAndAdd( element, rule );\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t} catch(e) {\r\n\t\t\t\t\tif ( this.settings.debug && window.console ) {\r\n\t\t\t\t\t\tconsole.log(\"exception occured when checking element \" + element.id + \", check the '\" + rule.method + \"' method\", e);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthrow e;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (dependencyMismatch) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif ( this.objectLength(rules) ) {\r\n\t\t\t\tthis.successList.push(element);\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t},\r\n\r\n\t\t// return the custom message for the given element and validation method\r\n\t\t// specified in the element's \"messages\" metadata\r\n\t\tcustomMetaMessage: function(element, method) {\r\n\t\t\tif (!$.metadata) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tvar meta = this.settings.meta ? $(element).metadata()[this.settings.meta] : $(element).metadata();\r\n\t\t\treturn meta && meta.messages && meta.messages[method];\r\n\t\t},\r\n\r\n\t\t// return the custom message for the given element and validation method\r\n\t\t// specified in the element's HTML5 data attribute\r\n\t\tcustomDataMessage: function(element, method) {\r\n\t\t\treturn $(element).data('msg-' + method.toLowerCase()) || (element.attributes && $(element).attr('data-msg-' + method.toLowerCase()));\r\n\t\t},\r\n\r\n\t\t// return the custom message for the given element name and validation method\r\n\t\tcustomMessage: function( name, method ) {\r\n\t\t\tvar m = this.settings.messages[name];\r\n\t\t\treturn m && (m.constructor === String ? m : m[method]);\r\n\t\t},\r\n\r\n\t\t// return the first defined argument, allowing empty strings\r\n\t\tfindDefined: function() {\r\n\t\t\tfor(var i = 0; i < arguments.length; i++) {\r\n\t\t\t\tif (arguments[i] !== undefined) {\r\n\t\t\t\t\treturn arguments[i];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn undefined;\r\n\t\t},\r\n\r\n\t\tdefaultMessage: function( element, method) {\r\n\t\t\treturn this.findDefined(\r\n\t\t\t\tthis.customMessage( element.name, method ),\r\n\t\t\t\tthis.customDataMessage( element, method ),\r\n\t\t\t\tthis.customMetaMessage( element, method ),\r\n\t\t\t\t// title is never undefined, so handle empty string as undefined\r\n\t\t\t\t!this.settings.ignoreTitle && element.title || undefined,\r\n\t\t\t\t$.validator.messages[method],\r\n\t\t\t\t\"<strong>Warning: No message defined for \" + element.name + \"</strong>\"\r\n\t\t\t);\r\n\t\t},\r\n\r\n\t\tformatAndAdd: function( element, rule ) {\r\n\t\t\tvar message = this.defaultMessage( element, rule.method ),\r\n\t\t\t\ttheregex = /\\$?\\{(\\d+)\\}/g;\r\n\t\t\tif ( typeof message === \"function\" ) {\r\n\t\t\t\tmessage = message.call(this, rule.parameters, element);\r\n\t\t\t} else if (theregex.test(message)) {\r\n\t\t\t\tmessage = $.validator.format(message.replace(theregex, '{$1}'), rule.parameters);\r\n\t\t\t}\r\n\t\t\tthis.errorList.push({\r\n\t\t\t\tmessage: message,\r\n\t\t\t\telement: element\r\n\t\t\t});\r\n\r\n\t\t\tthis.errorMap[element.name] = message;\r\n\t\t\tthis.submitted[element.name] = message;\r\n\t\t},\r\n\r\n\t\taddWrapper: function(toToggle) {\r\n\t\t\tif ( this.settings.wrapper ) {\r\n\t\t\t\ttoToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );\r\n\t\t\t}\r\n\t\t\treturn toToggle;\r\n\t\t},\r\n\r\n\t\tdefaultShowErrors: function() {\r\n\t\t\tvar i, elements;\r\n\t\t\tfor ( i = 0; this.errorList[i]; i++ ) {\r\n\t\t\t\tvar error = this.errorList[i];\r\n\t\t\t\tif ( this.settings.highlight ) {\r\n\t\t\t\t\tthis.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );\r\n\t\t\t\t}\r\n\t\t\t\tthis.showLabel( error.element, error.message );\r\n\t\t\t}\r\n\t\t\tif( this.errorList.length ) {\r\n\t\t\t\tthis.toShow = this.toShow.add( this.containers );\r\n\t\t\t}\r\n\t\t\tif (this.settings.success) {\r\n\t\t\t\tfor ( i = 0; this.successList[i]; i++ ) {\r\n\t\t\t\t\tthis.showLabel( this.successList[i] );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (this.settings.unhighlight) {\r\n\t\t\t\tfor ( i = 0, elements = this.validElements(); elements[i]; i++ ) {\r\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[i], this.settings.errorClass, this.settings.validClass );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.toHide = this.toHide.not( this.toShow );\r\n\t\t\tthis.hideErrors();\r\n\t\t\tthis.addWrapper( this.toShow ).show();\r\n\t\t},\r\n\r\n\t\tvalidElements: function() {\r\n\t\t\treturn this.currentElements.not(this.invalidElements());\r\n\t\t},\r\n\r\n\t\tinvalidElements: function() {\r\n\t\t\treturn $(this.errorList).map(function() {\r\n\t\t\t\treturn this.element;\r\n\t\t\t});\r\n\t\t},\r\n\r\n\t\tshowLabel: function(element, message) {\r\n\t\t\tvar label = this.errorsFor( element );\r\n\t\t\tif ( label.length ) {\r\n\t\t\t\t// refresh error/success class\r\n\t\t\t\tlabel.removeClass( this.settings.validClass ).addClass( this.settings.errorClass );\r\n\r\n\t\t\t\t// check if we have a generated label, replace the message then\r\n\t\t\t\tif ( label.attr(\"generated\") ) {\r\n\t\t\t\t\tlabel.html(message);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\t// create label\r\n\t\t\t\tlabel = $(\"<\" + this.settings.errorElement + \"/>\")\r\n\t\t\t\t\t.attr({\"for\":  this.idOrName(element), generated: true})\r\n\t\t\t\t\t.addClass(this.settings.errorClass)\r\n\t\t\t\t\t.html(message || \"\");\r\n\t\t\t\tif ( this.settings.wrapper ) {\r\n\t\t\t\t\t// make sure the element is visible, even in IE\r\n\t\t\t\t\t// actually showing the wrapped element is handled elsewhere\r\n\t\t\t\t\tlabel = label.hide().show().wrap(\"<\" + this.settings.wrapper + \"/>\").parent();\r\n\t\t\t\t}\r\n\t\t\t\tif ( !this.labelContainer.append(label).length ) {\r\n\t\t\t\t\tif ( this.settings.errorPlacement ) {\r\n\t\t\t\t\t\tthis.settings.errorPlacement(label, $(element) );\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\tlabel.insertAfter(element);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif ( !message && this.settings.success ) {\r\n\t\t\t\tlabel.text(\"\");\r\n\t\t\t\tif ( typeof this.settings.success === \"string\" ) {\r\n\t\t\t\t\tlabel.addClass( this.settings.success );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.settings.success( label, element );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.toShow = this.toShow.add(label);\r\n\t\t},\r\n\r\n\t\terrorsFor: function(element) {\r\n\t\t\tvar name = this.idOrName(element);\r\n\t\t\treturn this.errors().filter(function() {\r\n\t\t\t\treturn $(this).attr('for') === name;\r\n\t\t\t});\r\n\t\t},\r\n\r\n\t\tidOrName: function(element) {\r\n\t\t\treturn this.groups[element.name] || (this.checkable(element) ? element.name : element.id || element.name);\r\n\t\t},\r\n\r\n\t\tvalidationTargetFor: function(element) {\r\n\t\t\t// if radio/checkbox, validate first element in group instead\r\n\t\t\tif (this.checkable(element)) {\r\n\t\t\t\telement = this.findByName( element.name ).not(this.settings.ignore)[0];\r\n\t\t\t}\r\n\t\t\treturn element;\r\n\t\t},\r\n\r\n\t\tcheckable: function( element ) {\r\n\t\t\treturn (/radio|checkbox/i).test(element.type);\r\n\t\t},\r\n\r\n\t\tfindByName: function( name ) {\r\n\t\t\treturn $(this.currentForm).find('[name=\"' + name + '\"]');\r\n\t\t},\r\n\r\n\t\tgetLength: function(value, element) {\r\n\t\t\tswitch( element.nodeName.toLowerCase() ) {\r\n\t\t\tcase 'select':\r\n\t\t\t\treturn $(\"option:selected\", element).length;\r\n\t\t\tcase 'input':\r\n\t\t\t\tif( this.checkable( element) ) {\r\n\t\t\t\t\treturn this.findByName(element.name).filter(':checked').length;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn value.length;\r\n\t\t},\r\n\r\n\t\tdepend: function(param, element) {\r\n\t\t\treturn this.dependTypes[typeof param] ? this.dependTypes[typeof param](param, element) : true;\r\n\t\t},\r\n\r\n\t\tdependTypes: {\r\n\t\t\t\"boolean\": function(param, element) {\r\n\t\t\t\treturn param;\r\n\t\t\t},\r\n\t\t\t\"string\": function(param, element) {\r\n\t\t\t\treturn !!$(param, element.form).length;\r\n\t\t\t},\r\n\t\t\t\"function\": function(param, element) {\r\n\t\t\t\treturn param(element);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\toptional: function(element) {\r\n\t\t\tvar val = this.elementValue(element);\r\n\t\t\treturn !$.validator.methods.required.call(this, val, element) && \"dependency-mismatch\";\r\n\t\t},\r\n\r\n\t\tstartRequest: function(element) {\r\n\t\t\tif (!this.pending[element.name]) {\r\n\t\t\t\tthis.pendingRequest++;\r\n\t\t\t\tthis.pending[element.name] = true;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tstopRequest: function(element, valid) {\r\n\t\t\tthis.pendingRequest--;\r\n\t\t\t// sometimes synchronization fails, make sure pendingRequest is never < 0\r\n\t\t\tif (this.pendingRequest < 0) {\r\n\t\t\t\tthis.pendingRequest = 0;\r\n\t\t\t}\r\n\t\t\tdelete this.pending[element.name];\r\n\t\t\tif ( valid && this.pendingRequest === 0 && this.formSubmitted && this.form() ) {\r\n\t\t\t\t$(this.currentForm).submit();\r\n\t\t\t\tthis.formSubmitted = false;\r\n\t\t\t} else if (!valid && this.pendingRequest === 0 && this.formSubmitted) {\r\n\t\t\t\t$(this.currentForm).triggerHandler(\"invalid-form\", [this]);\r\n\t\t\t\tthis.formSubmitted = false;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tpreviousValue: function(element) {\r\n\t\t\treturn $.data(element, \"previousValue\") || $.data(element, \"previousValue\", {\r\n\t\t\t\told: null,\r\n\t\t\t\tvalid: true,\r\n\t\t\t\tmessage: this.defaultMessage( element, \"remote\" )\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t},\r\n\r\n\tclassRuleSettings: {\r\n\t\trequired: {required: true},\r\n\t\temail: {email: true},\r\n\t\turl: {url: true},\r\n\t\tdate: {date: true},\r\n\t\tdateISO: {dateISO: true},\r\n\t\tnumber: {number: true},\r\n\t\tdigits: {digits: true},\r\n\t\tcreditcard: {creditcard: true}\r\n\t},\r\n\r\n\taddClassRules: function(className, rules) {\r\n\t\tif ( className.constructor === String ) {\r\n\t\t\tthis.classRuleSettings[className] = rules;\r\n\t\t} else {\r\n\t\t\t$.extend(this.classRuleSettings, className);\r\n\t\t}\r\n\t},\r\n\r\n\tclassRules: function(element) {\r\n\t\tvar rules = {};\r\n\t\tvar classes = $(element).attr('class');\r\n\t\tif ( classes ) {\r\n\t\t\t$.each(classes.split(' '), function() {\r\n\t\t\t\tif (this in $.validator.classRuleSettings) {\r\n\t\t\t\t\t$.extend(rules, $.validator.classRuleSettings[this]);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn rules;\r\n\t},\r\n\r\n\tattributeRules: function(element) {\r\n\t\tvar rules = {};\r\n\t\tvar $element = $(element);\r\n\r\n\t\tfor (var method in $.validator.methods) {\r\n\t\t\tvar value;\r\n\r\n\t\t\t// support for <input required> in both html5 and older browsers\r\n\t\t\tif (method === 'required') {\r\n\t\t\t\tvalue = $element.get(0).getAttribute(method);\r\n\t\t\t\t// Some browsers return an empty string for the required attribute\r\n\t\t\t\t// and non-HTML5 browsers might have required=\"\" markup\r\n\t\t\t\tif (value === \"\") {\r\n\t\t\t\t\tvalue = true;\r\n\t\t\t\t}\r\n\t\t\t\t// force non-HTML5 browsers to return bool\r\n\t\t\t\tvalue = !!value;\r\n\t\t\t} else {\r\n\t\t\t\tvalue = $element.attr(method);\r\n\t\t\t}\r\n\r\n\t\t\tif (value) {\r\n\t\t\t\trules[method] = value;\r\n\t\t\t} else if ($element[0].getAttribute(\"type\") === method) {\r\n\t\t\t\trules[method] = true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// maxlength may be returned as -1, 2147483647 (IE) and 524288 (safari) for text inputs\r\n\t\tif (rules.maxlength && /-1|2147483647|524288/.test(rules.maxlength)) {\r\n\t\t\tdelete rules.maxlength;\r\n\t\t}\r\n\r\n\t\treturn rules;\r\n\t},\r\n\r\n\tmetadataRules: function(element) {\r\n\t\tif (!$.metadata) {\r\n\t\t\treturn {};\r\n\t\t}\r\n\r\n\t\tvar meta = $.data(element.form, 'validator').settings.meta;\r\n\t\treturn meta ?\r\n\t\t\t$(element).metadata()[meta] :\r\n\t\t\t$(element).metadata();\r\n\t},\r\n\r\n\tstaticRules: function(element) {\r\n\t\tvar rules = {};\r\n\t\tvar validator = $.data(element.form, 'validator');\r\n\t\tif (validator.settings.rules) {\r\n\t\t\trules = $.validator.normalizeRule(validator.settings.rules[element.name]) || {};\r\n\t\t}\r\n\t\treturn rules;\r\n\t},\r\n\r\n\tnormalizeRules: function(rules, element) {\r\n\t\t// handle dependency check\r\n\t\t$.each(rules, function(prop, val) {\r\n\t\t\t// ignore rule when param is explicitly false, eg. required:false\r\n\t\t\tif (val === false) {\r\n\t\t\t\tdelete rules[prop];\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (val.param || val.depends) {\r\n\t\t\t\tvar keepRule = true;\r\n\t\t\t\tswitch (typeof val.depends) {\r\n\t\t\t\t\tcase \"string\":\r\n\t\t\t\t\t\tkeepRule = !!$(val.depends, element.form).length;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"function\":\r\n\t\t\t\t\t\tkeepRule = val.depends.call(element, element);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tif (keepRule) {\r\n\t\t\t\t\trules[prop] = val.param !== undefined ? val.param : true;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdelete rules[prop];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// evaluate parameters\r\n\t\t$.each(rules, function(rule, parameter) {\r\n\t\t\trules[rule] = $.isFunction(parameter) ? parameter(element) : parameter;\r\n\t\t});\r\n\r\n\t\t// clean number parameters\r\n\t\t$.each(['minlength', 'maxlength', 'min', 'max'], function() {\r\n\t\t\tif (rules[this]) {\r\n\t\t\t\trules[this] = Number(rules[this]);\r\n\t\t\t}\r\n\t\t});\r\n\t\t$.each(['rangelength', 'range'], function() {\r\n\t\t\tif (rules[this]) {\r\n\t\t\t\trules[this] = [Number(rules[this][0]), Number(rules[this][1])];\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif ($.validator.autoCreateRanges) {\r\n\t\t\t// auto-create ranges\r\n\t\t\tif (rules.min && rules.max) {\r\n\t\t\t\trules.range = [rules.min, rules.max];\r\n\t\t\t\tdelete rules.min;\r\n\t\t\t\tdelete rules.max;\r\n\t\t\t}\r\n\t\t\tif (rules.minlength && rules.maxlength) {\r\n\t\t\t\trules.rangelength = [rules.minlength, rules.maxlength];\r\n\t\t\t\tdelete rules.minlength;\r\n\t\t\t\tdelete rules.maxlength;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// To support custom messages in metadata ignore rule methods titled \"messages\"\r\n\t\tif (rules.messages) {\r\n\t\t\tdelete rules.messages;\r\n\t\t}\r\n\r\n\t\treturn rules;\r\n\t},\r\n\r\n\t// Converts a simple string to a {string: true} rule, e.g., \"required\" to {required:true}\r\n\tnormalizeRule: function(data) {\r\n\t\tif( typeof data === \"string\" ) {\r\n\t\t\tvar transformed = {};\r\n\t\t\t$.each(data.split(/\\s/), function() {\r\n\t\t\t\ttransformed[this] = true;\r\n\t\t\t});\r\n\t\t\tdata = transformed;\r\n\t\t}\r\n\t\treturn data;\r\n\t},\r\n\r\n\t// http://docs.jquery.com/Plugins/Validation/Validator/addMethod\r\n\taddMethod: function(name, method, message) {\r\n\t\t$.validator.methods[name] = method;\r\n\t\t$.validator.messages[name] = message !== undefined ? message : $.validator.messages[name];\r\n\t\tif (method.length < 3) {\r\n\t\t\t$.validator.addClassRules(name, $.validator.normalizeRule(name));\r\n\t\t}\r\n\t},\r\n\r\n\tmethods: {\r\n\r\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/required\r\n\t\trequired: function(value, element, param) {\r\n\t\t\t// check if dependency is met\r\n\t\t\tif ( !this.depend(param, element) ) {\r\n\t\t\t\treturn \"dependency-mismatch\";\r\n\t\t\t}\r\n\t\t\tif ( element.nodeName.toLowerCase() === \"select\" ) {\r\n\t\t\t\t// could be an array for select-multiple or a string, both are fine this way\r\n\t\t\t\tvar val = $(element).val();\r\n\t\t\t\treturn val && val.length > 0;\r\n\t\t\t}\r\n\t\t\tif ( this.checkable(element) ) {\r\n\t\t\t\treturn this.getLength(value, element) > 0;\r\n\t\t\t}\r\n\t\t\treturn $.trim(value).length > 0;\r\n\t\t},\r\n\r\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/remote\r\n\t\tremote: function(value, element, param) {\r\n\t\t\tif ( this.optional(element) ) {\r\n\t\t\t\treturn \"dependency-mismatch\";\r\n\t\t\t}\r\n\r\n\t\t\tvar previous = this.previousValue(element);\r\n\t\t\tif (!this.settings.messages[element.name] ) {\r\n\t\t\t\tthis.settings.messages[element.name] = {};\r\n\t\t\t}\r\n\t\t\tprevious.originalMessage = this.settings.messages[element.name].remote;\r\n\t\t\tthis.settings.messages[element.name].remote = previous.message;\r\n\r\n\t\t\tparam = typeof param === \"string\" && {url:param} || param;\r\n\r\n\t\t\tif ( this.pending[element.name] ) {\r\n\t\t\t\treturn \"pending\";\r\n\t\t\t}\r\n\t\t\tif ( previous.old === value ) {\r\n\t\t\t\treturn previous.valid;\r\n\t\t\t}\r\n\r\n\t\t\tprevious.old = value;\r\n\t\t\tvar validator = this;\r\n\t\t\tthis.startRequest(element);\r\n\t\t\tvar data = {};\r\n\t\t\tdata[element.name] = value;\r\n\t\t\t$.ajax($.extend(true, {\r\n\t\t\t\turl: param,\r\n\t\t\t\tmode: \"abort\",\r\n\t\t\t\tport: \"validate\" + element.name,\r\n\t\t\t\tdataType: \"json\",\r\n\t\t\t\tdata: data,\r\n\t\t\t\tsuccess: function(response) {\r\n\t\t\t\t\tvalidator.settings.messages[element.name].remote = previous.originalMessage;\r\n\t\t\t\t\tvar valid = response === true || response === \"true\";\r\n\t\t\t\t\tif ( valid ) {\r\n\t\t\t\t\t\tvar submitted = validator.formSubmitted;\r\n\t\t\t\t\t\tvalidator.prepareElement(element);\r\n\t\t\t\t\t\tvalidator.formSubmitted = submitted;\r\n\t\t\t\t\t\tvalidator.successList.push(element);\r\n\t\t\t\t\t\tdelete validator.invalid[element.name];\r\n\t\t\t\t\t\tvalidator.showErrors();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tvar errors = {};\r\n\t\t\t\t\t\tvar message = response || validator.defaultMessage( element, \"remote\" );\r\n\t\t\t\t\t\terrors[element.name] = previous.message = $.isFunction(message) ? message(value) : message;\r\n\t\t\t\t\t\tvalidator.invalid[element.name] = true;\r\n\t\t\t\t\t\tvalidator.showErrors(errors);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tprevious.valid = valid;\r\n\t\t\t\t\tvalidator.stopRequest(element, valid);\r\n\t\t\t\t}\r\n\t\t\t}, param));\r\n\t\t\treturn \"pending\";\r\n\t\t},\r\n\r\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/minlength\r\n\t\tminlength: function(value, element, param) {\r\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength($.trim(value), element);\r\n\t\t\treturn this.optional(element) || length >= param;\r\n\t\t},\r\n\r\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/maxlength\r\n\t\tmaxlength: function(value, element, param) {\r\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength($.trim(value), element);\r\n\t\t\treturn this.optional(element) || length <= param;\r\n\t\t},\r\n\r\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/rangelength\r\n\t\trangelength: function(value, element, param) {\r\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength($.trim(value), element);\r\n\t\t\treturn this.optional(element) || ( length >= param[0] && length <= param[1] );\r\n\t\t},\r\n\r\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/min\r\n\t\tmin: function( value, element, param ) {\r\n\t\t\treturn this.optional(element) || value >= param;\r\n\t\t},\r\n\r\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/max\r\n\t\tmax: function( value, element, param ) {\r\n\t\t\treturn this.optional(element) || value <= param;\r\n\t\t},\r\n\r\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/range\r\n\t\trange: function( value, element, param ) {\r\n\t\t\treturn this.optional(element) || ( value >= param[0] && value <= param[1] );\r\n\t\t},\r\n\r\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/email\r\n\t\temail: function(value, element) {\r\n\t\t\t// contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/\r\n\t\t\treturn this.optional(element) || /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i.test(value);\r\n\t\t},\r\n\r\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/url\r\n\t\turl: function(value, element) {\r\n\t\t\t// contributed by Scott Gonzalez: http://projects.scottsplayground.com/iri/\r\n\t\t\treturn this.optional(element) || /^(https?|ftp):\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i.test(value);\r\n\t\t},\r\n\r\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/date\r\n\t\tdate: function(value, element) {\r\n\t\t\treturn this.optional(element) || !/Invalid|NaN/.test(new Date(value));\r\n\t\t},\r\n\r\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/dateISO\r\n\t\tdateISO: function(value, element) {\r\n\t\t\treturn this.optional(element) || /^\\d{4}[\\/\\-]\\d{1,2}[\\/\\-]\\d{1,2}$/.test(value);\r\n\t\t},\r\n\r\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/number\r\n\t\tnumber: function(value, element) {\r\n\t\t\treturn this.optional(element) || /^-?(?:\\d+|\\d{1,3}(?:,\\d{3})+)?(?:\\.\\d+)?$/.test(value);\r\n\t\t},\r\n\r\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/digits\r\n\t\tdigits: function(value, element) {\r\n\t\t\treturn this.optional(element) || /^\\d+$/.test(value);\r\n\t\t},\r\n\r\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/creditcard\r\n\t\t// based on http://en.wikipedia.org/wiki/Luhn\r\n\t\tcreditcard: function(value, element) {\r\n\t\t\tif ( this.optional(element) ) {\r\n\t\t\t\treturn \"dependency-mismatch\";\r\n\t\t\t}\r\n\t\t\t// accept only spaces, digits and dashes\r\n\t\t\tif (/[^0-9 \\-]+/.test(value)) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\tvar nCheck = 0,\r\n\t\t\t\tnDigit = 0,\r\n\t\t\t\tbEven = false;\r\n\r\n\t\t\tvalue = value.replace(/\\D/g, \"\");\r\n\r\n\t\t\tfor (var n = value.length - 1; n >= 0; n--) {\r\n\t\t\t\tvar cDigit = value.charAt(n);\r\n\t\t\t\tnDigit = parseInt(cDigit, 10);\r\n\t\t\t\tif (bEven) {\r\n\t\t\t\t\tif ((nDigit *= 2) > 9) {\r\n\t\t\t\t\t\tnDigit -= 9;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tnCheck += nDigit;\r\n\t\t\t\tbEven = !bEven;\r\n\t\t\t}\r\n\r\n\t\t\treturn (nCheck % 10) === 0;\r\n\t\t},\r\n\r\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/equalTo\r\n\t\tequalTo: function(value, element, param) {\r\n\t\t\t// bind to the blur event of the target in order to revalidate whenever the target field is updated\r\n\t\t\t// TODO find a way to bind the event just once, avoiding the unbind-rebind overhead\r\n\t\t\tvar target = $(param);\r\n\t\t\tif (this.settings.onfocusout) {\r\n\t\t\t\ttarget.unbind(\".validate-equalTo\").bind(\"blur.validate-equalTo\", function() {\r\n\t\t\t\t\t$(element).valid();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\treturn value === target.val();\r\n\t\t}\r\n\r\n\t}\r\n\r\n});\r\n\r\n// deprecated, use $.validator.format instead\r\n$.format = $.validator.format;\r\n\r\n}(jQuery));\r\n\r\n// ajax mode: abort\r\n// usage: $.ajax({ mode: \"abort\"[, port: \"uniqueport\"]});\r\n// if mode:\"abort\" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort()\r\n(function($) {\r\n\tvar pendingRequests = {};\r\n\t// Use a prefilter if available (1.5+)\r\n\tif ( $.ajaxPrefilter ) {\r\n\t\t$.ajaxPrefilter(function(settings, _, xhr) {\r\n\t\t\tvar port = settings.port;\r\n\t\t\tif (settings.mode === \"abort\") {\r\n\t\t\t\tif ( pendingRequests[port] ) {\r\n\t\t\t\t\tpendingRequests[port].abort();\r\n\t\t\t\t}\r\n\t\t\t\tpendingRequests[port] = xhr;\r\n\t\t\t}\r\n\t\t});\r\n\t} else {\r\n\t\t// Proxy ajax\r\n\t\tvar ajax = $.ajax;\r\n\t\t$.ajax = function(settings) {\r\n\t\t\tvar mode = ( \"mode\" in settings ? settings : $.ajaxSettings ).mode,\r\n\t\t\t\tport = ( \"port\" in settings ? settings : $.ajaxSettings ).port;\r\n\t\t\tif (mode === \"abort\") {\r\n\t\t\t\tif ( pendingRequests[port] ) {\r\n\t\t\t\t\tpendingRequests[port].abort();\r\n\t\t\t\t}\r\n\t\t\t\treturn (pendingRequests[port] = ajax.apply(this, arguments));\r\n\t\t\t}\r\n\t\t\treturn ajax.apply(this, arguments);\r\n\t\t};\r\n\t}\r\n}(jQuery));\r\n\r\n// provides cross-browser focusin and focusout events\r\n// IE has native support, in other browsers, use event caputuring (neither bubbles)\r\n\r\n// provides delegate(type: String, delegate: Selector, handler: Callback) plugin for easier event delegation\r\n// handler is only called when $(event.target).is(delegate), in the scope of the jquery-object for event.target\r\n(function($) {\r\n\t// only implement if not provided by jQuery core (since 1.4)\r\n\t// TODO verify if jQuery 1.4's implementation is compatible with older jQuery special-event APIs\r\n\tif (!jQuery.event.special.focusin && !jQuery.event.special.focusout && document.addEventListener) {\r\n\t\t$.each({\r\n\t\t\tfocus: 'focusin',\r\n\t\t\tblur: 'focusout'\r\n\t\t}, function( original, fix ){\r\n\t\t\t$.event.special[fix] = {\r\n\t\t\t\tsetup:function() {\r\n\t\t\t\t\tthis.addEventListener( original, handler, true );\r\n\t\t\t\t},\r\n\t\t\t\tteardown:function() {\r\n\t\t\t\t\tthis.removeEventListener( original, handler, true );\r\n\t\t\t\t},\r\n\t\t\t\thandler: function(e) {\r\n\t\t\t\t\tvar args = arguments;\r\n\t\t\t\t\targs[0] = $.event.fix(e);\r\n\t\t\t\t\targs[0].type = fix;\r\n\t\t\t\t\treturn $.event.handle.apply(this, args);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t\tfunction handler(e) {\r\n\t\t\t\te = $.event.fix(e);\r\n\t\t\t\te.type = fix;\r\n\t\t\t\treturn $.event.handle.call(this, e);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t$.extend($.fn, {\r\n\t\tvalidateDelegate: function(delegate, type, handler) {\r\n\t\t\treturn this.bind(type, function(event) {\r\n\t\t\t\tvar target = $(event.target);\r\n\t\t\t\tif (target.is(delegate)) {\r\n\t\t\t\t\treturn handler.apply(target, arguments);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t});\r\n}(jQuery));\r\n\n\n\n// WEBPACK FOOTER //\n// ./js/newTube/core/validate.js","'use strict';\r\n// import './tube'; // dont't - it used to be...\r\nimport * as jQuery from 'jquery';\r\n\r\n/* Exposing jQuery to site's global scope. */\r\n/* can use webpack plugin but that works just fine */\r\nif (!window['jQuery']) { window['jQuery'] = jQuery; }\r\nif (!window['$']) { window['$'] = jQuery; }\r\n\r\nimport './newTube/core/jquery-ui';\r\nimport './newTube/core/jquery.touchSwipe.min';\r\nimport './newTube/core/jquery.pajinate.min';\r\nimport './newTube/core/easing';\r\nimport './newTube/core/jquery.scrollTo';\r\nimport './newTube/core/jquery.scrollUp';\r\n\r\n// import './newTube/core/bootstrap';\r\n// import './vendor/jquery.waterfall'; // waterfall\r\n\r\nimport './newTube/core/jquery.fullscreen';\r\nimport './newTube/core/jquery.fineuploader-3.2';\r\nimport './newTube/core/jquery.validationEngine-en';\r\nimport './newTube/core/jquery.validationEngine';\r\nimport './newTube/core/jRating.jquery';\r\n\r\nimport './newTube/core/spin.min';\r\nimport './newTube/core/validate';\r\nimport './newTube/core/tubebase';\r\n\r\nimport {\r\n    Dropdowns,\r\n    ColorChanger,\r\n    SearchSelector,\r\n    QuickHover,\r\n    IonRangeSlider,\r\n    Modals,\r\n    MainNav,\r\n    DoubleTap,\r\n    ScrollTop,\r\n    HeightNormalizer,\r\n    SimpleScrollbar,\r\n    Expander,\r\n    ThumbShuffler,\r\n    AdInItems,\r\n    Tabs,\r\n    Gallery,\r\n    FakeUpload,\r\n    Comments,\r\n    Rating,\r\n} from './newTube/';\r\n\r\nconst isDevEnv = process.env.ENV === 'dev' ? true : false;\r\nif (isDevEnv) {\r\n    console.warn(`Warning: This is dev environment. Switch to production before deployment.`);\r\n}\r\n// tslint:disable:no-unused-variable\r\nwindow.addEventListener(`load`, () => {\r\n\r\n    /* ************************************** */\r\n    /* ************************************** */\r\n    /* Refactored/Reused and modularized code */\r\n    /* ************************************** */\r\n    /* ************************************** */\r\n\r\n    /* Dropdown handler - no bootstrap */\r\n    const dropdowns: Dropdowns = new Dropdowns();\r\n\r\n    /* Changing template color */\r\n    const colorChanger: ColorChanger = new ColorChanger();\r\n\r\n    /* Search dropdown */\r\n    const searchSelector: SearchSelector = new SearchSelector();\r\n\r\n    /* Top bar categories */\r\n    const quickHover: QuickHover = new QuickHover(200);\r\n    quickHover.setInnerExit(`[data-mb-quick-hover=\"inner-exit\"]`);\r\n\r\n    /* Magic trigger for nav on mobile */\r\n    const mainNav: MainNav = new MainNav(); \r\n\r\n    /* Handle dropdowns + target links on mobile */\r\n    const doubleTap: DoubleTap = new DoubleTap();\r\n\r\n    /* Scroll up */\r\n    const scrollUp: ScrollTop = new ScrollTop();\r\n\r\n    /* Sets element height based on other element's height - i.e. add on main page */\r\n    const heightNormalizer: HeightNormalizer = new HeightNormalizer();\r\n\r\n    /* Sets custom scrollbar to proper element */\r\n    const simpleScrollbar: SimpleScrollbar = new SimpleScrollbar();\r\n\r\n    /* Responsible for aka collapse elements */\r\n    const expander: Expander = new Expander();\r\n\r\n    /* Shuffleling thums */\r\n    const thumbShuffler: ThumbShuffler = new ThumbShuffler(500, 9);\r\n\r\n    /* Ads in items */\r\n    const addInItems: AdInItems = new AdInItems(2);\r\n\r\n    /* Tabs */\r\n    const tabs: Tabs = new Tabs();\r\n\r\n    /* Gallery handler */\r\n    const gallery: Gallery = new Gallery();\r\n\r\n    /* Avatars uploader btn */\r\n    const fakeUpload: FakeUpload = new FakeUpload(); \r\n\r\n    /* Comments handler */\r\n    const comments: Comments = new Comments();\r\n\r\n    /* Ratings handler */\r\n    const rating: Rating = new Rating();\r\n\r\n    /* ************************************** */\r\n    /* ************************************** */\r\n    /* External/Legacy code support */\r\n    /* ************************************** */\r\n    /* ************************************** */\r\n\r\n    const ionRangeSlider: void = new IonRangeSlider.init();\r\n    const modal1: void = new Modals.init();\r\n    const modal2: void = new Modals.init();\r\n});\r\n\n\n\n// WEBPACK FOOTER //\n// ./js/app.ts","export class AdInItems {\r\n    private _elem: HTMLElement;\r\n    private _siblingHeight: number = null;\r\n    private _multiply: number;\r\n\r\n    constructor(multiply: number = 2) {\r\n        this._elem = document.querySelector(`[data-mb=\"ad-in-items\"]`);\r\n        this._multiply = multiply;\r\n        if(this._elem) {\r\n            this._init();\r\n        }\r\n    }\r\n\r\n    private _init(): void {\r\n        this._setHeight();\r\n        window.addEventListener(`resize`, this._setHeight.bind(this));\r\n    }\r\n\r\n    private _setHeight(): void {\r\n        this._getSiblingHeight();\r\n        setTimeout(() => {\r\n            this._elem.style.height = `${this._siblingHeight * this._multiply + 13}px`;\r\n        }, 200);\r\n        \r\n    }\r\n\r\n    private _getSiblingHeight(): number {\r\n        return this._siblingHeight = this._elem.nextElementSibling.clientHeight;\r\n    }\r\n}\n\n\n// WEBPACK FOOTER //\n// ./js/newTube/ad-in-items/ad-in-items.ts","import { DomHelpers } from '../helpers';\r\nimport { CookieStorage } from 'cookie-storage';\r\n\r\nconst cookieStorage: CookieStorage = new CookieStorage();\r\n\r\nexport class ColorChanger {\r\n    private _attr: string = `[data-mb=\"change-color\"]`;\r\n    private _elem: HTMLElement;\r\n    private _isSet: boolean = false;\r\n    private _htmlElement: HTMLElement;\r\n\r\n    constructor() {\r\n        this._elem = document.querySelector(this._attr);\r\n        this._htmlElement = <HTMLElement>document.getElementsByTagName('HTML')[0];\r\n        this._isSet = cookieStorage.getItem('user.mb.invertedColors') === 'true' ? true : false;\r\n        this._init();\r\n    }\r\n\r\n    private _init(): void {\r\n        this._set();\r\n        this._registerTrigger();\r\n    }\r\n\r\n    private _set(): void {\r\n        if (this._isSet) {\r\n            DomHelpers.addClass(this._htmlElement, `js-inverted-colors`);\r\n        } else {\r\n            DomHelpers.removeClass(this._htmlElement, `js-inverted-colors`);\r\n        }\r\n    }\r\n\r\n    private _registerTrigger(): void {\r\n        if (this._elem) {\r\n            this._elem.addEventListener(`click`, (e: Event) => {\r\n                this._isSet = !this._isSet;\r\n                cookieStorage.setItem(`user.mb.invertedColors`, String(this._isSet));\r\n                this._set();\r\n            });\r\n        }\r\n    }\r\n}\n\n\n// WEBPACK FOOTER //\n// ./js/newTube/color-changer/color-changer.ts","import { HttpHelper, DomHelpers } from '../helpers';\r\nimport { ScrollTop } from '../scroll-top/scroll-top';\r\nimport * as jQuery from 'jquery';\r\nlet $ = jQuery;\r\n// tslint:disable:member-ordering\r\nexport class Comments {\r\n    private _postUrl: string = `${window[`_basehttp`]}/includes/ajax.post_comment.php`;\r\n    private _submitBtn: HTMLButtonElement;\r\n    private _form: HTMLFormElement;\r\n    private _textarea: HTMLTextAreaElement;\r\n    private _captcha: HTMLInputElement;\r\n    private _captchaImg: HTMLImageElement;\r\n    private _captchaImgUrl: string;\r\n    private _alertBox: HTMLElement;\r\n\r\n    private _rawUrl: string;\r\n    private _contentId: string;\r\n    private _type: string;\r\n    private _scrollTo: ScrollTop = new ScrollTop(false);\r\n\r\n    public commentsContainer: HTMLDivElement;\r\n    public loaded: number = 0;\r\n\r\n    constructor(postUrl?: string) {\r\n        this.commentsContainer = document.querySelector(`[data-mb=\"load-comments\"]`);\r\n        this._form = document.querySelector(`[data-mb=\"add-comment\"]`);\r\n        this._captchaImg = <HTMLImageElement> document.querySelector(`[data-mb=\"captcha-img\"]`);\r\n        if(this._captchaImg) { this._captchaImgUrl = this._captchaImg.getAttribute(`src`);}\r\n        if(postUrl) {\r\n            this._postUrl = postUrl;\r\n        }\r\n        \r\n        this._init();\r\n    }\r\n\r\n    private _getProps(): void {\r\n        this._rawUrl = this.commentsContainer.getAttribute(`data-opt-url`);\r\n        this._contentId = this.commentsContainer.getAttribute(`data-opt-id`);\r\n        this._type = this.commentsContainer.getAttribute(`data-opt-type`);\r\n    }\r\n\r\n    private _buildUrl(): string {\r\n        return `${this._rawUrl}?id=${this._contentId}&type=${this._type}&loaded=${this.loaded}&time=${new Date().getTime()}`;\r\n    }\r\n\r\n    private _init(): void {\r\n      \r\n        if (this.commentsContainer) {\r\n            this._getProps();\r\n            this.loadComments();\r\n       \r\n        }\r\n        if (this._form) {\r\n            \r\n            this._submitBtn = this._form.querySelector(`button[type=\"submit\"]`);\r\n            this._textarea = this._form.querySelector(`textarea[name=\"comment\"]`);\r\n            this._captcha = this._form.querySelector(`input[name=\"captcha\"]`);\r\n            this._alertBox = document.querySelector(`[data-mb=\"comment-alert\"]`);\r\n       \r\n            if (this._submitBtn) {\r\n                this._handlePostComments();\r\n            }\r\n        }\r\n    }\r\n\r\n    private _handlePostComments(): void {\r\n        this._submitBtn.addEventListener(`click`, (e: Event) => {\r\n            e.preventDefault();\r\n\r\n            if (!this._textarea.value) { return; }\r\n            const data: any = {\r\n                comment: this._textarea.value,\r\n                id: this._contentId,\r\n                type: this._type,\r\n                captcha: this._captcha.value,\r\n            }\r\n            let serializeData: string = HttpHelper.serialize(data);\r\n            \r\n            HttpHelper.post(this._postUrl, serializeData, {\"Content-Type\":\"application/x-www-form-urlencoded; charset=UTF-8\"}).then((response) => {\r\n                DomHelpers.removeClass(this._alertBox.parentElement, `--hidden`);\r\n                let responseJson = JSON.parse(response);\r\n                this._alertBox.innerHTML = responseJson.info;\r\n                this._captchaImg.src = `${this._captchaImgUrl}?nocache=${Math.floor(Math.random()*1000)}`;\r\n                return responseJson.error !== 'true';\r\n            })\r\n            .then((response) => {\r\n                if(!response) { return false; }\r\n                return this.reloadComments();\r\n            })\r\n            .then((response) => {\r\n                if(response) {\r\n                    setTimeout(() => {\r\n                        DomHelpers.addClass(this._alertBox.parentElement, '--hidden');\r\n                    }, 5000);\r\n\r\n                    setTimeout(() => {\r\n                        //this._scrollTo.scroll(this.commentsContainer.scrollWidth); /* TODO should scroll correctly */\r\n                    }, 1000)\r\n                }\r\n            });\r\n        });\r\n    }\r\n    public async loadComments(): Promise<any> {\r\n        if (!this.commentsContainer) { return false; }\r\n\r\n        return HttpHelper.get(this._buildUrl()).then((response) => {\r\n            this.commentsContainer.innerHTML = response;\r\n            return response;\r\n        });\r\n    }\r\n\r\n    public async reloadComments(): Promise<any> {\r\n        return this.loadComments();\r\n    }\r\n\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./js/newTube/comments/comments.ts","import { PlatformHelper } from '../helpers';\r\n\r\nexport class DoubleTap {\r\n    private _list: NodeList;\r\n\r\n    constructor() {\r\n        this._list = document.querySelectorAll(`[data-mb=\"double-tap\"]`);\r\n\r\n        if(this._list) {\r\n            this._init();\r\n        }\r\n    }\r\n\r\n    private _init(): void {\r\n        Array.from(this._list).forEach((elem: HTMLElement) => {\r\n            PlatformHelper.doubleTap(elem);\r\n        });\r\n    }\r\n}\n\n\n// WEBPACK FOOTER //\n// ./js/newTube/double-tap/double-tap.ts","import { DomHelpers } from '../helpers/';\r\n\r\nexport class Dropdowns {\r\n    private _selector: NodeListOf<Element>;\r\n    private _parents: HTMLElement[] = [];\r\n    \r\n    constructor() {\r\n        this._selector = document.querySelectorAll(`[data-mb=\"dropdown\"]`);\r\n        this._init();\r\n    }                                                       \r\n\r\n    private _init() {\r\n\r\n        Array.from(this._selector).forEach((elem: HTMLElement) => {\r\n            let parent: HTMLElement;\r\n\r\n            if (!elem.hasOwnProperty('_nhanceDropdown')) {\r\n                elem.addEventListener(`click`, (e: Event) => {\r\n                    elem['_nhanceDropdown'] = true; \r\n                    \r\n                    e.stopPropagation();\r\n                    e.preventDefault();\r\n\r\n                    parent = elem.parentElement;\r\n                    if (!parent.hasOwnProperty('_nhanceDropdownParent')) {\r\n                        parent['_nhanceDropdownParent'] = true;\r\n                        // parent.addEventListener('click', (e: Event) => {\r\n                        //     //console.warn(e)\r\n                        //     //e.stopPropagation();\r\n                        //     //e.preventDefault();\r\n                        // });\r\n                        this._parents.push(parent);\r\n                    }\r\n\r\n                    DomHelpers.toggleClass(parent, `js-dropdown-open`);\r\n\r\n                    this._unsetOthers(parent);\r\n                    \r\n                });\r\n            }\r\n        });\r\n\r\n        if(!document.hasOwnProperty('_nhanceDropdownKiller')) {\r\n            document['_nhanceDropdownKiller'] = true;\r\n            document.addEventListener('click', (e: Event) => {\r\n                this._parents.forEach((parent) => {\r\n                    DomHelpers.removeClass(parent, `js-dropdown-open`);\r\n                })\r\n            });\r\n        }\r\n    }\r\n\r\n    private _unsetOthers(current: HTMLElement) {\r\n        const other: NodeList = document.querySelectorAll(`.js-dropdown-open`);\r\n        const searchFix: NodeList = document.querySelectorAll(`.js-search-list-visible`); /* This shit require refactor. This is not cool */\r\n        if(searchFix) {\r\n            Array.from(searchFix).forEach((elem: HTMLElement) => {\r\n                if(elem !== current) {\r\n                    DomHelpers.removeClass(elem, `js-search-list-visible`);\r\n                }\r\n            });\r\n        }\r\n\r\n        if (!other) { return; }\r\n\r\n        Array.from(other).forEach((elem: HTMLElement) => {\r\n            if(elem !== current) {\r\n                DomHelpers.removeClass(elem, `js-dropdown-open`);\r\n            }\r\n        });\r\n\r\n\r\n\r\n    }\r\n\r\n  \r\n}\n\n\n// WEBPACK FOOTER //\n// ./js/newTube/dropdowns/dropdowns.ts","import { NhanceTools } from '../responsive-trigger/nhance.responsive-trigger';\r\nimport { DomHelpers } from '../helpers/dom.helper';\r\n\r\nclass ExpandElement {\r\n    private _main: NhanceTools.ResponsiveTriggerClass;\r\n    private _trigger: HTMLElement;\r\n    private _target: HTMLElement;\r\n    private _isInitialized: boolean = false;\r\n\r\n    private _useTimeout: boolean = true;\r\n\r\n    private _defaults: { [key: string]: any } = {\r\n        triggerElement: null,\r\n        targetElement: null,\r\n        activeToMaxScreenWidth: 768,\r\n        anywhereActionClose: false,\r\n        defaultOpen: false,\r\n        classes: {\r\n            in: 'expander-open',\r\n            animIn: 'expander-opening',\r\n            out: 'expander-closed',\r\n            animOut: 'expander-closing',\r\n            animProgress: 'expander-animating',\r\n\r\n            triggerActive: 'is-expander-trigger-active',\r\n            targetActive: 'is-expander-target-active',\r\n        },\r\n        setBodyClasses: false,\r\n        useTimeout: true, /* When expanding use timeout or not */\r\n        onChange: this._onChange.bind(this),\r\n    }\r\n\r\n    constructor(trigger: HTMLElement, target: HTMLElement) {\r\n        if (!trigger || !target) { return; }\r\n\r\n        this._trigger = trigger;\r\n        this._target = target;\r\n\r\n        this._init(this._generateSettings());\r\n    }\r\n\r\n    private _generateSettings(): { [key: string]: any } {\r\n        let opts: any = {}\r\n        /* Parse custom options */\r\n        let hasOpts: any = this._trigger.getAttribute(`data-mb-options`);\r\n        if (hasOpts) {\r\n            try {\r\n                hasOpts = JSON.parse(hasOpts.replace(/'/gim, `\"`));\r\n            } catch (err) {\r\n                hasOpts = null;\r\n            }\r\n        }\r\n\r\n        if (hasOpts) {\r\n            opts = Object.assign({}, this._defaults, hasOpts);\r\n\r\n            this._useTimeout = hasOpts.useTimeout == false ? false : true;\r\n        } else {\r\n            opts = Object.assign({}, this._defaults);\r\n        }\r\n\r\n        opts.triggerElement = this._trigger;\r\n        opts.targetElement = this._target;\r\n\r\n        return opts;\r\n\r\n    }\r\n\r\n    private _init(opts) {\r\n        this._main = new NhanceTools.ResponsiveTriggerClass(opts);\r\n    }\r\n\r\n    private _onChange(isActive, canUse) {\r\n        \r\n        if (!canUse) {\r\n            DomHelpers.removeClass(this._target, `is-collapsed`);\r\n            this._target.style.height = null;\r\n            return false;\r\n        }\r\n        let currentHeight = this._target.clientHeight;\r\n\r\n        if(isActive && this._isInitialized && currentHeight > 0) {\r\n            return;\r\n        }\r\n        if (!this._isInitialized) {\r\n            this._isInitialized = true;\r\n            if (isActive && !currentHeight) {\r\n                this._target.style.height = null;\r\n                DomHelpers.removeClass(this._target, `is-collapsed`);\r\n            } else {\r\n                this._target.style.height = `0px`;\r\n                DomHelpers.addClass(this._target, `is-collapsed`);\r\n            }\r\n            return;\r\n        }\r\n\r\n        if (isActive) {\r\n            DomHelpers.removeClass(this._target, `is-collapsed`);\r\n            this._target.style.height = null;\r\n            let targetHeight = this._target.clientHeight;\r\n            this._target.style.height = `0px`;\r\n            DomHelpers.addClass(this._target, `is-collapsed`);\r\n            \r\n            if(!this._useTimeout) { /* In some cases you cant trigger stuff with timeout */\r\n                DomHelpers.tempClass(this._target, `is-collapse-animating`, 400).then(() => {\r\n                    DomHelpers.removeClass(this._target, `is-collapsed`);\r\n                });\r\n                setTimeout(() => {\r\n                    this._target.style.height = `${targetHeight}px`;\r\n                },10)\r\n                return;\r\n            }\r\n\r\n            setTimeout(() => {\r\n                DomHelpers.tempClass(this._target, `is-collapse-animating`, 400).then(() => {\r\n                    DomHelpers.removeClass(this._target, `is-collapsed`);\r\n                });\r\n\r\n                setTimeout(() => {\r\n                    this._target.style.height = `${targetHeight}px`;\r\n                }, 10)\r\n            }, 50)\r\n\r\n            return;\r\n        }\r\n\r\n        if (!isActive) {\r\n            this._target.style.height = `${this._target.clientHeight}px`;\r\n            DomHelpers.tempClass(this._target, `is-collapse-animating`, 500);\r\n            this._target.style.height = `0px`;\r\n            DomHelpers.addClass(this._target, `is-collapsed`);\r\n\r\n        }\r\n\r\n    }\r\n}\r\n\r\nexport class Expander {\r\n    private _triggerSelector: string;\r\n    private _targetSelector: string;\r\n\r\n    private _triggers: NodeList;\r\n    private _targets: NodeList;\r\n    private _registry: any[] = [];\r\n\r\n    constructor(trigger: string = `[data-mb-expand]`, target: string = `[data-mb-expand-target]`) {\r\n        if (!trigger || !target) { return; }\r\n        this._triggers = document.querySelectorAll(trigger);\r\n        this._targets = document.querySelectorAll(target);\r\n\r\n        this._triggerSelector = trigger.replace(/(\\[|\\])/gim, '');\r\n        this._targetSelector = target;\r\n\r\n        if (!this._triggers || !this._targets) { return; }\r\n\r\n        if (this._triggers.length !== this._targets.length) {\r\n            console.warn(`Epxander warning: triggers count (${this._triggers.length}) is not equal to targets count(${this._targets.length}).\r\n            Some elements on this page might not work properly.`);\r\n        }\r\n        this._init();\r\n    }\r\n\r\n    private _init() {\r\n        Array.from(this._triggers).forEach((trigger: HTMLElement) => {\r\n            let targetSelector = trigger.getAttribute(this._triggerSelector);\r\n            let target: HTMLElement = document.querySelector(`${this._targetSelector.replace(']', '=' + targetSelector + ']')}`);\r\n            if (target) {\r\n                DomHelpers.addClass(trigger, `js-expander-trigger`);\r\n                DomHelpers.addClass(target, `js-expander-target`);\r\n\r\n                this._registry.push({\r\n                    trigger,\r\n                    target,\r\n                    _main: new ExpandElement(trigger, target)\r\n                });\r\n            }\r\n        })\r\n    }\r\n}\n\n\n// WEBPACK FOOTER //\n// ./js/newTube/expander/expander.ts","import * as jQuery from \"jquery\";\r\nvar $ = jQuery;\r\n\r\nexport class FakeUpload {\r\n    private _btn: any;\r\n    private _input: any;\r\n\r\n    constructor() {\r\n        this._btn = $('[data-mb=\"fake-upload\"]');\r\n        if (this._btn.length) {\r\n            this._input = $('[data-opt=\"' + this._btn.attr(\"data-opt-target\") + '\"]');\r\n            if (this._input.length) {\r\n                this._init();\r\n            }\r\n        }\r\n\r\n    }\r\n\r\n    private _init(): void {\r\n        const self = this;\r\n        this._btn.on(\"click\", function (e) {\r\n            e.preventDefault();\r\n            self._input.click();\r\n        });\r\n        this._input.change(function () {\r\n            self._btn.find(\".sub-label\").text($(this).val());\r\n        });\r\n    }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./js/newTube/fake-upload/fake-upload.ts","import './native.history';\r\nimport { buildNewModal, getAttributes } from '../modals/modals';\r\nimport * as jQuery from \"jquery\";\r\nvar $ = jQuery;\r\nexport const ajaxGalleryNavigation = () => {\r\n    var btn = $('[data-mb=\"load-img\"]');\r\n    var btnW = '[data-mb=\"load-img\"]';\r\n    var container = `data-mb` + '=\"ajax-container\"';\r\n\r\n    if (btn.length) {\r\n        $(window).on(\"keyup\", function (e) {\r\n            switch (e.which) {\r\n                case 37: // left\r\n                    $(document).find(btnW).filter('[rel=\"prev\"]').click();\r\n                    break;\r\n                case 39: // right\r\n                    $(document).find(btnW).filter('[rel=\"next\"]').click();\r\n                    break;\r\n\r\n                default:\r\n                    return;\r\n            }\r\n            e.preventDefault();\r\n        });\r\n    }\r\n\r\n    $(window).on(\"click\", function (e) {\r\n        var newUrl = \"\";\r\n        if ($(e.target).attr(`data-mb`) == \"load-img\" || $(e.target).parent().attr(`data-mb`) == \"load-img\" || $(e.target).parent().parent().attr(`data-mb`) == \"load-img\") {\r\n            e.preventDefault();\r\n\r\n            if ($(e.target).attr(`data-mb`) == \"load-img\") {\r\n                newUrl = $(e.target).attr(\"href\");\r\n            } else if($(e.target).parent().attr(`data-mb`) == \"load-img\") {\r\n                newUrl = $(e.target).parent().attr(\"href\");\r\n            } else {\r\n                newUrl = $(e.target).parent().parent().attr(\"href\");\r\n            }\r\n            $('[' + container + ']').css(\"min-height\", $('[' + container + '] img').height());\r\n            $('[' + container + ']').addClass(\"loading-img\");\r\n\r\n            /*btn.on(\"click\", function(e) {\r\n             e.preventDefault();\r\n             var newUrl = $(this).attr(\"href\")*/\r\n            var xhr;\r\n            if (typeof xhr == 'object') {\r\n                xhr.abort();\r\n            }\r\n\r\n            xhr = $.ajax({\r\n                url: newUrl,\r\n                type: 'GET',\r\n                dataType: 'html',\r\n                cache: false,\r\n                crossDomain: false,\r\n                data: {\r\n                    //langSelected: langVal\r\n                },\r\n                success: function (data) {\r\n\r\n                    var c = $(data).find('[' + container + ']');\r\n                    var cImg = $(data).find('[' + container + '] img');\r\n                    var stateTitleNew = $(data).filter(\"title\").text();\r\n                    var stateNew = c.attr(\"data-opt-current\");\r\n                    c.addClass(\"loading-img\");\r\n                    // check IF IMG IS LOADED\r\n                    // modal error option\r\n                    var aa = getAttributes(\".loading-img\");\r\n                    var modalOptions = {\r\n                        rand: Math.floor((Math.random()) * 1000),\r\n                        closeTitle: (aa[\"data-opt-close\"] ? aa[\"data-opt-close\"] : \"Close\"),\r\n                        id: (aa[\"id\"] ? aa[\"id\"] : \"modal-\" + this.rand),\r\n                        title: (aa[\"data-opt-title\"] ? aa[\"data-opt-title\"] : \"Error\"),\r\n                    };\r\n\r\n                    if (cImg.length) {\r\n                        cImg.on('load', function () {\r\n                            console.log(\"image loaded correctly\");\r\n                            $('[' + container + ']').removeClass(\"loading-img\");\r\n                        });\r\n                        cImg.on('error', function () {\r\n                            buildNewModal(\"Error loading image\", modalOptions);\r\n                        });\r\n                        cImg.attr(\"src\", cImg.attr(\"src\"));\r\n                    }\r\n\r\n                    // CHANGE URL\r\n                    (function (window, undefined) {\r\n                        // Bind to StateChange Event\r\n                        (<any>History).Adapter.bind(window, 'statechange', function () { // Note: We are using statechange instead of popstate\r\n                            var State = (<any>History).getState(); // Note: We are using History.getState() instead of event.state\r\n\r\n                        });\r\n                        // Change our States\r\n                        (<any>History).pushState({ state: 1 }, stateTitleNew, \"?image=\" + stateNew);\r\n                    })(window);\r\n                    // UPDATE CONTAINER\r\n                    $('[' + container + ']').replaceWith(c);\r\n                    // UPDATE SLIDER\r\n                    setTimeout(function () {\r\n                        $('.owl-carousel').trigger(\"to.owl.carousel\", [parseInt(stateNew) - 1, 0, true]);\r\n                        $('.gallery-item-col').removeClass(\"active\");\r\n                        $('.gi-' + stateNew).addClass(\"active\");\r\n                    }, 500);\r\n                },\r\n                error: function (data) {\r\n                    console.log(\"ERROR \" + data);\r\n                }\r\n            });\r\n        }\r\n    });\r\n}\r\n\r\nexport class Gallery {\r\n    constructor() {\r\n        var btn = $('[data-mb=\"load-img\"]'); \r\n        if (btn.length) {\r\n            ajaxGalleryNavigation();\r\n        }\r\n    }\r\n}\n\n\n// WEBPACK FOOTER //\n// ./js/newTube/gallery/gallery.ts","import { PlatformHelper } from '../helpers/platform.helper';\r\n\r\nexport class HeightNormalizer {\r\n    private _srcElem: HTMLElement;\r\n    private _targetElem: HTMLElement;\r\n    private _h: number = null;\r\n    private _timeout: number = 500;\r\n    private _minScreenWidth: number = 768;\r\n\r\n    constructor(srcElemSelector: string = `[data-mb-height=\"source\"]`, targetElemSelector: string = `[data-mb-height=\"target\"]`) {\r\n        if (srcElemSelector) {\r\n            this._srcElem = document.querySelector(srcElemSelector);\r\n        }\r\n\r\n        if (targetElemSelector) {\r\n            this._targetElem = document.querySelector(targetElemSelector);\r\n        }\r\n\r\n        if (this._srcElem && this._targetElem) {\r\n            this._init();\r\n        }\r\n    }\r\n\r\n    private _init(): void {\r\n        this._registerListener();\r\n        setTimeout(() => {\r\n           this._setNewHeight()\r\n        }, 500);\r\n        this._setNewHeight()\r\n       \r\n    }\r\n\r\n    private _registerListener(): void {\r\n        window.addEventListener(`resize`, () => {\r\n            setTimeout(this._setNewHeight.bind(this), this._timeout);\r\n        });\r\n    }\r\n\r\n    private _setNewHeight() {\r\n        if (PlatformHelper.windowWidth() >= this._minScreenWidth) {\r\n            this._getCurrentHeight();\r\n            this._targetElem.style.height = `${this._h}px`;\r\n            \r\n        } else {\r\n            this._targetElem.style.height = null;\r\n        }\r\n    }\r\n\r\n    private _getCurrentHeight() {\r\n       \r\n        return this._h = this._srcElem.clientHeight ? this._srcElem.clientHeight : this._srcElem.offsetHeight;\r\n        \r\n    }\r\n\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./js/newTube/height-normalizer/height-normalizer.ts","export namespace HttpHelper {\r\n\r\n    export const request = (type: string = `GET`, url: string, data: any = null, headers: any = null): Promise<any> => {\r\n        return new Promise((resolve, reject) => {\r\n\r\n            if (!url) { return false; }\r\n\r\n            let xhr: XMLHttpRequest = new XMLHttpRequest();\r\n\r\n            xhr.open(type, url, true);\r\n            \r\n\r\n            if (headers && Object.keys(headers).length) {\r\n                Object.keys(headers).forEach((key: string) => {\r\n                    xhr.setRequestHeader(key, headers[key]);\r\n                });\r\n            } else {\r\n                xhr.setRequestHeader('Content-Type', 'application/json');\r\n            }\r\n\r\n            xhr.send(data);\r\n\r\n            xhr.onerror = (e: Event) => {\r\n                reject(e);\r\n            }\r\n\r\n            xhr.onreadystatechange = (e: Event) => {\r\n                if (xhr.readyState == 4) {\r\n                    if (xhr.status == 200) {\r\n                        resolve(xhr.responseText)\r\n                        return;\r\n                    }\r\n                    reject(xhr);\r\n                }\r\n            }\r\n\r\n        }).catch((err) => {\r\n            console.warn('request error:', err);\r\n        });\r\n    }\r\n\r\n    export const get = (url: string): Promise<any> => {\r\n        return request(`GET`, url);\r\n    }\r\n\r\n    export const post = (url: string, data: any, headers: any = null): Promise<any> => {\r\n        return request(`POST`, url, data, headers);\r\n    }\r\n\r\n    export const serialize = (data: any): string => {\r\n        let serializeData: string = ``;\r\n        for(let a in data) {\r\n            if(!serializeData) {\r\n                serializeData = `${a}=${data[a]}`;\r\n            } else {\r\n                serializeData = `${serializeData}&${a}=${data[a]}`;\r\n            }\r\n        }\r\n        return serializeData;\r\n    }\r\n}\n\n\n// WEBPACK FOOTER //\n// ./js/newTube/helpers/http.helper.ts","import * as jQuery from \"jquery\";\r\nvar $ = jQuery;\r\n// Ion.RangeSlider\r\n// version 2.1.3 Build: 352\r\n// © Denis Ineshin, 2016\r\n// https://github.com/IonDen\r\n//\r\n// Project page:    http://ionden.com/a/plugins/ion.rangeSlider/en.html\r\n// GitHub page:     https://github.com/IonDen/ion.rangeSlider\r\n//\r\n// Released under MIT licence:\r\n// http://ionden.com/a/plugins/licence-en.html\r\n// =====================================================================================================================\r\nimport './ion.range-slider.src';\r\nexport namespace IonRangeSlider {\r\n    export const init = () => {\r\n        var filter: any = $(\"#range_length_filter\");\r\n        if (filter) {\r\n            filter.ionRangeSlider({\r\n                type: \"double\",\r\n                //                    min: 0,\r\n                //                    max: 50,\r\n                step: 5,\r\n                grid: true,\r\n                grid_snap: true,\r\n                oldUrl: \"\",\r\n                newUrl: \"\",\r\n                //values: [\"0\", \"10\", \"20\", \"30\", \"40\", \"+\"],\r\n                onStart: function (data) {\r\n\r\n                },\r\n                onChange: function (data) {\r\n\r\n                },\r\n                onFinish: function (data) {\r\n                    var oldUrl = window.location.href;\r\n                    var newUrl = \"\";\r\n                    var andChar = \"?\";\r\n                    var andChar2 = \"&\";\r\n                    var sLen = oldUrl.length;\r\n                    var multiplication = ((parseInt(filter.attr(\"data-multiplication\")) > 0) ? parseInt(filter.attr(\"data-multiplication\")) : 1)\r\n                    var limit = data.max * multiplication;\r\n                    var dt = data.to * multiplication;\r\n                    var df = data.from * multiplication;\r\n                    var dt_string = filter.attr(\"data-attr-to\") + \"=\" + dt;\r\n                    var df_string = filter.attr(\"data-attr-from\") + \"=\" + df;\r\n                    var tempUrlArray: any = [];\r\n                    var subparamsArray: any = [];\r\n                    console.log(multiplication);\r\n                    // check if there is already GET [?]\r\n                    var currentUrl\r\n                    if (oldUrl.indexOf(\"?\") > -1) {\r\n                        tempUrlArray = oldUrl.split(\"?\");\r\n                        currentUrl = tempUrlArray[0]\r\n                        tempUrlArray = tempUrlArray[1];\r\n                        subparamsArray = tempUrlArray.split(\"&\");\r\n                        // check params and remove them\r\n                        for (var i = subparamsArray.length - 1; i >= 0; i--) {\r\n\r\n                            //console.log(subparamsArray[i].indexOf(\"duration\") > -1);\r\n                            //if (subparamsArray[i].indexOf(\"duration\") > -1) {\r\n                            if (subparamsArray[i].indexOf(filter.attr(\"data-attr-to\")) > -1 || subparamsArray[i].indexOf(filter.attr(\"data-attr-from\")) > -1) {\r\n                                subparamsArray.splice(i, 1);\r\n                            }\r\n\r\n                        }\r\n                    } else {\r\n                        currentUrl = oldUrl;\r\n                    }\r\n\r\n                    if (df > data.min) {\r\n                        subparamsArray.push(df_string);\r\n                    }\r\n                    // build new array\r\n                    if (dt != limit) {\r\n                        subparamsArray.push(dt_string);\r\n                    }\r\n\r\n                    var newParamsUrl: any = [];\r\n                    var valParams = [];\r\n                    // build array string\r\n                    for (var i = 0; i < subparamsArray.length; i++) {\r\n                        valParams.push(subparamsArray[i]);\r\n                        if (i == 0) {\r\n                            newParamsUrl += \"?\" + subparamsArray[i];\r\n                        } else {\r\n                            newParamsUrl += \"&\" + subparamsArray[i];\r\n                        }\r\n                    }\r\n                    //filter.val(valParams); \r\n\r\n\r\n                    newUrl = currentUrl + newParamsUrl;\r\n                    if (filter.attr(\"data-method\") != \"onpost\") {\r\n                        window.location.href = newUrl;\r\n                    }\r\n\r\n                },\r\n                onUpdate: function (data) {\r\n\r\n                }\r\n            });\r\n            var slider = $(\"#range_length_filter\").data(\"ionRangeSlider\");\r\n            //                slider.update({\r\n            //                    from:20,\r\n            //                    to: 50,\r\n            //                });\r\n\r\n        }\r\n    }\r\n}\n\n\n// WEBPACK FOOTER //\n// ./js/newTube/ion-range-slider/ion.range-slider.ts","import { NhanceTools } from '../responsive-trigger/nhance.responsive-trigger';\r\n// tslint:disable:object-literal-sort-keys\r\nexport class MainNav {\r\n    public bodyClass: string;\r\n    public trigger: NhanceTools.ResponsiveTriggerClass;\r\n\r\n    constructor(bodyClass: string =  `is-main-nav-open`) {\r\n        this.bodyClass = bodyClass;\r\n\r\n        this.trigger = new NhanceTools.ResponsiveTriggerClass({\r\n            triggerElement: document.querySelector(`[data-mb-trigger=\"nav\"]`),\r\n            targetElement: document.querySelector('.main-nav'),\r\n            anywhereExcludedElements: document.querySelector('.main-nav__inner'),\r\n            defaultOpen: false,\r\n            classes: {\r\n                in: 'is-main-nav-open',\r\n                animIn: 'is-main-nav-opening',\r\n                out: 'is-main-nav-closed',\r\n                animOut: 'is-main-nav-closing',\r\n                animProgress: 'is-main-nav-animating',\r\n\r\n                triggerActive: 'is-active',\r\n                targetActive: 'is-active',\r\n            },\r\n            animTimeout: 500,\r\n            onInit: () => {\r\n               \r\n            },\r\n            onChange: (isActive: boolean) => {\r\n                \r\n            }\r\n        });\r\n        this._init();\r\n    }\r\n\r\n    private _init() {\r\n    }\r\n}\n\n\n// WEBPACK FOOTER //\n// ./js/newTube/main-nav/main-nav.ts","import { DomHelpers, PlatformHelper } from '../helpers';\r\n// tslint:disable:member-ordering\r\nclass QuickHoverElement {\r\n    private _elem: HTMLElement;\r\n    private _className: string;\r\n    private _timeoutFunc: any = null;\r\n    private _timeout: number;\r\n\r\n    constructor(elem: HTMLElement, className: string, timeout: number = 500) {\r\n        this._elem = elem;\r\n        this._className = className;\r\n        this._timeout = timeout;\r\n\r\n        this._registerEnterListener();\r\n        this._registerExitListener();\r\n    }\r\n\r\n    private _registerEnterListener(): void {\r\n        this._elem.addEventListener('mouseenter', (e: Event) => {\r\n            this._unsetTimeout();\r\n            DomHelpers.addClass(this._elem, this._className);\r\n        });\r\n    }\r\n\r\n    private _registerExitListener(): void {\r\n        this._elem.addEventListener('mouseleave', (e: Event) => {\r\n            this._unsetTimeout();\r\n\r\n            if (PlatformHelper.detectMobileDevice()) {\r\n                DomHelpers.removeClass(this._elem, this._className);\r\n                this._unsetTimeout();\r\n                return;\r\n            }\r\n\r\n            this._timeoutFunc = setTimeout(() => {\r\n                DomHelpers.removeClass(this._elem, this._className);\r\n                this._unsetTimeout();\r\n            }, this._timeout);\r\n        });\r\n    }\r\n\r\n    private _unsetTimeout(): void {\r\n        if (this._timeoutFunc) {\r\n            clearTimeout(this._timeoutFunc);\r\n            this._timeoutFunc = null;\r\n        }\r\n    }\r\n\r\n}\r\n\r\nexport class QuickHover {\r\n    private _list: NodeList;\r\n    private _timeout: number;\r\n    private _registy: QuickHoverElement[] = [];\r\n\r\n    constructor(timeout: number = 500) {\r\n        this._list = document.querySelectorAll(`[data-mb=\"quick-hover\"]`);\r\n        this._timeout = timeout;\r\n\r\n        if (this._list) {\r\n            this._init();\r\n        }\r\n    }\r\n\r\n    private _init(): void {\r\n        Array.from(this._list).forEach((elem: HTMLElement) => {\r\n            this._registy.push(new QuickHoverElement(elem, `js-hover`, this._timeout));\r\n        });\r\n    }\r\n\r\n    public setInnerExit(selector: string, unsetLevelsUp: number = 2): void {\r\n        let elem: HTMLElement = document.querySelector(`${selector}`);\r\n        let excluded: HTMLElement = document.querySelector(`[data-mb-quick-hover=\"exclude-exit\"]`);\r\n        let levelCount: number = 0;\r\n        if (!elem) { return; }\r\n\r\n        let target: HTMLElement = elem;\r\n\r\n        while (levelCount < unsetLevelsUp) {\r\n            target = target.parentElement;\r\n            levelCount++;\r\n        }\r\n\r\n        if (target) {\r\n            elem.addEventListener('mouseleave', (e: any) => {\r\n                let t = e.toElement || e.relatedTarget;\r\n                if(t.getAttribute(`data-mb-quick-hover`) === 'exclude-exit') { return; } \r\n                DomHelpers.removeClass(target, `js-hover`);\r\n            });\r\n        }\r\n    }\r\n}\n\n\n// WEBPACK FOOTER //\n// ./js/newTube/quick-hover/quick-hover.ts","import * as jQuery from 'jquery';\r\nimport '../core/jRating.jquery';\r\nimport { HttpHelper } from '../helpers';\r\nimport { buildNewModal } from '../modals/modals';\r\n\r\nlet $: any = jQuery;\r\n\r\nexport class Rating {\r\n    private _rawUrl: string;\r\n\r\n    private _id: string;\r\n    private _msg: any = {\r\n        error: `Sorry, you've already voted!`,\r\n        success: `Thanks for voting!`,\r\n    };\r\n    private _type: string;\r\n    private _list: NodeList;\r\n\r\n    constructor() {\r\n        this._initJRatingModule();\r\n        this._initThumbsModule();\r\n    }\r\n\r\n    private _initThumbsModule(): void {\r\n        if (!$('[data-mb=\"thumbs-rating\"]').length) { return; }\r\n\r\n        const el: HTMLElement = document.querySelector(`[data-mb=\"thumbs-rating\"]`);\r\n\r\n        this._rawUrl = `${window['_basehttp']}/includes/rating/jRating.php`;\r\n        this._id = el.getAttribute(`data-opt-id`);\r\n        this._type = el.getAttribute(`data-opt-type`) ? el.getAttribute(`data-opt-type`) : `0`;\r\n        this._list = document.querySelectorAll(`[data-mb=\"vote\"]`);\r\n\r\n        this._handleVote();\r\n    }\r\n\r\n    private _handleVote(): void {\r\n        if (!this._list) { return; }\r\n        Array.from(this._list).forEach((btn: HTMLElement) => {\r\n            btn.addEventListener(`click`, (e: Event) => {\r\n\r\n                e.preventDefault();\r\n\r\n                let rate: number = btn.getAttribute(`data-opt-vote`) === 'up' ? 100 : 0;\r\n\r\n                const data = HttpHelper.serialize({\r\n                    action: 'rating',\r\n                    idBox: this._id,\r\n                    type: this._type,\r\n                    rate,\r\n                });\r\n\r\n                HttpHelper.post(this._rawUrl,\r\n                    data,\r\n                    { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' })\r\n                    .then((response) => {\r\n                        return JSON.parse(response);\r\n                    })\r\n                    .then((response) => {\r\n                        buildNewModal(response.message, {\r\n                            rand: Math.floor((Math.random()) * 1000),\r\n                            closeTitle: btn.getAttribute('data-opt-close'),\r\n                            id: \"voting\",\r\n                            title: btn.getAttribute('title'),\r\n                        });\r\n                        return response;\r\n                    });\r\n\r\n            })\r\n        });\r\n    }\r\n\r\n    private _initJRatingModule(): void {\r\n        if (!$('.ratingStars').length) { return; }\r\n        $('.ratingStars').jRating({\r\n            'rateMax': 100,\r\n            onError: function () {\r\n                $('#ratingStarsMessage').text('Sorry, you\\'ve already voted on this video/gallery.');\r\n            },\r\n            onSuccess: function () {\r\n                $('#ratingStarsMessage').text('Thanks for voting!');\r\n            },\r\n        }, 'json');\r\n    }\r\n\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./js/newTube/rating/rating.ts","import './window.interface';\r\nimport './settings.interface';\n\n\n// WEBPACK FOOTER //\n// ./js/newTube/responsive-trigger/interfaces/index.ts","class Helpers {\r\n    static toArray(classes: string | Array<string>): Array<string> {\r\n        let rtn: Array<string>;\r\n\r\n        if (classes instanceof Array) {\r\n            return [...classes]; /* Copy! */\r\n        }\r\n\r\n        if (typeof classes === 'string') {\r\n            return classes.split(' ');\r\n        }\r\n    }\r\n\r\n    static hasClass(element: Element, ...classes: Array<string>): boolean {\r\n        //console.time('HELPER hasClass');\r\n        for (let cls of classes) {\r\n            return !!~Array.from(element.classList).indexOf(cls);\r\n        }\r\n        console.timeEnd('HELPER hasClass');\r\n    }\r\n\r\n    static addClass(element: Element, ...classes: Array<string>): void {\r\n        //console.time('HELPER addClass');\r\n        let currentClasses: Array<string> = element.className.split(\" \");\r\n\r\n        let newClassesArray: Array<string> = [...currentClasses];\r\n        \r\n        for(let cls of classes) {\r\n\r\n            if(!~currentClasses.indexOf(cls)) {\r\n\r\n                newClassesArray.push(cls);\r\n            \r\n            }\r\n        }\r\n\r\n        element.className = newClassesArray.sort().join(' ');\r\n        //console.timeEnd('HELPER addClass');\r\n    }\r\n\r\n    static removeClass(element: Element, ...classes: Array<string>) {\r\n        //console.time('HELPER removeClass');\r\n        let current: Array<string> = element.className.split(\" \");\r\n\r\n        let rmIndexArray: Array<number> = [];\r\n\r\n        for(let i = 0;i < classes.length; i++) {\r\n            \r\n            let index = current.indexOf(classes[i]);\r\n\r\n            if(index > -1) {\r\n                rmIndexArray.push(index);\r\n            }\r\n        }\r\n\r\n        for(let index of rmIndexArray.sort().reverse()) {\r\n            current.splice(index, 1);\r\n        }\r\n        \r\n        element.className = current.join(' ');\r\n        //console.timeEnd('HELPER removeClass');\r\n    }\r\n\r\n    static tempClass(element: Element, timeout: number = 500, ...classes: Array<string>) {\r\n\r\n        Helpers.addClass(element, ...classes);\r\n\r\n        setTimeout(() => {\r\n            Helpers.removeClass(element, ...classes);\r\n        }, timeout);\r\n    }\r\n}\r\n\r\n\r\nexport { Helpers }\n\n\n// WEBPACK FOOTER //\n// ./js/newTube/responsive-trigger/shared/dom-classes.helper.ts","export { Helpers } from './dom-classes.helper';\n\n\n// WEBPACK FOOTER //\n// ./js/newTube/responsive-trigger/shared/index.ts","import { DomHelpers } from \"../helpers\";\r\n\r\nexport class SearchSelector {\r\n    private _inputTarget: HTMLInputElement;\r\n    private _divLabelTarget: HTMLElement;\r\n    private _list: NodeList;\r\n\r\n    private _canUseSelect: boolean = false;\r\n\r\n    private _selected: string = ``;\r\n\r\n    constructor() {\r\n        this._inputTarget = document.querySelector(`[data-mb-search-target]`);\r\n        this._divLabelTarget = document.querySelector(`[data-mb-search-label]`);\r\n        this._list = document.querySelectorAll(`[data-mb-search-select]`);\r\n\r\n        if (this._inputTarget && this._divLabelTarget && this._list) {\r\n            this._canUseSelect = true;\r\n            this._set();\r\n            this._registerTriggers();\r\n        }\r\n    }\r\n\r\n    private _set(): void {\r\n        this._clearLabel();\r\n        this._clearInputVal();\r\n        this._getSelected();\r\n        this._setSelectedLabel();\r\n        this._setInputVal();\r\n        /* If that's not clear enough for you.. f* u */\r\n    }\r\n\r\n    private _clearLabel(): void {\r\n        this._divLabelTarget.innerHTML = ``;\r\n    }\r\n\r\n    private _clearInputVal(): void {\r\n        this._inputTarget.value = ``;\r\n    }\r\n\r\n    private _getSelected(): void {\r\n        let searchType: any = window.localStorage.getItem('user.mb.searchType');\r\n        this._selected = searchType ? searchType : ``;\r\n    }\r\n\r\n    private _setSelectedLabel(): void {\r\n        let htmlCode: string;\r\n\r\n        Array.from(this._list).forEach((element: HTMLElement) => {\r\n            let attrib = element.getAttribute(`data-mb-search-select`);\r\n            if (!this._selected && (attrib === `all` || !attrib) || this._selected === attrib) {\r\n                htmlCode = element.innerHTML;\r\n            }\r\n        });\r\n\r\n        this._divLabelTarget.innerHTML = htmlCode;\r\n    }\r\n\r\n    private _setInputVal(): void {\r\n        this._inputTarget.value = this._selected;\r\n    }\r\n\r\n    private _registerTriggers(): void {\r\n        let parent: HTMLElement = this._divLabelTarget.parentElement;\r\n\r\n        this._divLabelTarget.addEventListener(`click`, (e: Event) => {\r\n            e.stopPropagation();\r\n            DomHelpers.toggleClass(parent, `js-search-list-visible`);\r\n        });\r\n\r\n        document.addEventListener(`click`, () => {\r\n            DomHelpers.removeClass(parent, `js-search-list-visible`);\r\n        })\r\n\r\n        Array.from(this._list).forEach((element: HTMLElement) => {\r\n            element.addEventListener(`click`, (e: Event) => {\r\n                let attrib: string = element.getAttribute(`data-mb-search-select`);\r\n\r\n                if(attrib === `all` || !attrib) {\r\n                    window.localStorage.removeItem(`user.mb.searchType`);\r\n                } else {\r\n                    window.localStorage.setItem(`user.mb.searchType`, attrib);\r\n                }\r\n\r\n                this._set();\r\n            });\r\n        });\r\n    }\r\n}\n\n\n// WEBPACK FOOTER //\n// ./js/newTube/search-selector/search-selector.ts","// https://github.com/Grsmto/simplebar\r\nimport * as SimpleBar from 'simplebar';\r\n\r\nexport class SimpleScrollbar {\r\n    private _list: NodeList;\r\n    private _registy: SimpleBar[] = []; /* Might be used in the future to manipulate scrollbars */\r\n\r\n    constructor() {\r\n        this._list = document.querySelectorAll(`[data-mb=\"scrollbar\"]`);\r\n        if (this._list) {\r\n            \r\n            this._init();\r\n        }\r\n    }\r\n\r\n    private _init(): void {\r\n        Array.from(this._list).forEach((elem: HTMLElement) => {\r\n            this._registy.push(new SimpleBar(elem, \r\n                { autoHide: false }\r\n            ));\r\n        });\r\n    }\r\n\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./js/newTube/simple-scrollbar/simple-scrollbar.ts","import { DomHelpers } from '../helpers';\r\nexport class Tabs {\r\n    private _triggers: NodeList;\r\n    private _content: NodeList;\r\n\r\n    constructor() {\r\n        this._triggers = document.querySelectorAll(`[data-mb-tab]`);\r\n        this._content = document.querySelectorAll(`[data-tab-id]`);\r\n\r\n        if (this._triggers && this._content) {\r\n            this._registerTriggers();\r\n            this._setFirst();\r\n        }\r\n    }\r\n\r\n    private _registerTriggers(): void {\r\n        Array.from(this._triggers).forEach((elem: HTMLElement) => {\r\n            elem.addEventListener(`click`, (e: Event) => {\r\n                e.preventDefault();\r\n                this._unsetTrigger(elem);\r\n                this._set(elem);\r\n            });\r\n        });\r\n    }\r\n\r\n    private _set(elem: HTMLElement): void {\r\n        let attrib: string = elem.getAttribute(`data-mb-tab`);\r\n        DomHelpers.addClass(elem, `is-active`);\r\n        Array.from(this._content).forEach((contentEl: HTMLElement) => {\r\n            let cattrib: string = contentEl.getAttribute(`data-tab-id`);\r\n            if (cattrib === attrib) {\r\n                DomHelpers.addClass(contentEl, `is-active`, `is-tab-active`);\r\n            } else {\r\n                DomHelpers.removeClass(contentEl, `is-active`, `is-tab-active`);\r\n            }\r\n        });\r\n\r\n    }\r\n\r\n    private _setFirst(): void {\r\n        let first: HTMLElement = <HTMLElement>Array.from(this._triggers)[0];\r\n        if(!first) { return;}\r\n        let attrib = first.getAttribute(`data-mb-tab`);\r\n        DomHelpers.addClass(first, `is-active`);\r\n        Array.from(this._content).forEach((elem: HTMLElement) => {\r\n            let cattrib: string = elem.getAttribute(`data-tab-id`);\r\n            if (cattrib === attrib) {\r\n                DomHelpers.addClass(elem, `is-active`, `is-tab-active`);\r\n            } else {\r\n                DomHelpers.removeClass(elem, `is-active`, `is-tab-active`);\r\n            }\r\n        });\r\n    }\r\n\r\n    private _unsetTrigger(elem: HTMLElement) {\r\n        Array.from(this._triggers).forEach((trigger: HTMLElement) => {\r\n            if(trigger !== elem) {\r\n                DomHelpers.removeClass(trigger, `is-active`);\r\n            }\r\n        })\r\n    } \r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./js/newTube/tabs/tabs.ts","class Thumb {\r\n    private _elem: HTMLElement | HTMLImageElement;\r\n    private _target: HTMLImageElement;\r\n\r\n    private _timeout: number;\r\n    private _limit: number;\r\n    \r\n    private _initial: number;\r\n    private _current: number;\r\n\r\n    private _thumbs: string[] = [];\r\n\r\n    private _interval: any;\r\n\r\n    constructor(elem: HTMLElement, timeout: number, limit: number, target?: HTMLImageElement) {\r\n        this._elem = elem;\r\n        this._timeout = timeout;\r\n        this._limit = limit;\r\n\r\n        this._target = target;\r\n\r\n        this._init();\r\n    }\r\n\r\n    private _init(): void {\r\n        if(!this._extractFileNames()) { return; }\r\n        this._registerEvents();\r\n    }\r\n\r\n    private _extractFileNames(): boolean {\r\n        let src: string =  !this._target ? this._elem.getAttribute(`src`) : this._target.getAttribute('src');\r\n        if(!src) { return false; }\r\n\r\n        let lastDotIndex = src.lastIndexOf(`.`);\r\n\r\n        let obj = {\r\n            prefix:src.substr(0, lastDotIndex - 1),\r\n            suffix:src.substr(lastDotIndex, src.length),\r\n            current: Number(src.substr(lastDotIndex - 1, 1))\r\n        }\r\n\r\n        this._initial = obj.current;\r\n        this._current = obj.current;\r\n\r\n        if(Number.isNaN(this._initial)) { return false; }\r\n\r\n        let x: number = 1;\r\n        while(x <= this._limit) {\r\n            this._thumbs.push(`${obj.prefix}${x}${obj.suffix}`);\r\n            x++;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    private _registerEvents(): void {\r\n        this._elem.addEventListener(`mouseenter`, this._start.bind(this));\r\n        this._elem.addEventListener(`mouseleave`, this._stop.bind(this));\r\n    }\r\n\r\n    private _start(): void {\r\n        this._incrementCurrent();\r\n\r\n        if(this._interval) { return; }\r\n\r\n        this._interval = setInterval(this._incrementCurrent.bind(this), this._timeout);\r\n    }\r\n\r\n    private _stop(): void {\r\n        let elem = this._target ? this._target : this._elem;\r\n        clearInterval(this._interval);\r\n        this._interval = undefined;\r\n        this._current = this._initial;\r\n        elem.setAttribute(`src`, this._thumbs[this._initial - 1]);\r\n    }\r\n\r\n    private _incrementCurrent() {\r\n        let elem = this._target ? this._target : this._elem;\r\n        this._current++;\r\n        if(this._current >= this._limit) {\r\n            this._current = 0;\r\n        }\r\n\r\n        elem.setAttribute(`src`, this._thumbs[this._current]);\r\n    }\r\n}\r\n\r\nexport class ThumbShuffler {\r\n    private _registry: HTMLElement[] = [];\r\n    private _timeout: number;\r\n    private _limit: number;\r\n\r\n    constructor(timeout: number = 500, limit: number = 9) {\r\n        this._limit = limit;\r\n        this._timeout = timeout;\r\n        this._init();\r\n    }\r\n\r\n    private _init() {\r\n        let elems: NodeList = document.querySelectorAll(`[data-mb=\"shuffle\"]`);\r\n        if(elems) {\r\n            Array.from(elems).forEach((elem: HTMLElement) => {\r\n                if(!~this._registry.indexOf(elem)) {\r\n                    this._registry.push(elem);\r\n                    let target;\r\n                    if(elem.nodeName !== 'IMG') {\r\n                        target = elem.querySelector(`[data-mb=\"shuffle-target\"]`);\r\n                    }\r\n\r\n                    new Thumb(elem, this._timeout, this._limit, target);\r\n                }\r\n            });\r\n        }\r\n    }\r\n\r\n    public async update(): Promise<any> {\r\n        this._init();\r\n        return true;\r\n    }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./js/newTube/thumb-shuffler/thumb-shuffler.ts","import jQuery from \"jquery\";\r\nvar $ = jQuery;\r\ntypeof JSON!=\"object\"&&(JSON={}),function(){\"use strict\";function f(e){return e<10?\"0\"+e:e}function quote(e){return escapable.lastIndex=0,escapable.test(e)?'\"'+e.replace(escapable,function(e){var t=meta[e];return typeof t==\"string\"?t:\"\\\\u\"+(\"0000\"+e.charCodeAt(0).toString(16)).slice(-4)})+'\"':'\"'+e+'\"'}function str(e,t){var n,r,i,s,o=gap,u,a=t[e];a&&typeof a==\"object\"&&typeof a.toJSON==\"function\"&&(a=a.toJSON(e)),typeof rep==\"function\"&&(a=rep.call(t,e,a));switch(typeof a){case\"string\":return quote(a);case\"number\":return isFinite(a)?String(a):\"null\";case\"boolean\":case\"null\":return String(a);case\"object\":if(!a)return\"null\";gap+=indent,u=[];if(Object.prototype.toString.apply(a)===\"[object Array]\"){s=a.length;for(n=0;n<s;n+=1)u[n]=str(n,a)||\"null\";return i=u.length===0?\"[]\":gap?\"[\\n\"+gap+u.join(\",\\n\"+gap)+\"\\n\"+o+\"]\":\"[\"+u.join(\",\")+\"]\",gap=o,i}if(rep&&typeof rep==\"object\"){s=rep.length;for(n=0;n<s;n+=1)typeof rep[n]==\"string\"&&(r=rep[n],i=str(r,a),i&&u.push(quote(r)+(gap?\": \":\":\")+i))}else for(r in a)Object.prototype.hasOwnProperty.call(a,r)&&(i=str(r,a),i&&u.push(quote(r)+(gap?\": \":\":\")+i));return i=u.length===0?\"{}\":gap?\"{\\n\"+gap+u.join(\",\\n\"+gap)+\"\\n\"+o+\"}\":\"{\"+u.join(\",\")+\"}\",gap=o,i}}typeof Date.prototype.toJSON!=\"function\"&&(Date.prototype.toJSON=function(e){return isFinite(this.valueOf())?this.getUTCFullYear()+\"-\"+f(this.getUTCMonth()+1)+\"-\"+f(this.getUTCDate())+\"T\"+f(this.getUTCHours())+\":\"+f(this.getUTCMinutes())+\":\"+f(this.getUTCSeconds())+\"Z\":null},String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(e){return this.valueOf()});var cx=/[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,escapable=/[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,gap,indent,meta={\"\\b\":\"\\\\b\",\"\t\":\"\\\\t\",\"\\n\":\"\\\\n\",\"\\f\":\"\\\\f\",\"\\r\":\"\\\\r\",'\"':'\\\\\"',\"\\\\\":\"\\\\\\\\\"},rep;typeof JSON.stringify!=\"function\"&&(JSON.stringify=function(e,t,n){var r;gap=\"\",indent=\"\";if(typeof n==\"number\")for(r=0;r<n;r+=1)indent+=\" \";else typeof n==\"string\"&&(indent=n);rep=t;if(!t||typeof t==\"function\"||typeof t==\"object\"&&typeof t.length==\"number\")return str(\"\",{\"\":e});throw new Error(\"JSON.stringify\")}),typeof JSON.parse!=\"function\"&&(JSON.parse=function(text,reviver){function walk(e,t){var n,r,i=e[t];if(i&&typeof i==\"object\")for(n in i)Object.prototype.hasOwnProperty.call(i,n)&&(r=walk(i,n),r!==undefined?i[n]=r:delete i[n]);return reviver.call(e,t,i)}var j;text=String(text),cx.lastIndex=0,cx.test(text)&&(text=text.replace(cx,function(e){return\"\\\\u\"+(\"0000\"+e.charCodeAt(0).toString(16)).slice(-4)}));if(/^[\\],:{}\\s]*$/.test(text.replace(/\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g,\"@\").replace(/\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g,\"]\").replace(/(?:^|:|,)(?:\\s*\\[)+/g,\"\")))return j=eval(\"(\"+text+\")\"),typeof reviver==\"function\"?walk({\"\":j},\"\"):j;throw new SyntaxError(\"JSON.parse\")})}(),function(e,t){\"use strict\";var n=e.History=e.History||{};if(typeof n.Adapter!=\"undefined\")throw new Error(\"History.js Adapter has already been loaded...\");n.Adapter={handlers:{},_uid:1,uid:function(e){return e._uid||(e._uid=n.Adapter._uid++)},bind:function(e,t,r){var i=n.Adapter.uid(e);n.Adapter.handlers[i]=n.Adapter.handlers[i]||{},n.Adapter.handlers[i][t]=n.Adapter.handlers[i][t]||[],n.Adapter.handlers[i][t].push(r),e[\"on\"+t]=function(e,t){return function(r){n.Adapter.trigger(e,t,r)}}(e,t)},trigger:function(e,t,r){r=r||{};var i=n.Adapter.uid(e),s,o;n.Adapter.handlers[i]=n.Adapter.handlers[i]||{},n.Adapter.handlers[i][t]=n.Adapter.handlers[i][t]||[];for(s=0,o=n.Adapter.handlers[i][t].length;s<o;++s)n.Adapter.handlers[i][t][s].apply(this,[r])},extractEventData:function(e,n){var r=n&&n[e]||t;return r},onDomLoad:function(t){var n=e.setTimeout(function(){t()},2e3);e.onload=function(){clearTimeout(n),t()}}},typeof n.init!=\"undefined\"&&n.init()}(window),function(e,t){\"use strict\";var n=e.document,r=e.setTimeout||r,i=e.clearTimeout||i,s=e.setInterval||s,o=e.History=e.History||{};if(typeof o.initHtml4!=\"undefined\")throw new Error(\"History.js HTML4 Support has already been loaded...\");o.initHtml4=function(){if(typeof o.initHtml4.initialized!=\"undefined\")return!1;o.initHtml4.initialized=!0,o.enabled=!0,o.savedHashes=[],o.isLastHash=function(e){var t=o.getHashByIndex(),n;return n=e===t,n},o.isHashEqual=function(e,t){return e=encodeURIComponent(e).replace(/%25/g,\"%\"),t=encodeURIComponent(t).replace(/%25/g,\"%\"),e===t},o.saveHash=function(e){return o.isLastHash(e)?!1:(o.savedHashes.push(e),!0)},o.getHashByIndex=function(e){var t=null;return typeof e==\"undefined\"?t=o.savedHashes[o.savedHashes.length-1]:e<0?t=o.savedHashes[o.savedHashes.length+e]:t=o.savedHashes[e],t},o.discardedHashes={},o.discardedStates={},o.discardState=function(e,t,n){var r=o.getHashByState(e),i;return i={discardedState:e,backState:n,forwardState:t},o.discardedStates[r]=i,!0},o.discardHash=function(e,t,n){var r={discardedHash:e,backState:n,forwardState:t};return o.discardedHashes[e]=r,!0},o.discardedState=function(e){var t=o.getHashByState(e),n;return n=o.discardedStates[t]||!1,n},o.discardedHash=function(e){var t=o.discardedHashes[e]||!1;return t},o.recycleState=function(e){var t=o.getHashByState(e);return o.discardedState(e)&&delete o.discardedStates[t],!0},o.emulated.hashChange&&(o.hashChangeInit=function(){o.checkerFunction=null;var t=\"\",r,i,u,a,f=Boolean(o.getHash());return o.isInternetExplorer()?(r=\"historyjs-iframe\",i=n.createElement(\"iframe\"),i.setAttribute(\"id\",r),i.setAttribute(\"src\",\"#\"),i.style.display=\"none\",n.body.appendChild(i),i.contentWindow.document.open(),i.contentWindow.document.close(),u=\"\",a=!1,o.checkerFunction=function(){if(a)return!1;a=!0;var n=o.getHash(),r=o.getHash(i.contentWindow.document);return n!==t?(t=n,r!==n&&(u=r=n,i.contentWindow.document.open(),i.contentWindow.document.close(),i.contentWindow.document.location.hash=o.escapeHash(n)),o.Adapter.trigger(e,\"hashchange\")):r!==u&&(u=r,f&&r===\"\"?o.back():o.setHash(r,!1)),a=!1,!0}):o.checkerFunction=function(){var n=o.getHash()||\"\";return n!==t&&(t=n,o.Adapter.trigger(e,\"hashchange\")),!0},o.intervalList.push(s(o.checkerFunction,o.options.hashChangeInterval)),!0},o.Adapter.onDomLoad(o.hashChangeInit)),o.emulated.pushState&&(o.onHashChange=function(t){var n=t&&t.newURL||o.getLocationHref(),r=o.getHashByUrl(n),i=null,s=null,u=null,a;return o.isLastHash(r)?(o.busy(!1),!1):(o.doubleCheckComplete(),o.saveHash(r),r&&o.isTraditionalAnchor(r)?(o.Adapter.trigger(e,\"anchorchange\"),o.busy(!1),!1):(i=o.extractState(o.getFullUrl(r||o.getLocationHref()),!0),o.isLastSavedState(i)?(o.busy(!1),!1):(s=o.getHashByState(i),a=o.discardedState(i),a?(o.getHashByIndex(-2)===o.getHashByState(a.forwardState)?o.back(!1):o.forward(!1),!1):(o.pushState(i.data,i.title,encodeURI(i.url),!1),!0))))},o.Adapter.bind(e,\"hashchange\",o.onHashChange),o.pushState=function(t,n,r,i){r=encodeURI(r).replace(/%25/g,\"%\");if(o.getHashByUrl(r))throw new Error(\"History.js does not support states with fragment-identifiers (hashes/anchors).\");if(i!==!1&&o.busy())return o.pushQueue({scope:o,callback:o.pushState,args:arguments,queue:i}),!1;o.busy(!0);var s=o.createStateObject(t,n,r),u=o.getHashByState(s),a=o.getState(!1),f=o.getHashByState(a),l=o.getHash(),c=o.expectedStateId==s.id;return o.storeState(s),o.expectedStateId=s.id,o.recycleState(s),o.setTitle(s),u===f?(o.busy(!1),!1):(o.saveState(s),c||o.Adapter.trigger(e,\"statechange\"),!o.isHashEqual(u,l)&&!o.isHashEqual(u,o.getShortUrl(o.getLocationHref()))&&o.setHash(u,!1),o.busy(!1),!0)},o.replaceState=function(t,n,r,i){r=encodeURI(r).replace(/%25/g,\"%\");if(o.getHashByUrl(r))throw new Error(\"History.js does not support states with fragment-identifiers (hashes/anchors).\");if(i!==!1&&o.busy())return o.pushQueue({scope:o,callback:o.replaceState,args:arguments,queue:i}),!1;o.busy(!0);var s=o.createStateObject(t,n,r),u=o.getHashByState(s),a=o.getState(!1),f=o.getHashByState(a),l=o.getStateByIndex(-2);return o.discardState(a,s,l),u===f?(o.storeState(s),o.expectedStateId=s.id,o.recycleState(s),o.setTitle(s),o.saveState(s),o.Adapter.trigger(e,\"statechange\"),o.busy(!1)):o.pushState(s.data,s.title,s.url,!1),!0}),o.emulated.pushState&&o.getHash()&&!o.emulated.hashChange&&o.Adapter.onDomLoad(function(){o.Adapter.trigger(e,\"hashchange\")})},typeof o.init!=\"undefined\"&&o.init()}(window),function(e,t){\"use strict\";var n=e.console||t,r=e.document,i=e.navigator,s=!1,o=e.setTimeout,u=e.clearTimeout,a=e.setInterval,f=e.clearInterval,l=e.JSON,c=e.alert,h=e.History=e.History||{},p=e.history;try{s=e.sessionStorage,s.setItem(\"TEST\",\"1\"),s.removeItem(\"TEST\")}catch(d){s=!1}l.stringify=l.stringify||l.encode,l.parse=l.parse||l.decode;if(typeof h.init!=\"undefined\")throw new Error(\"History.js Core has already been loaded...\");h.init=function(e){return typeof h.Adapter==\"undefined\"?!1:(typeof h.initCore!=\"undefined\"&&h.initCore(),typeof h.initHtml4!=\"undefined\"&&h.initHtml4(),!0)},h.initCore=function(d){if(typeof h.initCore.initialized!=\"undefined\")return!1;h.initCore.initialized=!0,h.options=h.options||{},h.options.hashChangeInterval=h.options.hashChangeInterval||100,h.options.safariPollInterval=h.options.safariPollInterval||500,h.options.doubleCheckInterval=h.options.doubleCheckInterval||500,h.options.disableSuid=h.options.disableSuid||!1,h.options.storeInterval=h.options.storeInterval||1e3,h.options.busyDelay=h.options.busyDelay||250,h.options.debug=h.options.debug||!1,h.options.initialTitle=h.options.initialTitle||r.title,h.options.html4Mode=h.options.html4Mode||!1,h.options.delayInit=h.options.delayInit||!1,h.intervalList=[],h.clearAllIntervals=function(){var e,t=h.intervalList;if(typeof t!=\"undefined\"&&t!==null){for(e=0;e<t.length;e++)f(t[e]);h.intervalList=null}},h.debug=function(){(h.options.debug||!1)&&h.log.apply(h,arguments)},h.log=function(){var e=typeof n!=\"undefined\"&&typeof n.log!=\"undefined\"&&typeof n.log.apply!=\"undefined\",t=r.getElementById(\"log\"),i,s,o,u,a;e?(u=Array.prototype.slice.call(arguments),i=u.shift(),typeof n.debug!=\"undefined\"?n.debug.apply(n,[i,u]):n.log.apply(n,[i,u])):i=\"\\n\"+arguments[0]+\"\\n\";for(s=1,o=arguments.length;s<o;++s){a=arguments[s];if(typeof a==\"object\"&&typeof l!=\"undefined\")try{a=l.stringify(a)}catch(f){}i+=\"\\n\"+a+\"\\n\"}return t?(t.value+=i+\"\\n-----\\n\",t.scrollTop=t.scrollHeight-t.clientHeight):e||c(i),!0},h.getInternetExplorerMajorVersion=function(){var e=h.getInternetExplorerMajorVersion.cached=typeof h.getInternetExplorerMajorVersion.cached!=\"undefined\"?h.getInternetExplorerMajorVersion.cached:function(){var e=3,t=r.createElement(\"div\"),n=t.getElementsByTagName(\"i\");while((t.innerHTML=\"<!--[if gt IE \"+ ++e+\"]><i></i><![endif]-->\")&&n[0]);return e>4?e:!1}();return e},h.isInternetExplorer=function(){var e=h.isInternetExplorer.cached=typeof h.isInternetExplorer.cached!=\"undefined\"?h.isInternetExplorer.cached:Boolean(h.getInternetExplorerMajorVersion());return e},h.options.html4Mode?h.emulated={pushState:!0,hashChange:!0}:h.emulated={pushState:!Boolean(e.history&&e.history.pushState&&e.history.replaceState&&!/ Mobile\\/([1-7][a-z]|(8([abcde]|f(1[0-8]))))/i.test(i.userAgent)&&!/AppleWebKit\\/5([0-2]|3[0-2])/i.test(i.userAgent)),hashChange:Boolean(!(\"onhashchange\"in e||\"onhashchange\"in r)||h.isInternetExplorer()&&h.getInternetExplorerMajorVersion()<8)},h.enabled=!h.emulated.pushState,h.bugs={setHash:Boolean(!h.emulated.pushState&&i.vendor===\"Apple Computer, Inc.\"&&/AppleWebKit\\/5([0-2]|3[0-3])/.test(i.userAgent)),safariPoll:Boolean(!h.emulated.pushState&&i.vendor===\"Apple Computer, Inc.\"&&/AppleWebKit\\/5([0-2]|3[0-3])/.test(i.userAgent)),ieDoubleCheck:Boolean(h.isInternetExplorer()&&h.getInternetExplorerMajorVersion()<8),hashEscape:Boolean(h.isInternetExplorer()&&h.getInternetExplorerMajorVersion()<7)},h.isEmptyObject=function(e){for(var t in e)if(e.hasOwnProperty(t))return!1;return!0},h.cloneObject=function(e){var t,n;return e?(t=l.stringify(e),n=l.parse(t)):n={},n},h.getRootUrl=function(){var e=r.location.protocol+\"//\"+(r.location.hostname||r.location.host);if(r.location.port||!1)e+=\":\"+r.location.port;return e+=\"/\",e},h.getBaseHref=function(){var e=r.getElementsByTagName(\"base\"),t=null,n=\"\";return e.length===1&&(t=e[0],n=t.href.replace(/[^\\/]+$/,\"\")),n=n.replace(/\\/+$/,\"\"),n&&(n+=\"/\"),n},h.getBaseUrl=function(){var e=h.getBaseHref()||h.getBasePageUrl()||h.getRootUrl();return e},h.getPageUrl=function(){var e=h.getState(!1,!1),t=(e||{}).url||h.getLocationHref(),n;return n=t.replace(/\\/+$/,\"\").replace(/[^\\/]+$/,function(e,t,n){return/\\./.test(e)?e:e+\"/\"}),n},h.getBasePageUrl=function(){var e=h.getLocationHref().replace(/[#\\?].*/,\"\").replace(/[^\\/]+$/,function(e,t,n){return/[^\\/]$/.test(e)?\"\":e}).replace(/\\/+$/,\"\")+\"/\";return e},h.getFullUrl=function(e,t){var n=e,r=e.substring(0,1);return t=typeof t==\"undefined\"?!0:t,/[a-z]+\\:\\/\\//.test(e)||(r===\"/\"?n=h.getRootUrl()+e.replace(/^\\/+/,\"\"):r===\"#\"?n=h.getPageUrl().replace(/#.*/,\"\")+e:r===\"?\"?n=h.getPageUrl().replace(/[\\?#].*/,\"\")+e:t?n=h.getBaseUrl()+e.replace(/^(\\.\\/)+/,\"\"):n=h.getBasePageUrl()+e.replace(/^(\\.\\/)+/,\"\")),n.replace(/\\#$/,\"\")},h.getShortUrl=function(e){var t=e,n=h.getBaseUrl(),r=h.getRootUrl();return h.emulated.pushState&&(t=t.replace(n,\"\")),t=t.replace(r,\"/\"),h.isTraditionalAnchor(t)&&(t=\"./\"+t),t=t.replace(/^(\\.\\/)+/g,\"./\").replace(/\\#$/,\"\"),t},h.getLocationHref=function(e){return e=e||r,e.URL===e.location.href?e.location.href:e.location.href===decodeURIComponent(e.URL)?e.URL:e.location.hash&&decodeURIComponent(e.location.href.replace(/^[^#]+/,\"\"))===e.location.hash?e.location.href:e.URL.indexOf(\"#\")==-1&&e.location.href.indexOf(\"#\")!=-1?e.location.href:e.URL||e.location.href},h.store={},h.idToState=h.idToState||{},h.stateToId=h.stateToId||{},h.urlToId=h.urlToId||{},h.storedStates=h.storedStates||[],h.savedStates=h.savedStates||[],h.normalizeStore=function(){h.store.idToState=h.store.idToState||{},h.store.urlToId=h.store.urlToId||{},h.store.stateToId=h.store.stateToId||{}},h.getState=function(e,t){typeof e==\"undefined\"&&(e=!0),typeof t==\"undefined\"&&(t=!0);var n=h.getLastSavedState();return!n&&t&&(n=h.createStateObject()),e&&(n=h.cloneObject(n),n.url=n.cleanUrl||n.url),n},h.getIdByState=function(e){var t=h.extractId(e.url),n;if(!t){n=h.getStateString(e);if(typeof h.stateToId[n]!=\"undefined\")t=h.stateToId[n];else if(typeof h.store.stateToId[n]!=\"undefined\")t=h.store.stateToId[n];else{for(;;){t=(new Date).getTime()+String(Math.random()).replace(/\\D/g,\"\");if(typeof h.idToState[t]==\"undefined\"&&typeof h.store.idToState[t]==\"undefined\")break}h.stateToId[n]=t,h.idToState[t]=e}}return t},h.normalizeState=function(e){var t,n;if(!e||typeof e!=\"object\")e={};if(typeof e.normalized!=\"undefined\")return e;if(!e.data||typeof e.data!=\"object\")e.data={};return t={},t.normalized=!0,t.title=e.title||\"\",t.url=h.getFullUrl(e.url?e.url:h.getLocationHref()),t.hash=h.getShortUrl(t.url),t.data=h.cloneObject(e.data),t.id=h.getIdByState(t),t.cleanUrl=t.url.replace(/\\??\\&_suid.*/,\"\"),t.url=t.cleanUrl,n=!h.isEmptyObject(t.data),(t.title||n)&&h.options.disableSuid!==!0&&(t.hash=h.getShortUrl(t.url).replace(/\\??\\&_suid.*/,\"\"),/\\?/.test(t.hash)||(t.hash+=\"?\"),t.hash+=\"&_suid=\"+t.id),t.hashedUrl=h.getFullUrl(t.hash),(h.emulated.pushState||h.bugs.safariPoll)&&h.hasUrlDuplicate(t)&&(t.url=t.hashedUrl),t},h.createStateObject=function(e,t,n){var r={data:e,title:t,url:n};return r=h.normalizeState(r),r},h.getStateById=function(e){e=String(e);var n=h.idToState[e]||h.store.idToState[e]||t;return n},h.getStateString=function(e){var t,n,r;return t=h.normalizeState(e),n={data:t.data,title:e.title,url:e.url},r=l.stringify(n),r},h.getStateId=function(e){var t,n;return t=h.normalizeState(e),n=t.id,n},h.getHashByState=function(e){var t,n;return t=h.normalizeState(e),n=t.hash,n},h.extractId=function(e){var t,n,r,i;return e.indexOf(\"#\")!=-1?i=e.split(\"#\")[0]:i=e,n=/(.*)\\&_suid=([0-9]+)$/.exec(i),r=n?n[1]||e:e,t=n?String(n[2]||\"\"):\"\",t||!1},h.isTraditionalAnchor=function(e){var t=!/[\\/\\?\\.]/.test(e);return t},h.extractState=function(e,t){var n=null,r,i;return t=t||!1,r=h.extractId(e),r&&(n=h.getStateById(r)),n||(i=h.getFullUrl(e),r=h.getIdByUrl(i)||!1,r&&(n=h.getStateById(r)),!n&&t&&!h.isTraditionalAnchor(e)&&(n=h.createStateObject(null,null,i))),n},h.getIdByUrl=function(e){var n=h.urlToId[e]||h.store.urlToId[e]||t;return n},h.getLastSavedState=function(){return h.savedStates[h.savedStates.length-1]||t},h.getLastStoredState=function(){return h.storedStates[h.storedStates.length-1]||t},h.hasUrlDuplicate=function(e){var t=!1,n;return n=h.extractState(e.url),t=n&&n.id!==e.id,t},h.storeState=function(e){return h.urlToId[e.url]=e.id,h.storedStates.push(h.cloneObject(e)),e},h.isLastSavedState=function(e){var t=!1,n,r,i;return h.savedStates.length&&(n=e.id,r=h.getLastSavedState(),i=r.id,t=n===i),t},h.saveState=function(e){return h.isLastSavedState(e)?!1:(h.savedStates.push(h.cloneObject(e)),!0)},h.getStateByIndex=function(e){var t=null;return typeof e==\"undefined\"?t=h.savedStates[h.savedStates.length-1]:e<0?t=h.savedStates[h.savedStates.length+e]:t=h.savedStates[e],t},h.getCurrentIndex=function(){var e=null;return h.savedStates.length<1?e=0:e=h.savedStates.length-1,e},h.getHash=function(e){var t=h.getLocationHref(e),n;return n=h.getHashByUrl(t),n},h.unescapeHash=function(e){var t=h.normalizeHash(e);return t=decodeURIComponent(t),t},h.normalizeHash=function(e){var t=e.replace(/[^#]*#/,\"\").replace(/#.*/,\"\");return t},h.setHash=function(e,t){var n,i;return t!==!1&&h.busy()?(h.pushQueue({scope:h,callback:h.setHash,args:arguments,queue:t}),!1):(h.busy(!0),n=h.extractState(e,!0),n&&!h.emulated.pushState?h.pushState(n.data,n.title,n.url,!1):h.getHash()!==e&&(h.bugs.setHash?(i=h.getPageUrl(),h.pushState(null,null,i+\"#\"+e,!1)):r.location.hash=e),h)},h.escapeHash=function(t){var n=h.normalizeHash(t);return n=e.encodeURIComponent(n),h.bugs.hashEscape||(n=n.replace(/\\%21/g,\"!\").replace(/\\%26/g,\"&\").replace(/\\%3D/g,\"=\").replace(/\\%3F/g,\"?\")),n},h.getHashByUrl=function(e){var t=String(e).replace(/([^#]*)#?([^#]*)#?(.*)/,\"$2\");return t=h.unescapeHash(t),t},h.setTitle=function(e){var t=e.title,n;t||(n=h.getStateByIndex(0),n&&n.url===e.url&&(t=n.title||h.options.initialTitle));try{r.getElementsByTagName(\"title\")[0].innerHTML=t.replace(\"<\",\"&lt;\").replace(\">\",\"&gt;\").replace(\" & \",\" &amp; \")}catch(i){}return r.title=t,h},h.queues=[],h.busy=function(e){typeof e!=\"undefined\"?h.busy.flag=e:typeof h.busy.flag==\"undefined\"&&(h.busy.flag=!1);if(!h.busy.flag){u(h.busy.timeout);var t=function(){var e,n,r;if(h.busy.flag)return;for(e=h.queues.length-1;e>=0;--e){n=h.queues[e];if(n.length===0)continue;r=n.shift(),h.fireQueueItem(r),h.busy.timeout=o(t,h.options.busyDelay)}};h.busy.timeout=o(t,h.options.busyDelay)}return h.busy.flag},h.busy.flag=!1,h.fireQueueItem=function(e){return e.callback.apply(e.scope||h,e.args||[])},h.pushQueue=function(e){return h.queues[e.queue||0]=h.queues[e.queue||0]||[],h.queues[e.queue||0].push(e),h},h.queue=function(e,t){return typeof e==\"function\"&&(e={callback:e}),typeof t!=\"undefined\"&&(e.queue=t),h.busy()?h.pushQueue(e):h.fireQueueItem(e),h},h.clearQueue=function(){return h.busy.flag=!1,h.queues=[],h},h.stateChanged=!1,h.doubleChecker=!1,h.doubleCheckComplete=function(){return h.stateChanged=!0,h.doubleCheckClear(),h},h.doubleCheckClear=function(){return h.doubleChecker&&(u(h.doubleChecker),h.doubleChecker=!1),h},h.doubleCheck=function(e){return h.stateChanged=!1,h.doubleCheckClear(),h.bugs.ieDoubleCheck&&(h.doubleChecker=o(function(){return h.doubleCheckClear(),h.stateChanged||e(),!0},h.options.doubleCheckInterval)),h},h.safariStatePoll=function(){var t=h.extractState(h.getLocationHref()),n;if(!h.isLastSavedState(t))return n=t,n||(n=h.createStateObject()),h.Adapter.trigger(e,\"popstate\"),h;return},h.back=function(e){return e!==!1&&h.busy()?(h.pushQueue({scope:h,callback:h.back,args:arguments,queue:e}),!1):(h.busy(!0),h.doubleCheck(function(){h.back(!1)}),p.go(-1),!0)},h.forward=function(e){return e!==!1&&h.busy()?(h.pushQueue({scope:h,callback:h.forward,args:arguments,queue:e}),!1):(h.busy(!0),h.doubleCheck(function(){h.forward(!1)}),p.go(1),!0)},h.go=function(e,t){var n;if(e>0)for(n=1;n<=e;++n)h.forward(t);else{if(!(e<0))throw new Error(\"History.go: History.go requires a positive or negative integer passed.\");for(n=-1;n>=e;--n)h.back(t)}return h};if(h.emulated.pushState){var v=function(){};h.pushState=h.pushState||v,h.replaceState=h.replaceState||v}else h.onPopState=function(t,n){var r=!1,i=!1,s,o;return h.doubleCheckComplete(),s=h.getHash(),s?(o=h.extractState(s||h.getLocationHref(),!0),o?h.replaceState(o.data,o.title,o.url,!1):(h.Adapter.trigger(e,\"anchorchange\"),h.busy(!1)),h.expectedStateId=!1,!1):(r=h.Adapter.extractEventData(\"state\",t,n)||!1,r?i=h.getStateById(r):h.expectedStateId?i=h.getStateById(h.expectedStateId):i=h.extractState(h.getLocationHref()),i||(i=h.createStateObject(null,null,h.getLocationHref())),h.expectedStateId=!1,h.isLastSavedState(i)?(h.busy(!1),!1):(h.storeState(i),h.saveState(i),h.setTitle(i),h.Adapter.trigger(e,\"statechange\"),h.busy(!1),!0))},h.Adapter.bind(e,\"popstate\",h.onPopState),h.pushState=function(t,n,r,i){if(h.getHashByUrl(r)&&h.emulated.pushState)throw new Error(\"History.js does not support states with fragement-identifiers (hashes/anchors).\");if(i!==!1&&h.busy())return h.pushQueue({scope:h,callback:h.pushState,args:arguments,queue:i}),!1;h.busy(!0);var s=h.createStateObject(t,n,r);return h.isLastSavedState(s)?h.busy(!1):(h.storeState(s),h.expectedStateId=s.id,p.pushState(s.id,s.title,s.url),h.Adapter.trigger(e,\"popstate\")),!0},h.replaceState=function(t,n,r,i){if(h.getHashByUrl(r)&&h.emulated.pushState)throw new Error(\"History.js does not support states with fragement-identifiers (hashes/anchors).\");if(i!==!1&&h.busy())return h.pushQueue({scope:h,callback:h.replaceState,args:arguments,queue:i}),!1;h.busy(!0);var s=h.createStateObject(t,n,r);return h.isLastSavedState(s)?h.busy(!1):(h.storeState(s),h.expectedStateId=s.id,p.replaceState(s.id,s.title,s.url),h.Adapter.trigger(e,\"popstate\")),!0};if(s){try{h.store=l.parse(s.getItem(\"History.store\"))||{}}catch(m){h.store={}}h.normalizeStore()}else h.store={},h.normalizeStore();h.Adapter.bind(e,\"unload\",h.clearAllIntervals),h.saveState(h.storeState(h.extractState(h.getLocationHref(),!0))),s&&(h.onUnload=function(){var e,t,n;try{e=l.parse(s.getItem(\"History.store\"))||{}}catch(r){e={}}e.idToState=e.idToState||{},e.urlToId=e.urlToId||{},e.stateToId=e.stateToId||{};for(t in h.idToState){if(!h.idToState.hasOwnProperty(t))continue;e.idToState[t]=h.idToState[t]}for(t in h.urlToId){if(!h.urlToId.hasOwnProperty(t))continue;e.urlToId[t]=h.urlToId[t]}for(t in h.stateToId){if(!h.stateToId.hasOwnProperty(t))continue;e.stateToId[t]=h.stateToId[t]}h.store=e,h.normalizeStore(),n=l.stringify(e);try{s.setItem(\"History.store\",n)}catch(i){if(i.code!==DOMException.QUOTA_EXCEEDED_ERR)throw i;s.length&&(s.removeItem(\"History.store\"),s.setItem(\"History.store\",n))}},h.intervalList.push(a(h.onUnload,h.options.storeInterval)),h.Adapter.bind(e,\"beforeunload\",h.onUnload),h.Adapter.bind(e,\"unload\",h.onUnload));if(!h.emulated.pushState){h.bugs.safariPoll&&h.intervalList.push(a(h.safariStatePoll,h.options.safariPollInterval));if(i.vendor===\"Apple Computer, Inc.\"||(i.appCodeName||\"\")===\"Mozilla\")h.Adapter.bind(e,\"hashchange\",function(){h.Adapter.trigger(e,\"popstate\")}),h.getHash()&&h.Adapter.onDomLoad(function(){h.Adapter.trigger(e,\"hashchange\")})}},(!h.options||!h.options.delayInit)&&h.init()}(window)\n\n\n// WEBPACK FOOTER //\n// ./js/newTube/gallery/native.history.js","import jQuery from \"jquery\";\r\nvar $ = jQuery;\r\n// Ion.RangeSlider\r\n// version 2.1.3 Build: 352\r\n// © Denis Ineshin, 2016\r\n// https://github.com/IonDen\r\n//\r\n// Project page:    http://ionden.com/a/plugins/ion.rangeSlider/en.html\r\n// GitHub page:     https://github.com/IonDen/ion.rangeSlider\r\n//\r\n// Released under MIT licence:\r\n// http://ionden.com/a/plugins/licence-en.html\r\n// =====================================================================================================================\r\n\r\n(function (factory) {\r\n    if (typeof define === 'function' && define.amd) {\r\n        define(['jquery'], factory(jQuery, document, window, navigator));\r\n    } else {\r\n        factory(jQuery, document, window, navigator);\r\n    }\r\n} (function ($, document, window, navigator, undefined) {\r\n    \"use strict\";\r\n\r\n    // =================================================================================================================\r\n    // Service\r\n\r\n    var plugin_count = 0;\r\n\r\n    // IE8 fix\r\n    var is_old_ie = (function () {\r\n        var n = navigator.userAgent,\r\n            r = /msie\\s\\d+/i,\r\n            v;\r\n        if (n.search(r) > 0) {\r\n            v = r.exec(n).toString();\r\n            v = v.split(\" \")[1];\r\n            if (v < 9) {\r\n                $(\"html\").addClass(\"lt-ie9\");\r\n                return true;\r\n            }\r\n        }\r\n        return false;\r\n    } ());\r\n    if (!Function.prototype.bind) {\r\n        Function.prototype.bind = function bind(that) {\r\n\r\n            var target = this;\r\n            var slice = [].slice;\r\n\r\n            if (typeof target != \"function\") {\r\n                throw new TypeError();\r\n            }\r\n\r\n            var args = slice.call(arguments, 1),\r\n                bound = function () {\r\n\r\n                    if (this instanceof bound) {\r\n\r\n                        var F = function(){};\r\n                        F.prototype = target.prototype;\r\n                        var self = new F();\r\n\r\n                        var result = target.apply(\r\n                            self,\r\n                            args.concat(slice.call(arguments))\r\n                        );\r\n                        if (Object(result) === result) {\r\n                            return result;\r\n                        }\r\n                        return self;\r\n\r\n                    } else {\r\n\r\n                        return target.apply(\r\n                            that,\r\n                            args.concat(slice.call(arguments))\r\n                        );\r\n\r\n                    }\r\n\r\n                };\r\n\r\n            return bound;\r\n        };\r\n    }\r\n    if (!Array.prototype.indexOf) {\r\n        Array.prototype.indexOf = function(searchElement, fromIndex) {\r\n            var k;\r\n            if (this == null) {\r\n                throw new TypeError('\"this\" is null or not defined');\r\n            }\r\n            var O = Object(this);\r\n            var len = O.length >>> 0;\r\n            if (len === 0) {\r\n                return -1;\r\n            }\r\n            var n = +fromIndex || 0;\r\n            if (Math.abs(n) === Infinity) {\r\n                n = 0;\r\n            }\r\n            if (n >= len) {\r\n                return -1;\r\n            }\r\n            k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);\r\n            while (k < len) {\r\n                if (k in O && O[k] === searchElement) {\r\n                    return k;\r\n                }\r\n                k++;\r\n            }\r\n            return -1;\r\n        };\r\n    }\r\n\r\n\r\n\r\n    // =================================================================================================================\r\n    // Template\r\n\r\n    var base_html =\r\n        '<span class=\"irs\">' +\r\n        '<span class=\"irs-line\" tabindex=\"-1\"><span class=\"irs-line-left\"></span><span class=\"irs-line-mid\"></span><span class=\"irs-line-right\"></span></span>' +\r\n        '<span class=\"irs-min\">0</span><span class=\"irs-max\">1</span>' +\r\n        '<span class=\"irs-from\">0</span><span class=\"irs-to\">0</span><span class=\"irs-single\">0</span>' +\r\n        '</span>' +\r\n        '<span class=\"irs-grid\"></span>' +\r\n        '<span class=\"irs-bar\"></span>';\r\n\r\n    var single_html =\r\n        '<span class=\"irs-bar-edge\"></span>' +\r\n        '<span class=\"irs-shadow shadow-single\"></span>' +\r\n        '<span class=\"irs-slider single\"></span>';\r\n\r\n    var double_html =\r\n        '<span class=\"irs-shadow shadow-from\"></span>' +\r\n        '<span class=\"irs-shadow shadow-to\"></span>' +\r\n        '<span class=\"irs-slider from\"></span>' +\r\n        '<span class=\"irs-slider to\"></span>';\r\n\r\n    var disable_html =\r\n        '<span class=\"irs-disable-mask\"></span>';\r\n\r\n\r\n\r\n    // =================================================================================================================\r\n    // Core\r\n\r\n    /**\r\n     * Main plugin constructor\r\n     *\r\n     * @param input {Object} link to base input element\r\n     * @param options {Object} slider config\r\n     * @param plugin_count {Number}\r\n     * @constructor\r\n     */\r\n    var IonRangeSlider = function (input, options, plugin_count) {\r\n        this.VERSION = \"2.1.3\";\r\n        this.input = input;\r\n        this.plugin_count = plugin_count;\r\n        this.current_plugin = 0;\r\n        this.calc_count = 0;\r\n        this.update_tm = 0;\r\n        this.old_from = 0;\r\n        this.old_to = 0;\r\n        this.old_min_interval = null;\r\n        this.raf_id = null;\r\n        this.dragging = false;\r\n        this.force_redraw = false;\r\n        this.no_diapason = false;\r\n        this.is_key = false;\r\n        this.is_update = false;\r\n        this.is_start = true;\r\n        this.is_finish = false;\r\n        this.is_active = false;\r\n        this.is_resize = false;\r\n        this.is_click = false;\r\n\r\n        // cache for links to all DOM elements\r\n        this.$cache = {\r\n            win: $(window),\r\n            body: $(document.body),\r\n            input: $(input),\r\n            cont: null,\r\n            rs: null,\r\n            min: null,\r\n            max: null,\r\n            from: null,\r\n            to: null,\r\n            single: null,\r\n            bar: null,\r\n            line: null,\r\n            s_single: null,\r\n            s_from: null,\r\n            s_to: null,\r\n            shad_single: null,\r\n            shad_from: null,\r\n            shad_to: null,\r\n            edge: null,\r\n            grid: null,\r\n            grid_labels: []\r\n        };\r\n\r\n        // storage for measure variables\r\n        this.coords = {\r\n            // left\r\n            x_gap: 0,\r\n            x_pointer: 0,\r\n\r\n            // width\r\n            w_rs: 0,\r\n            w_rs_old: 0,\r\n            w_handle: 0,\r\n\r\n            // percents\r\n            p_gap: 0,\r\n            p_gap_left: 0,\r\n            p_gap_right: 0,\r\n            p_step: 0,\r\n            p_pointer: 0,\r\n            p_handle: 0,\r\n            p_single_fake: 0,\r\n            p_single_real: 0,\r\n            p_from_fake: 0,\r\n            p_from_real: 0,\r\n            p_to_fake: 0,\r\n            p_to_real: 0,\r\n            p_bar_x: 0,\r\n            p_bar_w: 0,\r\n\r\n            // grid\r\n            grid_gap: 0,\r\n            big_num: 0,\r\n            big: [],\r\n            big_w: [],\r\n            big_p: [],\r\n            big_x: []\r\n        };\r\n\r\n        // storage for labels measure variables\r\n        this.labels = {\r\n            // width\r\n            w_min: 0,\r\n            w_max: 0,\r\n            w_from: 0,\r\n            w_to: 0,\r\n            w_single: 0,\r\n\r\n            // percents\r\n            p_min: 0,\r\n            p_max: 0,\r\n            p_from_fake: 0,\r\n            p_from_left: 0,\r\n            p_to_fake: 0,\r\n            p_to_left: 0,\r\n            p_single_fake: 0,\r\n            p_single_left: 0\r\n        };\r\n\r\n\r\n\r\n        /**\r\n         * get and validate config\r\n         */\r\n        var $inp = this.$cache.input,\r\n            val = $inp.prop(\"value\"),\r\n            config, config_from_data, prop;\r\n\r\n        // default config\r\n        config = {\r\n            type: \"single\",\r\n\r\n            min: 10,\r\n            max: 100,\r\n            from: null,\r\n            to: null,\r\n            step: 1,\r\n\r\n            min_interval: 0,\r\n            max_interval: 0,\r\n            drag_interval: false,\r\n\r\n            values: [],\r\n            p_values: [],\r\n\r\n            from_fixed: false,\r\n            from_min: null,\r\n            from_max: null,\r\n            from_shadow: false,\r\n\r\n            to_fixed: false,\r\n            to_min: null,\r\n            to_max: null,\r\n            to_shadow: false,\r\n\r\n            prettify_enabled: true,\r\n            prettify_separator: \" \",\r\n            prettify: null,\r\n\r\n            force_edges: false,\r\n\r\n            keyboard: false,\r\n            keyboard_step: 5,\r\n\r\n            grid: false,\r\n            grid_margin: true,\r\n            grid_num: 4,\r\n            grid_snap: false,\r\n\r\n            hide_min_max: false,\r\n            hide_from_to: false,\r\n\r\n            prefix: \"\",\r\n            postfix: \"\",\r\n            max_postfix: \"\",\r\n            decorate_both: true,\r\n            values_separator: \" — \",\r\n\r\n            input_values_separator: \";\",\r\n\r\n            disable: false,\r\n\r\n            onStart: null,\r\n            onChange: null,\r\n            onFinish: null,\r\n            onUpdate: null\r\n        };\r\n\r\n\r\n\r\n        // config from data-attributes extends js config\r\n        config_from_data = {\r\n            type: $inp.data(\"type\"),\r\n\r\n            min: $inp.data(\"min\"),\r\n            max: $inp.data(\"max\"),\r\n            from: $inp.data(\"from\"),\r\n            to: $inp.data(\"to\"),\r\n            step: $inp.data(\"step\"),\r\n\r\n            min_interval: $inp.data(\"minInterval\"),\r\n            max_interval: $inp.data(\"maxInterval\"),\r\n            drag_interval: $inp.data(\"dragInterval\"),\r\n\r\n            values: $inp.data(\"values\"),\r\n\r\n            from_fixed: $inp.data(\"fromFixed\"),\r\n            from_min: $inp.data(\"fromMin\"),\r\n            from_max: $inp.data(\"fromMax\"),\r\n            from_shadow: $inp.data(\"fromShadow\"),\r\n\r\n            to_fixed: $inp.data(\"toFixed\"),\r\n            to_min: $inp.data(\"toMin\"),\r\n            to_max: $inp.data(\"toMax\"),\r\n            to_shadow: $inp.data(\"toShadow\"),\r\n\r\n            prettify_enabled: $inp.data(\"prettifyEnabled\"),\r\n            prettify_separator: $inp.data(\"prettifySeparator\"),\r\n\r\n            force_edges: $inp.data(\"forceEdges\"),\r\n\r\n            keyboard: $inp.data(\"keyboard\"),\r\n            keyboard_step: $inp.data(\"keyboardStep\"),\r\n\r\n            grid: $inp.data(\"grid\"),\r\n            grid_margin: $inp.data(\"gridMargin\"),\r\n            grid_num: $inp.data(\"gridNum\"),\r\n            grid_snap: $inp.data(\"gridSnap\"),\r\n\r\n            hide_min_max: $inp.data(\"hideMinMax\"),\r\n            hide_from_to: $inp.data(\"hideFromTo\"),\r\n\r\n            prefix: $inp.data(\"prefix\"),\r\n            postfix: $inp.data(\"postfix\"),\r\n            max_postfix: $inp.data(\"maxPostfix\"),\r\n            decorate_both: $inp.data(\"decorateBoth\"),\r\n            values_separator: $inp.data(\"valuesSeparator\"),\r\n\r\n            input_values_separator: $inp.data(\"inputValuesSeparator\"),\r\n\r\n            disable: $inp.data(\"disable\")\r\n        };\r\n        config_from_data.values = config_from_data.values && config_from_data.values.split(\",\");\r\n\r\n        for (prop in config_from_data) {\r\n            if (config_from_data.hasOwnProperty(prop)) {\r\n                if (!config_from_data[prop] && config_from_data[prop] !== 0) {\r\n                    delete config_from_data[prop];\r\n                }\r\n            }\r\n        }\r\n\r\n\r\n\r\n        // input value extends default config\r\n        if (val) {\r\n            val = val.split(config_from_data.input_values_separator || options.input_values_separator || \";\");\r\n\r\n            if (val[0] && val[0] == +val[0]) {\r\n                val[0] = +val[0];\r\n            }\r\n            if (val[1] && val[1] == +val[1]) {\r\n                val[1] = +val[1];\r\n            }\r\n\r\n            if (options && options.values && options.values.length) {\r\n                config.from = val[0] && options.values.indexOf(val[0]);\r\n                config.to = val[1] && options.values.indexOf(val[1]);\r\n            } else {\r\n                config.from = val[0] && +val[0];\r\n                config.to = val[1] && +val[1];\r\n            }\r\n        }\r\n\r\n\r\n\r\n        // js config extends default config\r\n        $.extend(config, options);\r\n\r\n\r\n        // data config extends config\r\n        $.extend(config, config_from_data);\r\n        this.options = config;\r\n\r\n\r\n\r\n        // validate config, to be sure that all data types are correct\r\n        this.validate();\r\n\r\n\r\n\r\n        // default result object, returned to callbacks\r\n        this.result = {\r\n            input: this.$cache.input,\r\n            slider: null,\r\n\r\n            min: this.options.min,\r\n            max: this.options.max,\r\n\r\n            from: this.options.from,\r\n            from_percent: 0,\r\n            from_value: null,\r\n\r\n            to: this.options.to,\r\n            to_percent: 0,\r\n            to_value: null\r\n        };\r\n\r\n\r\n\r\n        this.init();\r\n    };\r\n\r\n    IonRangeSlider.prototype = {\r\n\r\n        /**\r\n         * Starts or updates the plugin instance\r\n         *\r\n         * @param is_update {boolean}\r\n         */\r\n        init: function (is_update) {\r\n            this.no_diapason = false;\r\n            this.coords.p_step = this.convertToPercent(this.options.step, true);\r\n\r\n            this.target = \"base\";\r\n\r\n            this.toggleInput();\r\n            this.append();\r\n            this.setMinMax();\r\n\r\n            if (is_update) {\r\n                this.force_redraw = true;\r\n                this.calc(true);\r\n\r\n                // callbacks called\r\n                this.callOnUpdate();\r\n            } else {\r\n                this.force_redraw = true;\r\n                this.calc(true);\r\n\r\n                // callbacks called\r\n                this.callOnStart();\r\n            }\r\n\r\n            this.updateScene();\r\n        },\r\n\r\n        /**\r\n         * Appends slider template to a DOM\r\n         */\r\n        append: function () {\r\n            var container_html = '<span class=\"irs js-irs-' + this.plugin_count + '\"></span>';\r\n            this.$cache.input.before(container_html);\r\n            this.$cache.input.prop(\"readonly\", true);\r\n            this.$cache.cont = this.$cache.input.prev();\r\n            this.result.slider = this.$cache.cont;\r\n\r\n            this.$cache.cont.html(base_html);\r\n            this.$cache.rs = this.$cache.cont.find(\".irs\");\r\n            this.$cache.min = this.$cache.cont.find(\".irs-min\");\r\n            this.$cache.max = this.$cache.cont.find(\".irs-max\");\r\n            this.$cache.from = this.$cache.cont.find(\".irs-from\");\r\n            this.$cache.to = this.$cache.cont.find(\".irs-to\");\r\n            this.$cache.single = this.$cache.cont.find(\".irs-single\");\r\n            this.$cache.bar = this.$cache.cont.find(\".irs-bar\");\r\n            this.$cache.line = this.$cache.cont.find(\".irs-line\");\r\n            this.$cache.grid = this.$cache.cont.find(\".irs-grid\");\r\n\r\n            if (this.options.type === \"single\") {\r\n                this.$cache.cont.append(single_html);\r\n                this.$cache.edge = this.$cache.cont.find(\".irs-bar-edge\");\r\n                this.$cache.s_single = this.$cache.cont.find(\".single\");\r\n                this.$cache.from[0].style.visibility = \"hidden\";\r\n                this.$cache.to[0].style.visibility = \"hidden\";\r\n                this.$cache.shad_single = this.$cache.cont.find(\".shadow-single\");\r\n            } else {\r\n                this.$cache.cont.append(double_html);\r\n                this.$cache.s_from = this.$cache.cont.find(\".from\");\r\n                this.$cache.s_to = this.$cache.cont.find(\".to\");\r\n                this.$cache.shad_from = this.$cache.cont.find(\".shadow-from\");\r\n                this.$cache.shad_to = this.$cache.cont.find(\".shadow-to\");\r\n\r\n                this.setTopHandler();\r\n            }\r\n\r\n            if (this.options.hide_from_to) {\r\n                this.$cache.from[0].style.display = \"none\";\r\n                this.$cache.to[0].style.display = \"none\";\r\n                this.$cache.single[0].style.display = \"none\";\r\n            }\r\n\r\n            this.appendGrid();\r\n\r\n            if (this.options.disable) {\r\n                this.appendDisableMask();\r\n                this.$cache.input[0].disabled = true;\r\n            } else {\r\n                this.$cache.cont.removeClass(\"irs-disabled\");\r\n                this.$cache.input[0].disabled = false;\r\n                this.bindEvents();\r\n            }\r\n\r\n            if (this.options.drag_interval) {\r\n                this.$cache.bar[0].style.cursor = \"ew-resize\";\r\n            }\r\n        },\r\n\r\n        /**\r\n         * Determine which handler has a priority\r\n         * works only for double slider type\r\n         */\r\n        setTopHandler: function () {\r\n            var min = this.options.min,\r\n                max = this.options.max,\r\n                from = this.options.from,\r\n                to = this.options.to;\r\n\r\n            if (from > min && to === max) {\r\n                this.$cache.s_from.addClass(\"type_last\");\r\n            } else if (to < max) {\r\n                this.$cache.s_to.addClass(\"type_last\");\r\n            }\r\n        },\r\n\r\n        /**\r\n         * Determine which handles was clicked last\r\n         * and which handler should have hover effect\r\n         *\r\n         * @param target {String}\r\n         */\r\n        changeLevel: function (target) {\r\n            switch (target) {\r\n                case \"single\":\r\n                    this.coords.p_gap = this.toFixed(this.coords.p_pointer - this.coords.p_single_fake);\r\n                    break;\r\n                case \"from\":\r\n                    this.coords.p_gap = this.toFixed(this.coords.p_pointer - this.coords.p_from_fake);\r\n                    this.$cache.s_from.addClass(\"state_hover\");\r\n                    this.$cache.s_from.addClass(\"type_last\");\r\n                    this.$cache.s_to.removeClass(\"type_last\");\r\n                    break;\r\n                case \"to\":\r\n                    this.coords.p_gap = this.toFixed(this.coords.p_pointer - this.coords.p_to_fake);\r\n                    this.$cache.s_to.addClass(\"state_hover\");\r\n                    this.$cache.s_to.addClass(\"type_last\");\r\n                    this.$cache.s_from.removeClass(\"type_last\");\r\n                    break;\r\n                case \"both\":\r\n                    this.coords.p_gap_left = this.toFixed(this.coords.p_pointer - this.coords.p_from_fake);\r\n                    this.coords.p_gap_right = this.toFixed(this.coords.p_to_fake - this.coords.p_pointer);\r\n                    this.$cache.s_to.removeClass(\"type_last\");\r\n                    this.$cache.s_from.removeClass(\"type_last\");\r\n                    break;\r\n            }\r\n        },\r\n\r\n        /**\r\n         * Then slider is disabled\r\n         * appends extra layer with opacity\r\n         */\r\n        appendDisableMask: function () {\r\n            this.$cache.cont.append(disable_html);\r\n            this.$cache.cont.addClass(\"irs-disabled\");\r\n        },\r\n\r\n        /**\r\n         * Remove slider instance\r\n         * and ubind all events\r\n         */\r\n        remove: function () {\r\n            this.$cache.cont.remove();\r\n            this.$cache.cont = null;\r\n\r\n            this.$cache.line.off(\"keydown.irs_\" + this.plugin_count);\r\n\r\n            this.$cache.body.off(\"touchmove.irs_\" + this.plugin_count);\r\n            this.$cache.body.off(\"mousemove.irs_\" + this.plugin_count);\r\n\r\n            this.$cache.win.off(\"touchend.irs_\" + this.plugin_count);\r\n            this.$cache.win.off(\"mouseup.irs_\" + this.plugin_count);\r\n\r\n            if (is_old_ie) {\r\n                this.$cache.body.off(\"mouseup.irs_\" + this.plugin_count);\r\n                this.$cache.body.off(\"mouseleave.irs_\" + this.plugin_count);\r\n            }\r\n\r\n            this.$cache.grid_labels = [];\r\n            this.coords.big = [];\r\n            this.coords.big_w = [];\r\n            this.coords.big_p = [];\r\n            this.coords.big_x = [];\r\n\r\n            cancelAnimationFrame(this.raf_id);\r\n        },\r\n\r\n        /**\r\n         * bind all slider events\r\n         */\r\n        bindEvents: function () {\r\n            if (this.no_diapason) {\r\n                return;\r\n            }\r\n\r\n            this.$cache.body.on(\"touchmove.irs_\" + this.plugin_count, this.pointerMove.bind(this));\r\n            this.$cache.body.on(\"mousemove.irs_\" + this.plugin_count, this.pointerMove.bind(this));\r\n\r\n            this.$cache.win.on(\"touchend.irs_\" + this.plugin_count, this.pointerUp.bind(this));\r\n            this.$cache.win.on(\"mouseup.irs_\" + this.plugin_count, this.pointerUp.bind(this));\r\n\r\n            this.$cache.line.on(\"touchstart.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\r\n            this.$cache.line.on(\"mousedown.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\r\n\r\n            if (this.options.drag_interval && this.options.type === \"double\") {\r\n                this.$cache.bar.on(\"touchstart.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"both\"));\r\n                this.$cache.bar.on(\"mousedown.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"both\"));\r\n            } else {\r\n                this.$cache.bar.on(\"touchstart.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\r\n                this.$cache.bar.on(\"mousedown.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\r\n            }\r\n\r\n            if (this.options.type === \"single\") {\r\n                this.$cache.single.on(\"touchstart.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"single\"));\r\n                this.$cache.s_single.on(\"touchstart.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"single\"));\r\n                this.$cache.shad_single.on(\"touchstart.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\r\n\r\n                this.$cache.single.on(\"mousedown.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"single\"));\r\n                this.$cache.s_single.on(\"mousedown.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"single\"));\r\n                this.$cache.edge.on(\"mousedown.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\r\n                this.$cache.shad_single.on(\"mousedown.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\r\n            } else {\r\n                this.$cache.single.on(\"touchstart.irs_\" + this.plugin_count, this.pointerDown.bind(this, null));\r\n                this.$cache.single.on(\"mousedown.irs_\" + this.plugin_count, this.pointerDown.bind(this, null));\r\n\r\n                this.$cache.from.on(\"touchstart.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"from\"));\r\n                this.$cache.s_from.on(\"touchstart.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"from\"));\r\n                this.$cache.to.on(\"touchstart.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"to\"));\r\n                this.$cache.s_to.on(\"touchstart.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"to\"));\r\n                this.$cache.shad_from.on(\"touchstart.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\r\n                this.$cache.shad_to.on(\"touchstart.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\r\n\r\n                this.$cache.from.on(\"mousedown.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"from\"));\r\n                this.$cache.s_from.on(\"mousedown.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"from\"));\r\n                this.$cache.to.on(\"mousedown.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"to\"));\r\n                this.$cache.s_to.on(\"mousedown.irs_\" + this.plugin_count, this.pointerDown.bind(this, \"to\"));\r\n                this.$cache.shad_from.on(\"mousedown.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\r\n                this.$cache.shad_to.on(\"mousedown.irs_\" + this.plugin_count, this.pointerClick.bind(this, \"click\"));\r\n            }\r\n\r\n            if (this.options.keyboard) {\r\n                this.$cache.line.on(\"keydown.irs_\" + this.plugin_count, this.key.bind(this, \"keyboard\"));\r\n            }\r\n\r\n            if (is_old_ie) {\r\n                this.$cache.body.on(\"mouseup.irs_\" + this.plugin_count, this.pointerUp.bind(this));\r\n                this.$cache.body.on(\"mouseleave.irs_\" + this.plugin_count, this.pointerUp.bind(this));\r\n            }\r\n        },\r\n\r\n        /**\r\n         * Mousemove or touchmove\r\n         * only for handlers\r\n         *\r\n         * @param e {Object} event object\r\n         */\r\n        pointerMove: function (e) {\r\n            if (!this.dragging) {\r\n                return;\r\n            }\r\n\r\n            var x = e.pageX || e.originalEvent.touches && e.originalEvent.touches[0].pageX;\r\n            this.coords.x_pointer = x - this.coords.x_gap;\r\n\r\n            this.calc();\r\n        },\r\n\r\n        /**\r\n         * Mouseup or touchend\r\n         * only for handlers\r\n         *\r\n         * @param e {Object} event object\r\n         */\r\n        pointerUp: function (e) {\r\n            if (this.current_plugin !== this.plugin_count) {\r\n                return;\r\n            }\r\n\r\n            if (this.is_active) {\r\n                this.is_active = false;\r\n            } else {\r\n                return;\r\n            }\r\n\r\n            this.$cache.cont.find(\".state_hover\").removeClass(\"state_hover\");\r\n\r\n            this.force_redraw = true;\r\n\r\n            if (is_old_ie) {\r\n                $(\"*\").prop(\"unselectable\", false);\r\n            }\r\n\r\n            this.updateScene();\r\n            this.restoreOriginalMinInterval();\r\n\r\n            // callbacks call\r\n            if ($.contains(this.$cache.cont[0], e.target) || this.dragging) {\r\n                this.is_finish = true;\r\n                this.callOnFinish();\r\n            }\r\n            \r\n            this.dragging = false;\r\n        },\r\n\r\n        /**\r\n         * Mousedown or touchstart\r\n         * only for handlers\r\n         *\r\n         * @param target {String|null}\r\n         * @param e {Object} event object\r\n         */\r\n        pointerDown: function (target, e) {\r\n            e.preventDefault();\r\n            var x = e.pageX || e.originalEvent.touches && e.originalEvent.touches[0].pageX;\r\n            if (e.button === 2) {\r\n                return;\r\n            }\r\n\r\n            if (target === \"both\") {\r\n                this.setTempMinInterval();\r\n            }\r\n\r\n            if (!target) {\r\n                target = this.target;\r\n            }\r\n\r\n            this.current_plugin = this.plugin_count;\r\n            this.target = target;\r\n\r\n            this.is_active = true;\r\n            this.dragging = true;\r\n\r\n            this.coords.x_gap = this.$cache.rs.offset().left;\r\n            this.coords.x_pointer = x - this.coords.x_gap;\r\n\r\n            this.calcPointerPercent();\r\n            this.changeLevel(target);\r\n\r\n            if (is_old_ie) {\r\n                $(\"*\").prop(\"unselectable\", true);\r\n            }\r\n\r\n            this.$cache.line.trigger(\"focus\");\r\n\r\n            this.updateScene();\r\n        },\r\n\r\n        /**\r\n         * Mousedown or touchstart\r\n         * for other slider elements, like diapason line\r\n         *\r\n         * @param target {String}\r\n         * @param e {Object} event object\r\n         */\r\n        pointerClick: function (target, e) {\r\n            e.preventDefault();\r\n            var x = e.pageX || e.originalEvent.touches && e.originalEvent.touches[0].pageX;\r\n            if (e.button === 2) {\r\n                return;\r\n            }\r\n\r\n            this.current_plugin = this.plugin_count;\r\n            this.target = target;\r\n\r\n            this.is_click = true;\r\n            this.coords.x_gap = this.$cache.rs.offset().left;\r\n            this.coords.x_pointer = +(x - this.coords.x_gap).toFixed();\r\n\r\n            this.force_redraw = true;\r\n            this.calc();\r\n\r\n            this.$cache.line.trigger(\"focus\");\r\n        },\r\n\r\n        /**\r\n         * Keyborard controls for focused slider\r\n         *\r\n         * @param target {String}\r\n         * @param e {Object} event object\r\n         * @returns {boolean|undefined}\r\n         */\r\n        key: function (target, e) {\r\n            if (this.current_plugin !== this.plugin_count || e.altKey || e.ctrlKey || e.shiftKey || e.metaKey) {\r\n                return;\r\n            }\r\n\r\n            switch (e.which) {\r\n                case 83: // W\r\n                case 65: // A\r\n                case 40: // DOWN\r\n                case 37: // LEFT\r\n                    e.preventDefault();\r\n                    this.moveByKey(false);\r\n                    break;\r\n\r\n                case 87: // S\r\n                case 68: // D\r\n                case 38: // UP\r\n                case 39: // RIGHT\r\n                    e.preventDefault();\r\n                    this.moveByKey(true);\r\n                    break;\r\n            }\r\n\r\n            return true;\r\n        },\r\n\r\n        /**\r\n         * Move by key. Beta\r\n         * @todo refactor than have plenty of time\r\n         *\r\n         * @param right {boolean} direction to move\r\n         */\r\n        moveByKey: function (right) {\r\n            var p = this.coords.p_pointer;\r\n\r\n            if (right) {\r\n                p += this.options.keyboard_step;\r\n            } else {\r\n                p -= this.options.keyboard_step;\r\n            }\r\n\r\n            this.coords.x_pointer = this.toFixed(this.coords.w_rs / 100 * p);\r\n            this.is_key = true;\r\n            this.calc();\r\n        },\r\n\r\n        /**\r\n         * Set visibility and content\r\n         * of Min and Max labels\r\n         */\r\n        setMinMax: function () {\r\n            if (!this.options) {\r\n                return;\r\n            }\r\n\r\n            if (this.options.hide_min_max) {\r\n                this.$cache.min[0].style.display = \"none\";\r\n                this.$cache.max[0].style.display = \"none\";\r\n                return;\r\n            }\r\n\r\n            if (this.options.values.length) {\r\n                this.$cache.min.html(this.decorate(this.options.p_values[this.options.min]));\r\n                this.$cache.max.html(this.decorate(this.options.p_values[this.options.max]));\r\n            } else {\r\n                this.$cache.min.html(this.decorate(this._prettify(this.options.min), this.options.min));\r\n                this.$cache.max.html(this.decorate(this._prettify(this.options.max), this.options.max));\r\n            }\r\n\r\n            this.labels.w_min = this.$cache.min.outerWidth(false);\r\n            this.labels.w_max = this.$cache.max.outerWidth(false);\r\n        },\r\n\r\n        /**\r\n         * Then dragging interval, prevent interval collapsing\r\n         * using min_interval option\r\n         */\r\n        setTempMinInterval: function () {\r\n            var interval = this.result.to - this.result.from;\r\n\r\n            if (this.old_min_interval === null) {\r\n                this.old_min_interval = this.options.min_interval;\r\n            }\r\n\r\n            this.options.min_interval = interval;\r\n        },\r\n\r\n        /**\r\n         * Restore min_interval option to original\r\n         */\r\n        restoreOriginalMinInterval: function () {\r\n            if (this.old_min_interval !== null) {\r\n                this.options.min_interval = this.old_min_interval;\r\n                this.old_min_interval = null;\r\n            }\r\n        },\r\n\r\n\r\n\r\n        // =============================================================================================================\r\n        // Calculations\r\n\r\n        /**\r\n         * All calculations and measures start here\r\n         *\r\n         * @param update {boolean=}\r\n         */\r\n        calc: function (update) {\r\n            if (!this.options) {\r\n                return;\r\n            }\r\n\r\n            this.calc_count++;\r\n\r\n            if (this.calc_count === 10 || update) {\r\n                this.calc_count = 0;\r\n                this.coords.w_rs = this.$cache.rs.outerWidth(false);\r\n\r\n                this.calcHandlePercent();\r\n            }\r\n\r\n            if (!this.coords.w_rs) {\r\n                return;\r\n            }\r\n\r\n            this.calcPointerPercent();\r\n            var handle_x = this.getHandleX();\r\n\r\n            if (this.target === \"click\") {\r\n                this.coords.p_gap = this.coords.p_handle / 2;\r\n                handle_x = this.getHandleX();\r\n\r\n                if (this.options.drag_interval) {\r\n                    this.target = \"both_one\";\r\n                } else {\r\n                    this.target = this.chooseHandle(handle_x);\r\n                }\r\n            }\r\n\r\n            switch (this.target) {\r\n                case \"base\":\r\n                    var w = (this.options.max - this.options.min) / 100,\r\n                        f = (this.result.from - this.options.min) / w,\r\n                        t = (this.result.to - this.options.min) / w;\r\n\r\n                    this.coords.p_single_real = this.toFixed(f);\r\n                    this.coords.p_from_real = this.toFixed(f);\r\n                    this.coords.p_to_real = this.toFixed(t);\r\n\r\n                    this.coords.p_single_real = this.checkDiapason(this.coords.p_single_real, this.options.from_min, this.options.from_max);\r\n                    this.coords.p_from_real = this.checkDiapason(this.coords.p_from_real, this.options.from_min, this.options.from_max);\r\n                    this.coords.p_to_real = this.checkDiapason(this.coords.p_to_real, this.options.to_min, this.options.to_max);\r\n\r\n                    this.coords.p_single_fake = this.convertToFakePercent(this.coords.p_single_real);\r\n                    this.coords.p_from_fake = this.convertToFakePercent(this.coords.p_from_real);\r\n                    this.coords.p_to_fake = this.convertToFakePercent(this.coords.p_to_real);\r\n\r\n                    this.target = null;\r\n\r\n                    break;\r\n\r\n                case \"single\":\r\n                    if (this.options.from_fixed) {\r\n                        break;\r\n                    }\r\n\r\n                    this.coords.p_single_real = this.convertToRealPercent(handle_x);\r\n                    this.coords.p_single_real = this.calcWithStep(this.coords.p_single_real);\r\n                    this.coords.p_single_real = this.checkDiapason(this.coords.p_single_real, this.options.from_min, this.options.from_max);\r\n\r\n                    this.coords.p_single_fake = this.convertToFakePercent(this.coords.p_single_real);\r\n\r\n                    break;\r\n\r\n                case \"from\":\r\n                    if (this.options.from_fixed) {\r\n                        break;\r\n                    }\r\n\r\n                    this.coords.p_from_real = this.convertToRealPercent(handle_x);\r\n                    this.coords.p_from_real = this.calcWithStep(this.coords.p_from_real);\r\n                    if (this.coords.p_from_real > this.coords.p_to_real) {\r\n                        this.coords.p_from_real = this.coords.p_to_real;\r\n                    }\r\n                    this.coords.p_from_real = this.checkDiapason(this.coords.p_from_real, this.options.from_min, this.options.from_max);\r\n                    this.coords.p_from_real = this.checkMinInterval(this.coords.p_from_real, this.coords.p_to_real, \"from\");\r\n                    this.coords.p_from_real = this.checkMaxInterval(this.coords.p_from_real, this.coords.p_to_real, \"from\");\r\n\r\n                    this.coords.p_from_fake = this.convertToFakePercent(this.coords.p_from_real);\r\n\r\n                    break;\r\n\r\n                case \"to\":\r\n                    if (this.options.to_fixed) {\r\n                        break;\r\n                    }\r\n\r\n                    this.coords.p_to_real = this.convertToRealPercent(handle_x);\r\n                    this.coords.p_to_real = this.calcWithStep(this.coords.p_to_real);\r\n                    if (this.coords.p_to_real < this.coords.p_from_real) {\r\n                        this.coords.p_to_real = this.coords.p_from_real;\r\n                    }\r\n                    this.coords.p_to_real = this.checkDiapason(this.coords.p_to_real, this.options.to_min, this.options.to_max);\r\n                    this.coords.p_to_real = this.checkMinInterval(this.coords.p_to_real, this.coords.p_from_real, \"to\");\r\n                    this.coords.p_to_real = this.checkMaxInterval(this.coords.p_to_real, this.coords.p_from_real, \"to\");\r\n\r\n                    this.coords.p_to_fake = this.convertToFakePercent(this.coords.p_to_real);\r\n\r\n                    break;\r\n\r\n                case \"both\":\r\n                    if (this.options.from_fixed || this.options.to_fixed) {\r\n                        break;\r\n                    }\r\n\r\n                    handle_x = this.toFixed(handle_x + (this.coords.p_handle * 0.1));\r\n\r\n                    this.coords.p_from_real = this.convertToRealPercent(handle_x) - this.coords.p_gap_left;\r\n                    this.coords.p_from_real = this.calcWithStep(this.coords.p_from_real);\r\n                    this.coords.p_from_real = this.checkDiapason(this.coords.p_from_real, this.options.from_min, this.options.from_max);\r\n                    this.coords.p_from_real = this.checkMinInterval(this.coords.p_from_real, this.coords.p_to_real, \"from\");\r\n                    this.coords.p_from_fake = this.convertToFakePercent(this.coords.p_from_real);\r\n\r\n                    this.coords.p_to_real = this.convertToRealPercent(handle_x) + this.coords.p_gap_right;\r\n                    this.coords.p_to_real = this.calcWithStep(this.coords.p_to_real);\r\n                    this.coords.p_to_real = this.checkDiapason(this.coords.p_to_real, this.options.to_min, this.options.to_max);\r\n                    this.coords.p_to_real = this.checkMinInterval(this.coords.p_to_real, this.coords.p_from_real, \"to\");\r\n                    this.coords.p_to_fake = this.convertToFakePercent(this.coords.p_to_real);\r\n\r\n                    break;\r\n\r\n                case \"both_one\":\r\n                    if (this.options.from_fixed || this.options.to_fixed) {\r\n                        break;\r\n                    }\r\n\r\n                    var real_x = this.convertToRealPercent(handle_x),\r\n                        from = this.result.from_percent,\r\n                        to = this.result.to_percent,\r\n                        full = to - from,\r\n                        half = full / 2,\r\n                        new_from = real_x - half,\r\n                        new_to = real_x + half;\r\n\r\n                    if (new_from < 0) {\r\n                        new_from = 0;\r\n                        new_to = new_from + full;\r\n                    }\r\n\r\n                    if (new_to > 100) {\r\n                        new_to = 100;\r\n                        new_from = new_to - full;\r\n                    }\r\n\r\n                    this.coords.p_from_real = this.calcWithStep(new_from);\r\n                    this.coords.p_from_real = this.checkDiapason(this.coords.p_from_real, this.options.from_min, this.options.from_max);\r\n                    this.coords.p_from_fake = this.convertToFakePercent(this.coords.p_from_real);\r\n\r\n                    this.coords.p_to_real = this.calcWithStep(new_to);\r\n                    this.coords.p_to_real = this.checkDiapason(this.coords.p_to_real, this.options.to_min, this.options.to_max);\r\n                    this.coords.p_to_fake = this.convertToFakePercent(this.coords.p_to_real);\r\n\r\n                    break;\r\n            }\r\n\r\n            if (this.options.type === \"single\") {\r\n                this.coords.p_bar_x = (this.coords.p_handle / 2);\r\n                this.coords.p_bar_w = this.coords.p_single_fake;\r\n\r\n                this.result.from_percent = this.coords.p_single_real;\r\n                this.result.from = this.convertToValue(this.coords.p_single_real);\r\n\r\n                if (this.options.values.length) {\r\n                    this.result.from_value = this.options.values[this.result.from];\r\n                }\r\n            } else {\r\n                this.coords.p_bar_x = this.toFixed(this.coords.p_from_fake + (this.coords.p_handle / 2));\r\n                this.coords.p_bar_w = this.toFixed(this.coords.p_to_fake - this.coords.p_from_fake);\r\n\r\n                this.result.from_percent = this.coords.p_from_real;\r\n                this.result.from = this.convertToValue(this.coords.p_from_real);\r\n                this.result.to_percent = this.coords.p_to_real;\r\n                this.result.to = this.convertToValue(this.coords.p_to_real);\r\n\r\n                if (this.options.values.length) {\r\n                    this.result.from_value = this.options.values[this.result.from];\r\n                    this.result.to_value = this.options.values[this.result.to];\r\n                }\r\n            }\r\n\r\n            this.calcMinMax();\r\n            this.calcLabels();\r\n        },\r\n\r\n\r\n        /**\r\n         * calculates pointer X in percent\r\n         */\r\n        calcPointerPercent: function () {\r\n            if (!this.coords.w_rs) {\r\n                this.coords.p_pointer = 0;\r\n                return;\r\n            }\r\n\r\n            if (this.coords.x_pointer < 0 || isNaN(this.coords.x_pointer)  ) {\r\n                this.coords.x_pointer = 0;\r\n            } else if (this.coords.x_pointer > this.coords.w_rs) {\r\n                this.coords.x_pointer = this.coords.w_rs;\r\n            }\r\n\r\n            this.coords.p_pointer = this.toFixed(this.coords.x_pointer / this.coords.w_rs * 100);\r\n        },\r\n\r\n        convertToRealPercent: function (fake) {\r\n            var full = 100 - this.coords.p_handle;\r\n            return fake / full * 100;\r\n        },\r\n\r\n        convertToFakePercent: function (real) {\r\n            var full = 100 - this.coords.p_handle;\r\n            return real / 100 * full;\r\n        },\r\n\r\n        getHandleX: function () {\r\n            var max = 100 - this.coords.p_handle,\r\n                x = this.toFixed(this.coords.p_pointer - this.coords.p_gap);\r\n\r\n            if (x < 0) {\r\n                x = 0;\r\n            } else if (x > max) {\r\n                x = max;\r\n            }\r\n\r\n            return x;\r\n        },\r\n\r\n        calcHandlePercent: function () {\r\n            if (this.options.type === \"single\") {\r\n                this.coords.w_handle = this.$cache.s_single.outerWidth(false);\r\n            } else {\r\n                this.coords.w_handle = this.$cache.s_from.outerWidth(false);\r\n            }\r\n\r\n            this.coords.p_handle = this.toFixed(this.coords.w_handle / this.coords.w_rs * 100);\r\n        },\r\n\r\n        /**\r\n         * Find closest handle to pointer click\r\n         *\r\n         * @param real_x {Number}\r\n         * @returns {String}\r\n         */\r\n        chooseHandle: function (real_x) {\r\n            if (this.options.type === \"single\") {\r\n                return \"single\";\r\n            } else {\r\n                var m_point = this.coords.p_from_real + ((this.coords.p_to_real - this.coords.p_from_real) / 2);\r\n                if (real_x >= m_point) {\r\n                    return this.options.to_fixed ? \"from\" : \"to\";\r\n                } else {\r\n                    return this.options.from_fixed ? \"to\" : \"from\";\r\n                }\r\n            }\r\n        },\r\n\r\n        /**\r\n         * Measure Min and Max labels width in percent\r\n         */\r\n        calcMinMax: function () {\r\n            if (!this.coords.w_rs) {\r\n                return;\r\n            }\r\n\r\n            this.labels.p_min = this.labels.w_min / this.coords.w_rs * 100;\r\n            this.labels.p_max = this.labels.w_max / this.coords.w_rs * 100;\r\n        },\r\n\r\n        /**\r\n         * Measure labels width and X in percent\r\n         */\r\n        calcLabels: function () {\r\n            if (!this.coords.w_rs || this.options.hide_from_to) {\r\n                return;\r\n            }\r\n\r\n            if (this.options.type === \"single\") {\r\n\r\n                this.labels.w_single = this.$cache.single.outerWidth(false);\r\n                this.labels.p_single_fake = this.labels.w_single / this.coords.w_rs * 100;\r\n                this.labels.p_single_left = this.coords.p_single_fake + (this.coords.p_handle / 2) - (this.labels.p_single_fake / 2);\r\n                this.labels.p_single_left = this.checkEdges(this.labels.p_single_left, this.labels.p_single_fake);\r\n\r\n            } else {\r\n\r\n                this.labels.w_from = this.$cache.from.outerWidth(false);\r\n                this.labels.p_from_fake = this.labels.w_from / this.coords.w_rs * 100;\r\n                this.labels.p_from_left = this.coords.p_from_fake + (this.coords.p_handle / 2) - (this.labels.p_from_fake / 2);\r\n                this.labels.p_from_left = this.toFixed(this.labels.p_from_left);\r\n                this.labels.p_from_left = this.checkEdges(this.labels.p_from_left, this.labels.p_from_fake);\r\n\r\n                this.labels.w_to = this.$cache.to.outerWidth(false);\r\n                this.labels.p_to_fake = this.labels.w_to / this.coords.w_rs * 100;\r\n                this.labels.p_to_left = this.coords.p_to_fake + (this.coords.p_handle / 2) - (this.labels.p_to_fake / 2);\r\n                this.labels.p_to_left = this.toFixed(this.labels.p_to_left);\r\n                this.labels.p_to_left = this.checkEdges(this.labels.p_to_left, this.labels.p_to_fake);\r\n\r\n                this.labels.w_single = this.$cache.single.outerWidth(false);\r\n                this.labels.p_single_fake = this.labels.w_single / this.coords.w_rs * 100;\r\n                this.labels.p_single_left = ((this.labels.p_from_left + this.labels.p_to_left + this.labels.p_to_fake) / 2) - (this.labels.p_single_fake / 2);\r\n                this.labels.p_single_left = this.toFixed(this.labels.p_single_left);\r\n                this.labels.p_single_left = this.checkEdges(this.labels.p_single_left, this.labels.p_single_fake);\r\n\r\n            }\r\n        },\r\n\r\n\r\n\r\n        // =============================================================================================================\r\n        // Drawings\r\n\r\n        /**\r\n         * Main function called in request animation frame\r\n         * to update everything\r\n         */\r\n        updateScene: function () {\r\n            if (this.raf_id) {\r\n                cancelAnimationFrame(this.raf_id);\r\n                this.raf_id = null;\r\n            }\r\n\r\n            clearTimeout(this.update_tm);\r\n            this.update_tm = null;\r\n\r\n            if (!this.options) {\r\n                return;\r\n            }\r\n\r\n            this.drawHandles();\r\n\r\n            if (this.is_active) {\r\n                this.raf_id = requestAnimationFrame(this.updateScene.bind(this));\r\n            } else {\r\n                this.update_tm = setTimeout(this.updateScene.bind(this), 300);\r\n            }\r\n        },\r\n\r\n        /**\r\n         * Draw handles\r\n         */\r\n        drawHandles: function () {\r\n            this.coords.w_rs = this.$cache.rs.outerWidth(false);\r\n\r\n            if (!this.coords.w_rs) {\r\n                return;\r\n            }\r\n\r\n            if (this.coords.w_rs !== this.coords.w_rs_old) {\r\n                this.target = \"base\";\r\n                this.is_resize = true;\r\n            }\r\n\r\n            if (this.coords.w_rs !== this.coords.w_rs_old || this.force_redraw) {\r\n                this.setMinMax();\r\n                this.calc(true);\r\n                this.drawLabels();\r\n                if (this.options.grid) {\r\n                    this.calcGridMargin();\r\n                    this.calcGridLabels();\r\n                }\r\n                this.force_redraw = true;\r\n                this.coords.w_rs_old = this.coords.w_rs;\r\n                this.drawShadow();\r\n            }\r\n\r\n            if (!this.coords.w_rs) {\r\n                return;\r\n            }\r\n\r\n            if (!this.dragging && !this.force_redraw && !this.is_key) {\r\n                return;\r\n            }\r\n\r\n            if (this.old_from !== this.result.from || this.old_to !== this.result.to || this.force_redraw || this.is_key) {\r\n\r\n                this.drawLabels();\r\n\r\n                this.$cache.bar[0].style.left = this.coords.p_bar_x + \"%\";\r\n                this.$cache.bar[0].style.width = this.coords.p_bar_w + \"%\";\r\n\r\n                if (this.options.type === \"single\") {\r\n                    this.$cache.s_single[0].style.left = this.coords.p_single_fake + \"%\";\r\n\r\n                    this.$cache.single[0].style.left = this.labels.p_single_left + \"%\";\r\n\r\n                    if (this.options.values.length) {\r\n                        this.$cache.input.prop(\"value\", this.result.from_value);\r\n                    } else {\r\n                        this.$cache.input.prop(\"value\", this.result.from);\r\n                    }\r\n                    this.$cache.input.data(\"from\", this.result.from);\r\n                } else {\r\n                    this.$cache.s_from[0].style.left = this.coords.p_from_fake + \"%\";\r\n                    this.$cache.s_to[0].style.left = this.coords.p_to_fake + \"%\";\r\n\r\n                    if (this.old_from !== this.result.from || this.force_redraw) {\r\n                        this.$cache.from[0].style.left = this.labels.p_from_left + \"%\";\r\n                    }\r\n                    if (this.old_to !== this.result.to || this.force_redraw) {\r\n                        this.$cache.to[0].style.left = this.labels.p_to_left + \"%\";\r\n                    }\r\n\r\n                    this.$cache.single[0].style.left = this.labels.p_single_left + \"%\";\r\n\r\n                    if (this.options.values.length) {\r\n                        this.$cache.input.prop(\"value\", this.result.from_value + this.options.input_values_separator + this.result.to_value);\r\n                    } else {\r\n                        this.$cache.input.prop(\"value\", this.result.from + this.options.input_values_separator + this.result.to);\r\n                    }\r\n                    this.$cache.input.data(\"from\", this.result.from);\r\n                    this.$cache.input.data(\"to\", this.result.to);\r\n                }\r\n\r\n                if ((this.old_from !== this.result.from || this.old_to !== this.result.to) && !this.is_start) {\r\n                    this.$cache.input.trigger(\"change\");\r\n                }\r\n\r\n                this.old_from = this.result.from;\r\n                this.old_to = this.result.to;\r\n\r\n                // callbacks call\r\n                if (!this.is_resize && !this.is_update && !this.is_start && !this.is_finish) {\r\n                    this.callOnChange();\r\n                }\r\n                if (this.is_key || this.is_click) {\r\n                    this.is_key = false;\r\n                    this.is_click = false;\r\n                    this.callOnFinish();\r\n                }\r\n\r\n                this.is_update = false;\r\n                this.is_resize = false;\r\n                this.is_finish = false;\r\n            }\r\n\r\n            this.is_start = false;\r\n            this.is_key = false;\r\n            this.is_click = false;\r\n            this.force_redraw = false;\r\n        },\r\n\r\n        /**\r\n         * Draw labels\r\n         * measure labels collisions\r\n         * collapse close labels\r\n         */\r\n        drawLabels: function () {\r\n            if (!this.options) {\r\n                return;\r\n            }\r\n\r\n            var values_num = this.options.values.length,\r\n                p_values = this.options.p_values,\r\n                text_single,\r\n                text_from,\r\n                text_to;\r\n\r\n            if (this.options.hide_from_to) {\r\n                return;\r\n            }\r\n\r\n            if (this.options.type === \"single\") {\r\n\r\n                if (values_num) {\r\n                    text_single = this.decorate(p_values[this.result.from]);\r\n                    this.$cache.single.html(text_single);\r\n                } else {\r\n                    text_single = this.decorate(this._prettify(this.result.from), this.result.from);\r\n                    this.$cache.single.html(text_single);\r\n                }\r\n\r\n                this.calcLabels();\r\n\r\n                if (this.labels.p_single_left < this.labels.p_min + 1) {\r\n                    this.$cache.min[0].style.visibility = \"hidden\";\r\n                } else {\r\n                    this.$cache.min[0].style.visibility = \"visible\";\r\n                }\r\n\r\n                if (this.labels.p_single_left + this.labels.p_single_fake > 100 - this.labels.p_max - 1) {\r\n                    this.$cache.max[0].style.visibility = \"hidden\";\r\n                } else {\r\n                    this.$cache.max[0].style.visibility = \"visible\";\r\n                }\r\n\r\n            } else {\r\n\r\n                if (values_num) {\r\n\r\n                    if (this.options.decorate_both) {\r\n                        text_single = this.decorate(p_values[this.result.from]);\r\n                        text_single += this.options.values_separator;\r\n                        text_single += this.decorate(p_values[this.result.to]);\r\n                    } else {\r\n                        text_single = this.decorate(p_values[this.result.from] + this.options.values_separator + p_values[this.result.to]);\r\n                    }\r\n                    text_from = this.decorate(p_values[this.result.from]);\r\n                    text_to = this.decorate(p_values[this.result.to]);\r\n\r\n                    this.$cache.single.html(text_single);\r\n                    this.$cache.from.html(text_from);\r\n                    this.$cache.to.html(text_to);\r\n\r\n                } else {\r\n\r\n                    if (this.options.decorate_both) {\r\n                        text_single = this.decorate(this._prettify(this.result.from), this.result.from);\r\n                        text_single += this.options.values_separator;\r\n                        text_single += this.decorate(this._prettify(this.result.to), this.result.to);\r\n                    } else {\r\n                        text_single = this.decorate(this._prettify(this.result.from) + this.options.values_separator + this._prettify(this.result.to), this.result.to);\r\n                    }\r\n                    text_from = this.decorate(this._prettify(this.result.from), this.result.from);\r\n                    text_to = this.decorate(this._prettify(this.result.to), this.result.to);\r\n\r\n                    this.$cache.single.html(text_single);\r\n                    this.$cache.from.html(text_from);\r\n                    this.$cache.to.html(text_to);\r\n\r\n                }\r\n\r\n                this.calcLabels();\r\n\r\n                var min = Math.min(this.labels.p_single_left, this.labels.p_from_left),\r\n                    single_left = this.labels.p_single_left + this.labels.p_single_fake,\r\n                    to_left = this.labels.p_to_left + this.labels.p_to_fake,\r\n                    max = Math.max(single_left, to_left);\r\n\r\n                if (this.labels.p_from_left + this.labels.p_from_fake >= this.labels.p_to_left) {\r\n                    this.$cache.from[0].style.visibility = \"hidden\";\r\n                    this.$cache.to[0].style.visibility = \"hidden\";\r\n                    this.$cache.single[0].style.visibility = \"visible\";\r\n\r\n                    if (this.result.from === this.result.to) {\r\n                        if (this.target === \"from\") {\r\n                            this.$cache.from[0].style.visibility = \"visible\";\r\n                        } else if (this.target === \"to\") {\r\n                            this.$cache.to[0].style.visibility = \"visible\";\r\n                        }\r\n                        this.$cache.single[0].style.visibility = \"hidden\";\r\n                        max = to_left;\r\n                    } else {\r\n                        this.$cache.from[0].style.visibility = \"hidden\";\r\n                        this.$cache.to[0].style.visibility = \"hidden\";\r\n                        this.$cache.single[0].style.visibility = \"visible\";\r\n                        max = Math.max(single_left, to_left);\r\n                    }\r\n                } else {\r\n                    this.$cache.from[0].style.visibility = \"visible\";\r\n                    this.$cache.to[0].style.visibility = \"visible\";\r\n                    this.$cache.single[0].style.visibility = \"hidden\";\r\n                }\r\n\r\n                if (min < this.labels.p_min + 1) {\r\n                    this.$cache.min[0].style.visibility = \"hidden\";\r\n                } else {\r\n                    this.$cache.min[0].style.visibility = \"visible\";\r\n                }\r\n\r\n                if (max > 100 - this.labels.p_max - 1) {\r\n                    this.$cache.max[0].style.visibility = \"hidden\";\r\n                } else {\r\n                    this.$cache.max[0].style.visibility = \"visible\";\r\n                }\r\n\r\n            }\r\n        },\r\n\r\n        /**\r\n         * Draw shadow intervals\r\n         */\r\n        drawShadow: function () {\r\n            var o = this.options,\r\n                c = this.$cache,\r\n\r\n                is_from_min = typeof o.from_min === \"number\" && !isNaN(o.from_min),\r\n                is_from_max = typeof o.from_max === \"number\" && !isNaN(o.from_max),\r\n                is_to_min = typeof o.to_min === \"number\" && !isNaN(o.to_min),\r\n                is_to_max = typeof o.to_max === \"number\" && !isNaN(o.to_max),\r\n\r\n                from_min,\r\n                from_max,\r\n                to_min,\r\n                to_max;\r\n\r\n            if (o.type === \"single\") {\r\n                if (o.from_shadow && (is_from_min || is_from_max)) {\r\n                    from_min = this.convertToPercent(is_from_min ? o.from_min : o.min);\r\n                    from_max = this.convertToPercent(is_from_max ? o.from_max : o.max) - from_min;\r\n                    from_min = this.toFixed(from_min - (this.coords.p_handle / 100 * from_min));\r\n                    from_max = this.toFixed(from_max - (this.coords.p_handle / 100 * from_max));\r\n                    from_min = from_min + (this.coords.p_handle / 2);\r\n\r\n                    c.shad_single[0].style.display = \"block\";\r\n                    c.shad_single[0].style.left = from_min + \"%\";\r\n                    c.shad_single[0].style.width = from_max + \"%\";\r\n                } else {\r\n                    c.shad_single[0].style.display = \"none\";\r\n                }\r\n            } else {\r\n                if (o.from_shadow && (is_from_min || is_from_max)) {\r\n                    from_min = this.convertToPercent(is_from_min ? o.from_min : o.min);\r\n                    from_max = this.convertToPercent(is_from_max ? o.from_max : o.max) - from_min;\r\n                    from_min = this.toFixed(from_min - (this.coords.p_handle / 100 * from_min));\r\n                    from_max = this.toFixed(from_max - (this.coords.p_handle / 100 * from_max));\r\n                    from_min = from_min + (this.coords.p_handle / 2);\r\n\r\n                    c.shad_from[0].style.display = \"block\";\r\n                    c.shad_from[0].style.left = from_min + \"%\";\r\n                    c.shad_from[0].style.width = from_max + \"%\";\r\n                } else {\r\n                    c.shad_from[0].style.display = \"none\";\r\n                }\r\n\r\n                if (o.to_shadow && (is_to_min || is_to_max)) {\r\n                    to_min = this.convertToPercent(is_to_min ? o.to_min : o.min);\r\n                    to_max = this.convertToPercent(is_to_max ? o.to_max : o.max) - to_min;\r\n                    to_min = this.toFixed(to_min - (this.coords.p_handle / 100 * to_min));\r\n                    to_max = this.toFixed(to_max - (this.coords.p_handle / 100 * to_max));\r\n                    to_min = to_min + (this.coords.p_handle / 2);\r\n\r\n                    c.shad_to[0].style.display = \"block\";\r\n                    c.shad_to[0].style.left = to_min + \"%\";\r\n                    c.shad_to[0].style.width = to_max + \"%\";\r\n                } else {\r\n                    c.shad_to[0].style.display = \"none\";\r\n                }\r\n            }\r\n        },\r\n\r\n\r\n\r\n        // =============================================================================================================\r\n        // Callbacks\r\n\r\n        callOnStart: function () {\r\n            if (this.options.onStart && typeof this.options.onStart === \"function\") {\r\n                this.options.onStart(this.result);\r\n            }\r\n        },\r\n        callOnChange: function () {\r\n            if (this.options.onChange && typeof this.options.onChange === \"function\") {\r\n                this.options.onChange(this.result);\r\n            }\r\n        },\r\n        callOnFinish: function () {\r\n            if (this.options.onFinish && typeof this.options.onFinish === \"function\") {\r\n                this.options.onFinish(this.result);\r\n            }\r\n        },\r\n        callOnUpdate: function () {\r\n            if (this.options.onUpdate && typeof this.options.onUpdate === \"function\") {\r\n                this.options.onUpdate(this.result);\r\n            }\r\n        },\r\n\r\n\r\n\r\n        // =============================================================================================================\r\n        // Service methods\r\n\r\n        toggleInput: function () {\r\n            this.$cache.input.toggleClass(\"irs-hidden-input\");\r\n        },\r\n\r\n        /**\r\n         * Convert real value to percent\r\n         *\r\n         * @param value {Number} X in real\r\n         * @param no_min {boolean=} don't use min value\r\n         * @returns {Number} X in percent\r\n         */\r\n        convertToPercent: function (value, no_min) {\r\n            var diapason = this.options.max - this.options.min,\r\n                one_percent = diapason / 100,\r\n                val, percent;\r\n\r\n            if (!diapason) {\r\n                this.no_diapason = true;\r\n                return 0;\r\n            }\r\n\r\n            if (no_min) {\r\n                val = value;\r\n            } else {\r\n                val = value - this.options.min;\r\n            }\r\n\r\n            percent = val / one_percent;\r\n\r\n            return this.toFixed(percent);\r\n        },\r\n\r\n        /**\r\n         * Convert percent to real values\r\n         *\r\n         * @param percent {Number} X in percent\r\n         * @returns {Number} X in real\r\n         */\r\n        convertToValue: function (percent) {\r\n            var min = this.options.min,\r\n                max = this.options.max,\r\n                min_decimals = min.toString().split(\".\")[1],\r\n                max_decimals = max.toString().split(\".\")[1],\r\n                min_length, max_length,\r\n                avg_decimals = 0,\r\n                abs = 0;\r\n\r\n            if (percent === 0) {\r\n                return this.options.min;\r\n            }\r\n            if (percent === 100) {\r\n                return this.options.max;\r\n            }\r\n\r\n\r\n            if (min_decimals) {\r\n                min_length = min_decimals.length;\r\n                avg_decimals = min_length;\r\n            }\r\n            if (max_decimals) {\r\n                max_length = max_decimals.length;\r\n                avg_decimals = max_length;\r\n            }\r\n            if (min_length && max_length) {\r\n                avg_decimals = (min_length >= max_length) ? min_length : max_length;\r\n            }\r\n\r\n            if (min < 0) {\r\n                abs = Math.abs(min);\r\n                min = +(min + abs).toFixed(avg_decimals);\r\n                max = +(max + abs).toFixed(avg_decimals);\r\n            }\r\n\r\n            var number = ((max - min) / 100 * percent) + min,\r\n                string = this.options.step.toString().split(\".\")[1],\r\n                result;\r\n\r\n            if (string) {\r\n                number = +number.toFixed(string.length);\r\n            } else {\r\n                number = number / this.options.step;\r\n                number = number * this.options.step;\r\n\r\n                number = +number.toFixed(0);\r\n            }\r\n\r\n            if (abs) {\r\n                number -= abs;\r\n            }\r\n\r\n            if (string) {\r\n                result = +number.toFixed(string.length);\r\n            } else {\r\n                result = this.toFixed(number);\r\n            }\r\n\r\n            if (result < this.options.min) {\r\n                result = this.options.min;\r\n            } else if (result > this.options.max) {\r\n                result = this.options.max;\r\n            }\r\n\r\n            return result;\r\n        },\r\n\r\n        /**\r\n         * Round percent value with step\r\n         *\r\n         * @param percent {Number}\r\n         * @returns percent {Number} rounded\r\n         */\r\n        calcWithStep: function (percent) {\r\n            var rounded = Math.round(percent / this.coords.p_step) * this.coords.p_step;\r\n\r\n            if (rounded > 100) {\r\n                rounded = 100;\r\n            }\r\n            if (percent === 100) {\r\n                rounded = 100;\r\n            }\r\n\r\n            return this.toFixed(rounded);\r\n        },\r\n\r\n        checkMinInterval: function (p_current, p_next, type) {\r\n            var o = this.options,\r\n                current,\r\n                next;\r\n\r\n            if (!o.min_interval) {\r\n                return p_current;\r\n            }\r\n\r\n            current = this.convertToValue(p_current);\r\n            next = this.convertToValue(p_next);\r\n\r\n            if (type === \"from\") {\r\n\r\n                if (next - current < o.min_interval) {\r\n                    current = next - o.min_interval;\r\n                }\r\n\r\n            } else {\r\n\r\n                if (current - next < o.min_interval) {\r\n                    current = next + o.min_interval;\r\n                }\r\n\r\n            }\r\n\r\n            return this.convertToPercent(current);\r\n        },\r\n\r\n        checkMaxInterval: function (p_current, p_next, type) {\r\n            var o = this.options,\r\n                current,\r\n                next;\r\n\r\n            if (!o.max_interval) {\r\n                return p_current;\r\n            }\r\n\r\n            current = this.convertToValue(p_current);\r\n            next = this.convertToValue(p_next);\r\n\r\n            if (type === \"from\") {\r\n\r\n                if (next - current > o.max_interval) {\r\n                    current = next - o.max_interval;\r\n                }\r\n\r\n            } else {\r\n\r\n                if (current - next > o.max_interval) {\r\n                    current = next + o.max_interval;\r\n                }\r\n\r\n            }\r\n\r\n            return this.convertToPercent(current);\r\n        },\r\n\r\n        checkDiapason: function (p_num, min, max) {\r\n            var num = this.convertToValue(p_num),\r\n                o = this.options;\r\n\r\n            if (typeof min !== \"number\") {\r\n                min = o.min;\r\n            }\r\n\r\n            if (typeof max !== \"number\") {\r\n                max = o.max;\r\n            }\r\n\r\n            if (num < min) {\r\n                num = min;\r\n            }\r\n\r\n            if (num > max) {\r\n                num = max;\r\n            }\r\n\r\n            return this.convertToPercent(num);\r\n        },\r\n\r\n        toFixed: function (num) {\r\n            num = num.toFixed(9);\r\n            return +num;\r\n        },\r\n\r\n        _prettify: function (num) {\r\n            if (!this.options.prettify_enabled) {\r\n                return num;\r\n            }\r\n\r\n            if (this.options.prettify && typeof this.options.prettify === \"function\") {\r\n                return this.options.prettify(num);\r\n            } else {\r\n                return this.prettify(num);\r\n            }\r\n        },\r\n\r\n        prettify: function (num) {\r\n            var n = num.toString();\r\n            return n.replace(/(\\d{1,3}(?=(?:\\d\\d\\d)+(?!\\d)))/g, \"$1\" + this.options.prettify_separator);\r\n        },\r\n\r\n        checkEdges: function (left, width) {\r\n            if (!this.options.force_edges) {\r\n                return this.toFixed(left);\r\n            }\r\n\r\n            if (left < 0) {\r\n                left = 0;\r\n            } else if (left > 100 - width) {\r\n                left = 100 - width;\r\n            }\r\n\r\n            return this.toFixed(left);\r\n        },\r\n\r\n        validate: function () {\r\n            var o = this.options,\r\n                r = this.result,\r\n                v = o.values,\r\n                vl = v.length,\r\n                value,\r\n                i;\r\n\r\n            if (typeof o.min === \"string\") o.min = +o.min;\r\n            if (typeof o.max === \"string\") o.max = +o.max;\r\n            if (typeof o.from === \"string\") o.from = +o.from;\r\n            if (typeof o.to === \"string\") o.to = +o.to;\r\n            if (typeof o.step === \"string\") o.step = +o.step;\r\n\r\n            if (typeof o.from_min === \"string\") o.from_min = +o.from_min;\r\n            if (typeof o.from_max === \"string\") o.from_max = +o.from_max;\r\n            if (typeof o.to_min === \"string\") o.to_min = +o.to_min;\r\n            if (typeof o.to_max === \"string\") o.to_max = +o.to_max;\r\n\r\n            if (typeof o.keyboard_step === \"string\") o.keyboard_step = +o.keyboard_step;\r\n            if (typeof o.grid_num === \"string\") o.grid_num = +o.grid_num;\r\n\r\n            if (o.max < o.min) {\r\n                o.max = o.min;\r\n            }\r\n\r\n            if (vl) {\r\n                o.p_values = [];\r\n                o.min = 0;\r\n                o.max = vl - 1;\r\n                o.step = 1;\r\n                o.grid_num = o.max;\r\n                o.grid_snap = true;\r\n\r\n\r\n                for (i = 0; i < vl; i++) {\r\n                    value = +v[i];\r\n\r\n                    if (!isNaN(value)) {\r\n                        v[i] = value;\r\n                        value = this._prettify(value);\r\n                    } else {\r\n                        value = v[i];\r\n                    }\r\n\r\n                    o.p_values.push(value);\r\n                }\r\n            }\r\n\r\n            if (typeof o.from !== \"number\" || isNaN(o.from)) {\r\n                o.from = o.min;\r\n            }\r\n\r\n            if (typeof o.to !== \"number\" || isNaN(o.from)) {\r\n                o.to = o.max;\r\n            }\r\n\r\n            if (o.type === \"single\") {\r\n\r\n                if (o.from < o.min) {\r\n                    o.from = o.min;\r\n                }\r\n\r\n                if (o.from > o.max) {\r\n                    o.from = o.max;\r\n                }\r\n\r\n            } else {\r\n\r\n                if (o.from < o.min || o.from > o.max) {\r\n                    o.from = o.min;\r\n                }\r\n                if (o.to > o.max || o.to < o.min) {\r\n                    o.to = o.max;\r\n                }\r\n                if (o.from > o.to) {\r\n                    o.from = o.to;\r\n                }\r\n\r\n            }\r\n\r\n            if (typeof o.step !== \"number\" || isNaN(o.step) || !o.step || o.step < 0) {\r\n                o.step = 1;\r\n            }\r\n\r\n            if (typeof o.keyboard_step !== \"number\" || isNaN(o.keyboard_step) || !o.keyboard_step || o.keyboard_step < 0) {\r\n                o.keyboard_step = 5;\r\n            }\r\n\r\n            if (typeof o.from_min === \"number\" && o.from < o.from_min) {\r\n                o.from = o.from_min;\r\n            }\r\n\r\n            if (typeof o.from_max === \"number\" && o.from > o.from_max) {\r\n                o.from = o.from_max;\r\n            }\r\n\r\n            if (typeof o.to_min === \"number\" && o.to < o.to_min) {\r\n                o.to = o.to_min;\r\n            }\r\n\r\n            if (typeof o.to_max === \"number\" && o.from > o.to_max) {\r\n                o.to = o.to_max;\r\n            }\r\n\r\n            if (r) {\r\n                if (r.min !== o.min) {\r\n                    r.min = o.min;\r\n                }\r\n\r\n                if (r.max !== o.max) {\r\n                    r.max = o.max;\r\n                }\r\n\r\n                if (r.from < r.min || r.from > r.max) {\r\n                    r.from = o.from;\r\n                }\r\n\r\n                if (r.to < r.min || r.to > r.max) {\r\n                    r.to = o.to;\r\n                }\r\n            }\r\n\r\n            if (typeof o.min_interval !== \"number\" || isNaN(o.min_interval) || !o.min_interval || o.min_interval < 0) {\r\n                o.min_interval = 0;\r\n            }\r\n\r\n            if (typeof o.max_interval !== \"number\" || isNaN(o.max_interval) || !o.max_interval || o.max_interval < 0) {\r\n                o.max_interval = 0;\r\n            }\r\n\r\n            if (o.min_interval && o.min_interval > o.max - o.min) {\r\n                o.min_interval = o.max - o.min;\r\n            }\r\n\r\n            if (o.max_interval && o.max_interval > o.max - o.min) {\r\n                o.max_interval = o.max - o.min;\r\n            }\r\n        },\r\n\r\n        decorate: function (num, original) {\r\n            var decorated = \"\",\r\n                o = this.options;\r\n\r\n            if (o.prefix) {\r\n                decorated += o.prefix;\r\n            }\r\n\r\n            decorated += num;\r\n\r\n            if (o.max_postfix) {\r\n                if (o.values.length && num === o.p_values[o.max]) {\r\n                    decorated += o.max_postfix;\r\n                    if (o.postfix) {\r\n                        decorated += \" \";\r\n                    }\r\n                } else if (original === o.max) {\r\n                    decorated += o.max_postfix;\r\n                    if (o.postfix) {\r\n                        decorated += \" \";\r\n                    }\r\n                }\r\n            }\r\n\r\n            if (o.postfix) {\r\n                decorated += o.postfix;\r\n            }\r\n\r\n            return decorated;\r\n        },\r\n\r\n        updateFrom: function () {\r\n            this.result.from = this.options.from;\r\n            this.result.from_percent = this.convertToPercent(this.result.from);\r\n            if (this.options.values) {\r\n                this.result.from_value = this.options.values[this.result.from];\r\n            }\r\n        },\r\n\r\n        updateTo: function () {\r\n            this.result.to = this.options.to;\r\n            this.result.to_percent = this.convertToPercent(this.result.to);\r\n            if (this.options.values) {\r\n                this.result.to_value = this.options.values[this.result.to];\r\n            }\r\n        },\r\n\r\n        updateResult: function () {\r\n            this.result.min = this.options.min;\r\n            this.result.max = this.options.max;\r\n            this.updateFrom();\r\n            this.updateTo();\r\n        },\r\n\r\n\r\n        // =============================================================================================================\r\n        // Grid\r\n\r\n        appendGrid: function () {\r\n            if (!this.options.grid) {\r\n                return;\r\n            }\r\n\r\n            var o = this.options,\r\n                i, z,\r\n\r\n                total = o.max - o.min,\r\n                big_num = o.grid_num,\r\n                big_p = 0,\r\n                big_w = 0,\r\n\r\n                small_max = 4,\r\n                local_small_max,\r\n                small_p,\r\n                small_w = 0,\r\n\r\n                result,\r\n                html = '';\r\n\r\n\r\n\r\n            this.calcGridMargin();\r\n\r\n            if (o.grid_snap) {\r\n                big_num = total / o.step;\r\n                big_p = this.toFixed(o.step / (total / 100));\r\n            } else {\r\n                big_p = this.toFixed(100 / big_num);\r\n            }\r\n\r\n            if (big_num > 4) {\r\n                small_max = 3;\r\n            }\r\n            if (big_num > 7) {\r\n                small_max = 2;\r\n            }\r\n            if (big_num > 14) {\r\n                small_max = 1;\r\n            }\r\n            if (big_num > 28) {\r\n                small_max = 0;\r\n            }\r\n\r\n            for (i = 0; i < big_num + 1; i++) {\r\n                local_small_max = small_max;\r\n\r\n                big_w = this.toFixed(big_p * i);\r\n\r\n                if (big_w > 100) {\r\n                    big_w = 100;\r\n\r\n                    local_small_max -= 2;\r\n                    if (local_small_max < 0) {\r\n                        local_small_max = 0;\r\n                    }\r\n                }\r\n                this.coords.big[i] = big_w;\r\n\r\n                small_p = (big_w - (big_p * (i - 1))) / (local_small_max + 1);\r\n\r\n                for (z = 1; z <= local_small_max; z++) {\r\n                    if (big_w === 0) {\r\n                        break;\r\n                    }\r\n\r\n                    small_w = this.toFixed(big_w - (small_p * z));\r\n\r\n                    html += '<span class=\"irs-grid-pol small\" style=\"left: ' + small_w + '%\"></span>';\r\n                }\r\n\r\n                html += '<span class=\"irs-grid-pol\" style=\"left: ' + big_w + '%\"></span>';\r\n\r\n                result = this.convertToValue(big_w);\r\n                if (o.values.length) {\r\n                    result = o.p_values[result];\r\n                } else {\r\n                    result = this._prettify(result);\r\n                }\r\n\r\n                html += '<span class=\"irs-grid-text js-grid-text-' + i + '\" style=\"left: ' + big_w + '%\">' + result + '</span>';\r\n            }\r\n            this.coords.big_num = Math.ceil(big_num + 1);\r\n\r\n\r\n\r\n            this.$cache.cont.addClass(\"irs-with-grid\");\r\n            this.$cache.grid.html(html);\r\n            this.cacheGridLabels();\r\n        },\r\n\r\n        cacheGridLabels: function () {\r\n            var $label, i,\r\n                num = this.coords.big_num;\r\n\r\n            for (i = 0; i < num; i++) {\r\n                $label = this.$cache.grid.find(\".js-grid-text-\" + i);\r\n                this.$cache.grid_labels.push($label);\r\n            }\r\n\r\n            this.calcGridLabels();\r\n        },\r\n\r\n        calcGridLabels: function () {\r\n            var i, label, start = [], finish = [],\r\n                num = this.coords.big_num;\r\n\r\n            for (i = 0; i < num; i++) {\r\n                this.coords.big_w[i] = this.$cache.grid_labels[i].outerWidth(false);\r\n                this.coords.big_p[i] = this.toFixed(this.coords.big_w[i] / this.coords.w_rs * 100);\r\n                this.coords.big_x[i] = this.toFixed(this.coords.big_p[i] / 2);\r\n\r\n                start[i] = this.toFixed(this.coords.big[i] - this.coords.big_x[i]);\r\n                finish[i] = this.toFixed(start[i] + this.coords.big_p[i]);\r\n            }\r\n\r\n            if (this.options.force_edges) {\r\n                if (start[0] < -this.coords.grid_gap) {\r\n                    start[0] = -this.coords.grid_gap;\r\n                    finish[0] = this.toFixed(start[0] + this.coords.big_p[0]);\r\n\r\n                    this.coords.big_x[0] = this.coords.grid_gap;\r\n                }\r\n\r\n                if (finish[num - 1] > 100 + this.coords.grid_gap) {\r\n                    finish[num - 1] = 100 + this.coords.grid_gap;\r\n                    start[num - 1] = this.toFixed(finish[num - 1] - this.coords.big_p[num - 1]);\r\n\r\n                    this.coords.big_x[num - 1] = this.toFixed(this.coords.big_p[num - 1] - this.coords.grid_gap);\r\n                }\r\n            }\r\n\r\n            this.calcGridCollision(2, start, finish);\r\n            this.calcGridCollision(4, start, finish);\r\n\r\n            for (i = 0; i < num; i++) {\r\n                label = this.$cache.grid_labels[i][0];\r\n                label.style.marginLeft = -this.coords.big_x[i] + \"%\";\r\n            }\r\n        },\r\n\r\n        // Collisions Calc Beta\r\n        // TODO: Refactor then have plenty of time\r\n        calcGridCollision: function (step, start, finish) {\r\n            var i, next_i, label,\r\n                num = this.coords.big_num;\r\n\r\n            for (i = 0; i < num; i += step) {\r\n                next_i = i + (step / 2);\r\n                if (next_i >= num) {\r\n                    break;\r\n                }\r\n\r\n                label = this.$cache.grid_labels[next_i][0];\r\n\r\n                if (finish[i] <= start[next_i]) {\r\n                    label.style.visibility = \"visible\";\r\n                } else {\r\n                    label.style.visibility = \"hidden\";\r\n                }\r\n            }\r\n        },\r\n\r\n        calcGridMargin: function () {\r\n            if (!this.options.grid_margin) {\r\n                return;\r\n            }\r\n\r\n            this.coords.w_rs = this.$cache.rs.outerWidth(false);\r\n            if (!this.coords.w_rs) {\r\n                return;\r\n            }\r\n\r\n            if (this.options.type === \"single\") {\r\n                this.coords.w_handle = this.$cache.s_single.outerWidth(false);\r\n            } else {\r\n                this.coords.w_handle = this.$cache.s_from.outerWidth(false);\r\n            }\r\n            this.coords.p_handle = this.toFixed(this.coords.w_handle  / this.coords.w_rs * 100);\r\n            this.coords.grid_gap = this.toFixed((this.coords.p_handle / 2) - 0.1);\r\n\r\n            this.$cache.grid[0].style.width = this.toFixed(100 - this.coords.p_handle) + \"%\";\r\n            this.$cache.grid[0].style.left = this.coords.grid_gap + \"%\";\r\n        },\r\n\r\n\r\n\r\n        // =============================================================================================================\r\n        // Public methods\r\n\r\n        update: function (options) {\r\n            if (!this.input) {\r\n                return;\r\n            }\r\n\r\n            this.is_update = true;\r\n\r\n            this.options.from = this.result.from;\r\n            this.options.to = this.result.to;\r\n\r\n            this.options = $.extend(this.options, options);\r\n            this.validate();\r\n            this.updateResult(options);\r\n\r\n            this.toggleInput();\r\n            this.remove();\r\n            this.init(true);\r\n        },\r\n\r\n        reset: function () {\r\n            if (!this.input) {\r\n                return;\r\n            }\r\n\r\n            this.updateResult();\r\n            this.update();\r\n        },\r\n\r\n        destroy: function () {\r\n            if (!this.input) {\r\n                return;\r\n            }\r\n\r\n            this.toggleInput();\r\n            this.$cache.input.prop(\"readonly\", false);\r\n            $.data(this.input, \"ionRangeSlider\", null);\r\n\r\n            this.remove();\r\n            this.input = null;\r\n            this.options = null;\r\n        }\r\n    };\r\n\r\n    $.fn.ionRangeSlider = function (options) {\r\n        return this.each(function() {\r\n            if (!$.data(this, \"ionRangeSlider\")) {\r\n                $.data(this, \"ionRangeSlider\", new IonRangeSlider(this, options, plugin_count++));\r\n            }\r\n        });\r\n    };\r\n\r\n\r\n\r\n    // =================================================================================================================\r\n    // http://paulirish.com/2011/requestanimationframe-for-smart-animating/\r\n    // http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating\r\n\r\n    // requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel\r\n\r\n    // MIT license\r\n\r\n    (function() {\r\n        var lastTime = 0;\r\n        var vendors = ['ms', 'moz', 'webkit', 'o'];\r\n        for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {\r\n            window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];\r\n            window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame']\r\n                || window[vendors[x]+'CancelRequestAnimationFrame'];\r\n        }\r\n\r\n        if (!window.requestAnimationFrame)\r\n            window.requestAnimationFrame = function(callback, element) {\r\n                var currTime = new Date().getTime();\r\n                var timeToCall = Math.max(0, 16 - (currTime - lastTime));\r\n                var id = window.setTimeout(function() { callback(currTime + timeToCall); },\r\n                    timeToCall);\r\n                lastTime = currTime + timeToCall;\r\n                return id;\r\n            };\r\n\r\n        if (!window.cancelAnimationFrame)\r\n            window.cancelAnimationFrame = function(id) {\r\n                clearTimeout(id);\r\n            };\r\n    }());\r\n\r\n}));\r\n\n\n\n// WEBPACK FOOTER //\n// ./js/newTube/ion-range-slider/ion.range-slider.src.js","/* ========================================================================\n * Bootstrap: modal.js v3.3.5\n * http://getbootstrap.com/javascript/#modals\n * ========================================================================\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\nimport jQuery from \"jquery\";\nvar $ = jQuery;\n\n+function ($) {\n  'use strict';\n\n  // MODAL CLASS DEFINITION\n  // ======================\n\n  var Modal = function (element, options) {\n    this.options             = options\n    this.$body               = $(document.body)\n    this.$element            = $(element)\n    this.$dialog             = this.$element.find('.modal-dialog')\n    this.$backdrop           = null\n    this.isShown             = null\n    this.originalBodyPad     = null\n    this.scrollbarWidth      = 0\n    this.ignoreBackdropClick = false\n\n    if (this.options.remote) {\n      this.$element\n        .find('.modal-content')\n        .load(this.options.remote, $.proxy(function () {\n          this.$element.trigger('loaded.bs.modal')\n        }, this))\n    }\n  }\n\n  Modal.VERSION  = '3.3.5'\n\n  Modal.TRANSITION_DURATION = 300\n  Modal.BACKDROP_TRANSITION_DURATION = 150\n\n  Modal.DEFAULTS = {\n    backdrop: true,\n    keyboard: true,\n    show: true\n  }\n\n  Modal.prototype.toggle = function (_relatedTarget) {\n    return this.isShown ? this.hide() : this.show(_relatedTarget)\n  }\n\n  Modal.prototype.show = function (_relatedTarget) {\n    var that = this\n    var e    = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })\n\n    this.$element.trigger(e)\n\n    if (this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = true\n\n    this.checkScrollbar()\n    this.setScrollbar()\n    this.$body.addClass('modal-open')\n\n    this.escape()\n    this.resize()\n\n    this.$element.on('click.dismiss.bs.modal', '[data-dismiss=\"modal\"]', $.proxy(this.hide, this))\n\n    this.$dialog.on('mousedown.dismiss.bs.modal', function () {\n      that.$element.one('mouseup.dismiss.bs.modal', function (e) {\n        if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true\n      })\n    })\n\n    this.backdrop(function () {\n      var transition = $.support.transition && that.$element.hasClass('fade')\n\n      if (!that.$element.parent().length) {\n        that.$element.appendTo(that.$body) // don't move modals dom position\n      }\n\n      that.$element\n        .show()\n        .scrollTop(0)\n\n      that.adjustDialog()\n\n      if (transition) {\n        that.$element[0].offsetWidth // force reflow\n      }\n\n      that.$element.addClass('in')\n\n      that.enforceFocus()\n\n      var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })\n\n      transition ?\n        that.$dialog // wait for modal to slide in\n          .one('bsTransitionEnd', function () {\n            that.$element.trigger('focus').trigger(e)\n          })\n          .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n        that.$element.trigger('focus').trigger(e)\n    })\n  }\n\n  Modal.prototype.hide = function (e) {\n    if (e) e.preventDefault()\n\n    e = $.Event('hide.bs.modal')\n\n    this.$element.trigger(e)\n\n    if (!this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = false\n\n    this.escape()\n    this.resize()\n\n    $(document).off('focusin.bs.modal')\n\n    this.$element\n      .removeClass('in')\n      .off('click.dismiss.bs.modal')\n      .off('mouseup.dismiss.bs.modal')\n\n    this.$dialog.off('mousedown.dismiss.bs.modal')\n\n    $.support.transition && this.$element.hasClass('fade') ?\n      this.$element\n        .one('bsTransitionEnd', $.proxy(this.hideModal, this))\n        .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n      this.hideModal()\n  }\n\n  Modal.prototype.enforceFocus = function () {\n    $(document)\n      .off('focusin.bs.modal') // guard against infinite focus loop\n      .on('focusin.bs.modal', $.proxy(function (e) {\n        if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {\n          this.$element.trigger('focus')\n        }\n      }, this))\n  }\n\n  Modal.prototype.escape = function () {\n    if (this.isShown && this.options.keyboard) {\n      this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {\n        e.which == 27 && this.hide()\n      }, this))\n    } else if (!this.isShown) {\n      this.$element.off('keydown.dismiss.bs.modal')\n    }\n  }\n\n  Modal.prototype.resize = function () {\n    if (this.isShown) {\n      $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))\n    } else {\n      $(window).off('resize.bs.modal')\n    }\n  }\n\n  Modal.prototype.hideModal = function () {\n    var that = this\n    this.$element.hide()\n    this.backdrop(function () {\n      that.$body.removeClass('modal-open')\n      that.resetAdjustments()\n      that.resetScrollbar()\n      that.$element.trigger('hidden.bs.modal')\n    })\n  }\n\n  Modal.prototype.removeBackdrop = function () {\n    this.$backdrop && this.$backdrop.remove()\n    this.$backdrop = null\n  }\n\n  Modal.prototype.backdrop = function (callback) {\n    var that = this\n    var animate = this.$element.hasClass('fade') ? 'fade' : ''\n\n    if (this.isShown && this.options.backdrop) {\n      var doAnimate = $.support.transition && animate\n\n      this.$backdrop = $(document.createElement('div'))\n        .addClass('modal-backdrop ' + animate)\n        .appendTo(this.$body)\n\n      this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {\n        if (this.ignoreBackdropClick) {\n          this.ignoreBackdropClick = false\n          return\n        }\n        if (e.target !== e.currentTarget) return\n        this.options.backdrop == 'static'\n          ? this.$element[0].focus()\n          : this.hide()\n      }, this))\n\n      if (doAnimate) this.$backdrop[0].offsetWidth // force reflow\n\n      this.$backdrop.addClass('in')\n\n      if (!callback) return\n\n      doAnimate ?\n        this.$backdrop\n          .one('bsTransitionEnd', callback)\n          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n        callback()\n\n    } else if (!this.isShown && this.$backdrop) {\n      this.$backdrop.removeClass('in')\n\n      var callbackRemove = function () {\n        that.removeBackdrop()\n        callback && callback()\n      }\n      $.support.transition && this.$element.hasClass('fade') ?\n        this.$backdrop\n          .one('bsTransitionEnd', callbackRemove)\n          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n        callbackRemove()\n\n    } else if (callback) {\n      callback()\n    }\n  }\n\n  // these following methods are used to handle overflowing modals\n\n  Modal.prototype.handleUpdate = function () {\n    this.adjustDialog()\n  }\n\n  Modal.prototype.adjustDialog = function () {\n    var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight\n\n    this.$element.css({\n      paddingLeft:  !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',\n      paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''\n    })\n  }\n\n  Modal.prototype.resetAdjustments = function () {\n    this.$element.css({\n      paddingLeft: '',\n      paddingRight: ''\n    })\n  }\n\n  Modal.prototype.checkScrollbar = function () {\n    var fullWindowWidth = window.innerWidth\n    if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8\n      var documentElementRect = document.documentElement.getBoundingClientRect()\n      fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)\n    }\n    this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth\n    this.scrollbarWidth = this.measureScrollbar()\n  }\n\n  Modal.prototype.setScrollbar = function () {\n    var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)\n    this.originalBodyPad = document.body.style.paddingRight || ''\n    if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)\n  }\n\n  Modal.prototype.resetScrollbar = function () {\n    this.$body.css('padding-right', this.originalBodyPad)\n  }\n\n  Modal.prototype.measureScrollbar = function () { // thx walsh\n    var scrollDiv = document.createElement('div')\n    scrollDiv.className = 'modal-scrollbar-measure'\n    this.$body.append(scrollDiv)\n    var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth\n    this.$body[0].removeChild(scrollDiv)\n    return scrollbarWidth\n  }\n\n\n  // MODAL PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option, _relatedTarget) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.modal')\n      var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data) $this.data('bs.modal', (data = new Modal(this, options)))\n      if (typeof option == 'string') data[option](_relatedTarget)\n      else if (options.show) data.show(_relatedTarget)\n    })\n  }\n\n  var old = $.fn.modal\n\n  $.fn.modal             = Plugin\n  $.fn.modal.Constructor = Modal\n\n\n  // MODAL NO CONFLICT\n  // =================\n\n  $.fn.modal.noConflict = function () {\n    $.fn.modal = old\n    return this\n  }\n\n\n  // MODAL DATA-API\n  // ==============\n\n  $(document).on('click.bs.modal.data-api', '[data-toggle=\"modal\"]', function (e) {\n    var $this   = $(this)\n    var href    = $this.attr('href')\n    var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\\s]+$)/, ''))) // strip for ie7\n    var option  = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())\n\n    if ($this.is('a')) e.preventDefault()\n\n    $target.one('show.bs.modal', function (showEvent) {\n      if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown\n      $target.one('hidden.bs.modal', function () {\n        $this.is(':visible') && $this.trigger('focus')\n      })\n    })\n    Plugin.call($target, option, this)\n  })\n\n}(jQuery);\n\n\n\n// WEBPACK FOOTER //\n// ./js/newTube/modals/bs.modal.src.js","import './bs.modal.src.js';\r\n\r\nimport jQuery from \"jquery\";\r\nvar $ = jQuery;\r\n\r\n(function ($) {\r\n    jQuery.modalWindows = function (options) {\r\n        var defaults = {\r\n            target: \".modal\",\r\n            trigger: \"[data-toggle-modal]\",\r\n            defaultOpen: false,\r\n            bodyClass: \"modal-open\",\r\n            \"nh_modalShow\": function () {\r\n            },\r\n            \"nh_modalHide\": function () {\r\n            },\r\n            \"nh_modalTriggerClick\": function () {\r\n            }\r\n        };\r\n\r\n        var opt = $.extend(true, {}, defaults, options);\r\n\r\n        var keys = {37: 1, 38: 1, 39: 1, 40: 1};\r\n\r\n\r\n        function preventDefault(e) {\r\n            e = e || window.event;\r\n            if (e.preventDefault)\r\n                e.preventDefault();\r\n            e.returnValue = false;\r\n        }\r\n\r\n        function preventDefaultForScrollKeys(e) {\r\n            if (keys[e.keyCode]) {\r\n                preventDefault(e);\r\n                return false;\r\n            }\r\n        }\r\n\r\n        function disableScroll() {\r\n            if (window.addEventListener) // older FF\r\n                window.addEventListener('DOMMouseScroll', preventDefault, false);\r\n            window.onwheel = preventDefault; // modern standard\r\n            window.onmousewheel = document.onmousewheel = preventDefault; // older browsers, IE\r\n            window.ontouchmove = preventDefault; // mobile\r\n            document.onkeydown = preventDefaultForScrollKeys;\r\n        }\r\n\r\n        function enableScroll() {\r\n            if (window.removeEventListener)\r\n                window.removeEventListener('DOMMouseScroll', preventDefault, false);\r\n            window.onmousewheel = document.onmousewheel = null;\r\n            window.onwheel = null;\r\n            window.ontouchmove = null;\r\n            document.onkeydown = null;\r\n        }\r\n\r\n\r\n\r\n        // SHOW\r\n        function showModal() {\r\n            if (opt.bodyClass) {\r\n                $(\"body\").addClass(opt.bodyClass);\r\n            }\r\n\r\n            $(opt.target).modal(\"show\");\r\n            disableScroll();\r\n            opt.nh_modalShow.call(opt);\r\n        }\r\n\r\n        // HIDE\r\n        function hideModal() {\r\n            $(opt.target).modal(\"hide\");\r\n            enableScroll();\r\n            if (opt.bodyClass) {\r\n                $(opt.target).on(\"hidden.bs.modal\", function (e) {\r\n                    $(\"body\").removeClass(opt.bodyClass);\r\n                });\r\n            }\r\n//        opt.nh_modalHide.call(opt);\r\n        }\r\n\r\n\r\n        // TRIGGER FUNCTION\r\n        function trigger() {\r\n            $(opt.trigger).click(function (e) {\r\n                e.preventDefault();\r\n                showModal();\r\n                opt.nh_modalTriggerClick.call(opt);\r\n            });\r\n        }\r\n\r\n        // DEFAULT\r\n        function defaultOpen() {\r\n            if (opt.defaultOpen) {\r\n                showModal();\r\n            }\r\n        }\r\n\r\n////////////////////////////////////////////////////\r\n////////////////////////////////////////////////////\r\n        // INIT\r\n        defaultOpen();\r\n        trigger();\r\n        $(opt.target).on('hidden.bs.modal', function (e) {\r\n            enableScroll();\r\n            opt.nh_modalHide.call(opt);\r\n        });\r\n        if (opt.bodyClass) {\r\n            $(opt.target).on(\"hidden.bs.modal\", function (e) {\r\n                $(\"body\").removeClass(opt.bodyClass);\r\n            });\r\n        }\r\n\r\n    }\r\n}(jQuery));\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// ./js/newTube/modals/modals.src.js","module.exports = { \"default\": require(\"core-js/library/fn/get-iterator\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/babel-runtime/core-js/get-iterator.js\n// module id = 117\n// module chunks = 0","module.exports = { \"default\": require(\"core-js/library/fn/json/stringify\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/babel-runtime/core-js/json/stringify.js\n// module id = 118\n// module chunks = 0","module.exports = { \"default\": require(\"core-js/library/fn/object/define-property\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/babel-runtime/core-js/object/define-property.js\n// module id = 119\n// module chunks = 0","module.exports = { \"default\": require(\"core-js/library/fn/symbol\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/babel-runtime/core-js/symbol.js\n// module id = 120\n// module chunks = 0","module.exports = { \"default\": require(\"core-js/library/fn/symbol/iterator\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/babel-runtime/core-js/symbol/iterator.js\n// module id = 121\n// module chunks = 0","\"use strict\";\n\nexports.__esModule = true;\n\nvar _from = require(\"../core-js/array/from\");\n\nvar _from2 = _interopRequireDefault(_from);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (arr) {\n  if (Array.isArray(arr)) {\n    for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {\n      arr2[i] = arr[i];\n    }\n\n    return arr2;\n  } else {\n    return (0, _from2.default)(arr);\n  }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/babel-runtime/helpers/toConsumableArray.js\n// module id = 122\n// module chunks = 0","\"use strict\";\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar format_cookie_1 = require(\"./format-cookie\");\nvar parse_cookies_1 = require(\"./parse-cookies\");\n\nvar CookieStorage = function () {\n    function CookieStorage(defaultOptions) {\n        _classCallCheck(this, CookieStorage);\n\n        this._defaultOptions = Object.assign({\n            path: null,\n            domain: null,\n            expires: null,\n            secure: false\n        }, defaultOptions);\n        if (typeof Proxy !== 'undefined') {\n            return new Proxy(this, CookieStorageHandler);\n        }\n    }\n\n    _createClass(CookieStorage, [{\n        key: \"clear\",\n        value: function clear() {\n            var _this = this;\n\n            var parsed = parse_cookies_1.parseCookies(this._getCookie());\n            var keys = Object.keys(parsed);\n            keys.forEach(function (key) {\n                return _this.removeItem(key);\n            });\n        }\n    }, {\n        key: \"getItem\",\n        value: function getItem(key) {\n            var parsed = parse_cookies_1.parseCookies(this._getCookie());\n            return parsed.hasOwnProperty(key) ? parsed[key] : null;\n        }\n    }, {\n        key: \"key\",\n        value: function key(index) {\n            var parsed = parse_cookies_1.parseCookies(this._getCookie());\n            var sortedKeys = Object.keys(parsed).sort();\n            return index < sortedKeys.length ? sortedKeys[index] : null;\n        }\n    }, {\n        key: \"removeItem\",\n        value: function removeItem(key, cookieOptions) {\n            var data = '';\n            var options = Object.assign({}, this._defaultOptions, cookieOptions, {\n                expires: new Date(0)\n            });\n            var formatted = format_cookie_1.formatCookie(key, data, options);\n            this._setCookie(formatted);\n        }\n    }, {\n        key: \"setItem\",\n        value: function setItem(key, data, options) {\n            var opts = Object.assign({}, this._defaultOptions, options);\n            var formatted = format_cookie_1.formatCookie(key, data, opts);\n            this._setCookie(formatted);\n        }\n    }, {\n        key: \"_getCookie\",\n        value: function _getCookie() {\n            return typeof document === 'undefined' ? '' : typeof document.cookie === 'undefined' ? '' : document.cookie;\n        }\n    }, {\n        key: \"_setCookie\",\n        value: function _setCookie(value) {\n            document.cookie = value;\n        }\n    }, {\n        key: \"length\",\n        get: function get() {\n            var parsed = parse_cookies_1.parseCookies(this._getCookie());\n            var keys = Object.keys(parsed);\n            return keys.length;\n        }\n    }]);\n\n    return CookieStorage;\n}();\n\nexports.CookieStorage = CookieStorage;\nvar CookieStorageHandler = {\n    get: function get(target, p) {\n        if (p in target) {\n            return target[p];\n        } else {\n            var result = target.getItem(p.toString());\n            return result ? result : undefined;\n        }\n    },\n    set: function set(target, p, value) {\n        target.setItem(p.toString(), value);\n        return true;\n    },\n    has: function has(target, p) {\n        if (p in target) {\n            return true;\n        } else {\n            return target.getItem(p.toString()) ? true : false;\n        }\n    },\n    deleteProperty: function deleteProperty(target, p) {\n        target.removeItem(p.toString());\n        return true;\n    },\n    defineProperty: function defineProperty(target, p, attributes) {\n        var isExtensible = Object.isExtensible(target);\n        var alreadyExists = target.getItem(p.toString());\n        if (!isExtensible && !alreadyExists) {\n            throw new TypeError(\"Can't add property \" + p.toString() + \", object is not extensible\");\n        } else {\n            target.setItem(p.toString(), attributes.value);\n            return true;\n        }\n    },\n    ownKeys: function ownKeys(target) {\n        var keys = [];\n        for (var i = 0; i < target.length; i++) {\n            if (target.key(i) == null) {\n                continue;\n            } else {\n                keys.push(target.key(i));\n            }\n        }\n        return keys;\n    },\n    getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, p) {\n        if (p in target) {\n            return undefined;\n        } else {\n            return {\n                value: target.getItem(p.toString()),\n                writable: true,\n                enumerable: true,\n                configurable: true\n            };\n        }\n    }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/cookie-storage/lib/cookie-storage.js\n// module id = 123\n// module chunks = 0","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar cookie_storage_1 = require(\"./cookie-storage\");\nexports.CookieStorage = cookie_storage_1.CookieStorage;\nvar format_cookie_1 = require(\"./format-cookie\");\nexports.formatCookie = format_cookie_1.formatCookie;\nvar parse_cookies_1 = require(\"./parse-cookies\");\nexports.parseCookies = parse_cookies_1.parseCookies;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/cookie-storage/lib/index.js\n// module id = 124\n// module chunks = 0","require('../../modules/es6.string.iterator');\nrequire('../../modules/es6.array.from');\nmodule.exports = require('../../modules/_core').Array.from;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/fn/array/from.js\n// module id = 125\n// module chunks = 0","require('../modules/web.dom.iterable');\nrequire('../modules/es6.string.iterator');\nmodule.exports = require('../modules/core.get-iterator');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/fn/get-iterator.js\n// module id = 126\n// module chunks = 0","var core = require('../../modules/_core');\nvar $JSON = core.JSON || (core.JSON = { stringify: JSON.stringify });\nmodule.exports = function stringify(it) { // eslint-disable-line no-unused-vars\n  return $JSON.stringify.apply($JSON, arguments);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/fn/json/stringify.js\n// module id = 127\n// module chunks = 0","require('../../modules/es6.number.is-nan');\nmodule.exports = require('../../modules/_core').Number.isNaN;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/fn/number/is-nan.js\n// module id = 128\n// module chunks = 0","require('../../modules/es6.object.assign');\nmodule.exports = require('../../modules/_core').Object.assign;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/fn/object/assign.js\n// module id = 129\n// module chunks = 0","require('../../modules/es6.object.define-property');\nvar $Object = require('../../modules/_core').Object;\nmodule.exports = function defineProperty(it, key, desc) {\n  return $Object.defineProperty(it, key, desc);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/fn/object/define-property.js\n// module id = 130\n// module chunks = 0","require('../../modules/es6.object.keys');\nmodule.exports = require('../../modules/_core').Object.keys;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/fn/object/keys.js\n// module id = 131\n// module chunks = 0","require('../modules/es6.object.to-string');\nrequire('../modules/es6.string.iterator');\nrequire('../modules/web.dom.iterable');\nrequire('../modules/es6.promise');\nrequire('../modules/es7.promise.finally');\nrequire('../modules/es7.promise.try');\nmodule.exports = require('../modules/_core').Promise;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/fn/promise.js\n// module id = 132\n// module chunks = 0","require('../../modules/es6.symbol');\nrequire('../../modules/es6.object.to-string');\nrequire('../../modules/es7.symbol.async-iterator');\nrequire('../../modules/es7.symbol.observable');\nmodule.exports = require('../../modules/_core').Symbol;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/fn/symbol/index.js\n// module id = 133\n// module chunks = 0","require('../../modules/es6.string.iterator');\nrequire('../../modules/web.dom.iterable');\nmodule.exports = require('../../modules/_wks-ext').f('iterator');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/fn/symbol/iterator.js\n// module id = 134\n// module chunks = 0","module.exports = function () { /* empty */ };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_add-to-unscopables.js\n// module id = 135\n// module chunks = 0","module.exports = function (it, Constructor, name, forbiddenField) {\n  if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n    throw TypeError(name + ': incorrect invocation!');\n  } return it;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_an-instance.js\n// module id = 136\n// module chunks = 0","// false -> Array#indexOf\n// true  -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n  return function ($this, el, fromIndex) {\n    var O = toIObject($this);\n    var length = toLength(O.length);\n    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare\n    if (IS_INCLUDES && el != el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare\n      if (value != value) return true;\n    // Array#indexOf ignores holes, Array#includes - not\n    } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n      if (O[index] === el) return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_array-includes.js\n// module id = 137\n// module chunks = 0","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n  if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n  else object[index] = value;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_create-property.js\n// module id = 138\n// module chunks = 0","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n  var result = getKeys(it);\n  var getSymbols = gOPS.f;\n  if (getSymbols) {\n    var symbols = getSymbols(it);\n    var isEnum = pIE.f;\n    var i = 0;\n    var key;\n    while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n  } return result;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_enum-keys.js\n// module id = 139\n// module chunks = 0","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n  var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n  var f = ctx(fn, that, entries ? 2 : 1);\n  var index = 0;\n  var length, step, iterator, result;\n  if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n  // fast case for arrays with default iterator\n  if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n    result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n    if (result === BREAK || result === RETURN) return result;\n  } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n    result = call(iterator, f, step.value, entries);\n    if (result === BREAK || result === RETURN) return result;\n  }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_for-of.js\n// module id = 140\n// module chunks = 0","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n  var un = that === undefined;\n  switch (args.length) {\n    case 0: return un ? fn()\n                      : fn.call(that);\n    case 1: return un ? fn(args[0])\n                      : fn.call(that, args[0]);\n    case 2: return un ? fn(args[0], args[1])\n                      : fn.call(that, args[0], args[1]);\n    case 3: return un ? fn(args[0], args[1], args[2])\n                      : fn.call(that, args[0], args[1], args[2]);\n    case 4: return un ? fn(args[0], args[1], args[2], args[3])\n                      : fn.call(that, args[0], args[1], args[2], args[3]);\n  } return fn.apply(that, args);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_invoke.js\n// module id = 141\n// module chunks = 0","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n  return cof(arg) == 'Array';\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_is-array.js\n// module id = 142\n// module chunks = 0","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n  Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n  setToStringTag(Constructor, NAME + ' Iterator');\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_iter-create.js\n// module id = 143\n// module chunks = 0","module.exports = function (done, value) {\n  return { value: value, done: !!done };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_iter-step.js\n// module id = 144\n// module chunks = 0","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n  return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n  return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n  setDesc(it, META, { value: {\n    i: 'O' + ++id, // object ID\n    w: {}          // weak collections IDs\n  } });\n};\nvar fastKey = function (it, create) {\n  // return primitive with prefix\n  if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n  if (!has(it, META)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return 'F';\n    // not necessary to add metadata\n    if (!create) return 'E';\n    // add missing metadata\n    setMeta(it);\n  // return object ID\n  } return it[META].i;\n};\nvar getWeak = function (it, create) {\n  if (!has(it, META)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return true;\n    // not necessary to add metadata\n    if (!create) return false;\n    // add missing metadata\n    setMeta(it);\n  // return hash weak collections IDs\n  } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n  if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n  return it;\n};\nvar meta = module.exports = {\n  KEY: META,\n  NEED: false,\n  fastKey: fastKey,\n  getWeak: getWeak,\n  onFreeze: onFreeze\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_meta.js\n// module id = 145\n// module chunks = 0","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n  var head, last, notify;\n\n  var flush = function () {\n    var parent, fn;\n    if (isNode && (parent = process.domain)) parent.exit();\n    while (head) {\n      fn = head.fn;\n      head = head.next;\n      try {\n        fn();\n      } catch (e) {\n        if (head) notify();\n        else last = undefined;\n        throw e;\n      }\n    } last = undefined;\n    if (parent) parent.enter();\n  };\n\n  // Node.js\n  if (isNode) {\n    notify = function () {\n      process.nextTick(flush);\n    };\n  // browsers with MutationObserver\n  } else if (Observer) {\n    var toggle = true;\n    var node = document.createTextNode('');\n    new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n    notify = function () {\n      node.data = toggle = !toggle;\n    };\n  // environments with maybe non-completely correct, but existent Promise\n  } else if (Promise && Promise.resolve) {\n    var promise = Promise.resolve();\n    notify = function () {\n      promise.then(flush);\n    };\n  // for other environments - macrotask based on:\n  // - setImmediate\n  // - MessageChannel\n  // - window.postMessag\n  // - onreadystatechange\n  // - setTimeout\n  } else {\n    notify = function () {\n      // strange IE + webpack dev server bug - use .call(global)\n      macrotask.call(global, flush);\n    };\n  }\n\n  return function (fn) {\n    var task = { fn: fn, next: undefined };\n    if (last) last.next = task;\n    if (!head) {\n      head = task;\n      notify();\n    } last = task;\n  };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_microtask.js\n// module id = 146\n// module chunks = 0","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n  var A = {};\n  var B = {};\n  // eslint-disable-next-line no-undef\n  var S = Symbol();\n  var K = 'abcdefghijklmnopqrst';\n  A[S] = 7;\n  K.split('').forEach(function (k) { B[k] = k; });\n  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n  var T = toObject(target);\n  var aLen = arguments.length;\n  var index = 1;\n  var getSymbols = gOPS.f;\n  var isEnum = pIE.f;\n  while (aLen > index) {\n    var S = IObject(arguments[index++]);\n    var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n    var length = keys.length;\n    var j = 0;\n    var key;\n    while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n  } return T;\n} : $assign;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_object-assign.js\n// module id = 147\n// module chunks = 0","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n  anObject(O);\n  var keys = getKeys(Properties);\n  var length = keys.length;\n  var i = 0;\n  var P;\n  while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n  return O;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_object-dps.js\n// module id = 148\n// module chunks = 0","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n  O = toIObject(O);\n  P = toPrimitive(P, true);\n  if (IE8_DOM_DEFINE) try {\n    return gOPD(O, P);\n  } catch (e) { /* empty */ }\n  if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_object-gopd.js\n// module id = 149\n// module chunks = 0","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n  ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n  try {\n    return gOPN(it);\n  } catch (e) {\n    return windowNames.slice();\n  }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n  return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_object-gopn-ext.js\n// module id = 150\n// module chunks = 0","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n  O = toObject(O);\n  if (has(O, IE_PROTO)) return O[IE_PROTO];\n  if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n    return O.constructor.prototype;\n  } return O instanceof Object ? ObjectProto : null;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_object-gpo.js\n// module id = 151\n// module chunks = 0","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n  var fn = (core.Object || {})[KEY] || Object[KEY];\n  var exp = {};\n  exp[KEY] = exec(fn);\n  $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_object-sap.js\n// module id = 152\n// module chunks = 0","var hide = require('./_hide');\nmodule.exports = function (target, src, safe) {\n  for (var key in src) {\n    if (safe && target[key]) target[key] = src[key];\n    else hide(target, key, src[key]);\n  } return target;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_redefine-all.js\n// module id = 153\n// module chunks = 0","'use strict';\nvar global = require('./_global');\nvar core = require('./_core');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n  var C = typeof core[KEY] == 'function' ? core[KEY] : global[KEY];\n  if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n    configurable: true,\n    get: function () { return this; }\n  });\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_set-species.js\n// module id = 154\n// module chunks = 0","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true  -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n  return function (that, pos) {\n    var s = String(defined(that));\n    var i = toInteger(pos);\n    var l = s.length;\n    var a, b;\n    if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n    a = s.charCodeAt(i);\n    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n      ? TO_STRING ? s.charAt(i) : a\n      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n  };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_string-at.js\n// module id = 155\n// module chunks = 0","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n  index = toInteger(index);\n  return index < 0 ? max(index + length, 0) : min(index, length);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/_to-absolute-index.js\n// module id = 156\n// module chunks = 0","var anObject = require('./_an-object');\nvar get = require('./core.get-iterator-method');\nmodule.exports = require('./_core').getIterator = function (it) {\n  var iterFn = get(it);\n  if (typeof iterFn != 'function') throw TypeError(it + ' is not iterable!');\n  return anObject(iterFn.call(it));\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/core.get-iterator.js\n// module id = 157\n// module chunks = 0","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n  // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n  from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n    var O = toObject(arrayLike);\n    var C = typeof this == 'function' ? this : Array;\n    var aLen = arguments.length;\n    var mapfn = aLen > 1 ? arguments[1] : undefined;\n    var mapping = mapfn !== undefined;\n    var index = 0;\n    var iterFn = getIterFn(O);\n    var length, result, step, iterator;\n    if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n    // if object isn't iterable or it's array with default iterator - use simple case\n    if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n      for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n        createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n      }\n    } else {\n      length = toLength(O.length);\n      for (result = new C(length); length > index; index++) {\n        createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n      }\n    }\n    result.length = index;\n    return result;\n  }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/es6.array.from.js\n// module id = 158\n// module chunks = 0","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n  this._t = toIObject(iterated); // target\n  this._i = 0;                   // next index\n  this._k = kind;                // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n  var O = this._t;\n  var kind = this._k;\n  var index = this._i++;\n  if (!O || index >= O.length) {\n    this._t = undefined;\n    return step(1);\n  }\n  if (kind == 'keys') return step(0, index);\n  if (kind == 'values') return step(0, O[index]);\n  return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/es6.array.iterator.js\n// module id = 159\n// module chunks = 0","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n  isNaN: function isNaN(number) {\n    // eslint-disable-next-line no-self-compare\n    return number != number;\n  }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/es6.number.is-nan.js\n// module id = 160\n// module chunks = 0","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/es6.object.assign.js\n// module id = 161\n// module chunks = 0","var $export = require('./_export');\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperty: require('./_object-dp').f });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/es6.object.define-property.js\n// module id = 162\n// module chunks = 0","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n  return function keys(it) {\n    return $keys(toObject(it));\n  };\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/es6.object.keys.js\n// module id = 163\n// module chunks = 0","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n  try {\n    // correct subclassing with @@species support\n    var promise = $Promise.resolve(1);\n    var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n      exec(empty, empty);\n    };\n    // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n    return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;\n  } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n  var then;\n  return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n  if (promise._n) return;\n  promise._n = true;\n  var chain = promise._c;\n  microtask(function () {\n    var value = promise._v;\n    var ok = promise._s == 1;\n    var i = 0;\n    var run = function (reaction) {\n      var handler = ok ? reaction.ok : reaction.fail;\n      var resolve = reaction.resolve;\n      var reject = reaction.reject;\n      var domain = reaction.domain;\n      var result, then;\n      try {\n        if (handler) {\n          if (!ok) {\n            if (promise._h == 2) onHandleUnhandled(promise);\n            promise._h = 1;\n          }\n          if (handler === true) result = value;\n          else {\n            if (domain) domain.enter();\n            result = handler(value);\n            if (domain) domain.exit();\n          }\n          if (result === reaction.promise) {\n            reject(TypeError('Promise-chain cycle'));\n          } else if (then = isThenable(result)) {\n            then.call(result, resolve, reject);\n          } else resolve(result);\n        } else reject(value);\n      } catch (e) {\n        reject(e);\n      }\n    };\n    while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n    promise._c = [];\n    promise._n = false;\n    if (isReject && !promise._h) onUnhandled(promise);\n  });\n};\nvar onUnhandled = function (promise) {\n  task.call(global, function () {\n    var value = promise._v;\n    var unhandled = isUnhandled(promise);\n    var result, handler, console;\n    if (unhandled) {\n      result = perform(function () {\n        if (isNode) {\n          process.emit('unhandledRejection', value, promise);\n        } else if (handler = global.onunhandledrejection) {\n          handler({ promise: promise, reason: value });\n        } else if ((console = global.console) && console.error) {\n          console.error('Unhandled promise rejection', value);\n        }\n      });\n      // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n      promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n    } promise._a = undefined;\n    if (unhandled && result.e) throw result.v;\n  });\n};\nvar isUnhandled = function (promise) {\n  if (promise._h == 1) return false;\n  var chain = promise._a || promise._c;\n  var i = 0;\n  var reaction;\n  while (chain.length > i) {\n    reaction = chain[i++];\n    if (reaction.fail || !isUnhandled(reaction.promise)) return false;\n  } return true;\n};\nvar onHandleUnhandled = function (promise) {\n  task.call(global, function () {\n    var handler;\n    if (isNode) {\n      process.emit('rejectionHandled', promise);\n    } else if (handler = global.onrejectionhandled) {\n      handler({ promise: promise, reason: promise._v });\n    }\n  });\n};\nvar $reject = function (value) {\n  var promise = this;\n  if (promise._d) return;\n  promise._d = true;\n  promise = promise._w || promise; // unwrap\n  promise._v = value;\n  promise._s = 2;\n  if (!promise._a) promise._a = promise._c.slice();\n  notify(promise, true);\n};\nvar $resolve = function (value) {\n  var promise = this;\n  var then;\n  if (promise._d) return;\n  promise._d = true;\n  promise = promise._w || promise; // unwrap\n  try {\n    if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n    if (then = isThenable(value)) {\n      microtask(function () {\n        var wrapper = { _w: promise, _d: false }; // wrap\n        try {\n          then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n        } catch (e) {\n          $reject.call(wrapper, e);\n        }\n      });\n    } else {\n      promise._v = value;\n      promise._s = 1;\n      notify(promise, false);\n    }\n  } catch (e) {\n    $reject.call({ _w: promise, _d: false }, e); // wrap\n  }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n  // 25.4.3.1 Promise(executor)\n  $Promise = function Promise(executor) {\n    anInstance(this, $Promise, PROMISE, '_h');\n    aFunction(executor);\n    Internal.call(this);\n    try {\n      executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n    } catch (err) {\n      $reject.call(this, err);\n    }\n  };\n  // eslint-disable-next-line no-unused-vars\n  Internal = function Promise(executor) {\n    this._c = [];             // <- awaiting reactions\n    this._a = undefined;      // <- checked in isUnhandled reactions\n    this._s = 0;              // <- state\n    this._d = false;          // <- done\n    this._v = undefined;      // <- value\n    this._h = 0;              // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n    this._n = false;          // <- notify\n  };\n  Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n    // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n    then: function then(onFulfilled, onRejected) {\n      var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n      reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n      reaction.fail = typeof onRejected == 'function' && onRejected;\n      reaction.domain = isNode ? process.domain : undefined;\n      this._c.push(reaction);\n      if (this._a) this._a.push(reaction);\n      if (this._s) notify(this, false);\n      return reaction.promise;\n    },\n    // 25.4.5.1 Promise.prototype.catch(onRejected)\n    'catch': function (onRejected) {\n      return this.then(undefined, onRejected);\n    }\n  });\n  OwnPromiseCapability = function () {\n    var promise = new Internal();\n    this.promise = promise;\n    this.resolve = ctx($resolve, promise, 1);\n    this.reject = ctx($reject, promise, 1);\n  };\n  newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n    return C === $Promise || C === Wrapper\n      ? new OwnPromiseCapability(C)\n      : newGenericPromiseCapability(C);\n  };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n  // 25.4.4.5 Promise.reject(r)\n  reject: function reject(r) {\n    var capability = newPromiseCapability(this);\n    var $$reject = capability.reject;\n    $$reject(r);\n    return capability.promise;\n  }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n  // 25.4.4.6 Promise.resolve(x)\n  resolve: function resolve(x) {\n    return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n  }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n  $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n  // 25.4.4.1 Promise.all(iterable)\n  all: function all(iterable) {\n    var C = this;\n    var capability = newPromiseCapability(C);\n    var resolve = capability.resolve;\n    var reject = capability.reject;\n    var result = perform(function () {\n      var values = [];\n      var index = 0;\n      var remaining = 1;\n      forOf(iterable, false, function (promise) {\n        var $index = index++;\n        var alreadyCalled = false;\n        values.push(undefined);\n        remaining++;\n        C.resolve(promise).then(function (value) {\n          if (alreadyCalled) return;\n          alreadyCalled = true;\n          values[$index] = value;\n          --remaining || resolve(values);\n        }, reject);\n      });\n      --remaining || resolve(values);\n    });\n    if (result.e) reject(result.v);\n    return capability.promise;\n  },\n  // 25.4.4.4 Promise.race(iterable)\n  race: function race(iterable) {\n    var C = this;\n    var capability = newPromiseCapability(C);\n    var reject = capability.reject;\n    var result = perform(function () {\n      forOf(iterable, false, function (promise) {\n        C.resolve(promise).then(capability.resolve, reject);\n      });\n    });\n    if (result.e) reject(result.v);\n    return capability.promise;\n  }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/es6.promise.js\n// module id = 164\n// module chunks = 0","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n  return _create(dP({}, 'a', {\n    get: function () { return dP(this, 'a', { value: 7 }).a; }\n  })).a != 7;\n}) ? function (it, key, D) {\n  var protoDesc = gOPD(ObjectProto, key);\n  if (protoDesc) delete ObjectProto[key];\n  dP(it, key, D);\n  if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n  var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n  sym._k = tag;\n  return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n  return typeof it == 'symbol';\n} : function (it) {\n  return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n  if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n  anObject(it);\n  key = toPrimitive(key, true);\n  anObject(D);\n  if (has(AllSymbols, key)) {\n    if (!D.enumerable) {\n      if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n      it[HIDDEN][key] = true;\n    } else {\n      if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n      D = _create(D, { enumerable: createDesc(0, false) });\n    } return setSymbolDesc(it, key, D);\n  } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n  anObject(it);\n  var keys = enumKeys(P = toIObject(P));\n  var i = 0;\n  var l = keys.length;\n  var key;\n  while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n  return it;\n};\nvar $create = function create(it, P) {\n  return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n  var E = isEnum.call(this, key = toPrimitive(key, true));\n  if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n  return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n  it = toIObject(it);\n  key = toPrimitive(key, true);\n  if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n  var D = gOPD(it, key);\n  if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n  return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n  var names = gOPN(toIObject(it));\n  var result = [];\n  var i = 0;\n  var key;\n  while (names.length > i) {\n    if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n  } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n  var IS_OP = it === ObjectProto;\n  var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n  var result = [];\n  var i = 0;\n  var key;\n  while (names.length > i) {\n    if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n  } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n  $Symbol = function Symbol() {\n    if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n    var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n    var $set = function (value) {\n      if (this === ObjectProto) $set.call(OPSymbols, value);\n      if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n      setSymbolDesc(this, tag, createDesc(1, value));\n    };\n    if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n    return wrap(tag);\n  };\n  redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n    return this._k;\n  });\n\n  $GOPD.f = $getOwnPropertyDescriptor;\n  $DP.f = $defineProperty;\n  require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n  require('./_object-pie').f = $propertyIsEnumerable;\n  require('./_object-gops').f = $getOwnPropertySymbols;\n\n  if (DESCRIPTORS && !require('./_library')) {\n    redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n  }\n\n  wksExt.f = function (name) {\n    return wrap(wks(name));\n  };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n  // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n  'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n  // 19.4.2.1 Symbol.for(key)\n  'for': function (key) {\n    return has(SymbolRegistry, key += '')\n      ? SymbolRegistry[key]\n      : SymbolRegistry[key] = $Symbol(key);\n  },\n  // 19.4.2.5 Symbol.keyFor(sym)\n  keyFor: function keyFor(sym) {\n    if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n    for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n  },\n  useSetter: function () { setter = true; },\n  useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n  // 19.1.2.2 Object.create(O [, Properties])\n  create: $create,\n  // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n  defineProperty: $defineProperty,\n  // 19.1.2.3 Object.defineProperties(O, Properties)\n  defineProperties: $defineProperties,\n  // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n  getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n  // 19.1.2.7 Object.getOwnPropertyNames(O)\n  getOwnPropertyNames: $getOwnPropertyNames,\n  // 19.1.2.8 Object.getOwnPropertySymbols(O)\n  getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n  var S = $Symbol();\n  // MS Edge converts symbol values to JSON as {}\n  // WebKit converts symbol values to JSON as null\n  // V8 throws on boxed symbols\n  return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n  stringify: function stringify(it) {\n    if (it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n    var args = [it];\n    var i = 1;\n    var replacer, $replacer;\n    while (arguments.length > i) args.push(arguments[i++]);\n    replacer = args[1];\n    if (typeof replacer == 'function') $replacer = replacer;\n    if ($replacer || !isArray(replacer)) replacer = function (key, value) {\n      if ($replacer) value = $replacer.call(this, key, value);\n      if (!isSymbol(value)) return value;\n    };\n    args[1] = replacer;\n    return _stringify.apply($JSON, args);\n  }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/es6.symbol.js\n// module id = 165\n// module chunks = 0","// https://github.com/tc39/proposal-promise-finally\n'use strict';\nvar $export = require('./_export');\nvar core = require('./_core');\nvar global = require('./_global');\nvar speciesConstructor = require('./_species-constructor');\nvar promiseResolve = require('./_promise-resolve');\n\n$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {\n  var C = speciesConstructor(this, core.Promise || global.Promise);\n  var isFunction = typeof onFinally == 'function';\n  return this.then(\n    isFunction ? function (x) {\n      return promiseResolve(C, onFinally()).then(function () { return x; });\n    } : onFinally,\n    isFunction ? function (e) {\n      return promiseResolve(C, onFinally()).then(function () { throw e; });\n    } : onFinally\n  );\n} });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/es7.promise.finally.js\n// module id = 166\n// module chunks = 0","'use strict';\n// https://github.com/tc39/proposal-promise-try\nvar $export = require('./_export');\nvar newPromiseCapability = require('./_new-promise-capability');\nvar perform = require('./_perform');\n\n$export($export.S, 'Promise', { 'try': function (callbackfn) {\n  var promiseCapability = newPromiseCapability.f(this);\n  var result = perform(callbackfn);\n  (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v);\n  return promiseCapability.promise;\n} });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/es7.promise.try.js\n// module id = 167\n// module chunks = 0","require('./_wks-define')('asyncIterator');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/es7.symbol.async-iterator.js\n// module id = 168\n// module chunks = 0","require('./_wks-define')('observable');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/core-js/library/modules/es7.symbol.observable.js\n// module id = 169\n// module chunks = 0","// This method of obtaining a reference to the global object needs to be\n// kept identical to the way it is obtained in runtime.js\nvar g = (function() { return this })() || Function(\"return this\")();\n\n// Use `getOwnPropertyNames` because not all browsers support calling\n// `hasOwnProperty` on the global `self` object in a worker. See #183.\nvar hadRuntime = g.regeneratorRuntime &&\n  Object.getOwnPropertyNames(g).indexOf(\"regeneratorRuntime\") >= 0;\n\n// Save the old regeneratorRuntime in case it needs to be restored later.\nvar oldRuntime = hadRuntime && g.regeneratorRuntime;\n\n// Force reevalutation of runtime.js.\ng.regeneratorRuntime = undefined;\n\nmodule.exports = require(\"./runtime\");\n\nif (hadRuntime) {\n  // Restore the original runtime.\n  g.regeneratorRuntime = oldRuntime;\n} else {\n  // Remove the global property added by runtime.js.\n  try {\n    delete g.regeneratorRuntime;\n  } catch(e) {\n    g.regeneratorRuntime = undefined;\n  }\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/regenerator-runtime/runtime-module.js\n// module id = 170\n// module chunks = 0","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n  \"use strict\";\n\n  var Op = Object.prototype;\n  var hasOwn = Op.hasOwnProperty;\n  var undefined; // More compressible than void 0.\n  var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n  var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n  var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n  var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n  var inModule = typeof module === \"object\";\n  var runtime = global.regeneratorRuntime;\n  if (runtime) {\n    if (inModule) {\n      // If regeneratorRuntime is defined globally and we're in a module,\n      // make the exports object identical to regeneratorRuntime.\n      module.exports = runtime;\n    }\n    // Don't bother evaluating the rest of this file if the runtime was\n    // already defined globally.\n    return;\n  }\n\n  // Define the runtime globally (as expected by generated code) as either\n  // module.exports (if we're in a module) or a new, empty object.\n  runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n  function wrap(innerFn, outerFn, self, tryLocsList) {\n    // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n    var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n    var generator = Object.create(protoGenerator.prototype);\n    var context = new Context(tryLocsList || []);\n\n    // The ._invoke method unifies the implementations of the .next,\n    // .throw, and .return methods.\n    generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n    return generator;\n  }\n  runtime.wrap = wrap;\n\n  // Try/catch helper to minimize deoptimizations. Returns a completion\n  // record like context.tryEntries[i].completion. This interface could\n  // have been (and was previously) designed to take a closure to be\n  // invoked without arguments, but in all the cases we care about we\n  // already have an existing method we want to call, so there's no need\n  // to create a new function object. We can even get away with assuming\n  // the method takes exactly one argument, since that happens to be true\n  // in every case, so we don't have to touch the arguments object. The\n  // only additional allocation required is the completion record, which\n  // has a stable shape and so hopefully should be cheap to allocate.\n  function tryCatch(fn, obj, arg) {\n    try {\n      return { type: \"normal\", arg: fn.call(obj, arg) };\n    } catch (err) {\n      return { type: \"throw\", arg: err };\n    }\n  }\n\n  var GenStateSuspendedStart = \"suspendedStart\";\n  var GenStateSuspendedYield = \"suspendedYield\";\n  var GenStateExecuting = \"executing\";\n  var GenStateCompleted = \"completed\";\n\n  // Returning this object from the innerFn has the same effect as\n  // breaking out of the dispatch switch statement.\n  var ContinueSentinel = {};\n\n  // Dummy constructor functions that we use as the .constructor and\n  // .constructor.prototype properties for functions that return Generator\n  // objects. For full spec compliance, you may wish to configure your\n  // minifier not to mangle the names of these two functions.\n  function Generator() {}\n  function GeneratorFunction() {}\n  function GeneratorFunctionPrototype() {}\n\n  // This is a polyfill for %IteratorPrototype% for environments that\n  // don't natively support it.\n  var IteratorPrototype = {};\n  IteratorPrototype[iteratorSymbol] = function () {\n    return this;\n  };\n\n  var getProto = Object.getPrototypeOf;\n  var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n  if (NativeIteratorPrototype &&\n      NativeIteratorPrototype !== Op &&\n      hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n    // This environment has a native %IteratorPrototype%; use it instead\n    // of the polyfill.\n    IteratorPrototype = NativeIteratorPrototype;\n  }\n\n  var Gp = GeneratorFunctionPrototype.prototype =\n    Generator.prototype = Object.create(IteratorPrototype);\n  GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n  GeneratorFunctionPrototype.constructor = GeneratorFunction;\n  GeneratorFunctionPrototype[toStringTagSymbol] =\n    GeneratorFunction.displayName = \"GeneratorFunction\";\n\n  // Helper for defining the .next, .throw, and .return methods of the\n  // Iterator interface in terms of a single ._invoke method.\n  function defineIteratorMethods(prototype) {\n    [\"next\", \"throw\", \"return\"].forEach(function(method) {\n      prototype[method] = function(arg) {\n        return this._invoke(method, arg);\n      };\n    });\n  }\n\n  runtime.isGeneratorFunction = function(genFun) {\n    var ctor = typeof genFun === \"function\" && genFun.constructor;\n    return ctor\n      ? ctor === GeneratorFunction ||\n        // For the native GeneratorFunction constructor, the best we can\n        // do is to check its .name property.\n        (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n      : false;\n  };\n\n  runtime.mark = function(genFun) {\n    if (Object.setPrototypeOf) {\n      Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n    } else {\n      genFun.__proto__ = GeneratorFunctionPrototype;\n      if (!(toStringTagSymbol in genFun)) {\n        genFun[toStringTagSymbol] = \"GeneratorFunction\";\n      }\n    }\n    genFun.prototype = Object.create(Gp);\n    return genFun;\n  };\n\n  // Within the body of any async function, `await x` is transformed to\n  // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n  // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n  // meant to be awaited.\n  runtime.awrap = function(arg) {\n    return { __await: arg };\n  };\n\n  function AsyncIterator(generator) {\n    function invoke(method, arg, resolve, reject) {\n      var record = tryCatch(generator[method], generator, arg);\n      if (record.type === \"throw\") {\n        reject(record.arg);\n      } else {\n        var result = record.arg;\n        var value = result.value;\n        if (value &&\n            typeof value === \"object\" &&\n            hasOwn.call(value, \"__await\")) {\n          return Promise.resolve(value.__await).then(function(value) {\n            invoke(\"next\", value, resolve, reject);\n          }, function(err) {\n            invoke(\"throw\", err, resolve, reject);\n          });\n        }\n\n        return Promise.resolve(value).then(function(unwrapped) {\n          // When a yielded Promise is resolved, its final value becomes\n          // the .value of the Promise<{value,done}> result for the\n          // current iteration. If the Promise is rejected, however, the\n          // result for this iteration will be rejected with the same\n          // reason. Note that rejections of yielded Promises are not\n          // thrown back into the generator function, as is the case\n          // when an awaited Promise is rejected. This difference in\n          // behavior between yield and await is important, because it\n          // allows the consumer to decide what to do with the yielded\n          // rejection (swallow it and continue, manually .throw it back\n          // into the generator, abandon iteration, whatever). With\n          // await, by contrast, there is no opportunity to examine the\n          // rejection reason outside the generator function, so the\n          // only option is to throw it from the await expression, and\n          // let the generator function handle the exception.\n          result.value = unwrapped;\n          resolve(result);\n        }, reject);\n      }\n    }\n\n    var previousPromise;\n\n    function enqueue(method, arg) {\n      function callInvokeWithMethodAndArg() {\n        return new Promise(function(resolve, reject) {\n          invoke(method, arg, resolve, reject);\n        });\n      }\n\n      return previousPromise =\n        // If enqueue has been called before, then we want to wait until\n        // all previous Promises have been resolved before calling invoke,\n        // so that results are always delivered in the correct order. If\n        // enqueue has not been called before, then it is important to\n        // call invoke immediately, without waiting on a callback to fire,\n        // so that the async generator function has the opportunity to do\n        // any necessary setup in a predictable way. This predictability\n        // is why the Promise constructor synchronously invokes its\n        // executor callback, and why async functions synchronously\n        // execute code before the first await. Since we implement simple\n        // async functions in terms of async generators, it is especially\n        // important to get this right, even though it requires care.\n        previousPromise ? previousPromise.then(\n          callInvokeWithMethodAndArg,\n          // Avoid propagating failures to Promises returned by later\n          // invocations of the iterator.\n          callInvokeWithMethodAndArg\n        ) : callInvokeWithMethodAndArg();\n    }\n\n    // Define the unified helper method that is used to implement .next,\n    // .throw, and .return (see defineIteratorMethods).\n    this._invoke = enqueue;\n  }\n\n  defineIteratorMethods(AsyncIterator.prototype);\n  AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n    return this;\n  };\n  runtime.AsyncIterator = AsyncIterator;\n\n  // Note that simple async functions are implemented on top of\n  // AsyncIterator objects; they just return a Promise for the value of\n  // the final result produced by the iterator.\n  runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n    var iter = new AsyncIterator(\n      wrap(innerFn, outerFn, self, tryLocsList)\n    );\n\n    return runtime.isGeneratorFunction(outerFn)\n      ? iter // If outerFn is a generator, return the full iterator.\n      : iter.next().then(function(result) {\n          return result.done ? result.value : iter.next();\n        });\n  };\n\n  function makeInvokeMethod(innerFn, self, context) {\n    var state = GenStateSuspendedStart;\n\n    return function invoke(method, arg) {\n      if (state === GenStateExecuting) {\n        throw new Error(\"Generator is already running\");\n      }\n\n      if (state === GenStateCompleted) {\n        if (method === \"throw\") {\n          throw arg;\n        }\n\n        // Be forgiving, per 25.3.3.3.3 of the spec:\n        // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n        return doneResult();\n      }\n\n      context.method = method;\n      context.arg = arg;\n\n      while (true) {\n        var delegate = context.delegate;\n        if (delegate) {\n          var delegateResult = maybeInvokeDelegate(delegate, context);\n          if (delegateResult) {\n            if (delegateResult === ContinueSentinel) continue;\n            return delegateResult;\n          }\n        }\n\n        if (context.method === \"next\") {\n          // Setting context._sent for legacy support of Babel's\n          // function.sent implementation.\n          context.sent = context._sent = context.arg;\n\n        } else if (context.method === \"throw\") {\n          if (state === GenStateSuspendedStart) {\n            state = GenStateCompleted;\n            throw context.arg;\n          }\n\n          context.dispatchException(context.arg);\n\n        } else if (context.method === \"return\") {\n          context.abrupt(\"return\", context.arg);\n        }\n\n        state = GenStateExecuting;\n\n        var record = tryCatch(innerFn, self, context);\n        if (record.type === \"normal\") {\n          // If an exception is thrown from innerFn, we leave state ===\n          // GenStateExecuting and loop back for another invocation.\n          state = context.done\n            ? GenStateCompleted\n            : GenStateSuspendedYield;\n\n          if (record.arg === ContinueSentinel) {\n            continue;\n          }\n\n          return {\n            value: record.arg,\n            done: context.done\n          };\n\n        } else if (record.type === \"throw\") {\n          state = GenStateCompleted;\n          // Dispatch the exception by looping back around to the\n          // context.dispatchException(context.arg) call above.\n          context.method = \"throw\";\n          context.arg = record.arg;\n        }\n      }\n    };\n  }\n\n  // Call delegate.iterator[context.method](context.arg) and handle the\n  // result, either by returning a { value, done } result from the\n  // delegate iterator, or by modifying context.method and context.arg,\n  // setting context.delegate to null, and returning the ContinueSentinel.\n  function maybeInvokeDelegate(delegate, context) {\n    var method = delegate.iterator[context.method];\n    if (method === undefined) {\n      // A .throw or .return when the delegate iterator has no .throw\n      // method always terminates the yield* loop.\n      context.delegate = null;\n\n      if (context.method === \"throw\") {\n        if (delegate.iterator.return) {\n          // If the delegate iterator has a return method, give it a\n          // chance to clean up.\n          context.method = \"return\";\n          context.arg = undefined;\n          maybeInvokeDelegate(delegate, context);\n\n          if (context.method === \"throw\") {\n            // If maybeInvokeDelegate(context) changed context.method from\n            // \"return\" to \"throw\", let that override the TypeError below.\n            return ContinueSentinel;\n          }\n        }\n\n        context.method = \"throw\";\n        context.arg = new TypeError(\n          \"The iterator does not provide a 'throw' method\");\n      }\n\n      return ContinueSentinel;\n    }\n\n    var record = tryCatch(method, delegate.iterator, context.arg);\n\n    if (record.type === \"throw\") {\n      context.method = \"throw\";\n      context.arg = record.arg;\n      context.delegate = null;\n      return ContinueSentinel;\n    }\n\n    var info = record.arg;\n\n    if (! info) {\n      context.method = \"throw\";\n      context.arg = new TypeError(\"iterator result is not an object\");\n      context.delegate = null;\n      return ContinueSentinel;\n    }\n\n    if (info.done) {\n      // Assign the result of the finished delegate to the temporary\n      // variable specified by delegate.resultName (see delegateYield).\n      context[delegate.resultName] = info.value;\n\n      // Resume execution at the desired location (see delegateYield).\n      context.next = delegate.nextLoc;\n\n      // If context.method was \"throw\" but the delegate handled the\n      // exception, let the outer generator proceed normally. If\n      // context.method was \"next\", forget context.arg since it has been\n      // \"consumed\" by the delegate iterator. If context.method was\n      // \"return\", allow the original .return call to continue in the\n      // outer generator.\n      if (context.method !== \"return\") {\n        context.method = \"next\";\n        context.arg = undefined;\n      }\n\n    } else {\n      // Re-yield the result returned by the delegate method.\n      return info;\n    }\n\n    // The delegate iterator is finished, so forget it and continue with\n    // the outer generator.\n    context.delegate = null;\n    return ContinueSentinel;\n  }\n\n  // Define Generator.prototype.{next,throw,return} in terms of the\n  // unified ._invoke helper method.\n  defineIteratorMethods(Gp);\n\n  Gp[toStringTagSymbol] = \"Generator\";\n\n  // A Generator should always return itself as the iterator object when the\n  // @@iterator function is called on it. Some browsers' implementations of the\n  // iterator prototype chain incorrectly implement this, causing the Generator\n  // object to not be returned from this call. This ensures that doesn't happen.\n  // See https://github.com/facebook/regenerator/issues/274 for more details.\n  Gp[iteratorSymbol] = function() {\n    return this;\n  };\n\n  Gp.toString = function() {\n    return \"[object Generator]\";\n  };\n\n  function pushTryEntry(locs) {\n    var entry = { tryLoc: locs[0] };\n\n    if (1 in locs) {\n      entry.catchLoc = locs[1];\n    }\n\n    if (2 in locs) {\n      entry.finallyLoc = locs[2];\n      entry.afterLoc = locs[3];\n    }\n\n    this.tryEntries.push(entry);\n  }\n\n  function resetTryEntry(entry) {\n    var record = entry.completion || {};\n    record.type = \"normal\";\n    delete record.arg;\n    entry.completion = record;\n  }\n\n  function Context(tryLocsList) {\n    // The root entry object (effectively a try statement without a catch\n    // or a finally block) gives us a place to store values thrown from\n    // locations where there is no enclosing try statement.\n    this.tryEntries = [{ tryLoc: \"root\" }];\n    tryLocsList.forEach(pushTryEntry, this);\n    this.reset(true);\n  }\n\n  runtime.keys = function(object) {\n    var keys = [];\n    for (var key in object) {\n      keys.push(key);\n    }\n    keys.reverse();\n\n    // Rather than returning an object with a next method, we keep\n    // things simple and return the next function itself.\n    return function next() {\n      while (keys.length) {\n        var key = keys.pop();\n        if (key in object) {\n          next.value = key;\n          next.done = false;\n          return next;\n        }\n      }\n\n      // To avoid creating an additional object, we just hang the .value\n      // and .done properties off the next function object itself. This\n      // also ensures that the minifier will not anonymize the function.\n      next.done = true;\n      return next;\n    };\n  };\n\n  function values(iterable) {\n    if (iterable) {\n      var iteratorMethod = iterable[iteratorSymbol];\n      if (iteratorMethod) {\n        return iteratorMethod.call(iterable);\n      }\n\n      if (typeof iterable.next === \"function\") {\n        return iterable;\n      }\n\n      if (!isNaN(iterable.length)) {\n        var i = -1, next = function next() {\n          while (++i < iterable.length) {\n            if (hasOwn.call(iterable, i)) {\n              next.value = iterable[i];\n              next.done = false;\n              return next;\n            }\n          }\n\n          next.value = undefined;\n          next.done = true;\n\n          return next;\n        };\n\n        return next.next = next;\n      }\n    }\n\n    // Return an iterator with no values.\n    return { next: doneResult };\n  }\n  runtime.values = values;\n\n  function doneResult() {\n    return { value: undefined, done: true };\n  }\n\n  Context.prototype = {\n    constructor: Context,\n\n    reset: function(skipTempReset) {\n      this.prev = 0;\n      this.next = 0;\n      // Resetting context._sent for legacy support of Babel's\n      // function.sent implementation.\n      this.sent = this._sent = undefined;\n      this.done = false;\n      this.delegate = null;\n\n      this.method = \"next\";\n      this.arg = undefined;\n\n      this.tryEntries.forEach(resetTryEntry);\n\n      if (!skipTempReset) {\n        for (var name in this) {\n          // Not sure about the optimal order of these conditions:\n          if (name.charAt(0) === \"t\" &&\n              hasOwn.call(this, name) &&\n              !isNaN(+name.slice(1))) {\n            this[name] = undefined;\n          }\n        }\n      }\n    },\n\n    stop: function() {\n      this.done = true;\n\n      var rootEntry = this.tryEntries[0];\n      var rootRecord = rootEntry.completion;\n      if (rootRecord.type === \"throw\") {\n        throw rootRecord.arg;\n      }\n\n      return this.rval;\n    },\n\n    dispatchException: function(exception) {\n      if (this.done) {\n        throw exception;\n      }\n\n      var context = this;\n      function handle(loc, caught) {\n        record.type = \"throw\";\n        record.arg = exception;\n        context.next = loc;\n\n        if (caught) {\n          // If the dispatched exception was caught by a catch block,\n          // then let that catch block handle the exception normally.\n          context.method = \"next\";\n          context.arg = undefined;\n        }\n\n        return !! caught;\n      }\n\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        var record = entry.completion;\n\n        if (entry.tryLoc === \"root\") {\n          // Exception thrown outside of any try block that could handle\n          // it, so set the completion value of the entire function to\n          // throw the exception.\n          return handle(\"end\");\n        }\n\n        if (entry.tryLoc <= this.prev) {\n          var hasCatch = hasOwn.call(entry, \"catchLoc\");\n          var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n          if (hasCatch && hasFinally) {\n            if (this.prev < entry.catchLoc) {\n              return handle(entry.catchLoc, true);\n            } else if (this.prev < entry.finallyLoc) {\n              return handle(entry.finallyLoc);\n            }\n\n          } else if (hasCatch) {\n            if (this.prev < entry.catchLoc) {\n              return handle(entry.catchLoc, true);\n            }\n\n          } else if (hasFinally) {\n            if (this.prev < entry.finallyLoc) {\n              return handle(entry.finallyLoc);\n            }\n\n          } else {\n            throw new Error(\"try statement without catch or finally\");\n          }\n        }\n      }\n    },\n\n    abrupt: function(type, arg) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.tryLoc <= this.prev &&\n            hasOwn.call(entry, \"finallyLoc\") &&\n            this.prev < entry.finallyLoc) {\n          var finallyEntry = entry;\n          break;\n        }\n      }\n\n      if (finallyEntry &&\n          (type === \"break\" ||\n           type === \"continue\") &&\n          finallyEntry.tryLoc <= arg &&\n          arg <= finallyEntry.finallyLoc) {\n        // Ignore the finally entry if control is not jumping to a\n        // location outside the try/catch block.\n        finallyEntry = null;\n      }\n\n      var record = finallyEntry ? finallyEntry.completion : {};\n      record.type = type;\n      record.arg = arg;\n\n      if (finallyEntry) {\n        this.method = \"next\";\n        this.next = finallyEntry.finallyLoc;\n        return ContinueSentinel;\n      }\n\n      return this.complete(record);\n    },\n\n    complete: function(record, afterLoc) {\n      if (record.type === \"throw\") {\n        throw record.arg;\n      }\n\n      if (record.type === \"break\" ||\n          record.type === \"continue\") {\n        this.next = record.arg;\n      } else if (record.type === \"return\") {\n        this.rval = this.arg = record.arg;\n        this.method = \"return\";\n        this.next = \"end\";\n      } else if (record.type === \"normal\" && afterLoc) {\n        this.next = afterLoc;\n      }\n\n      return ContinueSentinel;\n    },\n\n    finish: function(finallyLoc) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.finallyLoc === finallyLoc) {\n          this.complete(entry.completion, entry.afterLoc);\n          resetTryEntry(entry);\n          return ContinueSentinel;\n        }\n      }\n    },\n\n    \"catch\": function(tryLoc) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.tryLoc === tryLoc) {\n          var record = entry.completion;\n          if (record.type === \"throw\") {\n            var thrown = record.arg;\n            resetTryEntry(entry);\n          }\n          return thrown;\n        }\n      }\n\n      // The context.catch method must only be called with a location\n      // argument that corresponds to a known catch block.\n      throw new Error(\"illegal catch attempt\");\n    },\n\n    delegateYield: function(iterable, resultName, nextLoc) {\n      this.delegate = {\n        iterator: values(iterable),\n        resultName: resultName,\n        nextLoc: nextLoc\n      };\n\n      if (this.method === \"next\") {\n        // Deliberately forget the last sent value so that we don't\n        // accidentally pass it on to the delegate.\n        this.arg = undefined;\n      }\n\n      return ContinueSentinel;\n    }\n  };\n})(\n  // In sloppy mode, unbound `this` refers to the global object, fallback to\n  // Function constructor if we're in global strict mode. That is sadly a form\n  // of indirect eval which violates Content Security Policy.\n  (function() { return this })() || Function(\"return this\")()\n);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/regenerator-runtime/runtime.js\n// module id = 171\n// module chunks = 0","/*!\n * \n *         SimpleBar.js - v2.5.1\n *         Scrollbars, simpler.\n *         https://grsmto.github.io/simplebar/\n *         \n *         Made by Adrien Grsmto from a fork by Jonathan Nicol\n *         Under MIT License\n *       \n */\n!function(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.SimpleBar=e():t.SimpleBar=e()}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,e),i.l=!0,i.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,\"a\",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p=\"\",e(e.s=27)}([function(t,e,n){var r=n(23)(\"wks\"),i=n(12),o=n(1).Symbol,s=\"function\"==typeof o;(t.exports=function(t){return r[t]||(r[t]=s&&o[t]||(s?o:i)(\"Symbol.\"+t))}).store=r},function(t,e){var n=t.exports=\"undefined\"!=typeof window&&window.Math==Math?window:\"undefined\"!=typeof self&&self.Math==Math?self:Function(\"return this\")();\"number\"==typeof __g&&(__g=n)},function(t,e){var n={}.hasOwnProperty;t.exports=function(t,e){return n.call(t,e)}},function(t,e){var n=t.exports={version:\"2.5.1\"};\"number\"==typeof __e&&(__e=n)},function(t,e,n){var r=n(5),i=n(11);t.exports=n(7)?function(t,e,n){return r.f(t,e,i(1,n))}:function(t,e,n){return t[e]=n,t}},function(t,e,n){var r=n(6),i=n(33),o=n(34),s=Object.defineProperty;e.f=n(7)?Object.defineProperty:function(t,e,n){if(r(t),e=o(e,!0),r(n),i)try{return s(t,e,n)}catch(t){}if(\"get\"in n||\"set\"in n)throw TypeError(\"Accessors not supported!\");return\"value\"in n&&(t[e]=n.value),t}},function(t,e,n){var r=n(10);t.exports=function(t){if(!r(t))throw TypeError(t+\" is not an object!\");return t}},function(t,e,n){t.exports=!n(16)(function(){return 7!=Object.defineProperty({},\"a\",{get:function(){return 7}}).a})},function(t,e){var n=Math.ceil,r=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?r:n)(t)}},function(t,e){t.exports=function(t){if(void 0==t)throw TypeError(\"Can't call method on  \"+t);return t}},function(t,e){t.exports=function(t){return\"object\"==typeof t?null!==t:\"function\"==typeof t}},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e){var n=0,r=Math.random();t.exports=function(t){return\"Symbol(\".concat(void 0===t?\"\":t,\")_\",(++n+r).toString(36))}},function(t,e){t.exports={}},function(t,e,n){var r=n(23)(\"keys\"),i=n(12);t.exports=function(t){return r[t]||(r[t]=i(t))}},function(t,e,n){var r=n(1),i=n(3),o=n(4),s=n(18),c=n(19),a=function(t,e,n){var u,l,f,h,d=t&a.F,p=t&a.G,v=t&a.S,b=t&a.P,y=t&a.B,m=p?r:v?r[e]||(r[e]={}):(r[e]||{}).prototype,g=p?i:i[e]||(i[e]={}),O=g.prototype||(g.prototype={});p&&(n=e);for(u in n)l=!d&&m&&void 0!==m[u],f=(l?m:n)[u],h=y&&l?c(f,r):b&&\"function\"==typeof f?c(Function.call,f):f,m&&s(m,u,f,t&a.U),g[u]!=f&&o(g,u,h),b&&O[u]!=f&&(O[u]=f)};r.core=i,a.F=1,a.G=2,a.S=4,a.P=8,a.B=16,a.W=32,a.U=64,a.R=128,t.exports=a},function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e,n){var r=n(10),i=n(1).document,o=r(i)&&r(i.createElement);t.exports=function(t){return o?i.createElement(t):{}}},function(t,e,n){var r=n(1),i=n(4),o=n(2),s=n(12)(\"src\"),c=Function.toString,a=(\"\"+c).split(\"toString\");n(3).inspectSource=function(t){return c.call(t)},(t.exports=function(t,e,n,c){var u=\"function\"==typeof n;u&&(o(n,\"name\")||i(n,\"name\",e)),t[e]!==n&&(u&&(o(n,s)||i(n,s,t[e]?\"\"+t[e]:a.join(String(e)))),t===r?t[e]=n:c?t[e]?t[e]=n:i(t,e,n):(delete t[e],i(t,e,n)))})(Function.prototype,\"toString\",function(){return\"function\"==typeof this&&this[s]||c.call(this)})},function(t,e,n){var r=n(35);t.exports=function(t,e,n){if(r(t),void 0===e)return t;switch(n){case 1:return function(n){return t.call(e,n)};case 2:return function(n,r){return t.call(e,n,r)};case 3:return function(n,r,i){return t.call(e,n,r,i)}}return function(){return t.apply(e,arguments)}}},function(t,e,n){var r=n(41),i=n(9);t.exports=function(t){return r(i(t))}},function(t,e){var n={}.toString;t.exports=function(t){return n.call(t).slice(8,-1)}},function(t,e,n){var r=n(8),i=Math.min;t.exports=function(t){return t>0?i(r(t),9007199254740991):0}},function(t,e,n){var r=n(1),i=r[\"__core-js_shared__\"]||(r[\"__core-js_shared__\"]={});t.exports=function(t){return i[t]||(i[t]={})}},function(t,e){t.exports=\"constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf\".split(\",\")},function(t,e,n){var r=n(5).f,i=n(2),o=n(0)(\"toStringTag\");t.exports=function(t,e,n){t&&!i(t=n?t:t.prototype,o)&&r(t,o,{configurable:!0,value:e})}},function(t,e,n){var r=n(9);t.exports=function(t){return Object(r(t))}},function(t,e,n){\"use strict\";function r(t){return t&&t.__esModule?t:{default:t}}function i(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}function o(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function s(t,e,n){return e&&o(t.prototype,e),n&&o(t,n),t}Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=void 0,n(28);var c=r(n(53)),a=r(n(54)),u=r(n(56));n(57),Object.assign=n(58);var l=function(){function t(e,n){i(this,t),this.el=e,this.flashTimeout,this.contentEl,this.scrollContentEl,this.dragOffset={x:0,y:0},this.isVisible={x:!0,y:!0},this.scrollOffsetAttr={x:\"scrollLeft\",y:\"scrollTop\"},this.sizeAttr={x:\"offsetWidth\",y:\"offsetHeight\"},this.scrollSizeAttr={x:\"scrollWidth\",y:\"scrollHeight\"},this.offsetAttr={x:\"left\",y:\"top\"},this.globalObserver,this.mutationObserver,this.resizeObserver,this.currentAxis,this.options=Object.assign({},t.defaultOptions,n),this.classNames=this.options.classNames,this.scrollbarWidth=(0,c.default)(),this.offsetSize=20,this.flashScrollbar=this.flashScrollbar.bind(this),this.onDragY=this.onDragY.bind(this),this.onDragX=this.onDragX.bind(this),this.onScrollY=this.onScrollY.bind(this),this.onScrollX=this.onScrollX.bind(this),this.drag=this.drag.bind(this),this.onEndDrag=this.onEndDrag.bind(this),this.onMouseEnter=this.onMouseEnter.bind(this),this.recalculate=(0,a.default)(this.recalculate,100,{leading:!0,trailing:!1}),this.init()}return s(t,[{key:\"init\",value:function(){this.el.SimpleBar=this,this.initDOM(),this.scrollbarX=this.trackX.querySelector(\".\".concat(this.classNames.scrollbar)),this.scrollbarY=this.trackY.querySelector(\".\".concat(this.classNames.scrollbar)),this.scrollContentEl.style.paddingRight=\"\".concat(this.scrollbarWidth||this.offsetSize,\"px\"),this.scrollContentEl.style.marginBottom=\"-\".concat(2*this.scrollbarWidth||this.offsetSize,\"px\"),this.contentEl.style.paddingBottom=\"\".concat(this.scrollbarWidth||this.offsetSize,\"px\"),0!==this.scrollbarWidth&&(this.contentEl.style.marginRight=\"-\".concat(this.scrollbarWidth,\"px\")),this.recalculate(),this.initListeners()}},{key:\"initDOM\",value:function(){var t=this;if(Array.from(this.el.children).filter(function(e){return e.classList.contains(t.classNames.scrollContent)}).length)this.trackX=this.el.querySelector(\".\".concat(this.classNames.track,\".horizontal\")),this.trackY=this.el.querySelector(\".\".concat(this.classNames.track,\".vertical\")),this.scrollContentEl=this.el.querySelector(\".\".concat(this.classNames.scrollContent)),this.contentEl=this.el.querySelector(\".\".concat(this.classNames.content));else{for(this.scrollContentEl=document.createElement(\"div\"),this.contentEl=document.createElement(\"div\"),this.scrollContentEl.classList.add(this.classNames.scrollContent),this.contentEl.classList.add(this.classNames.content);this.el.firstChild;)this.contentEl.appendChild(this.el.firstChild);this.scrollContentEl.appendChild(this.contentEl),this.el.appendChild(this.scrollContentEl)}if(!this.trackX||!this.trackY){var e=document.createElement(\"div\"),n=document.createElement(\"div\");e.classList.add(this.classNames.track),n.classList.add(this.classNames.scrollbar),e.appendChild(n),this.trackX=e.cloneNode(!0),this.trackX.classList.add(\"horizontal\"),this.trackY=e.cloneNode(!0),this.trackY.classList.add(\"vertical\"),this.el.insertBefore(this.trackX,this.el.firstChild),this.el.insertBefore(this.trackY,this.el.firstChild)}this.el.setAttribute(\"data-simplebar\",\"init\")}},{key:\"initListeners\",value:function(){var t=this;this.options.autoHide&&this.el.addEventListener(\"mouseenter\",this.onMouseEnter),this.scrollbarY.addEventListener(\"mousedown\",this.onDragY),this.scrollbarX.addEventListener(\"mousedown\",this.onDragX),this.scrollContentEl.addEventListener(\"scroll\",this.onScrollY),this.contentEl.addEventListener(\"scroll\",this.onScrollX),\"undefined\"!=typeof MutationObserver&&(this.mutationObserver=new MutationObserver(function(e){e.forEach(function(e){(t.isChildNode(e.target)||e.addedNodes.length)&&t.recalculate()})}),this.mutationObserver.observe(this.el,{attributes:!0,childList:!0,characterData:!0,subtree:!0})),this.resizeObserver=new u.default(this.recalculate.bind(this)),this.resizeObserver.observe(this.el)}},{key:\"removeListeners\",value:function(){this.options.autoHide&&this.el.removeEventListener(\"mouseenter\",this.onMouseEnter),this.scrollbarX.removeEventListener(\"mousedown\",this.onDragX),this.scrollbarY.removeEventListener(\"mousedown\",this.onDragY),this.scrollContentEl.removeEventListener(\"scroll\",this.onScrollY),this.contentEl.removeEventListener(\"scroll\",this.onScrollX),this.mutationObserver.disconnect(),this.resizeObserver.disconnect()}},{key:\"onDragX\",value:function(t){this.onDrag(t,\"x\")}},{key:\"onDragY\",value:function(t){this.onDrag(t,\"y\")}},{key:\"onDrag\",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"y\";t.preventDefault();var n=\"y\"===e?this.scrollbarY:this.scrollbarX,r=\"y\"===e?t.pageY:t.pageX;this.dragOffset[e]=r-n.getBoundingClientRect()[this.offsetAttr[e]],this.currentAxis=e,document.addEventListener(\"mousemove\",this.drag),document.addEventListener(\"mouseup\",this.onEndDrag)}},{key:\"drag\",value:function(t){var e,n,r;t.preventDefault(),\"y\"===this.currentAxis?(e=t.pageY,n=this.trackY,r=this.scrollContentEl):(e=t.pageX,n=this.trackX,r=this.contentEl);var i=e-n.getBoundingClientRect()[this.offsetAttr[this.currentAxis]]-this.dragOffset[this.currentAxis],o=i/n[this.sizeAttr[this.currentAxis]],s=o*this.contentEl[this.scrollSizeAttr[this.currentAxis]];r[this.scrollOffsetAttr[this.currentAxis]]=s}},{key:\"onEndDrag\",value:function(){document.removeEventListener(\"mousemove\",this.drag),document.removeEventListener(\"mouseup\",this.onEndDrag)}},{key:\"resizeScrollbar\",value:function(){var t,e,n,r,i,o=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"y\";\"x\"===o?(t=this.trackX,e=this.scrollbarX,n=this.contentEl[this.scrollOffsetAttr[o]],r=this.contentSizeX,i=this.scrollbarXSize):(t=this.trackY,e=this.scrollbarY,n=this.scrollContentEl[this.scrollOffsetAttr[o]],r=this.contentSizeY,i=this.scrollbarYSize);var s=i/r,c=n/(r-i),a=Math.max(~~(s*(i-2))-2,this.options.scrollbarMinSize),u=~~((i-4-a)*c+2);this.isVisible[o]=i<r,this.isVisible[o]?(t.style.visibility=\"visible\",\"x\"===o?(e.style.left=\"\".concat(u,\"px\"),e.style.width=\"\".concat(a,\"px\")):(e.style.top=\"\".concat(u,\"px\"),e.style.height=\"\".concat(a,\"px\"))):t.style.visibility=\"hidden\"}},{key:\"onScrollX\",value:function(){this.flashScrollbar(\"x\")}},{key:\"onScrollY\",value:function(){this.flashScrollbar(\"y\")}},{key:\"onMouseEnter\",value:function(){this.flashScrollbar(\"x\"),this.flashScrollbar(\"y\")}},{key:\"flashScrollbar\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"y\";this.resizeScrollbar(t),this.showScrollbar(t)}},{key:\"showScrollbar\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"y\";this.isVisible[t]&&(\"x\"===t?this.scrollbarX.classList.add(\"visible\"):this.scrollbarY.classList.add(\"visible\"),this.options.autoHide&&(\"number\"==typeof this.flashTimeout&&window.clearTimeout(this.flashTimeout),this.flashTimeout=window.setTimeout(this.hideScrollbar.bind(this),1e3)))}},{key:\"hideScrollbar\",value:function(){this.scrollbarX.classList.remove(\"visible\"),this.scrollbarY.classList.remove(\"visible\"),\"number\"==typeof this.flashTimeout&&window.clearTimeout(this.flashTimeout)}},{key:\"recalculate\",value:function(){this.contentSizeX=this.contentEl[this.scrollSizeAttr.x],this.contentSizeY=this.contentEl[this.scrollSizeAttr.y]-(this.scrollbarWidth||this.offsetSize),this.scrollbarXSize=this.trackX[this.sizeAttr.x],this.scrollbarYSize=this.trackY[this.sizeAttr.y],this.resizeScrollbar(\"x\"),this.resizeScrollbar(\"y\"),this.options.autoHide||(this.showScrollbar(\"x\"),this.showScrollbar(\"y\"))}},{key:\"getScrollElement\",value:function(){return this.scrollContentEl}},{key:\"getContentElement\",value:function(){return this.contentEl}},{key:\"unMount\",value:function(){this.removeListeners(),this.el.SimpleBar=null}},{key:\"isChildNode\",value:function(t){return null!==t&&(t===this.el||this.isChildNode(t.parentNode))}}],[{key:\"initHtmlApi\",value:function(){this.initDOMLoadedElements=this.initDOMLoadedElements.bind(this),\"undefined\"!=typeof MutationObserver&&(this.globalObserver=new MutationObserver(function(e){e.forEach(function(e){Array.from(e.addedNodes).forEach(function(e){1===e.nodeType&&(e.hasAttribute(\"data-simplebar\")?!e.SimpleBar&&new t(e,t.getElOptions(e)):Array.from(e.querySelectorAll(\"[data-simplebar]\")).forEach(function(e){!e.SimpleBar&&new t(e,t.getElOptions(e))}))}),Array.from(e.removedNodes).forEach(function(t){1===t.nodeType&&(t.hasAttribute(\"data-simplebar\")?t.SimpleBar&&t.SimpleBar.unMount():Array.from(t.querySelectorAll(\"[data-simplebar]\")).forEach(function(t){t.SimpleBar&&t.SimpleBar.unMount()}))})})}),this.globalObserver.observe(document,{childList:!0,subtree:!0})),\"complete\"===document.readyState||\"loading\"!==document.readyState&&!document.documentElement.doScroll?window.setTimeout(this.initDOMLoadedElements.bind(this)):(document.addEventListener(\"DOMContentLoaded\",this.initDOMLoadedElements),window.addEventListener(\"load\",this.initDOMLoadedElements))}},{key:\"getElOptions\",value:function(e){return Object.keys(t.htmlAttributes).reduce(function(n,r){var i=t.htmlAttributes[r];return e.hasAttribute(i)&&(n[r]=JSON.parse(e.getAttribute(i)||!0)),n},{})}},{key:\"removeObserver\",value:function(){this.globalObserver.disconnect()}},{key:\"initDOMLoadedElements\",value:function(){document.removeEventListener(\"DOMContentLoaded\",this.initDOMLoadedElements),window.removeEventListener(\"load\",this.initDOMLoadedElements),Array.from(document.querySelectorAll(\"[data-simplebar]\")).forEach(function(e){e.SimpleBar||new t(e,t.getElOptions(e))})}},{key:\"defaultOptions\",get:function(){return{autoHide:!0,classNames:{content:\"simplebar-content\",scrollContent:\"simplebar-scroll-content\",scrollbar:\"simplebar-scrollbar\",track:\"simplebar-track\"},scrollbarMinSize:25}}},{key:\"htmlAttributes\",get:function(){return{autoHide:\"data-simplebar-autohide\",scrollbarMinSize:\"data-simplebar-scrollbar-min-size\"}}}]),t}();e.default=l,l.initHtmlApi()},function(t,e,n){n(29),n(46),t.exports=n(3).Array.from},function(t,e,n){\"use strict\";var r=n(30)(!0);n(31)(String,\"String\",function(t){this._t=String(t),this._i=0},function(){var t,e=this._t,n=this._i;return n>=e.length?{value:void 0,done:!0}:(t=r(e,n),this._i+=t.length,{value:t,done:!1})})},function(t,e,n){var r=n(8),i=n(9);t.exports=function(t){return function(e,n){var o,s,c=String(i(e)),a=r(n),u=c.length;return a<0||a>=u?t?\"\":void 0:(o=c.charCodeAt(a),o<55296||o>56319||a+1===u||(s=c.charCodeAt(a+1))<56320||s>57343?t?c.charAt(a):o:t?c.slice(a,a+2):s-56320+(o-55296<<10)+65536)}}},function(t,e,n){\"use strict\";var r=n(32),i=n(15),o=n(18),s=n(4),c=n(2),a=n(13),u=n(36),l=n(25),f=n(45),h=n(0)(\"iterator\"),d=!([].keys&&\"next\"in[].keys()),p=function(){return this};t.exports=function(t,e,n,v,b,y,m){u(n,e,v);var g,O,E,_=function(t){if(!d&&t in A)return A[t];switch(t){case\"keys\":case\"values\":return function(){return new n(this,t)}}return function(){return new n(this,t)}},x=e+\" Iterator\",w=\"values\"==b,S=!1,A=t.prototype,k=A[h]||A[\"@@iterator\"]||b&&A[b],j=k||_(b),M=b?w?_(\"entries\"):j:void 0,L=\"Array\"==e?A.entries||k:k;if(L&&(E=f(L.call(new t)))!==Object.prototype&&E.next&&(l(E,x,!0),r||c(E,h)||s(E,h,p)),w&&k&&\"values\"!==k.name&&(S=!0,j=function(){return k.call(this)}),r&&!m||!d&&!S&&A[h]||s(A,h,j),a[e]=j,a[x]=p,b)if(g={values:w?j:_(\"values\"),keys:y?j:_(\"keys\"),entries:M},m)for(O in g)O in A||o(A,O,g[O]);else i(i.P+i.F*(d||S),e,g);return g}},function(t,e){t.exports=!1},function(t,e,n){t.exports=!n(7)&&!n(16)(function(){return 7!=Object.defineProperty(n(17)(\"div\"),\"a\",{get:function(){return 7}}).a})},function(t,e,n){var r=n(10);t.exports=function(t,e){if(!r(t))return t;var n,i;if(e&&\"function\"==typeof(n=t.toString)&&!r(i=n.call(t)))return i;if(\"function\"==typeof(n=t.valueOf)&&!r(i=n.call(t)))return i;if(!e&&\"function\"==typeof(n=t.toString)&&!r(i=n.call(t)))return i;throw TypeError(\"Can't convert object to primitive value\")}},function(t,e){t.exports=function(t){if(\"function\"!=typeof t)throw TypeError(t+\" is not a function!\");return t}},function(t,e,n){\"use strict\";var r=n(37),i=n(11),o=n(25),s={};n(4)(s,n(0)(\"iterator\"),function(){return this}),t.exports=function(t,e,n){t.prototype=r(s,{next:i(1,n)}),o(t,e+\" Iterator\")}},function(t,e,n){var r=n(6),i=n(38),o=n(24),s=n(14)(\"IE_PROTO\"),c=function(){},a=function(){var t,e=n(17)(\"iframe\"),r=o.length;for(e.style.display=\"none\",n(44).appendChild(e),e.src=\"javascript:\",t=e.contentWindow.document,t.open(),t.write(\"<script>document.F=Object<\\/script>\"),t.close(),a=t.F;r--;)delete a.prototype[o[r]];return a()};t.exports=Object.create||function(t,e){var n;return null!==t?(c.prototype=r(t),n=new c,c.prototype=null,n[s]=t):n=a(),void 0===e?n:i(n,e)}},function(t,e,n){var r=n(5),i=n(6),o=n(39);t.exports=n(7)?Object.defineProperties:function(t,e){i(t);for(var n,s=o(e),c=s.length,a=0;c>a;)r.f(t,n=s[a++],e[n]);return t}},function(t,e,n){var r=n(40),i=n(24);t.exports=Object.keys||function(t){return r(t,i)}},function(t,e,n){var r=n(2),i=n(20),o=n(42)(!1),s=n(14)(\"IE_PROTO\");t.exports=function(t,e){var n,c=i(t),a=0,u=[];for(n in c)n!=s&&r(c,n)&&u.push(n);for(;e.length>a;)r(c,n=e[a++])&&(~o(u,n)||u.push(n));return u}},function(t,e,n){var r=n(21);t.exports=Object(\"z\").propertyIsEnumerable(0)?Object:function(t){return\"String\"==r(t)?t.split(\"\"):Object(t)}},function(t,e,n){var r=n(20),i=n(22),o=n(43);t.exports=function(t){return function(e,n,s){var c,a=r(e),u=i(a.length),l=o(s,u);if(t&&n!=n){for(;u>l;)if((c=a[l++])!=c)return!0}else for(;u>l;l++)if((t||l in a)&&a[l]===n)return t||l||0;return!t&&-1}}},function(t,e,n){var r=n(8),i=Math.max,o=Math.min;t.exports=function(t,e){return t=r(t),t<0?i(t+e,0):o(t,e)}},function(t,e,n){var r=n(1).document;t.exports=r&&r.documentElement},function(t,e,n){var r=n(2),i=n(26),o=n(14)(\"IE_PROTO\"),s=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=i(t),r(t,o)?t[o]:\"function\"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?s:null}},function(t,e,n){\"use strict\";var r=n(19),i=n(15),o=n(26),s=n(47),c=n(48),a=n(22),u=n(49),l=n(50);i(i.S+i.F*!n(52)(function(t){Array.from(t)}),\"Array\",{from:function(t){var e,n,i,f,h=o(t),d=\"function\"==typeof this?this:Array,p=arguments.length,v=p>1?arguments[1]:void 0,b=void 0!==v,y=0,m=l(h);if(b&&(v=r(v,p>2?arguments[2]:void 0,2)),void 0==m||d==Array&&c(m))for(e=a(h.length),n=new d(e);e>y;y++)u(n,y,b?v(h[y],y):h[y]);else for(f=m.call(h),n=new d;!(i=f.next()).done;y++)u(n,y,b?s(f,v,[i.value,y],!0):i.value);return n.length=y,n}})},function(t,e,n){var r=n(6);t.exports=function(t,e,n,i){try{return i?e(r(n)[0],n[1]):e(n)}catch(e){var o=t.return;throw void 0!==o&&r(o.call(t)),e}}},function(t,e,n){var r=n(13),i=n(0)(\"iterator\"),o=Array.prototype;t.exports=function(t){return void 0!==t&&(r.Array===t||o[i]===t)}},function(t,e,n){\"use strict\";var r=n(5),i=n(11);t.exports=function(t,e,n){e in t?r.f(t,e,i(0,n)):t[e]=n}},function(t,e,n){var r=n(51),i=n(0)(\"iterator\"),o=n(13);t.exports=n(3).getIteratorMethod=function(t){if(void 0!=t)return t[i]||t[\"@@iterator\"]||o[r(t)]}},function(t,e,n){var r=n(21),i=n(0)(\"toStringTag\"),o=\"Arguments\"==r(function(){return arguments}()),s=function(t,e){try{return t[e]}catch(t){}};t.exports=function(t){var e,n,c;return void 0===t?\"Undefined\":null===t?\"Null\":\"string\"==typeof(n=s(e=Object(t),i))?n:o?r(e):\"Object\"==(c=r(e))&&\"function\"==typeof e.callee?\"Arguments\":c}},function(t,e,n){var r=n(0)(\"iterator\"),i=!1;try{var o=[7][r]();o.return=function(){i=!0},Array.from(o,function(){throw 2})}catch(t){}t.exports=function(t,e){if(!e&&!i)return!1;var n=!1;try{var o=[7],s=o[r]();s.next=function(){return{done:n=!0}},o[r]=function(){return s},t(o)}catch(t){}return n}},function(t,e,n){var r,i,o;/*! scrollbarWidth.js v0.1.3 | felixexter | MIT | https://github.com/felixexter/scrollbarWidth */\n!function(n,s){i=[],r=s,void 0!==(o=\"function\"==typeof r?r.apply(e,i):r)&&(t.exports=o)}(0,function(){\"use strict\";function t(){if(\"undefined\"==typeof document)return 0;var t,e=document.body,n=document.createElement(\"div\"),r=n.style;return r.position=\"absolute\",r.top=r.left=\"-9999px\",r.width=r.height=\"100px\",r.overflow=\"scroll\",e.appendChild(n),t=n.offsetWidth-n.clientWidth,e.removeChild(n),t}return t})},function(t,e,n){(function(e){function n(t,e,n){function i(e){var n=v,r=b;return v=b=void 0,w=e,m=t.apply(r,n)}function o(t){return w=t,g=setTimeout(l,e),S?i(t):m}function a(t){var n=t-x,r=t-w,i=e-n;return A?E(i,y-r):i}function u(t){var n=t-x,r=t-w;return void 0===x||n>=e||n<0||A&&r>=y}function l(){var t=_();if(u(t))return f(t);g=setTimeout(l,a(t))}function f(t){return g=void 0,k&&v?i(t):(v=b=void 0,m)}function h(){void 0!==g&&clearTimeout(g),w=0,v=x=b=g=void 0}function d(){return void 0===g?m:f(_())}function p(){var t=_(),n=u(t);if(v=arguments,b=this,x=t,n){if(void 0===g)return o(x);if(A)return g=setTimeout(l,e),i(x)}return void 0===g&&(g=setTimeout(l,e)),m}var v,b,y,m,g,x,w=0,S=!1,A=!1,k=!0;if(\"function\"!=typeof t)throw new TypeError(c);return e=s(e)||0,r(n)&&(S=!!n.leading,A=\"maxWait\"in n,y=A?O(s(n.maxWait)||0,e):y,k=\"trailing\"in n?!!n.trailing:k),p.cancel=h,p.flush=d,p}function r(t){var e=typeof t;return!!t&&(\"object\"==e||\"function\"==e)}function i(t){return!!t&&\"object\"==typeof t}function o(t){return\"symbol\"==typeof t||i(t)&&g.call(t)==u}function s(t){if(\"number\"==typeof t)return t;if(o(t))return a;if(r(t)){var e=\"function\"==typeof t.valueOf?t.valueOf():t;t=r(e)?e+\"\":e}if(\"string\"!=typeof t)return 0===t?t:+t;t=t.replace(l,\"\");var n=h.test(t);return n||d.test(t)?p(t.slice(2),n?2:8):f.test(t)?a:+t}var c=\"Expected a function\",a=NaN,u=\"[object Symbol]\",l=/^\\s+|\\s+$/g,f=/^[-+]0x[0-9a-f]+$/i,h=/^0b[01]+$/i,d=/^0o[0-7]+$/i,p=parseInt,v=\"object\"==typeof e&&e&&e.Object===Object&&e,b=\"object\"==typeof self&&self&&self.Object===Object&&self,y=v||b||Function(\"return this\")(),m=Object.prototype,g=m.toString,O=Math.max,E=Math.min,_=function(){return y.Date.now()};t.exports=n}).call(e,n(55))},function(t,e){var n;n=function(){return this}();try{n=n||Function(\"return this\")()||(0,eval)(\"this\")}catch(t){\"object\"==typeof window&&(n=window)}t.exports=n},function(t,e,n){\"use strict\";function r(t){return parseFloat(t)||0}function i(t){return Array.prototype.slice.call(arguments,1).reduce(function(e,n){return e+r(t[\"border-\"+n+\"-width\"])},0)}function o(t){for(var e=[\"top\",\"right\",\"bottom\",\"left\"],n={},i=0,o=e;i<o.length;i+=1){var s=o[i],c=t[\"padding-\"+s];n[s]=r(c)}return n}function s(t){var e=t.getBBox();return f(0,0,e.width,e.height)}function c(t){var e=t.clientWidth,n=t.clientHeight;if(!e&&!n)return _;var s=getComputedStyle(t),c=o(s),u=c.left+c.right,l=c.top+c.bottom,h=r(s.width),d=r(s.height);if(\"border-box\"===s.boxSizing&&(Math.round(h+u)!==e&&(h-=i(s,\"left\",\"right\")+u),Math.round(d+l)!==n&&(d-=i(s,\"top\",\"bottom\")+l)),!a(t)){var p=Math.round(h+u)-e,v=Math.round(d+l)-n;1!==Math.abs(p)&&(h-=p),1!==Math.abs(v)&&(d-=v)}return f(c.left,c.top,h,d)}function a(t){return t===document.documentElement}function u(t){return d?x(t)?s(t):c(t):_}function l(t){var e=t.x,n=t.y,r=t.width,i=t.height,o=\"undefined\"!=typeof DOMRectReadOnly?DOMRectReadOnly:Object,s=Object.create(o.prototype);return E(s,{x:e,y:n,width:r,height:i,top:n,right:e+r,bottom:i+n,left:e}),s}function f(t,e,n,r){return{x:t,y:e,width:n,height:r}}Object.defineProperty(e,\"__esModule\",{value:!0});var h=function(){function t(t,e){var n=-1;return t.some(function(t,r){return t[0]===e&&(n=r,!0)}),n}return\"undefined\"!=typeof Map?Map:function(){function e(){this.__entries__=[]}var n={size:{}};return n.size.get=function(){return this.__entries__.length},e.prototype.get=function(e){var n=t(this.__entries__,e),r=this.__entries__[n];return r&&r[1]},e.prototype.set=function(e,n){var r=t(this.__entries__,e);~r?this.__entries__[r][1]=n:this.__entries__.push([e,n])},e.prototype.delete=function(e){var n=this.__entries__,r=t(n,e);~r&&n.splice(r,1)},e.prototype.has=function(e){return!!~t(this.__entries__,e)},e.prototype.clear=function(){this.__entries__.splice(0)},e.prototype.forEach=function(t,e){void 0===e&&(e=null);for(var n=0,r=this.__entries__;n<r.length;n+=1){var i=r[n];t.call(e,i[1],i[0])}},Object.defineProperties(e.prototype,n),e}()}(),d=\"undefined\"!=typeof window&&\"undefined\"!=typeof document&&window.document===document,p=function(){return\"function\"==typeof requestAnimationFrame?requestAnimationFrame:function(t){return setTimeout(function(){return t(Date.now())},1e3/60)}}(),v=2,b=function(t,e){function n(){o&&(o=!1,t()),s&&i()}function r(){p(n)}function i(){var t=Date.now();if(o){if(t-c<v)return;s=!0}else o=!0,s=!1,setTimeout(r,e);c=t}var o=!1,s=!1,c=0;return i},y=[\"top\",\"right\",\"bottom\",\"left\",\"width\",\"height\",\"size\",\"weight\"],m=\"undefined\"!=typeof navigator&&/Trident\\/.*rv:11/.test(navigator.userAgent),g=\"undefined\"!=typeof MutationObserver&&!m,O=function(){this.connected_=!1,this.mutationEventsAdded_=!1,this.mutationsObserver_=null,this.observers_=[],this.onTransitionEnd_=this.onTransitionEnd_.bind(this),this.refresh=b(this.refresh.bind(this),20)};O.prototype.addObserver=function(t){~this.observers_.indexOf(t)||this.observers_.push(t),this.connected_||this.connect_()},O.prototype.removeObserver=function(t){var e=this.observers_,n=e.indexOf(t);~n&&e.splice(n,1),!e.length&&this.connected_&&this.disconnect_()},O.prototype.refresh=function(){this.updateObservers_()&&this.refresh()},O.prototype.updateObservers_=function(){var t=this.observers_.filter(function(t){return t.gatherActive(),t.hasActive()});return t.forEach(function(t){return t.broadcastActive()}),t.length>0},O.prototype.connect_=function(){d&&!this.connected_&&(document.addEventListener(\"transitionend\",this.onTransitionEnd_),window.addEventListener(\"resize\",this.refresh),g?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener(\"DOMSubtreeModified\",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},O.prototype.disconnect_=function(){d&&this.connected_&&(document.removeEventListener(\"transitionend\",this.onTransitionEnd_),window.removeEventListener(\"resize\",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener(\"DOMSubtreeModified\",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},O.prototype.onTransitionEnd_=function(t){var e=t.propertyName;y.some(function(t){return!!~e.indexOf(t)})&&this.refresh()},O.getInstance=function(){return this.instance_||(this.instance_=new O),this.instance_},O.instance_=null;var E=function(t,e){for(var n=0,r=Object.keys(e);n<r.length;n+=1){var i=r[n];Object.defineProperty(t,i,{value:e[i],enumerable:!1,writable:!1,configurable:!0})}return t},_=f(0,0,0,0),x=function(){return\"undefined\"!=typeof SVGGraphicsElement?function(t){return t instanceof SVGGraphicsElement}:function(t){return t instanceof SVGElement&&\"function\"==typeof t.getBBox}}(),w=function(t){this.broadcastWidth=0,this.broadcastHeight=0,this.contentRect_=f(0,0,0,0),this.target=t};w.prototype.isActive=function(){var t=u(this.target);return this.contentRect_=t,t.width!==this.broadcastWidth||t.height!==this.broadcastHeight},w.prototype.broadcastRect=function(){var t=this.contentRect_;return this.broadcastWidth=t.width,this.broadcastHeight=t.height,t};var S=function(t,e){var n=l(e);E(this,{target:t,contentRect:n})},A=function(t,e,n){if(\"function\"!=typeof t)throw new TypeError(\"The callback provided as parameter 1 is not a function.\");this.activeObservations_=[],this.observations_=new h,this.callback_=t,this.controller_=e,this.callbackCtx_=n};A.prototype.observe=function(t){if(!arguments.length)throw new TypeError(\"1 argument required, but only 0 present.\");if(\"undefined\"!=typeof Element&&Element instanceof Object){if(!(t instanceof Element))throw new TypeError('parameter 1 is not of type \"Element\".');var e=this.observations_;e.has(t)||(e.set(t,new w(t)),this.controller_.addObserver(this),this.controller_.refresh())}},A.prototype.unobserve=function(t){if(!arguments.length)throw new TypeError(\"1 argument required, but only 0 present.\");if(\"undefined\"!=typeof Element&&Element instanceof Object){if(!(t instanceof Element))throw new TypeError('parameter 1 is not of type \"Element\".');var e=this.observations_;e.has(t)&&(e.delete(t),e.size||this.controller_.removeObserver(this))}},A.prototype.disconnect=function(){this.clearActive(),this.observations_.clear(),this.controller_.removeObserver(this)},A.prototype.gatherActive=function(){var t=this;this.clearActive(),this.observations_.forEach(function(e){e.isActive()&&t.activeObservations_.push(e)})},A.prototype.broadcastActive=function(){if(this.hasActive()){var t=this.callbackCtx_,e=this.activeObservations_.map(function(t){return new S(t.target,t.broadcastRect())});this.callback_.call(t,e,t),this.clearActive()}},A.prototype.clearActive=function(){this.activeObservations_.splice(0)},A.prototype.hasActive=function(){return this.activeObservations_.length>0};var k=\"undefined\"!=typeof WeakMap?new WeakMap:new h,j=function(t){if(!(this instanceof j))throw new TypeError(\"Cannot call a class as a function\");if(!arguments.length)throw new TypeError(\"1 argument required, but only 0 present.\");var e=O.getInstance(),n=new A(t,e,this);k.set(this,n)};[\"observe\",\"unobserve\",\"disconnect\"].forEach(function(t){j.prototype[t]=function(){return(e=k.get(this))[t].apply(e,arguments);var e}});var M=function(){return\"undefined\"!=typeof ResizeObserver?ResizeObserver:j}();e.default=M},function(t,e){},function(t,e,n){\"use strict\";function r(t){if(null===t||void 0===t)throw new TypeError(\"Object.assign cannot be called with null or undefined\");return Object(t)}/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\nvar i=Object.getOwnPropertySymbols,o=Object.prototype.hasOwnProperty,s=Object.prototype.propertyIsEnumerable;t.exports=function(){try{if(!Object.assign)return!1;var t=new String(\"abc\");if(t[5]=\"de\",\"5\"===Object.getOwnPropertyNames(t)[0])return!1;for(var e={},n=0;n<10;n++)e[\"_\"+String.fromCharCode(n)]=n;if(\"0123456789\"!==Object.getOwnPropertyNames(e).map(function(t){return e[t]}).join(\"\"))return!1;var r={};return\"abcdefghijklmnopqrst\".split(\"\").forEach(function(t){r[t]=t}),\"abcdefghijklmnopqrst\"===Object.keys(Object.assign({},r)).join(\"\")}catch(t){return!1}}()?Object.assign:function(t,e){for(var n,c,a=r(t),u=1;u<arguments.length;u++){n=Object(arguments[u]);for(var l in n)o.call(n,l)&&(a[l]=n[l]);if(i){c=i(n);for(var f=0;f<c.length;f++)s.call(n,c[f])&&(a[c[f]]=n[c[f]])}}return a}}]).default});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/simplebar/dist/simplebar.js\n// module id = 172\n// module chunks = 0"],"sourceRoot":""}