{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/tslib/tslib.es6.js","webpack:///./node_modules/@sentry/tracing/esm/utils.js","webpack:///./frontend/js/core/constants.js","webpack:///./node_modules/@sentry/tracing/node_modules/@sentry/utils/esm/logger.js","webpack:///./node_modules/axios/lib/utils.js","webpack:///./node_modules/@sentry/utils/esm/is.js","webpack:///./node_modules/@sentry/tracing/node_modules/@sentry/utils/esm/is.js","webpack:///./node_modules/axios/index.js","webpack:///./node_modules/@sentry/tracing/node_modules/@sentry/utils/esm/global.js","webpack:///./node_modules/@sentry/tracing/node_modules/@sentry/utils/esm/object.js","webpack:///./node_modules/@sentry/utils/esm/misc.js","webpack:///./node_modules/@sentry/utils/esm/object.js","webpack:///./frontend/js/core/utils.js","webpack:///./node_modules/@sentry/tracing/node_modules/@sentry/utils/esm/node.js","webpack:///./node_modules/@sentry/tracing/esm/span.js","webpack:///./node_modules/@sentry/tracing/esm/constants.js","webpack:///./node_modules/@sentry/tracing/esm/hubextensions.js","webpack:///./node_modules/jquery/dist/jquery.js","webpack:///./node_modules/@sentry/tracing/node_modules/@sentry/utils/esm/string.js","webpack:///./node_modules/@sentry/utils/esm/string.js","webpack:///./node_modules/@sentry/tracing/esm/idletransaction.js","webpack:///./node_modules/@sentry/tracing/esm/transaction.js","webpack:///./node_modules/@sentry/tracing/node_modules/@sentry/utils/esm/env.js","webpack:///./node_modules/@sentry/tracing/node_modules/@sentry/utils/esm/syncpromise.js","webpack:///./node_modules/@sentry/tracing/node_modules/@sentry/hub/esm/scope.js","webpack:///./node_modules/@sentry/tracing/node_modules/@sentry/hub/esm/session.js","webpack:///./node_modules/@sentry/tracing/node_modules/@sentry/hub/esm/hub.js","webpack:///./node_modules/axios/lib/helpers/bind.js","webpack:///./node_modules/axios/lib/helpers/buildURL.js","webpack:///./node_modules/axios/lib/cancel/isCancel.js","webpack:///./node_modules/axios/lib/defaults.js","webpack:///./node_modules/process/browser.js","webpack:///./node_modules/axios/lib/adapters/xhr.js","webpack:///./node_modules/axios/lib/core/createError.js","webpack:///./node_modules/axios/lib/core/mergeConfig.js","webpack:///./node_modules/axios/lib/cancel/Cancel.js","webpack:///(webpack)/buildin/global.js","webpack:///(webpack)/buildin/harmony-module.js","webpack:///./frontend/js/map-helpers/set-up-marker-layout.js","webpack:///./frontend/js/map-helpers/custom-marker.js","webpack:///./frontend/js/map-helpers/set-up-draggable-label.js","webpack:///./frontend/js/map-helpers/create-markers.js","webpack:///./frontend/js/map-styles/country-level-map-styles.js","webpack:///./frontend/js/map-styles/state-level-map-styles.js","webpack:///./frontend/js/components/MarkerMap.js","webpack:///./node_modules/@sentry/utils/esm/node.js","webpack:///./node_modules/@sentry/tracing/node_modules/@sentry/utils/esm/time.js","webpack:///./node_modules/@sentry/tracing/node_modules/@sentry/utils/esm/stacktrace.js","webpack:///./node_modules/@sentry/utils/esm/stacktrace.js","webpack:///./node_modules/axios/lib/axios.js","webpack:///./node_modules/axios/node_modules/is-buffer/index.js","webpack:///./node_modules/axios/lib/core/Axios.js","webpack:///./node_modules/axios/lib/core/InterceptorManager.js","webpack:///./node_modules/axios/lib/core/dispatchRequest.js","webpack:///./node_modules/axios/lib/core/transformData.js","webpack:///./node_modules/axios/lib/helpers/normalizeHeaderName.js","webpack:///./node_modules/axios/lib/core/settle.js","webpack:///./node_modules/axios/lib/core/enhanceError.js","webpack:///./node_modules/axios/lib/helpers/parseHeaders.js","webpack:///./node_modules/axios/lib/helpers/isURLSameOrigin.js","webpack:///./node_modules/axios/lib/helpers/cookies.js","webpack:///./node_modules/axios/lib/helpers/isAbsoluteURL.js","webpack:///./node_modules/axios/lib/helpers/combineURLs.js","webpack:///./node_modules/axios/lib/cancel/CancelToken.js","webpack:///./node_modules/axios/lib/helpers/spread.js","webpack:///./node_modules/lodash/isObject.js","webpack:///./node_modules/@sentry/tracing/node_modules/@sentry/utils/esm/misc.js","webpack:///./node_modules/@sentry/tracing/node_modules/@sentry/utils/esm/browser.js","webpack:///./node_modules/@sentry/utils/esm/browser.js","webpack:///./node_modules/lodash/_root.js","webpack:///./node_modules/lodash/_Symbol.js","webpack:///./node_modules/lodash/throttle.js","webpack:///./node_modules/@sentry/tracing/node_modules/@sentry/utils/esm/memo.js","webpack:///./node_modules/@sentry/tracing/esm/errors.js","webpack:///./node_modules/@sentry/utils/esm/memo.js","webpack:///./node_modules/@sentry/tracing/node_modules/@sentry/utils/esm/supports.js","webpack:///./node_modules/@sentry/tracing/node_modules/@sentry/utils/esm/instrument.js","webpack:///./node_modules/lodash/debounce.js","webpack:///./node_modules/lodash/now.js","webpack:///./node_modules/lodash/_freeGlobal.js","webpack:///./node_modules/lodash/toNumber.js","webpack:///./node_modules/lodash/isSymbol.js","webpack:///./node_modules/lodash/_baseGetTag.js","webpack:///./node_modules/lodash/_getRawTag.js","webpack:///./node_modules/lodash/_objectToString.js","webpack:///./node_modules/lodash/isObjectLike.js","webpack:///./node_modules/select2/dist/js/select2.full.js","webpack:///./frontend/js/components/ButtonDropdown.js","webpack:///./frontend/js/components/CloseMenu.js","webpack:///./frontend/js/components/CoursePageSections.js","webpack:///./frontend/js/components/ImageGallery.js","webpack:///./frontend/js/components/ListSort.js","webpack:///./frontend/js/components/MapOverlay.js","webpack:///./frontend/js/components/OpenMenu.js","webpack:///./frontend/js/components/RevealContent.js","webpack:///./frontend/js/components/SearchDropdown.js","webpack:///./frontend/js/components/SearchableSelect.js","webpack:///./frontend/js/components/Share.js","webpack:///./node_modules/@sentry/core/esm/integrations/functiontostring.js","webpack:///./node_modules/@sentry/utils/esm/syncpromise.js","webpack:///./frontend/js/components/SimpleMap.js","webpack:///./node_modules/@sentry/hub/esm/scope.js","webpack:///./node_modules/@sentry/utils/esm/logger.js","webpack:///./node_modules/@sentry/types/esm/session.js","webpack:///./node_modules/@sentry/hub/esm/session.js","webpack:///./node_modules/@sentry/hub/esm/hub.js","webpack:///./node_modules/@sentry/core/esm/integrations/inboundfilters.js","webpack:///./node_modules/@sentry/utils/esm/polyfill.js","webpack:///./node_modules/@sentry/utils/esm/error.js","webpack:///./node_modules/@sentry/utils/esm/dsn.js","webpack:///./node_modules/@sentry/core/esm/integration.js","webpack:///./node_modules/@sentry/core/esm/baseclient.js","webpack:///./node_modules/@sentry/types/esm/status.js","webpack:///./node_modules/@sentry/core/esm/transports/noop.js","webpack:///./node_modules/@sentry/types/esm/severity.js","webpack:///./node_modules/@sentry/core/esm/basebackend.js","webpack:///./node_modules/@sentry/utils/esm/supports.js","webpack:///./node_modules/@sentry/browser/esm/tracekit.js","webpack:///./node_modules/@sentry/browser/esm/parsers.js","webpack:///./node_modules/@sentry/browser/esm/eventbuilder.js","webpack:///./node_modules/@sentry/core/esm/request.js","webpack:///./node_modules/@sentry/core/esm/api.js","webpack:///./node_modules/@sentry/utils/esm/promisebuffer.js","webpack:///./node_modules/@sentry/browser/esm/transports/base.js","webpack:///./node_modules/@sentry/browser/esm/transports/fetch.js","webpack:///./node_modules/@sentry/browser/esm/transports/xhr.js","webpack:///./node_modules/@sentry/browser/esm/backend.js","webpack:///./node_modules/@sentry/minimal/esm/index.js","webpack:///./node_modules/@sentry/browser/esm/helpers.js","webpack:///./node_modules/@sentry/utils/esm/instrument.js","webpack:///./node_modules/@sentry/browser/esm/integrations/breadcrumbs.js","webpack:///./node_modules/@sentry/browser/esm/client.js","webpack:///./node_modules/@sentry/browser/esm/version.js","webpack:///./node_modules/@sentry/browser/esm/integrations/trycatch.js","webpack:///./node_modules/@sentry/browser/esm/integrations/globalhandlers.js","webpack:///./node_modules/@sentry/browser/esm/integrations/linkederrors.js","webpack:///./node_modules/@sentry/browser/esm/integrations/useragent.js","webpack:///./node_modules/@sentry/browser/esm/sdk.js","webpack:///./node_modules/@sentry/core/esm/sdk.js","webpack:///./node_modules/@sentry/tracing/esm/browser/backgroundtab.js","webpack:///./node_modules/@sentry/tracing/esm/browser/web-vitals/lib/bindReporter.js","webpack:///./node_modules/@sentry/tracing/esm/browser/web-vitals/lib/initMetric.js","webpack:///./node_modules/@sentry/tracing/esm/browser/web-vitals/lib/generateUniqueID.js","webpack:///./node_modules/@sentry/tracing/esm/browser/web-vitals/lib/observe.js","webpack:///./node_modules/@sentry/tracing/esm/browser/web-vitals/lib/onHidden.js","webpack:///./node_modules/@sentry/tracing/esm/browser/web-vitals/lib/getVisibilityWatcher.js","webpack:///./node_modules/@sentry/tracing/esm/browser/web-vitals/getLCP.js","webpack:///./node_modules/@sentry/tracing/esm/browser/metrics.js","webpack:///./node_modules/@sentry/tracing/esm/browser/web-vitals/getCLS.js","webpack:///./node_modules/@sentry/tracing/esm/browser/web-vitals/getFID.js","webpack:///./node_modules/@sentry/tracing/esm/browser/request.js","webpack:///./node_modules/@sentry/tracing/esm/browser/router.js","webpack:///./node_modules/@sentry/tracing/esm/browser/browsertracing.js","webpack:///./node_modules/@sentry/tracing/esm/index.js","webpack:///./frontend/js/frontend-app.js","webpack:///./node_modules/@sentry/utils/esm/time.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","extendStatics","b","setPrototypeOf","__proto__","Array","__extends","__","this","constructor","__assign","assign","arguments","length","apply","__rest","e","indexOf","getOwnPropertySymbols","propertyIsEnumerable","__values","iterator","next","done","TypeError","__read","ar","push","error","__spread","concat","TRACEPARENT_REGEXP","RegExp","hasTracingEnabled","maybeOptions","client","getClient","options","getOptions","extractTraceparentData","traceparent","matches","match","parentSampled","traceId","parentSpanId","getActiveTransaction","maybeHub","scope","getScope","getTransaction","msToSec","time","secToMs","GREEN","COURSES","AREAS","COURSE_GROUPS","GOOGLE_MAPS_API_KEY","global","PREFIX","consoleSandbox","callback","originalConsole","console","wrappedLevels","forEach","level","__sentry_original__","result","keys","Logger","_enabled","disable","enable","log","args","_i","join","warn","__SENTRY__","logger","isBuffer","toString","isArray","val","isObject","isFunction","obj","fn","isArrayBuffer","isFormData","FormData","isArrayBufferView","ArrayBuffer","isView","buffer","isString","isNumber","isUndefined","isDate","isFile","isBlob","isStream","pipe","isURLSearchParams","URLSearchParams","isStandardBrowserEnv","navigator","product","window","document","merge","assignValue","deepMerge","extend","a","thisArg","trim","str","replace","isError","wat","isInstanceOf","Error","isErrorEvent","isDOMError","isDOMException","isPrimitive","isPlainObject","isEvent","Event","isElement","Element","isRegExp","isThenable","Boolean","then","isSyntheticEvent","base","_e","objectToString","isBuiltin","ty","fallbackGlobalObject","getGlobalObject","self","fill","source","replacementFactory","original","wrapped","proto","addNonEnumerableProperty","markFunctionWrapped","_Oo","writable","configurable","dropUndefinedKeys","e_1","_a","rv","_b","_c","e_1_1","return","map","uuid4","crypto","msCrypto","getRandomValues","arr","Uint16Array","pad","num","v","Math","random","parseUrl","url","query","fragment","host","path","protocol","relative","getEventDescription","event","message","exception","values","type","event_id","addExceptionTypeValue","addExceptionMechanism","mechanism","_oO","getLocationHref","location","href","oO","parseRetryAfterHeader","now","header","headerDelay","parseInt","isNaN","headerDate","Date","parse","defineProperties","urlEncode","encodeURIComponent","getWalkSource","err","stack","event_1","target","currentTarget","CustomEvent","detail","jsonSize","encodeURI","split","utf8Length","JSON","stringify","normalizeToSize","depth","maxSize","serialized","normalize","normalizeValue","_events","String","walk","memo","Infinity","normalized","serializeValue","toJSON","acc","memoize","innerKey","unmemoize","input","extractExceptionKeysForMessage","maxLength","sort","includedKeys","slice","getScript","script","createElement","prior","getElementsByTagName","async","referrerPolicy","onload","onreadystatechange","_","isAbort","readyState","test","undefined","src","parentNode","insertBefore","getDistance","distanceSquared","pow","x","y","sqrt","isNodeEnv","process","dynamicRequire","mod","request","require","loadModule","moduleName","cwd","SpanRecorder","maxlen","spans","_maxlen","add","span","spanRecorder","Span","spanContext","spanId","substring","startTimestamp","tags","data","sampled","op","description","status","endTimestamp","child","startChild","childSpan","transaction","setTag","setData","setStatus","setHttpStatus","httpStatus","spanStatus","spanStatusfromHttpCode","isSuccess","finish","toTraceparent","sampledString","toContext","updateWithContext","_d","getTraceContext","parent_span_id","span_id","trace_id","start_timestamp","timestamp","FINISH_REASON_TAG","IDLE_TRANSACTION_FINISH_REASONS","traceHeaders","getSpan","sample","samplingContext","setMetadata","transactionSampling","method","tracesSampler","sampleRate","rate","Number","tracesSampleRate","isValidSampleRate","_startTransaction","transactionContext","customSamplingContext","initSpanRecorder","_experiments","maxSpans","startIdleTransaction","hub","idleTimeout","onScope","addExtensionMethods","carrier","extensions","startTransaction","packageToIntegrationMapping","mongodb","Mongo","mongoose","mysql","Mysql","pg","Postgres","mappedPackages","filter","pkg","integrations","_autoloadDatabaseIntegrations","factory","w","noGlobal","getProto","getPrototypeOf","flat","array","class2type","hasOwn","fnToString","ObjectFunctionString","support","nodeType","isWindow","preservedScriptAttributes","nonce","noModule","DOMEval","code","node","doc","text","getAttribute","setAttribute","head","appendChild","removeChild","toType","jQuery","selector","context","init","isArrayLike","jquery","toArray","pushStack","elems","ret","prevObject","each","elem","first","eq","last","even","grep","_elem","odd","len","j","end","splice","copy","copyIsArray","clone","deep","expando","isReady","msg","noop","Ctor","isEmptyObject","globalEval","makeArray","results","inArray","second","invert","callbackExpect","arg","guid","toLowerCase","Sizzle","Expr","getText","isXML","tokenize","compile","select","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","contains","preferredDoc","dirruns","classCache","createCache","tokenCache","compilerCache","nonnativeSelectorCache","sortOrder","pop","pushNative","list","booleans","whitespace","identifier","attributes","pseudos","rwhitespace","rtrim","rcomma","rcombinators","rdescend","rpseudo","ridentifier","matchExpr","rhtml","rinputs","rheader","rnative","rquickExpr","rsibling","runescape","funescape","escape","nonHex","high","fromCharCode","rcssescape","fcssescape","ch","asCodePoint","charCodeAt","unloadHandler","inDisabledFieldset","addCombinator","disabled","nodeName","dir","childNodes","els","seed","nid","groups","newSelector","newContext","ownerDocument","exec","getElementById","id","getElementsByClassName","qsa","testContext","toSelector","querySelectorAll","qsaError","removeAttribute","cache","cacheLength","shift","markFunction","assert","el","addHandle","attrs","handler","attrHandle","siblingCheck","cur","diff","sourceIndex","nextSibling","createInputPseudo","createButtonPseudo","createDisabledPseudo","isDisabled","createPositionalPseudo","argument","matchIndexes","namespace","namespaceURI","documentElement","hasCompare","subWindow","defaultView","top","addEventListener","attachEvent","className","createComment","getById","getElementsByName","attrId","find","getAttributeNode","tag","tmp","innerHTML","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","unshift","expr","elements","attr","specified","sel","uniqueSort","duplicates","detectDuplicates","sortStable","textContent","firstChild","nodeValue","selectors","createPseudo","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","check","what","_argument","simple","forward","ofType","_context","xml","uniqueCache","outerCache","nodeIndex","start","parent","useCache","lastChild","uniqueID","pseudo","setFilters","idx","matched","matcher","unmatched","lang","elemLang","hash","activeElement","hasFocus","tabIndex","checked","selected","selectedIndex","_matchIndexes","radio","checkbox","file","password","image","submit","reset","tokens","combinator","skip","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","contexts","multipleContexts","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","filters","parseOnly","soFar","preFilters","cached","setMatchers","elementMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","matcherFromGroupMatchers","token","compiled","_name","defaultValue","unique","isXMLDoc","escapeSelector","until","truncate","is","siblings","rneedsContext","needsContext","rsingleTag","winnow","qualifier","not","rootjQuery","root","parseHTML","ready","rparentsprev","guaranteedUnique","children","contents","prev","sibling","has","targets","closest","index","prevAll","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","contentDocument","content","reverse","rnothtmlwhite","Identity","Thrower","ex","adoptValue","resolve","reject","noValue","promise","fail","Callbacks","flag","createOptions","firing","memory","fired","locked","queue","firingIndex","fire","once","stopOnFalse","remove","empty","lock","fireWith","Deferred","func","tuples","state","always","deferred","fns","newDefer","tuple","returned","progress","notify","onFulfilled","onRejected","onProgress","maxDepth","special","that","mightThrow","notifyWith","resolveWith","exceptionHook","stackTrace","rejectWith","getStackHook","setTimeout","stateString","when","singleValue","remaining","resolveContexts","resolveValues","master","updateFunc","rerrorNames","readyException","readyList","completed","removeEventListener","catch","readyWait","wait","doScroll","access","chainable","emptyGet","raw","bulk","_key","rmsPrefix","rdashAlpha","fcamelCase","_all","letter","toUpperCase","camelCase","string","acceptData","owner","Data","uid","set","prop","hasData","dataPriv","dataUser","rbrace","rmultiDash","dataAttr","getData","removeData","_data","_removeData","dequeue","startLength","hooks","_queueHooks","stop","setter","clearQueue","count","defer","pnum","rcssNum","cssExpand","isAttached","composed","getRootNode","isHiddenWithinTree","style","display","css","adjustCSS","valueParts","tween","adjusted","scale","maxIterations","currentValue","initial","unit","cssNumber","initialInUnit","defaultDisplayMap","getDefaultDisplay","body","showHide","show","hide","toggle","div","rcheckableType","rtagName","rscriptType","createDocumentFragment","checkClone","cloneNode","noCloneChecked","option","wrapMap","thead","col","tr","td","_default","getAll","setGlobalEval","refElements","tbody","tfoot","colgroup","caption","th","optgroup","buildFragment","scripts","selection","ignored","wrap","attached","nodes","htmlPrefilter","createTextNode","rkeyEvent","rmouseEvent","rtypenamespace","returnTrue","returnFalse","expectSync","safeActiveElement","on","types","one","origFn","off","leverageNative","notAsync","saved","isTrigger","delegateType","stopPropagation","stopImmediatePropagation","preventDefault","trigger","handleObjIn","eventHandle","events","handleObj","handlers","namespaces","origType","elemData","handle","triggered","dispatch","bindType","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","nativeEvent","handlerQueue","fix","delegateTarget","preDispatch","isPropagationStopped","isImmediatePropagationStopped","rnamespace","postDispatch","matchedHandlers","matchedSelectors","button","addProp","hook","originalEvent","load","noBubble","click","beforeunload","returnValue","props","isDefaultPrevented","defaultPrevented","relatedTarget","timeStamp","isSimulated","altKey","bubbles","cancelable","changedTouches","ctrlKey","eventPhase","metaKey","pageX","pageY","shiftKey","view","charCode","keyCode","buttons","clientX","clientY","offsetX","offsetY","pointerId","pointerType","screenX","screenY","targetTouches","toElement","touches","which","focus","blur","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","dest","udataOld","udataCur","fixInput","domManip","collection","hasScripts","iNoClone","valueIsFunction","html","_evalUrl","keepData","cleanData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","detach","append","prepend","before","after","replaceWith","replaceChild","appendTo","prependTo","insertAfter","replaceAll","insert","rnumnonpx","getStyles","opener","getComputedStyle","swap","old","rboxStyle","curCSS","computed","width","minWidth","maxWidth","getPropertyValue","pixelBoxStyles","addGetHookIf","conditionFn","hookFn","computeStyleTests","container","cssText","divStyle","pixelPositionVal","reliableMarginLeftVal","roundPixelMeasures","marginLeft","right","pixelBoxStylesVal","boxSizingReliableVal","position","scrollboxSizeVal","offsetWidth","measure","round","parseFloat","reliableTrDimensionsVal","backgroundClip","clearCloneStyle","boxSizingReliable","pixelPosition","reliableMarginLeft","scrollboxSize","reliableTrDimensions","table","trChild","trStyle","height","cssPrefixes","emptyStyle","vendorProps","finalPropName","final","cssProps","capName","vendorPropName","rdisplayswap","rcustomProp","cssShow","visibility","cssNormalTransform","letterSpacing","fontWeight","setPositiveNumber","subtract","max","boxModelAdjustment","dimension","box","isBorderBox","styles","computedVal","extra","delta","ceil","getWidthOrHeight","valueIsBorderBox","offsetProp","getClientRects","Tween","easing","cssHooks","opacity","origName","isCustomProp","setProperty","isFinite","getBoundingClientRect","scrollboxSizeBuggy","left","margin","padding","border","prefix","suffix","expand","expanded","parts","propHooks","run","percent","eased","duration","pos","step","fx","scrollTop","scrollLeft","linear","swing","cos","PI","fxNow","inProgress","rfxtypes","rrun","schedule","hidden","requestAnimationFrame","interval","tick","createFxNow","genFx","includeWidth","createTween","animation","Animation","tweeners","properties","stopped","prefilters","currentTime","startTime","tweens","opts","specialEasing","originalProperties","originalOptions","gotoEnd","propFilter","complete","timer","anim","tweener","oldfire","propTween","restoreDisplay","isBox","dataShow","unqueued","overflow","overflowX","overflowY","prefilter","speed","opt","speeds","fadeTo","to","animate","optall","doAnimation","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","slow","fast","delay","timeout","clearTimeout","checkOn","optSelected","radioValue","boolHook","removeAttr","nType","attrHooks","bool","attrNames","lowercaseName","rfocusable","rclickable","stripAndCollapse","getClass","classesToArray","removeProp","propFix","tabindex","addClass","classes","curValue","clazz","finalValue","removeClass","toggleClass","stateVal","isValidValue","classNames","hasClass","rreturn","valHooks","optionSet","focusin","rfocusMorph","stopPropagationCallback","onlyHandlers","bubbleType","ontype","lastElement","eventPath","parentWindow","simulate","triggerHandler","attaches","rquery","parseXML","DOMParser","parseFromString","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","traditional","param","valueOrFunction","serialize","serializeArray","r20","rhash","rantiCache","rheaders","rnoContent","rprotocol","transports","allTypes","originAnchor","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","active","lastModified","etag","isLocal","processData","contentType","accepts","json","responseFields","converters","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","urlAnchor","fireGlobals","uncached","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getResponseHeader","getAllResponseHeaders","setRequestHeader","overrideMimeType","mimeType","abort","statusText","finalText","crossDomain","hasContent","ifModified","headers","beforeSend","success","send","nativeStatusText","responses","response","modified","ct","finalDataType","firstDataType","ajaxHandleResponses","conv2","current","conv","dataFilter","throws","ajaxConvert","getJSON","wrapAll","firstElementChild","wrapInner","htmlIsFunction","unwrap","visible","offsetHeight","xhr","XMLHttpRequest","xhrSuccessStatus","0","1223","xhrSupported","cors","errorCallback","open","username","xhrFields","onerror","onabort","ontimeout","responseType","responseText","binary","scriptAttrs","charset","scriptCharset","evt","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","createHTMLDocument","implementation","keepScripts","parsed","params","animated","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","curElem","using","rect","win","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","defaultExtra","funcName","unbind","delegate","undelegate","hover","fnOver","fnOut","proxy","holdReady","hold","parseJSON","isNumeric","_jQuery","_$","$","noConflict","substr","snipLine","line","colno","newLine","lineLength","min","isMatchingPattern","ll","safeJoin","delimiter","output","DEFAULT_IDLE_TIMEOUT","IdleTransactionSpanRecorder","_super","_pushActivity","_popActivity","transactionSpanId","_this","IdleTransaction","_idleHub","_idleTimeout","_onScope","activities","_heartbeatCounter","_finished","_beforeFinishCallbacks","clearActiveTransaction","configureScope","setSpan","_initTimeout","toISOString","keepSpan","registerBeforeFinishCallback","_pingHeartbeat","end_1","_beat","heartbeatString","_prevHeartbeatString","Transaction","_measurements","_hub","metadata","_trimEnd","trimEnd","setName","setMeasurements","measurements","newMetadata","finishedSpans","reduce","trace","sdkProcessingMetadata","captureEvent","getTransport","recordLostEvent","isDebugBuild","__SENTRY_NO_DEBUG__","__SENTRY_BROWSER_BUNDLE__","isBrowserBundle","SyncPromise","executor","_state","_handlers","_resolve","_setResult","_reject","reason","_value","_executeHandlers","cachedHandlers","onfulfilled","onrejected","finally","onfinally","isRejected","Scope","_notifyingListeners","_scopeListeners","_eventProcessors","_breadcrumbs","_user","_tags","_extra","_contexts","_sdkProcessingMetadata","newScope","_level","_span","_session","_transactionName","_fingerprint","_requestSession","addScopeListener","addEventProcessor","setUser","user","update","_notifyScopeListeners","getUser","getRequestSession","setRequestSession","requestSession","setTags","setExtras","extras","setExtra","setFingerprint","fingerprint","setLevel","setTransactionName","setTransaction","setContext","setSession","session","getSession","captureContext","updatedScope","clear","addBreadcrumb","breadcrumb","maxBreadcrumbs","maxCrumbs","mergedBreadcrumb","clearBreadcrumbs","applyToEvent","hint","transactionName","_applyFingerprint","breadcrumbs","_notifyEventProcessors","getGlobalEventProcessors","setSDKProcessingMetadata","newData","processors","processor","globalEventProcessors","Session","errors","sid","ignoreDuration","startingTime","started","ipAddress","ip_address","did","email","release","environment","userAgent","close","user_agent","Hub","_version","_stack","getStackTop","bindClient","isOlderThan","version","setupIntegrations","pushScope","getStack","popScope","withScope","captureException","eventId","_lastEventId","finalHint","syntheticException","originalException","_invokeClient","captureMessage","lastEventId","beforeBreadcrumb","finalBreadcrumb","oldHub","makeMain","getIntegration","integration","startSpan","_callExtensionMethod","captureSession","endSession","_sendSessionUpdate","layer","startSession","currentSession","getMainCarrier","sentry","registry","getHubFromCarrier","setHubOnCarrier","getCurrentHub","hasHubOnCarrier","activeDomain","domain","registryHubTopStack","getHubFromActiveDomain","utils","encode","paramsSerializer","serializedParams","hashmarkIndex","__CANCEL__","normalizeHeaderName","DEFAULT_CONTENT_TYPE","setContentTypeIfUnset","adapter","defaults","transformRequest","transformResponse","xsrfCookieName","xsrfHeaderName","maxContentLength","validateStatus","common","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","currentQueue","draining","queueIndex","cleanUpNextTick","drainQueue","marker","runClearTimeout","Item","nextTick","title","browser","env","argv","versions","addListener","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","chdir","umask","settle","buildURL","parseHeaders","isURLSameOrigin","createError","config","Promise","requestData","auth","Authorization","btoa","responseURL","cookies","xsrfValue","withCredentials","read","onDownloadProgress","onUploadProgress","upload","cancelToken","cancel","enhanceError","config1","config2","Cancel","g","Function","originalModule","webpackPolyfill","setUpMarkerLayout","label","labelRect","labelHeight","labelWidth","leftMiddle","rightMiddle","topMiddle","bottomMiddle","origin","closestPoint","point","markerRatings","classList","distance","showLabelLine","cappedX","cappedY","initCustomMarker","CustomMarker","latlng","isEditMode","labelText","link","rating","stayAndPlay","labelOffsetX","labelOffsetY","markerType","courses","courseName","searchName","markerContainer","google","maps","OverlayView","onAdd","markerInnerHTML","ratingIcons","bridge","stay_and_play","course","ratings","getCourseLabelInnerHTML","lineSVG","createElementNS","arrowDefs","arrowMarker","arrowPath","dot","mouseStartX","mouseStartY","markerStartX","markerStartY","elementDrag","mouseDeltaX","mouseDeltaY","closeDragElement","axios","patch","label_offset_x","label_offset_y","onmouseup","onmousemove","onmousedown","offsetLeft","offsetTop","setUpDraggableLabel","getPanes","overlayImage","onclick","draw","markerPoint","getProjection","fromLatLngToDivPixel","countryLevelMapStyles","featureType","elementType","stylers","color","saturation","weight","stateLevelMapStyles","gamma","MarkerMap","allowDragging","titleEl","markers","handleMapsAPILoaded","Map","disableDefaultUI","scaleControl","scrollwheel","gestureHandling","zoomControl","setOptions","zoom","zoomLevel","updateAreaId","setZoom","areaId","setMap","area","LatLng","center_lat","center_lng","mapStyles","map_style","zoom_level","center","verbose_name","child_areas","childArea","map_name","includes","createChildAreaMarker","dispatchEvent","course_groups","courseGroup","lat","lng","full_name","search_name","createCourseGroupMarker","createCourseMarker","dateTimestampSource","nowSeconds","platformPerformance","performance","getNodePerformance","timeOrigin","getBrowserPerformance","timestampSource","dateTimestampInSeconds","timestampInSeconds","timestampWithMs","browserPerformanceTimeOrigin","performanceNow","dateNow","timeOriginDelta","abs","timeOriginIsReliable","navigationStart","timing","navigationStartDelta","getFunctionName","Axios","mergeConfig","createInstance","defaultConfig","instance","instanceConfig","CancelToken","isCancel","all","promises","spread","default","InterceptorManager","dispatchRequest","interceptors","chain","interceptor","fulfilled","rejected","getUri","use","eject","h","transformData","isAbsoluteURL","combineURLs","throwIfCancellationRequested","throwIfRequested","baseURL","normalizedName","isAxiosError","number","fileName","lineNumber","columnNumber","ignoreDuplicateOf","originURL","msie","urlParsingNode","resolveURL","search","hostname","port","pathname","charAt","requestURL","write","expires","secure","cookie","toGMTString","decodeURIComponent","relativeURL","resolvePromise","htmlTreeAsString","keyAttrs","currentElem","out","sepLength","nextStr","_htmlElementAsString","tagName","keyAttrPairs","keyAttr","keyAttrPair","allowedAttrs","freeGlobal","freeSelf","debounce","leading","trailing","memoBuilder","hasWeakSet","WeakSet","inner","delete","registerErrorInstrumentation","activeTransaction","Memo","_hasWeakSet","_inner","supportsFetch","Headers","Request","Response","isNativeFetch","lastHref","instrumented","instrument","originalConsoleMethod","triggerHandlers","instrumentConsole","triggerDOMHandler","globalDOMEventHandler","makeDOMEventHandler","originalAddEventListener","listener","handlers_1","__sentry_instrumentation_handlers__","handlerForType","refCount","originalRemoveEventListener","handlers_2","instrumentDOM","xhrproto","originalOpen","xhrInfo","__sentry_xhr__","__sentry_own_request__","onreadystatechangeHandler","status_code","readyStateArgs","originalSend","instrumentXHR","fetch","sandbox","contentWindow","supportsNativeFetch","originalFetch","handlerData","fetchData","getFetchMethod","getFetchUrl","instrumentFetch","chrome","isChromePackagedApp","app","runtime","hasHistoryApi","history","pushState","replaceState","oldOnPopState","onpopstate","historyReplacementFunction","originalHistoryFunction","from","instrumentHistory","_oldOnErrorHandler","column","_oldOnUnhandledRejectionHandler","onunhandledrejection","addInstrumentationHandler","fetchArgs","debounceTimerID","lastCapturedEvent","globalListener","isContentEditable","shouldSkipDOMEvent","previous","shouldShortcircuitPreviousDebounce","toNumber","nativeMax","nativeMin","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","maxing","invokeFunc","leadingEdge","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","flush","isSymbol","reTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","other","valueOf","isBinary","baseGetTag","isObjectLike","getRawTag","symToStringTag","objectProto","nativeObjectToString","isOwn","unmasked","S2","select2","amd","requirejs","define","undef","main","req","makeMap","defined","waiting","defining","aps","jsSuffixRegExp","hasProp","baseName","nameParts","nameSegment","mapValue","foundMap","lastIndex","foundI","foundStarMap","starI","part","baseParts","starMap","nodeIdCompat","makeRequire","relName","forceSync","makeLoad","depName","callDep","splitPrefix","makeRelParts","makeConfig","relParts","plugin","relResourceName","f","pr","uri","deps","cjsModule","usingExports","callbackType","alt","cfg","_defined","Utils","getMethods","theClass","methods","methodName","Extend","ChildClass","SuperClass","__hasProp","BaseConstructor","__super__","Decorate","DecoratorClass","decoratedMethods","superMethods","DecoratedClass","argCount","calledConstructor","displayName","superMethod","calledMethod","originalMethod","decoratedMethod","Observable","_type","invoke","generateChars","chars","floor","_convertData","originalKey","dataLevel","k","hasScroll","$el","innerHeight","scrollHeight","innerWidth","scrollWidth","escapeMarkup","markup","replaceMap","'","appendMany","$element","$nodes","$jqNodes","__cache","GetUniqueElementId","element","select2Id","StoreData","GetData","RemoveData","Results","dataAdapter","render","$results","displayMessage","hideLoading","$message","hideMessages","$options","item","$option","$dropdown","sorter","highlightFirstItem","$selected","ensureHighlightVisible","setClasses","selectedIds","showLoading","loading","loadingMore","$loading","_resultId","role","template","$children","$child","$childrenContainer","$container","isOpen","$highlighted","getHighlightedResults","currentIndex","nextIndex","$next","currentOffset","nextTop","nextOffset","outerHeight","nextBottom","mousewheel","bottom","deltaY","isAtTop","isAtBottom","$this","destroy","offsetDelta","BACKSPACE","TAB","ENTER","SHIFT","CTRL","ALT","ESC","SPACE","PAGE_UP","PAGE_DOWN","END","HOME","LEFT","UP","RIGHT","DOWN","DELETE","KEYS","BaseSelection","$selection","_tabindex","resultsId","_handleBlur","_attachCloseHandler","_detachCloseHandler","$select","isEnabled","SingleSelection","$rendered","selectionContainer","formatted","MultipleSelection","$selections","Placeholder","decorated","placeholder","normalizePlaceholder","createPlaceholder","$placeholder","singlePlaceholder","AllowClear","_handleClear","_handleKeyboardClear","$clear","previousVal","unselectData","prevented","removeAll","$remove","Search","$search","$searchContainer","_transferTabIndex","_keyUpPrevented","$previousChoice","searchRemoveChoice","documentMode","disableInputEvents","handleSearch","searchHadFocus","resizeSearch","term","EventRelay","relayEvents","preventableEvents","Translation","dict","translation","_cache","loadPath","translations","BaseAdapter","generateResultId","SelectAdapter","currentData","unselect","addOptions","innerText","normalizedData","_normalizeItem","ArrayAdapter","_dataToConvert","convertToOptions","elm","$existing","existingIds","onlyItem","$existingOption","existingData","$newOption","AjaxAdapter","ajaxOptions","_applyDefaults","processResults","q","failure","$request","_request","_queryTimeout","Tags","createTag","insertTag","_removeOldTags","page","wrapper","checkChildren","Tokenizer","tokenizer","dropdown","tokenData","separators","termChar","MinimumInputLength","$e","minimumInputLength","minimum","MaximumInputLength","maximumInputLength","maximum","MaximumSelectionLength","maximumSelectionLength","_checkIfMaximumSelected","successCallback","Dropdown","showSearch","HidePlaceholder","removePlaceholder","modifiedData","InfiniteScroll","lastParams","$loadingMore","createLoadingMore","showLoadingMore","loadMoreIfNeeded","isLoadMoreVisible","loadMore","pagination","more","AttachBody","$dropdownParent","_showDropdown","_attachPositioningHandler","_bindContainerResultHandlers","_hideDropdown","_detachPositioningHandler","$dropdownContainer","_containerResultsHandlersBound","_positionDropdown","_resizeDropdown","scrollEvent","resizeEvent","orientationEvent","$watchers","ev","$window","isCurrentlyAbove","isCurrentlyBelow","newDirection","viewport","enoughRoomAbove","enoughRoomBelow","$offsetParent","isConnected","outerWidth","MinimumResultsForSearch","minimumResultsForSearch","countResults","SelectOnClose","_handleSelectOnClose","originalSelect2Event","$highlightedResults","CloseOnSelect","_selectTriggered","errorLoading","inputTooLong","overChars","inputTooShort","maximumSelected","noResults","searching","removeAllItems","ResultsList","SelectionSearch","DIACRITICS","SelectData","ArrayData","AjaxData","DropdownSearch","EnglishTranslation","Defaults","tokenSeparators","Query","amdBase","initSelection","InitSelection","resultsAdapter","selectOnClose","dropdownAdapter","multiple","SearchableDropdown","closeOnSelect","dropdownCssClass","dropdownCss","adaptDropdownCssClass","DropdownCSS","selectionAdapter","allowClear","containerCssClass","containerCss","adaptContainerCssClass","ContainerCSS","language","_resolveLanguage","uniqueLanguages","_processTranslations","debug","stripDiacritics","amdLanguageBase","dropdownAutoWidth","scrollAfterSelect","templateResult","templateSelection","theme","applyFromElement","optionLanguage","defaultLanguage","elementLanguage","parentLanguage","languages","resolvedLanguages","baseLanguage","languageData","convertedData","Options","fromElement","InputCompat","excludedData","dataset","upperCaseLetter","attributeName","dataName","dataValue","Select2","_generateId","DataAdapter","_placeContainer","SelectionAdapter","DropdownAdapter","ResultsAdapter","_bindAdapters","_registerDomEvents","_registerDataEvents","_registerSelectionEvents","_registerDropdownEvents","_registerResultsEvents","_registerEvents","initialData","_syncAttributes","_resolveWidth","WIDTH","styleWidth","elementWidth","_syncA","_syncS","_syncSubtree","observer","MutationObserver","WebKitMutationObserver","MozMutationObserver","_observer","mutations","observe","childList","subtree","nonRelayEvents","toggleDropdown","_isChangeMutation","changed","addedNodes","removedNodes","mutation","actualTrigger","preTriggerMap","preTriggerName","preTriggerArgs","newVal","detachEvent","disconnect","syncCssClasses","$dest","$src","adapted","replacements","CompatUtils","_containerAdapter","containerCssAdapter","_cssAdapter","_dropdownAdapter","dropdownCssAdapter","_isInitialized","InputData","_currentData","_valueSeparator","getSelected","allData","AttachContainer","StopPropagation","nullLowestDeltaTimeout","lowestDelta","toFix","toBind","fixHooks","mouseHooks","onmousewheel","getLineHeight","getPageHeight","$elem","$parent","adjustOldDeltas","normalizeOffset","orgEvent","deltaX","absDelta","wheelDelta","wheelDeltaY","wheelDeltaX","axis","HORIZONTAL_AXIS","deltaMode","lineHeight","pageHeight","shouldAdjustOldDeltas","boundingRect","deltaFactor","nullLowestDelta","unmousewheel","thisMethods","instanceOptions","ButtonDropdown","CloseMenu","CoursePageSections","navButtons","activeSectionClassName","activeButtonClassName","newSectionName","newSection","ImageGallery","imagesLarge","imagesThumb","currentImage","imageThumb","SortStart","currentParam","queryString","urlParams","orderBy","filterBy","items","MapOverlay","buttonEl","areaName","areaHistory","handleOpenOverlay","handleCloseOverlay","handleAreaClick","handleBackButtonClick","currArea","logo","close_white","course_definitions_page_url","rating_defs","stay_and_play_def","overlayEl","closeButton","overlayBackground","backButton","markerMapEl","markerMapTitle","markerMap","OpenMenu","RevealContent","SearchDropdown","inputEl","searchType","listEl","getResults","throttle","_getResults","previousValue","curr","getOptionTemplate","SearchableSelect","Share","platform","popup","screen","originalFunctionToString","States","SimpleMap","Marker","FunctionToString","setupOnce","PENDING","RESOLVED","REJECTED","_attachHandler","counter","resolvedCollection","addGlobalEventProcessor","SessionStatus","Ok","Exited","DEFAULT_IGNORE_ERRORS","InboundFilters","_options","clientOptions","_mergeOptions","_shouldDropEvent","_isSentryError","_isIgnoredError","_isDeniedUrl","_getEventFilterUrl","_isAllowedUrl","ignoreInternal","ignoreErrors","_getPossibleEventMessages","some","denyUrls","allowUrls","whitelistUrls","blacklistUrls","stacktrace","frames_1","frames","filename","frames_2","SentryError","_newTarget","DSN_REGEX","Dsn","_fromString","_fromComponents","_validate","withPassword","pass","projectId","projectMatch","components","component","ERROR_MESSAGE","installedIntegrations","defaultIntegrations","userIntegrations","userIntegrationsNames_1","pickedIntegrationsNames_1","defaultIntegration","userIntegration","integrationsNames","getIntegrationsToSetup","setupIntegration","Status","BaseClient","backendClass","_integrations","_processing","_backend","dsn","_dsn","_process","_getBackend","eventFromException","_captureEvent","promisedEvent","eventFromMessage","_sendSession","getDsn","_isClientProcessing","transportFlushed","enabled","_isEnabled","_updateSessionFromEvent","crashed","errored","exceptions","exceptions_1","exceptions_1_1","handled","Crashed","sendSession","ticked","setInterval","clearInterval","_prepareEvent","normalizeDepth","prepared","_applyClientOptions","_applyIntegrationsMetadata","finalScope","_normalizeEvent","dist","maxValueLength","sdkInfo","sdk","integrationsArray","_sendEvent","sendEvent","_processEvent","finalEvent","isTransaction","__sentry__","beforeSendResult","processedEvent","fromHttpCode","Success","RateLimit","Invalid","Failed","Unknown","Severity","NoopTransport","Skipped","BaseBackend","_transport","_setupTransport","_exception","_hint","_message","supportsReferrerPolicy","fromString","Debug","Info","Warning","Fatal","Critical","Log","gecko","winjs","geckoEval","chromeEval","reactMinifiedRegexp","computeStackTrace","popSize","framesToPop","opera10Regex","opera11Regex","lines","extractMessage","computeStackTraceFromStacktraceProp","popFrames","submatch","isNative","computeStackTraceFromStackProp","failed","exceptionFromStacktrace","prepareFramesForEvent","eventFromStacktrace","localStack","firstFrameFunction","lastFrameFunction","frame","function","in_app","lineno","eventFromUnknownInput","domException","name_1","eventFromString","rejection","__serialized__","eventFromPlainObject","synthetic","attachStacktrace","sessionToSentryRequest","api","sent_at","getEnvelopeEndpointWithUrlEncodedAuth","eventToSentryRequest","samplingMethod","__sentry_samplingMethod","__sentry_sampleRate","otherTags","useEnvelope","getStoreEndpointWithUrlEncodedAuth","envelope","sample_rates","API","_dsnObject","getBaseApiEndpoint","getStoreEndpoint","_getIngestEndpoint","_encodedAuth","_getEnvelopeEndpoint","getStoreEndpointPath","getRequestHeaders","clientName","clientVersion","getReportDialogEndpoint","dialogOptions","endpoint","encodedOptions","sentry_key","sentry_version","PromiseBuffer","_limit","_buffer","task","drain","capturedSetTimeout","BaseTransport","_rateLimits","_api","_handleResponse","requestType","_handleRateLimit","_disabledUntil","category","_isRateLimited","e_2","rlHeader","raHeader","parameters","_f","e_2_1","FetchTransport","_sendRequest","sentryRequest","originalPayload","fetchParameters","XHRTransport","BrowserBackend","transportOptions","callOnHub","ignoreOnError","shouldIgnoreOnError","ignoreNextOnError","__sentry_wrapped__","sentryWrapped","wrappedArguments","handleEvent","getOwnPropertyDescriptor","injectReportDialog","onLoad","originalConsoleLevel","domEventHandler","keypressEventHandler","eventName","innerOriginal","requestKeys","requestValues","requestPos","args_1","keypressTimeout","debounceTimer","Breadcrumbs","dom","addSentryBreadcrumb","_consoleBreadcrumb","_domBreadcrumb","_xhrBreadcrumb","_fetchBreadcrumb","_historyBreadcrumb","parsedLoc","parsedFrom","parsedTo","BrowserClient","showReportDialog","packages","DEFAULT_EVENT_TARGET","TryCatch","eventTarget","_wrapTimeFunction","_wrapRAF","_wrapXHR","_wrapEventTarget","originalCallback","wrappedEventHandler","originalEventHandler","xmlHttpRequestProps","wrapOptions","GlobalHandlers","_onErrorHandlerInstalled","_onUnhandledRejectionHandlerInstalled","stackTraceLimit","_installGlobalOnErrorHandler","_installGlobalOnUnhandledRejectionHandler","currentHub","hasIntegration","isFailedOwnDelivery","_eventFromIncompleteOnError","_enhanceEventWithInitialFrame","_eventFromRejectionWithPrimitive","LinkedErrors","limit","_handler","linkedErrors","_walkErrorTree","UserAgent","referrer","Referer","window_1","SENTRY_RELEASE","autoSessionTracking","clientClass","initAndBind","loadResolved","fcpResolved","possiblyEndSession","resolveWindowLoaded","po","PerformanceObserver","entryList","getEntries","entry","firstHiddenTime_1","visibilityState","buffered","startSessionTracking","bindReporter","metric","reportAllChanges","prevValue","forceReport","initMetric","entries","supportedEntryTypes","onHidden","cb","onHiddenOrPageHide","firstHiddenTime","getVisibilityWatcher","reportedMetricIDs","MetricsInstrumentation","_reportAllChanges","_performanceCursor","mark","_trackCLS","_trackLCP","_trackFID","addPerformanceEntries","responseStartTimestamp","requestStartTimestamp","entryType","addPerformanceNavigationTiming","_startChild","requestStart","responseEnd","responseStart","addRequest","addNavigationSpans","measureStartTimestamp","measureEndTimestamp","addMeasureSpans","firstHidden","shouldRecord","resourceName","initiatorType","transferSize","encodedBodySize","decodedBodySize","addResourceSpans","_trackNavigator","timeOrigin_1","oldValue","measurementTimestamp","normalizedValue","cls","lcpEntry","clsEntry","size","sources","tagMetricInfo","_lcpEntry","_clsEntry","connection","effectiveType","isMeasurementValue","rtt","downlink","deviceMemory","hardwareConcurrency","onReport","report","sessionValue","sessionEntries","entryHandler","hadRecentInput","firstSessionEntry","lastSessionEntry","takeRecords","getCLS","visibilityWatcher","stopListening_1","capture","getLCP","processingStart","getFID","eventEnd","ctx","defaultRequestInstrumentationOptions","traceFetch","traceXHR","tracingOrigins","instrumentOutgoingRequests","shouldCreateSpanForRequest","urlMap","defaultShouldCreateSpan","origins","shouldCreateSpan","__span","fetchCallback","__sentry_xhr_span_id__","xhrCallback","DEFAULT_BROWSER_TRACING_OPTIONS","markBackgroundTransactions","maxTransactionDuration","routingInstrumentation","customStartTransaction","startTransactionOnPageLoad","startTransactionOnLocationChange","startingUrl","BrowserTracing","_emitOptionsWarning","_configuredIdleTimeout","_metricOptions","_metrics","_getCurrentHub","instrumentRouting","_createRouteTransaction","beforeNavigate","parentContextFromHeader","metaName","querySelector","getHeaderContext","expandedContext","modifiedContext","finalContext","idleTransaction","maxDuration","adjustTransactionDuration","Sentry","SENTRY_DSN","VERSION","sectionNav","imageGallery","simpleMap","courseListRow","mapOverlayButton","buttonDropdown","searchDropdown","listSort","ListSort","openMenuButton","closeMenuButton","shareButton","searchableSelect"],"mappings":"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C,QAAS,CACP,CACEnrB,WAAY,UC5JPurB,EAAsB,CACjC,CACEN,YAAa,iBACbC,YAAa,gBACbC,QAAS,CACP,CACEnrB,WAAY,SAIlB,CACEirB,YAAa,iBACbC,YAAa,kBACbC,QAAS,CACP,CACEnrB,WAAY,MAEd,CACEorB,MAAO,aAIb,CACEH,YAAa,yBACbC,YAAa,MACbC,QAAS,CACP,CACEE,WAAY,QAIlB,CACEJ,YAAa,yBACbC,YAAa,kBACbC,QAAS,CACP,CACEC,MAAO,aAIb,CACEH,YAAa,0BACbC,YAAa,kBACbC,QAAS,CACP,CACEC,MAAO,WAET,CACEE,OAAQ,UAId,CACEL,YAAa,iBACbC,YAAa,SACbC,QAAS,CACP,CACEnrB,WAAY,QAIlB,CACEirB,YAAa,iBACbC,YAAa,qBACbC,QAAS,CACP,CACEnrB,WAAY,SAIlB,CACEirB,YAAa,iBACbC,YAAa,mBACbC,QAAS,CACP,CACEC,MAAO,aAIb,CACEH,YAAa,8BACbC,YAAa,MACbC,QAAS,CACP,CACEnrB,WAAY,SAIlB,CACEirB,YAAa,6BACbC,YAAa,MACbC,QAAS,CACP,CACEnrB,WAAY,SAIlB,CACEirB,YAAa,YACbC,YAAa,gBACbC,QAAS,CACP,CACEnrB,WAAY,MAEd,CACEorB,MAAO,WAET,CACEI,MAAO,UAIb,CACEP,YAAa,qBACbC,YAAa,gBACbC,QAAS,CACP,CACEnrB,WAAY,MAEd,CACEorB,MAAO,WAET,CACEI,MAAO,SAIb,CACEP,YAAa,MACbC,YAAa,MACbC,QAAS,CACP,CACEnrB,WAAY,SAIlB,CACEirB,YAAa,OACbC,YAAa,cACbC,QAAS,CACP,CACEnrB,WAAY,SAIlB,CACEirB,YAAa,eACbC,YAAa,gBACbC,QAAS,CACP,CACEnrB,WAAY,MAEd,CACEorB,MAAO,aAIb,CACEH,YAAa,eACbC,YAAa,kBACbC,QAAS,CACP,CACEC,MAAO,WAET,CACEE,OAAQ,KAEV,CACEtrB,WAAY,SAIlB,CACEirB,YAAa,iCACbC,YAAa,WACbC,QAAS,CACP,CACEnrB,WAAY,QAIlB,CACEirB,YA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CV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IA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","file":"frontend-app.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 89);\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === \"number\") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n};\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n    result.default = mod;\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n    if (!privateMap.has(receiver)) {\r\n        throw new TypeError(\"attempted to get private field on non-instance\");\r\n    }\r\n    return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n    if (!privateMap.has(receiver)) {\r\n        throw new TypeError(\"attempted to set private field on non-instance\");\r\n    }\r\n    privateMap.set(receiver, value);\r\n    return value;\r\n}\r\n","import { getCurrentHub } from '@sentry/hub';\nexport var TRACEPARENT_REGEXP = new RegExp('^[ \\\\t]*' + // whitespace\n    '([0-9a-f]{32})?' + // trace_id\n    '-?([0-9a-f]{16})?' + // span_id\n    '-?([01])?' + // sampled\n    '[ \\\\t]*$');\n/**\n * Determines if tracing is currently enabled.\n *\n * Tracing is enabled when at least one of `tracesSampleRate` and `tracesSampler` is defined in the SDK config.\n */\nexport function hasTracingEnabled(maybeOptions) {\n    var client = getCurrentHub().getClient();\n    var options = maybeOptions || (client && client.getOptions());\n    return !!options && ('tracesSampleRate' in options || 'tracesSampler' in options);\n}\n/**\n * Extract transaction context data from a `sentry-trace` header.\n *\n * @param traceparent Traceparent string\n *\n * @returns Object containing data from the header, or undefined if traceparent string is malformed\n */\nexport function extractTraceparentData(traceparent) {\n    var matches = traceparent.match(TRACEPARENT_REGEXP);\n    if (matches) {\n        var parentSampled = void 0;\n        if (matches[3] === '1') {\n            parentSampled = true;\n        }\n        else if (matches[3] === '0') {\n            parentSampled = false;\n        }\n        return {\n            traceId: matches[1],\n            parentSampled: parentSampled,\n            parentSpanId: matches[2],\n        };\n    }\n    return undefined;\n}\n/** Grabs active transaction off scope, if any */\nexport function getActiveTransaction(maybeHub) {\n    var hub = maybeHub || getCurrentHub();\n    var scope = hub.getScope();\n    return scope && scope.getTransaction();\n}\n/**\n * Converts from milliseconds to seconds\n * @param time time in ms\n */\nexport function msToSec(time) {\n    return time / 1000;\n}\n/**\n * Converts from seconds to milliseconds\n * @param time time in seconds\n */\nexport function secToMs(time) {\n    return time * 1000;\n}\n// so it can be used in manual instrumentation without necessitating a hard dependency on @sentry/utils\nexport { stripUrlQueryAndFragment } from '@sentry/utils';\n//# sourceMappingURL=utils.js.map","export const GREEN = \"#17794d\";\nexport const YELLOW = \"#eddc0c\";\nexport const COURSES = \"courses\";\nexport const AREAS = \"areas\";\nexport const COURSE_GROUPS = \"course-groups\";\n\nexport const GOOGLE_MAPS_API_KEY = \"AIzaSyCYC69VSGd2L4RKXVrlNW5H371xKH9OvZ8\";\n","import { getGlobalObject } from './global';\n// TODO: Implement different loggers for different environments\nvar global = getGlobalObject();\n/** Prefix for logging strings */\nvar PREFIX = 'Sentry Logger ';\n/**\n * Temporarily unwrap `console.log` and friends in order to perform the given callback using the original methods.\n * Restores wrapping after the callback completes.\n *\n * @param callback The function to run against the original `console` messages\n * @returns The results of the callback\n */\nexport function consoleSandbox(callback) {\n    var global = getGlobalObject();\n    var levels = ['debug', 'info', 'warn', 'error', 'log', 'assert'];\n    if (!('console' in global)) {\n        return callback();\n    }\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    var originalConsole = global.console;\n    var wrappedLevels = {};\n    // Restore all wrapped console methods\n    levels.forEach(function (level) {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n        if (level in global.console && originalConsole[level].__sentry_original__) {\n            wrappedLevels[level] = originalConsole[level];\n            originalConsole[level] = originalConsole[level].__sentry_original__;\n        }\n    });\n    // Perform callback manipulations\n    var result = callback();\n    // Revert restoration to wrapped state\n    Object.keys(wrappedLevels).forEach(function (level) {\n        originalConsole[level] = wrappedLevels[level];\n    });\n    return result;\n}\n/** JSDoc */\nvar Logger = /** @class */ (function () {\n    /** JSDoc */\n    function Logger() {\n        this._enabled = false;\n    }\n    /** JSDoc */\n    Logger.prototype.disable = function () {\n        this._enabled = false;\n    };\n    /** JSDoc */\n    Logger.prototype.enable = function () {\n        this._enabled = true;\n    };\n    /** JSDoc */\n    Logger.prototype.log = function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        if (!this._enabled) {\n            return;\n        }\n        consoleSandbox(function () {\n            global.console.log(PREFIX + \"[Log]: \" + args.join(' '));\n        });\n    };\n    /** JSDoc */\n    Logger.prototype.warn = function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        if (!this._enabled) {\n            return;\n        }\n        consoleSandbox(function () {\n            global.console.warn(PREFIX + \"[Warn]: \" + args.join(' '));\n        });\n    };\n    /** JSDoc */\n    Logger.prototype.error = function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        if (!this._enabled) {\n            return;\n        }\n        consoleSandbox(function () {\n            global.console.error(PREFIX + \"[Error]: \" + args.join(' '));\n        });\n    };\n    return Logger;\n}());\n// Ensure we only have a single logger instance, even if multiple versions of @sentry/utils are being used\nglobal.__SENTRY__ = global.__SENTRY__ || {};\nvar logger = global.__SENTRY__.logger || (global.__SENTRY__.logger = new Logger());\nexport { logger };\n//# sourceMappingURL=logger.js.map","'use strict';\n\nvar bind = require('./helpers/bind');\nvar isBuffer = require('is-buffer');\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n  return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n  return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n  return (typeof FormData !== 'undefined') && (val instanceof FormData);\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n  var result;\n  if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n    result = ArrayBuffer.isView(val);\n  } else {\n    result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n  }\n  return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n  return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n  return typeof val === 'number';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n  return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n  return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n  return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n  return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n  return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n  return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n  return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n  return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n  return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n *  typeof window -> undefined\n *  typeof document -> undefined\n *\n * react-native:\n *  navigator.product -> 'ReactNative'\n * nativescript\n *  navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n  if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n                                           navigator.product === 'NativeScript' ||\n                                           navigator.product === 'NS')) {\n    return false;\n  }\n  return (\n    typeof window !== 'undefined' &&\n    typeof document !== 'undefined'\n  );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n  // Don't bother if no value provided\n  if (obj === null || typeof obj === 'undefined') {\n    return;\n  }\n\n  // Force an array if not already something iterable\n  if (typeof obj !== 'object') {\n    /*eslint no-param-reassign:0*/\n    obj = [obj];\n  }\n\n  if (isArray(obj)) {\n    // Iterate over array values\n    for (var i = 0, l = obj.length; i < l; i++) {\n      fn.call(null, obj[i], i, obj);\n    }\n  } else {\n    // Iterate over object keys\n    for (var key in obj) {\n      if (Object.prototype.hasOwnProperty.call(obj, key)) {\n        fn.call(null, obj[key], key, obj);\n      }\n    }\n  }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n  var result = {};\n  function assignValue(val, key) {\n    if (typeof result[key] === 'object' && typeof val === 'object') {\n      result[key] = merge(result[key], val);\n    } else {\n      result[key] = val;\n    }\n  }\n\n  for (var i = 0, l = arguments.length; i < l; i++) {\n    forEach(arguments[i], assignValue);\n  }\n  return result;\n}\n\n/**\n * Function equal to merge with the difference being that no reference\n * to original objects is kept.\n *\n * @see merge\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction deepMerge(/* obj1, obj2, obj3, ... */) {\n  var result = {};\n  function assignValue(val, key) {\n    if (typeof result[key] === 'object' && typeof val === 'object') {\n      result[key] = deepMerge(result[key], val);\n    } else if (typeof val === 'object') {\n      result[key] = deepMerge({}, val);\n    } else {\n      result[key] = val;\n    }\n  }\n\n  for (var i = 0, l = arguments.length; i < l; i++) {\n    forEach(arguments[i], assignValue);\n  }\n  return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n  forEach(b, function assignValue(val, key) {\n    if (thisArg && typeof val === 'function') {\n      a[key] = bind(val, thisArg);\n    } else {\n      a[key] = val;\n    }\n  });\n  return a;\n}\n\nmodule.exports = {\n  isArray: isArray,\n  isArrayBuffer: isArrayBuffer,\n  isBuffer: isBuffer,\n  isFormData: isFormData,\n  isArrayBufferView: isArrayBufferView,\n  isString: isString,\n  isNumber: isNumber,\n  isObject: isObject,\n  isUndefined: isUndefined,\n  isDate: isDate,\n  isFile: isFile,\n  isBlob: isBlob,\n  isFunction: isFunction,\n  isStream: isStream,\n  isURLSearchParams: isURLSearchParams,\n  isStandardBrowserEnv: isStandardBrowserEnv,\n  forEach: forEach,\n  merge: merge,\n  deepMerge: deepMerge,\n  extend: extend,\n  trim: trim\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n/**\n * Checks whether given value's type is one of a few Error or Error-like\n * {@link isError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isError(wat) {\n    switch (Object.prototype.toString.call(wat)) {\n        case '[object Error]':\n            return true;\n        case '[object Exception]':\n            return true;\n        case '[object DOMException]':\n            return true;\n        default:\n            return isInstanceOf(wat, Error);\n    }\n}\n/**\n * Checks whether given value's type is ErrorEvent\n * {@link isErrorEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isErrorEvent(wat) {\n    return Object.prototype.toString.call(wat) === '[object ErrorEvent]';\n}\n/**\n * Checks whether given value's type is DOMError\n * {@link isDOMError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isDOMError(wat) {\n    return Object.prototype.toString.call(wat) === '[object DOMError]';\n}\n/**\n * Checks whether given value's type is DOMException\n * {@link isDOMException}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isDOMException(wat) {\n    return Object.prototype.toString.call(wat) === '[object DOMException]';\n}\n/**\n * Checks whether given value's type is a string\n * {@link isString}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isString(wat) {\n    return Object.prototype.toString.call(wat) === '[object String]';\n}\n/**\n * Checks whether given value's is a primitive (undefined, null, number, boolean, string, bigint, symbol)\n * {@link isPrimitive}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isPrimitive(wat) {\n    return wat === null || (typeof wat !== 'object' && typeof wat !== 'function');\n}\n/**\n * Checks whether given value's type is an object literal\n * {@link isPlainObject}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isPlainObject(wat) {\n    return Object.prototype.toString.call(wat) === '[object Object]';\n}\n/**\n * Checks whether given value's type is an Event instance\n * {@link isEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isEvent(wat) {\n    return typeof Event !== 'undefined' && isInstanceOf(wat, Event);\n}\n/**\n * Checks whether given value's type is an Element instance\n * {@link isElement}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isElement(wat) {\n    return typeof Element !== 'undefined' && isInstanceOf(wat, Element);\n}\n/**\n * Checks whether given value's type is an regexp\n * {@link isRegExp}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isRegExp(wat) {\n    return Object.prototype.toString.call(wat) === '[object RegExp]';\n}\n/**\n * Checks whether given value has a then function.\n * @param wat A value to be checked.\n */\nexport function isThenable(wat) {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    return Boolean(wat && wat.then && typeof wat.then === 'function');\n}\n/**\n * Checks whether given value's type is a SyntheticEvent\n * {@link isSyntheticEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isSyntheticEvent(wat) {\n    return isPlainObject(wat) && 'nativeEvent' in wat && 'preventDefault' in wat && 'stopPropagation' in wat;\n}\n/**\n * Checks whether given value's type is an instance of provided constructor.\n * {@link isInstanceOf}.\n *\n * @param wat A value to be checked.\n * @param base A constructor to be used in a check.\n * @returns A boolean representing the result.\n */\nexport function isInstanceOf(wat, base) {\n    try {\n        return wat instanceof base;\n    }\n    catch (_e) {\n        return false;\n    }\n}\n//# sourceMappingURL=is.js.map","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n// eslint-disable-next-line @typescript-eslint/unbound-method\nvar objectToString = Object.prototype.toString;\n/**\n * Checks whether given value's type is one of a few Error or Error-like\n * {@link isError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isError(wat) {\n    switch (objectToString.call(wat)) {\n        case '[object Error]':\n        case '[object Exception]':\n        case '[object DOMException]':\n            return true;\n        default:\n            return isInstanceOf(wat, Error);\n    }\n}\nfunction isBuiltin(wat, ty) {\n    return objectToString.call(wat) === \"[object \" + ty + \"]\";\n}\n/**\n * Checks whether given value's type is ErrorEvent\n * {@link isErrorEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isErrorEvent(wat) {\n    return isBuiltin(wat, 'ErrorEvent');\n}\n/**\n * Checks whether given value's type is DOMError\n * {@link isDOMError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isDOMError(wat) {\n    return isBuiltin(wat, 'DOMError');\n}\n/**\n * Checks whether given value's type is DOMException\n * {@link isDOMException}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isDOMException(wat) {\n    return isBuiltin(wat, 'DOMException');\n}\n/**\n * Checks whether given value's type is a string\n * {@link isString}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isString(wat) {\n    return isBuiltin(wat, 'String');\n}\n/**\n * Checks whether given value is a primitive (undefined, null, number, boolean, string, bigint, symbol)\n * {@link isPrimitive}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isPrimitive(wat) {\n    return wat === null || (typeof wat !== 'object' && typeof wat !== 'function');\n}\n/**\n * Checks whether given value's type is an object literal\n * {@link isPlainObject}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isPlainObject(wat) {\n    return isBuiltin(wat, 'Object');\n}\n/**\n * Checks whether given value's type is an Event instance\n * {@link isEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isEvent(wat) {\n    return typeof Event !== 'undefined' && isInstanceOf(wat, Event);\n}\n/**\n * Checks whether given value's type is an Element instance\n * {@link isElement}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isElement(wat) {\n    return typeof Element !== 'undefined' && isInstanceOf(wat, Element);\n}\n/**\n * Checks whether given value's type is an regexp\n * {@link isRegExp}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isRegExp(wat) {\n    return isBuiltin(wat, 'RegExp');\n}\n/**\n * Checks whether given value has a then function.\n * @param wat A value to be checked.\n */\nexport function isThenable(wat) {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    return Boolean(wat && wat.then && typeof wat.then === 'function');\n}\n/**\n * Checks whether given value's type is a SyntheticEvent\n * {@link isSyntheticEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isSyntheticEvent(wat) {\n    return isPlainObject(wat) && 'nativeEvent' in wat && 'preventDefault' in wat && 'stopPropagation' in wat;\n}\n/**\n * Checks whether given value's type is an instance of provided constructor.\n * {@link isInstanceOf}.\n *\n * @param wat A value to be checked.\n * @param base A constructor to be used in a check.\n * @returns A boolean representing the result.\n */\nexport function isInstanceOf(wat, base) {\n    try {\n        return wat instanceof base;\n    }\n    catch (_e) {\n        return false;\n    }\n}\n//# sourceMappingURL=is.js.map","module.exports = require('./lib/axios');","/**\n * NOTE: In order to avoid circular dependencies, if you add a function to this module and it needs to print something,\n * you must either a) use `console.log` rather than the logger, or b) put your function elsewhere.\n */\nimport { isNodeEnv } from './node';\nvar fallbackGlobalObject = {};\n/**\n * Safely get global scope object\n *\n * @returns Global scope object\n */\nexport function getGlobalObject() {\n    return (isNodeEnv()\n        ? global\n        : typeof window !== 'undefined' // eslint-disable-line no-restricted-globals\n            ? window // eslint-disable-line no-restricted-globals\n            : typeof self !== 'undefined'\n                ? self\n                : fallbackGlobalObject);\n}\n//# sourceMappingURL=global.js.map","import { __values } from \"tslib\";\nimport { htmlTreeAsString } from './browser';\nimport { isElement, isError, isEvent, isInstanceOf, isPlainObject, isPrimitive, isSyntheticEvent } from './is';\nimport { memoBuilder } from './memo';\nimport { getFunctionName } from './stacktrace';\nimport { truncate } from './string';\n/**\n * Replace a method in an object with a wrapped version of itself.\n *\n * @param source An object that contains a method to be wrapped.\n * @param name The name of the method to be wrapped.\n * @param replacementFactory A higher-order function that takes the original version of the given method and returns a\n * wrapped version. Note: The function returned by `replacementFactory` needs to be a non-arrow function, in order to\n * preserve the correct value of `this`, and the original method must be called using `origMethod.call(this, <other\n * args>)` or `origMethod.apply(this, [<other args>])` (rather than being called directly), again to preserve `this`.\n * @returns void\n */\nexport function fill(source, name, replacementFactory) {\n    if (!(name in source)) {\n        return;\n    }\n    var original = source[name];\n    var wrapped = replacementFactory(original);\n    // Make sure it's a function first, as we need to attach an empty prototype for `defineProperties` to work\n    // otherwise it'll throw \"TypeError: Object.defineProperties called on non-object\"\n    if (typeof wrapped === 'function') {\n        try {\n            markFunctionWrapped(wrapped, original);\n        }\n        catch (_Oo) {\n            // This can throw if multiple fill happens on a global object like XMLHttpRequest\n            // Fixes https://github.com/getsentry/sentry-javascript/issues/2043\n        }\n    }\n    source[name] = wrapped;\n}\n/**\n * Defines a non-enumerable property on the given object.\n *\n * @param obj The object on which to set the property\n * @param name The name of the property to be set\n * @param value The value to which to set the property\n */\nexport function addNonEnumerableProperty(obj, name, value) {\n    Object.defineProperty(obj, name, {\n        // enumerable: false, // the default, so we can save on bundle size by not explicitly setting it\n        value: value,\n        writable: true,\n        configurable: true,\n    });\n}\n/**\n * Remembers the original function on the wrapped function and\n * patches up the prototype.\n *\n * @param wrapped the wrapper function\n * @param original the original function that gets wrapped\n */\nexport function markFunctionWrapped(wrapped, original) {\n    var proto = original.prototype || {};\n    wrapped.prototype = original.prototype = proto;\n    addNonEnumerableProperty(wrapped, '__sentry_original__', original);\n}\n/**\n * This extracts the original function if available.  See\n * `markFunctionWrapped` for more information.\n *\n * @param func the function to unwrap\n * @returns the unwrapped version of the function if available.\n */\nexport function getOriginalFunction(func) {\n    return func.__sentry_original__;\n}\n/**\n * Encodes given object into url-friendly format\n *\n * @param object An object that contains serializable values\n * @returns string Encoded\n */\nexport function urlEncode(object) {\n    return Object.keys(object)\n        .map(function (key) { return encodeURIComponent(key) + \"=\" + encodeURIComponent(object[key]); })\n        .join('&');\n}\n/**\n * Transforms any object into an object literal with all its attributes\n * attached to it.\n *\n * @param value Initial source that we have to transform in order for it to be usable by the serializer\n */\nfunction getWalkSource(value) {\n    if (isError(value)) {\n        var error = value;\n        var err = {\n            message: error.message,\n            name: error.name,\n            stack: error.stack,\n        };\n        for (var i in error) {\n            if (Object.prototype.hasOwnProperty.call(error, i)) {\n                err[i] = error[i];\n            }\n        }\n        return err;\n    }\n    if (isEvent(value)) {\n        var event_1 = value;\n        var source = {};\n        // Accessing event attributes can throw (see https://github.com/getsentry/sentry-javascript/issues/768 and\n        // https://github.com/getsentry/sentry-javascript/issues/838), but accessing `type` hasn't been wrapped in a\n        // try-catch in at least two years and no one's complained, so that's likely not an issue anymore\n        source.type = event_1.type;\n        try {\n            source.target = isElement(event_1.target)\n                ? htmlTreeAsString(event_1.target)\n                : Object.prototype.toString.call(event_1.target);\n        }\n        catch (_oO) {\n            source.target = '<unknown>';\n        }\n        try {\n            source.currentTarget = isElement(event_1.currentTarget)\n                ? htmlTreeAsString(event_1.currentTarget)\n                : Object.prototype.toString.call(event_1.currentTarget);\n        }\n        catch (_oO) {\n            source.currentTarget = '<unknown>';\n        }\n        if (typeof CustomEvent !== 'undefined' && isInstanceOf(value, CustomEvent)) {\n            source.detail = event_1.detail;\n        }\n        for (var attr in event_1) {\n            if (Object.prototype.hasOwnProperty.call(event_1, attr)) {\n                source[attr] = event_1[attr];\n            }\n        }\n        return source;\n    }\n    return value;\n}\n/** Calculates bytes size of input string */\nfunction utf8Length(value) {\n    // eslint-disable-next-line no-bitwise\n    return ~-encodeURI(value).split(/%..|./).length;\n}\n/** Calculates bytes size of input object */\nfunction jsonSize(value) {\n    return utf8Length(JSON.stringify(value));\n}\n/** JSDoc */\nexport function normalizeToSize(object, \n// Default Node.js REPL depth\ndepth, \n// 100kB, as 200kB is max payload size, so half sounds reasonable\nmaxSize) {\n    if (depth === void 0) { depth = 3; }\n    if (maxSize === void 0) { maxSize = 100 * 1024; }\n    var serialized = normalize(object, depth);\n    if (jsonSize(serialized) > maxSize) {\n        return normalizeToSize(object, depth - 1, maxSize);\n    }\n    return serialized;\n}\n/**\n * Transform any non-primitive, BigInt, or Symbol-type value into a string. Acts as a no-op on strings, numbers,\n * booleans, null, and undefined.\n *\n * @param value The value to stringify\n * @returns For non-primitive, BigInt, and Symbol-type values, a string denoting the value's type, type and value, or\n *  type and `description` property, respectively. For non-BigInt, non-Symbol primitives, returns the original value,\n *  unchanged.\n */\nfunction serializeValue(value) {\n    // Node.js REPL notation\n    if (typeof value === 'string') {\n        return value;\n    }\n    var type = Object.prototype.toString.call(value);\n    if (type === '[object Object]') {\n        return '[Object]';\n    }\n    if (type === '[object Array]') {\n        return '[Array]';\n    }\n    var normalized = normalizeValue(value);\n    return isPrimitive(normalized) ? normalized : type;\n}\n/**\n * normalizeValue()\n *\n * Takes unserializable input and make it serializable friendly\n *\n * - translates undefined/NaN values to \"[undefined]\"/\"[NaN]\" respectively,\n * - serializes Error objects\n * - filter global objects\n */\nfunction normalizeValue(value, key) {\n    if (key === 'domain' && value && typeof value === 'object' && value._events) {\n        return '[Domain]';\n    }\n    if (key === 'domainEmitter') {\n        return '[DomainEmitter]';\n    }\n    if (typeof global !== 'undefined' && value === global) {\n        return '[Global]';\n    }\n    // It's safe to use `window` and `document` here in this manner, as we are asserting using `typeof` first\n    // which won't throw if they are not present.\n    // eslint-disable-next-line no-restricted-globals\n    if (typeof window !== 'undefined' && value === window) {\n        return '[Window]';\n    }\n    // eslint-disable-next-line no-restricted-globals\n    if (typeof document !== 'undefined' && value === document) {\n        return '[Document]';\n    }\n    // React's SyntheticEvent thingy\n    if (isSyntheticEvent(value)) {\n        return '[SyntheticEvent]';\n    }\n    if (typeof value === 'number' && value !== value) {\n        return '[NaN]';\n    }\n    if (value === void 0) {\n        return '[undefined]';\n    }\n    if (typeof value === 'function') {\n        return \"[Function: \" + getFunctionName(value) + \"]\";\n    }\n    // symbols and bigints are considered primitives by TS, but aren't natively JSON-serilaizable\n    if (typeof value === 'symbol') {\n        return \"[\" + String(value) + \"]\";\n    }\n    if (typeof value === 'bigint') {\n        return \"[BigInt: \" + String(value) + \"]\";\n    }\n    return value;\n}\n/**\n * Walks an object to perform a normalization on it\n *\n * @param key of object that's walked in current iteration\n * @param value object to be walked\n * @param depth Optional number indicating how deep should walking be performed\n * @param memo Optional Memo class handling decycling\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function walk(key, value, depth, memo) {\n    if (depth === void 0) { depth = +Infinity; }\n    if (memo === void 0) { memo = memoBuilder(); }\n    // If we reach the maximum depth, serialize whatever is left\n    if (depth === 0) {\n        return serializeValue(value);\n    }\n    /* eslint-disable @typescript-eslint/no-unsafe-member-access */\n    // If value implements `toJSON` method, call it and return early\n    if (value !== null && value !== undefined && typeof value.toJSON === 'function') {\n        return value.toJSON();\n    }\n    /* eslint-enable @typescript-eslint/no-unsafe-member-access */\n    // If normalized value is a primitive, there are no branches left to walk, so bail out\n    var normalized = normalizeValue(value, key);\n    if (isPrimitive(normalized)) {\n        return normalized;\n    }\n    // Create source that we will use for the next iteration. It will either be an objectified error object (`Error` type\n    // with extracted key:value pairs) or the input itself.\n    var source = getWalkSource(value);\n    // Create an accumulator that will act as a parent for all future itterations of that branch\n    var acc = Array.isArray(value) ? [] : {};\n    // If we already walked that branch, bail out, as it's circular reference\n    if (memo[0](value)) {\n        return '[Circular ~]';\n    }\n    // Walk all keys of the source\n    for (var innerKey in source) {\n        // Avoid iterating over fields in the prototype if they've somehow been exposed to enumeration.\n        if (!Object.prototype.hasOwnProperty.call(source, innerKey)) {\n            continue;\n        }\n        // Recursively walk through all the child nodes\n        acc[innerKey] = walk(innerKey, source[innerKey], depth - 1, memo);\n    }\n    // Once walked through all the branches, remove the parent from memo storage\n    memo[1](value);\n    // Return accumulated values\n    return acc;\n}\n/**\n * normalize()\n *\n * - Creates a copy to prevent original input mutation\n * - Skip non-enumerablers\n * - Calls `toJSON` if implemented\n * - Removes circular references\n * - Translates non-serializeable values (undefined/NaN/Functions) to serializable format\n * - Translates known global objects/Classes to a string representations\n * - Takes care of Error objects serialization\n * - Optionally limit depth of final output\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function normalize(input, depth) {\n    try {\n        return JSON.parse(JSON.stringify(input, function (key, value) { return walk(key, value, depth); }));\n    }\n    catch (_oO) {\n        return '**non-serializable**';\n    }\n}\n/**\n * Given any captured exception, extract its keys and create a sorted\n * and truncated list that will be used inside the event message.\n * eg. `Non-error exception captured with keys: foo, bar, baz`\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function extractExceptionKeysForMessage(exception, maxLength) {\n    if (maxLength === void 0) { maxLength = 40; }\n    var keys = Object.keys(getWalkSource(exception));\n    keys.sort();\n    if (!keys.length) {\n        return '[object has no keys]';\n    }\n    if (keys[0].length >= maxLength) {\n        return truncate(keys[0], maxLength);\n    }\n    for (var includedKeys = keys.length; includedKeys > 0; includedKeys--) {\n        var serialized = keys.slice(0, includedKeys).join(', ');\n        if (serialized.length > maxLength) {\n            continue;\n        }\n        if (includedKeys === keys.length) {\n            return serialized;\n        }\n        return truncate(serialized, maxLength);\n    }\n    return '';\n}\n/**\n * Given any object, return the new object with removed keys that value was `undefined`.\n * Works recursively on objects and arrays.\n */\nexport function dropUndefinedKeys(val) {\n    var e_1, _a;\n    if (isPlainObject(val)) {\n        var obj = val;\n        var rv = {};\n        try {\n            for (var _b = __values(Object.keys(obj)), _c = _b.next(); !_c.done; _c = _b.next()) {\n                var key = _c.value;\n                if (typeof obj[key] !== 'undefined') {\n                    rv[key] = dropUndefinedKeys(obj[key]);\n                }\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        return rv;\n    }\n    if (Array.isArray(val)) {\n        return val.map(dropUndefinedKeys);\n    }\n    return val;\n}\n/**\n * Ensure that something is an object.\n *\n * Turns `undefined` and `null` into `String`s and all other primitives into instances of their respective wrapper\n * classes (String, Boolean, Number, etc.). Acts as the identity function on non-primitives.\n *\n * @param wat The subject of the objectification\n * @returns A version of `wat` which can safely be used with `Object` class methods\n */\nexport function objectify(wat) {\n    var objectified;\n    switch (true) {\n        case wat === undefined || wat === null:\n            objectified = new String(wat);\n            break;\n        // Though symbols and bigints do have wrapper classes (`Symbol` and `BigInt`, respectively), for whatever reason\n        // those classes don't have constructors which can be used with the `new` keyword. We therefore need to cast each as\n        // an object in order to wrap it.\n        case typeof wat === 'symbol' || typeof wat === 'bigint':\n            objectified = Object(wat);\n            break;\n        // this will catch the remaining primitives: `String`, `Number`, and `Boolean`\n        case isPrimitive(wat):\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n            objectified = new wat.constructor(wat);\n            break;\n        // by process of elimination, at this point we know that `wat` must already be an object\n        default:\n            objectified = wat;\n            break;\n    }\n    return objectified;\n}\n//# sourceMappingURL=object.js.map","import { isNodeEnv } from './node';\nimport { snipLine } from './string';\nvar fallbackGlobalObject = {};\n/**\n * Safely get global scope object\n *\n * @returns Global scope object\n */\nexport function getGlobalObject() {\n    return (isNodeEnv()\n        ? global\n        : typeof window !== 'undefined'\n            ? window\n            : typeof self !== 'undefined'\n                ? self\n                : fallbackGlobalObject);\n}\n/**\n * UUID4 generator\n *\n * @returns string Generated UUID4.\n */\nexport function uuid4() {\n    var global = getGlobalObject();\n    var crypto = global.crypto || global.msCrypto;\n    if (!(crypto === void 0) && crypto.getRandomValues) {\n        // Use window.crypto API if available\n        var arr = new Uint16Array(8);\n        crypto.getRandomValues(arr);\n        // set 4 in byte 7\n        // eslint-disable-next-line no-bitwise\n        arr[3] = (arr[3] & 0xfff) | 0x4000;\n        // set 2 most significant bits of byte 9 to '10'\n        // eslint-disable-next-line no-bitwise\n        arr[4] = (arr[4] & 0x3fff) | 0x8000;\n        var pad = function (num) {\n            var v = num.toString(16);\n            while (v.length < 4) {\n                v = \"0\" + v;\n            }\n            return v;\n        };\n        return (pad(arr[0]) + pad(arr[1]) + pad(arr[2]) + pad(arr[3]) + pad(arr[4]) + pad(arr[5]) + pad(arr[6]) + pad(arr[7]));\n    }\n    // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n    return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n        // eslint-disable-next-line no-bitwise\n        var r = (Math.random() * 16) | 0;\n        // eslint-disable-next-line no-bitwise\n        var v = c === 'x' ? r : (r & 0x3) | 0x8;\n        return v.toString(16);\n    });\n}\n/**\n * Parses string form of URL into an object\n * // borrowed from https://tools.ietf.org/html/rfc3986#appendix-B\n * // intentionally using regex and not <a/> href parsing trick because React Native and other\n * // environments where DOM might not be available\n * @returns parsed URL object\n */\nexport function parseUrl(url) {\n    if (!url) {\n        return {};\n    }\n    var match = url.match(/^(([^:/?#]+):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n    if (!match) {\n        return {};\n    }\n    // coerce to undefined values to empty string so we don't get 'undefined'\n    var query = match[6] || '';\n    var fragment = match[8] || '';\n    return {\n        host: match[4],\n        path: match[5],\n        protocol: match[2],\n        relative: match[5] + query + fragment,\n    };\n}\n/**\n * Extracts either message or type+value from an event that can be used for user-facing logs\n * @returns event's description\n */\nexport function getEventDescription(event) {\n    if (event.message) {\n        return event.message;\n    }\n    if (event.exception && event.exception.values && event.exception.values[0]) {\n        var exception = event.exception.values[0];\n        if (exception.type && exception.value) {\n            return exception.type + \": \" + exception.value;\n        }\n        return exception.type || exception.value || event.event_id || '<unknown>';\n    }\n    return event.event_id || '<unknown>';\n}\n/** JSDoc */\nexport function consoleSandbox(callback) {\n    var global = getGlobalObject();\n    var levels = ['debug', 'info', 'warn', 'error', 'log', 'assert'];\n    if (!('console' in global)) {\n        return callback();\n    }\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    var originalConsole = global.console;\n    var wrappedLevels = {};\n    // Restore all wrapped console methods\n    levels.forEach(function (level) {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n        if (level in global.console && originalConsole[level].__sentry_original__) {\n            wrappedLevels[level] = originalConsole[level];\n            originalConsole[level] = originalConsole[level].__sentry_original__;\n        }\n    });\n    // Perform callback manipulations\n    var result = callback();\n    // Revert restoration to wrapped state\n    Object.keys(wrappedLevels).forEach(function (level) {\n        originalConsole[level] = wrappedLevels[level];\n    });\n    return result;\n}\n/**\n * Adds exception values, type and value to an synthetic Exception.\n * @param event The event to modify.\n * @param value Value of the exception.\n * @param type Type of the exception.\n * @hidden\n */\nexport function addExceptionTypeValue(event, value, type) {\n    event.exception = event.exception || {};\n    event.exception.values = event.exception.values || [];\n    event.exception.values[0] = event.exception.values[0] || {};\n    event.exception.values[0].value = event.exception.values[0].value || value || '';\n    event.exception.values[0].type = event.exception.values[0].type || type || 'Error';\n}\n/**\n * Adds exception mechanism to a given event.\n * @param event The event to modify.\n * @param mechanism Mechanism of the mechanism.\n * @hidden\n */\nexport function addExceptionMechanism(event, mechanism) {\n    if (mechanism === void 0) { mechanism = {}; }\n    // TODO: Use real type with `keyof Mechanism` thingy and maybe make it better?\n    try {\n        // @ts-ignore Type 'Mechanism | {}' is not assignable to type 'Mechanism | undefined'\n        // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n        event.exception.values[0].mechanism = event.exception.values[0].mechanism || {};\n        Object.keys(mechanism).forEach(function (key) {\n            // @ts-ignore Mechanism has no index signature\n            // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n            event.exception.values[0].mechanism[key] = mechanism[key];\n        });\n    }\n    catch (_oO) {\n        // no-empty\n    }\n}\n/**\n * A safe form of location.href\n */\nexport function getLocationHref() {\n    try {\n        return document.location.href;\n    }\n    catch (oO) {\n        return '';\n    }\n}\n// https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string\nvar SEMVER_REGEXP = /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$/;\n/**\n * Parses input into a SemVer interface\n * @param input string representation of a semver version\n */\nexport function parseSemver(input) {\n    var match = input.match(SEMVER_REGEXP) || [];\n    var major = parseInt(match[1], 10);\n    var minor = parseInt(match[2], 10);\n    var patch = parseInt(match[3], 10);\n    return {\n        buildmetadata: match[5],\n        major: isNaN(major) ? undefined : major,\n        minor: isNaN(minor) ? undefined : minor,\n        patch: isNaN(patch) ? undefined : patch,\n        prerelease: match[4],\n    };\n}\nvar defaultRetryAfter = 60 * 1000; // 60 seconds\n/**\n * Extracts Retry-After value from the request header or returns default value\n * @param now current unix timestamp\n * @param header string representation of 'Retry-After' header\n */\nexport function parseRetryAfterHeader(now, header) {\n    if (!header) {\n        return defaultRetryAfter;\n    }\n    var headerDelay = parseInt(\"\" + header, 10);\n    if (!isNaN(headerDelay)) {\n        return headerDelay * 1000;\n    }\n    var headerDate = Date.parse(\"\" + header);\n    if (!isNaN(headerDate)) {\n        return headerDate - now;\n    }\n    return defaultRetryAfter;\n}\n/**\n * This function adds context (pre/post/line) lines to the provided frame\n *\n * @param lines string[] containing all lines\n * @param frame StackFrame that will be mutated\n * @param linesOfContext number of context lines we want to add pre/post\n */\nexport function addContextToFrame(lines, frame, linesOfContext) {\n    if (linesOfContext === void 0) { linesOfContext = 5; }\n    var lineno = frame.lineno || 0;\n    var maxLines = lines.length;\n    var sourceLine = Math.max(Math.min(maxLines, lineno - 1), 0);\n    frame.pre_context = lines\n        .slice(Math.max(0, sourceLine - linesOfContext), sourceLine)\n        .map(function (line) { return snipLine(line, 0); });\n    frame.context_line = snipLine(lines[Math.min(maxLines - 1, sourceLine)], frame.colno || 0);\n    frame.post_context = lines\n        .slice(Math.min(sourceLine + 1, maxLines), sourceLine + 1 + linesOfContext)\n        .map(function (line) { return snipLine(line, 0); });\n}\n/**\n * Strip the query string and fragment off of a given URL or path (if present)\n *\n * @param urlPath Full URL or path, including possible query string and/or fragment\n * @returns URL or path without query string or fragment\n */\nexport function stripUrlQueryAndFragment(urlPath) {\n    // eslint-disable-next-line no-useless-escape\n    return urlPath.split(/[\\?#]/, 1)[0];\n}\n//# sourceMappingURL=misc.js.map","import { __values } from \"tslib\";\nimport { htmlTreeAsString } from './browser';\nimport { isElement, isError, isEvent, isInstanceOf, isPlainObject, isPrimitive, isSyntheticEvent } from './is';\nimport { Memo } from './memo';\nimport { getFunctionName } from './stacktrace';\nimport { truncate } from './string';\n/**\n * Wrap a given object method with a higher-order function\n *\n * @param source An object that contains a method to be wrapped.\n * @param name A name of method to be wrapped.\n * @param replacementFactory A function that should be used to wrap a given method, returning the wrapped method which\n * will be substituted in for `source[name]`.\n * @returns void\n */\nexport function fill(source, name, replacementFactory) {\n    if (!(name in source)) {\n        return;\n    }\n    var original = source[name];\n    var wrapped = replacementFactory(original);\n    // Make sure it's a function first, as we need to attach an empty prototype for `defineProperties` to work\n    // otherwise it'll throw \"TypeError: Object.defineProperties called on non-object\"\n    if (typeof wrapped === 'function') {\n        try {\n            wrapped.prototype = wrapped.prototype || {};\n            Object.defineProperties(wrapped, {\n                __sentry_original__: {\n                    enumerable: false,\n                    value: original,\n                },\n            });\n        }\n        catch (_Oo) {\n            // This can throw if multiple fill happens on a global object like XMLHttpRequest\n            // Fixes https://github.com/getsentry/sentry-javascript/issues/2043\n        }\n    }\n    source[name] = wrapped;\n}\n/**\n * Encodes given object into url-friendly format\n *\n * @param object An object that contains serializable values\n * @returns string Encoded\n */\nexport function urlEncode(object) {\n    return Object.keys(object)\n        .map(function (key) { return encodeURIComponent(key) + \"=\" + encodeURIComponent(object[key]); })\n        .join('&');\n}\n/**\n * Transforms any object into an object literal with all its attributes\n * attached to it.\n *\n * @param value Initial source that we have to transform in order for it to be usable by the serializer\n */\nfunction getWalkSource(value) {\n    if (isError(value)) {\n        var error = value;\n        var err = {\n            message: error.message,\n            name: error.name,\n            stack: error.stack,\n        };\n        for (var i in error) {\n            if (Object.prototype.hasOwnProperty.call(error, i)) {\n                err[i] = error[i];\n            }\n        }\n        return err;\n    }\n    if (isEvent(value)) {\n        var event_1 = value;\n        var source = {};\n        source.type = event_1.type;\n        // Accessing event.target can throw (see getsentry/raven-js#838, #768)\n        try {\n            source.target = isElement(event_1.target)\n                ? htmlTreeAsString(event_1.target)\n                : Object.prototype.toString.call(event_1.target);\n        }\n        catch (_oO) {\n            source.target = '<unknown>';\n        }\n        try {\n            source.currentTarget = isElement(event_1.currentTarget)\n                ? htmlTreeAsString(event_1.currentTarget)\n                : Object.prototype.toString.call(event_1.currentTarget);\n        }\n        catch (_oO) {\n            source.currentTarget = '<unknown>';\n        }\n        if (typeof CustomEvent !== 'undefined' && isInstanceOf(value, CustomEvent)) {\n            source.detail = event_1.detail;\n        }\n        for (var i in event_1) {\n            if (Object.prototype.hasOwnProperty.call(event_1, i)) {\n                source[i] = event_1;\n            }\n        }\n        return source;\n    }\n    return value;\n}\n/** Calculates bytes size of input string */\nfunction utf8Length(value) {\n    // eslint-disable-next-line no-bitwise\n    return ~-encodeURI(value).split(/%..|./).length;\n}\n/** Calculates bytes size of input object */\nfunction jsonSize(value) {\n    return utf8Length(JSON.stringify(value));\n}\n/** JSDoc */\nexport function normalizeToSize(object, \n// Default Node.js REPL depth\ndepth, \n// 100kB, as 200kB is max payload size, so half sounds reasonable\nmaxSize) {\n    if (depth === void 0) { depth = 3; }\n    if (maxSize === void 0) { maxSize = 100 * 1024; }\n    var serialized = normalize(object, depth);\n    if (jsonSize(serialized) > maxSize) {\n        return normalizeToSize(object, depth - 1, maxSize);\n    }\n    return serialized;\n}\n/**\n * Transform any non-primitive, BigInt, or Symbol-type value into a string. Acts as a no-op on strings, numbers,\n * booleans, null, and undefined.\n *\n * @param value The value to stringify\n * @returns For non-primitive, BigInt, and Symbol-type values, a string denoting the value's type, type and value, or\n *  type and `description` property, respectively. For non-BigInt, non-Symbol primitives, returns the original value,\n *  unchanged.\n */\nfunction serializeValue(value) {\n    var type = Object.prototype.toString.call(value);\n    // Node.js REPL notation\n    if (typeof value === 'string') {\n        return value;\n    }\n    if (type === '[object Object]') {\n        return '[Object]';\n    }\n    if (type === '[object Array]') {\n        return '[Array]';\n    }\n    var normalized = normalizeValue(value);\n    return isPrimitive(normalized) ? normalized : type;\n}\n/**\n * normalizeValue()\n *\n * Takes unserializable input and make it serializable friendly\n *\n * - translates undefined/NaN values to \"[undefined]\"/\"[NaN]\" respectively,\n * - serializes Error objects\n * - filter global objects\n */\nfunction normalizeValue(value, key) {\n    if (key === 'domain' && value && typeof value === 'object' && value._events) {\n        return '[Domain]';\n    }\n    if (key === 'domainEmitter') {\n        return '[DomainEmitter]';\n    }\n    if (typeof global !== 'undefined' && value === global) {\n        return '[Global]';\n    }\n    if (typeof window !== 'undefined' && value === window) {\n        return '[Window]';\n    }\n    if (typeof document !== 'undefined' && value === document) {\n        return '[Document]';\n    }\n    // React's SyntheticEvent thingy\n    if (isSyntheticEvent(value)) {\n        return '[SyntheticEvent]';\n    }\n    if (typeof value === 'number' && value !== value) {\n        return '[NaN]';\n    }\n    if (value === void 0) {\n        return '[undefined]';\n    }\n    if (typeof value === 'function') {\n        return \"[Function: \" + getFunctionName(value) + \"]\";\n    }\n    // symbols and bigints are considered primitives by TS, but aren't natively JSON-serilaizable\n    if (typeof value === 'symbol') {\n        return \"[\" + String(value) + \"]\";\n    }\n    if (typeof value === 'bigint') {\n        return \"[BigInt: \" + String(value) + \"]\";\n    }\n    return value;\n}\n/**\n * Walks an object to perform a normalization on it\n *\n * @param key of object that's walked in current iteration\n * @param value object to be walked\n * @param depth Optional number indicating how deep should walking be performed\n * @param memo Optional Memo class handling decycling\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function walk(key, value, depth, memo) {\n    if (depth === void 0) { depth = +Infinity; }\n    if (memo === void 0) { memo = new Memo(); }\n    // If we reach the maximum depth, serialize whatever has left\n    if (depth === 0) {\n        return serializeValue(value);\n    }\n    /* eslint-disable @typescript-eslint/no-unsafe-member-access */\n    // If value implements `toJSON` method, call it and return early\n    if (value !== null && value !== undefined && typeof value.toJSON === 'function') {\n        return value.toJSON();\n    }\n    /* eslint-enable @typescript-eslint/no-unsafe-member-access */\n    // If normalized value is a primitive, there are no branches left to walk, so we can just bail out, as theres no point in going down that branch any further\n    var normalized = normalizeValue(value, key);\n    if (isPrimitive(normalized)) {\n        return normalized;\n    }\n    // Create source that we will use for next itterations, either objectified error object (Error type with extracted keys:value pairs) or the input itself\n    var source = getWalkSource(value);\n    // Create an accumulator that will act as a parent for all future itterations of that branch\n    var acc = Array.isArray(value) ? [] : {};\n    // If we already walked that branch, bail out, as it's circular reference\n    if (memo.memoize(value)) {\n        return '[Circular ~]';\n    }\n    // Walk all keys of the source\n    for (var innerKey in source) {\n        // Avoid iterating over fields in the prototype if they've somehow been exposed to enumeration.\n        if (!Object.prototype.hasOwnProperty.call(source, innerKey)) {\n            continue;\n        }\n        // Recursively walk through all the child nodes\n        acc[innerKey] = walk(innerKey, source[innerKey], depth - 1, memo);\n    }\n    // Once walked through all the branches, remove the parent from memo storage\n    memo.unmemoize(value);\n    // Return accumulated values\n    return acc;\n}\n/**\n * normalize()\n *\n * - Creates a copy to prevent original input mutation\n * - Skip non-enumerablers\n * - Calls `toJSON` if implemented\n * - Removes circular references\n * - Translates non-serializeable values (undefined/NaN/Functions) to serializable format\n * - Translates known global objects/Classes to a string representations\n * - Takes care of Error objects serialization\n * - Optionally limit depth of final output\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function normalize(input, depth) {\n    try {\n        return JSON.parse(JSON.stringify(input, function (key, value) { return walk(key, value, depth); }));\n    }\n    catch (_oO) {\n        return '**non-serializable**';\n    }\n}\n/**\n * Given any captured exception, extract its keys and create a sorted\n * and truncated list that will be used inside the event message.\n * eg. `Non-error exception captured with keys: foo, bar, baz`\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function extractExceptionKeysForMessage(exception, maxLength) {\n    if (maxLength === void 0) { maxLength = 40; }\n    var keys = Object.keys(getWalkSource(exception));\n    keys.sort();\n    if (!keys.length) {\n        return '[object has no keys]';\n    }\n    if (keys[0].length >= maxLength) {\n        return truncate(keys[0], maxLength);\n    }\n    for (var includedKeys = keys.length; includedKeys > 0; includedKeys--) {\n        var serialized = keys.slice(0, includedKeys).join(', ');\n        if (serialized.length > maxLength) {\n            continue;\n        }\n        if (includedKeys === keys.length) {\n            return serialized;\n        }\n        return truncate(serialized, maxLength);\n    }\n    return '';\n}\n/**\n * Given any object, return the new object with removed keys that value was `undefined`.\n * Works recursively on objects and arrays.\n */\nexport function dropUndefinedKeys(val) {\n    var e_1, _a;\n    if (isPlainObject(val)) {\n        var obj = val;\n        var rv = {};\n        try {\n            for (var _b = __values(Object.keys(obj)), _c = _b.next(); !_c.done; _c = _b.next()) {\n                var key = _c.value;\n                if (typeof obj[key] !== 'undefined') {\n                    rv[key] = dropUndefinedKeys(obj[key]);\n                }\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        return rv;\n    }\n    if (Array.isArray(val)) {\n        return val.map(dropUndefinedKeys);\n    }\n    return val;\n}\n//# sourceMappingURL=object.js.map","export const getScript = (source, callback) => {\n  var script = document.createElement(\"script\");\n  var prior = document.getElementsByTagName(\"script\")[0];\n  script.async = 1;\n  // Ensure Google Maps (and other referrer-restricted APIs) receive an origin\n  // even when the document Referrer-Policy would otherwise omit it.\n  script.referrerPolicy = \"strict-origin-when-cross-origin\";\n\n  script.onload = script.onreadystatechange = (_, isAbort) => {\n    if (\n      isAbort ||\n      !script.readyState ||\n      /loaded|complete/.test(script.readyState)\n    ) {\n      script.onload = script.onreadystatechange = null;\n      script = undefined;\n      if (!isAbort) if (callback) callback();\n    }\n  };\n\n  script.src = source;\n  prior.parentNode.insertBefore(script, prior);\n};\n\nexport const getDistance = (a, b) => {\n  const aSquared = Math.pow(a.x - b.x, 2);\n  const bSquared = Math.pow(a.y - b.y, 2);\n  const distanceSquared = aSquared + bSquared;\n  const distance = Math.sqrt(distanceSquared);\n  return distance;\n};\n","/**\n * NOTE: In order to avoid circular dependencies, if you add a function to this module and it needs to print something,\n * you must either a) use `console.log` rather than the logger, or b) put your function elsewhere.\n */\nimport { isBrowserBundle } from './env';\n/**\n * Checks whether we're in the Node.js or Browser environment\n *\n * @returns Answer to given question\n */\nexport function isNodeEnv() {\n    // explicitly check for browser bundles as those can be optimized statically\n    // by terser/rollup.\n    return (!isBrowserBundle() &&\n        Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]');\n}\n/**\n * Requires a module which is protected against bundler minification.\n *\n * @param request The module path to resolve\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any\nexport function dynamicRequire(mod, request) {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    return mod.require(request);\n}\n/**\n * Helper for dynamically loading module that should work with linked dependencies.\n * The problem is that we _should_ be using `require(require.resolve(moduleName, { paths: [cwd()] }))`\n * However it's _not possible_ to do that with Webpack, as it has to know all the dependencies during\n * build time. `require.resolve` is also not available in any other way, so we cannot create,\n * a fake helper like we do with `dynamicRequire`.\n *\n * We always prefer to use local package, thus the value is not returned early from each `try/catch` block.\n * That is to mimic the behavior of `require.resolve` exactly.\n *\n * @param moduleName module name to require\n * @returns possibly required module\n */\nexport function loadModule(moduleName) {\n    var mod;\n    try {\n        mod = dynamicRequire(module, moduleName);\n    }\n    catch (e) {\n        // no-empty\n    }\n    try {\n        var cwd = dynamicRequire(module, 'process').cwd;\n        mod = dynamicRequire(module, cwd() + \"/node_modules/\" + moduleName);\n    }\n    catch (e) {\n        // no-empty\n    }\n    return mod;\n}\n//# sourceMappingURL=node.js.map","import { __assign } from \"tslib\";\nimport { dropUndefinedKeys, timestampWithMs, uuid4 } from '@sentry/utils';\n/**\n * Keeps track of finished spans for a given transaction\n * @internal\n * @hideconstructor\n * @hidden\n */\nvar SpanRecorder = /** @class */ (function () {\n    function SpanRecorder(maxlen) {\n        if (maxlen === void 0) { maxlen = 1000; }\n        this.spans = [];\n        this._maxlen = maxlen;\n    }\n    /**\n     * This is just so that we don't run out of memory while recording a lot\n     * of spans. At some point we just stop and flush out the start of the\n     * trace tree (i.e.the first n spans with the smallest\n     * start_timestamp).\n     */\n    SpanRecorder.prototype.add = function (span) {\n        if (this.spans.length > this._maxlen) {\n            span.spanRecorder = undefined;\n        }\n        else {\n            this.spans.push(span);\n        }\n    };\n    return SpanRecorder;\n}());\nexport { SpanRecorder };\n/**\n * Span contains all data about a span\n */\nvar Span = /** @class */ (function () {\n    /**\n     * You should never call the constructor manually, always use `Sentry.startTransaction()`\n     * or call `startChild()` on an existing span.\n     * @internal\n     * @hideconstructor\n     * @hidden\n     */\n    function Span(spanContext) {\n        /**\n         * @inheritDoc\n         */\n        this.traceId = uuid4();\n        /**\n         * @inheritDoc\n         */\n        this.spanId = uuid4().substring(16);\n        /**\n         * Timestamp in seconds when the span was created.\n         */\n        this.startTimestamp = timestampWithMs();\n        /**\n         * @inheritDoc\n         */\n        this.tags = {};\n        /**\n         * @inheritDoc\n         */\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        this.data = {};\n        if (!spanContext) {\n            return this;\n        }\n        if (spanContext.traceId) {\n            this.traceId = spanContext.traceId;\n        }\n        if (spanContext.spanId) {\n            this.spanId = spanContext.spanId;\n        }\n        if (spanContext.parentSpanId) {\n            this.parentSpanId = spanContext.parentSpanId;\n        }\n        // We want to include booleans as well here\n        if ('sampled' in spanContext) {\n            this.sampled = spanContext.sampled;\n        }\n        if (spanContext.op) {\n            this.op = spanContext.op;\n        }\n        if (spanContext.description) {\n            this.description = spanContext.description;\n        }\n        if (spanContext.data) {\n            this.data = spanContext.data;\n        }\n        if (spanContext.tags) {\n            this.tags = spanContext.tags;\n        }\n        if (spanContext.status) {\n            this.status = spanContext.status;\n        }\n        if (spanContext.startTimestamp) {\n            this.startTimestamp = spanContext.startTimestamp;\n        }\n        if (spanContext.endTimestamp) {\n            this.endTimestamp = spanContext.endTimestamp;\n        }\n    }\n    /**\n     * @inheritDoc\n     * @deprecated\n     */\n    Span.prototype.child = function (spanContext) {\n        return this.startChild(spanContext);\n    };\n    /**\n     * @inheritDoc\n     */\n    Span.prototype.startChild = function (spanContext) {\n        var childSpan = new Span(__assign(__assign({}, spanContext), { parentSpanId: this.spanId, sampled: this.sampled, traceId: this.traceId }));\n        childSpan.spanRecorder = this.spanRecorder;\n        if (childSpan.spanRecorder) {\n            childSpan.spanRecorder.add(childSpan);\n        }\n        childSpan.transaction = this.transaction;\n        return childSpan;\n    };\n    /**\n     * @inheritDoc\n     */\n    Span.prototype.setTag = function (key, value) {\n        var _a;\n        this.tags = __assign(__assign({}, this.tags), (_a = {}, _a[key] = value, _a));\n        return this;\n    };\n    /**\n     * @inheritDoc\n     */\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n    Span.prototype.setData = function (key, value) {\n        var _a;\n        this.data = __assign(__assign({}, this.data), (_a = {}, _a[key] = value, _a));\n        return this;\n    };\n    /**\n     * @inheritDoc\n     */\n    Span.prototype.setStatus = function (value) {\n        this.status = value;\n        return this;\n    };\n    /**\n     * @inheritDoc\n     */\n    Span.prototype.setHttpStatus = function (httpStatus) {\n        this.setTag('http.status_code', String(httpStatus));\n        var spanStatus = spanStatusfromHttpCode(httpStatus);\n        if (spanStatus !== 'unknown_error') {\n            this.setStatus(spanStatus);\n        }\n        return this;\n    };\n    /**\n     * @inheritDoc\n     */\n    Span.prototype.isSuccess = function () {\n        return this.status === 'ok';\n    };\n    /**\n     * @inheritDoc\n     */\n    Span.prototype.finish = function (endTimestamp) {\n        this.endTimestamp = typeof endTimestamp === 'number' ? endTimestamp : timestampWithMs();\n    };\n    /**\n     * @inheritDoc\n     */\n    Span.prototype.toTraceparent = function () {\n        var sampledString = '';\n        if (this.sampled !== undefined) {\n            sampledString = this.sampled ? '-1' : '-0';\n        }\n        return this.traceId + \"-\" + this.spanId + sampledString;\n    };\n    /**\n     * @inheritDoc\n     */\n    Span.prototype.toContext = function () {\n        return dropUndefinedKeys({\n            data: this.data,\n            description: this.description,\n            endTimestamp: this.endTimestamp,\n            op: this.op,\n            parentSpanId: this.parentSpanId,\n            sampled: this.sampled,\n            spanId: this.spanId,\n            startTimestamp: this.startTimestamp,\n            status: this.status,\n            tags: this.tags,\n            traceId: this.traceId,\n        });\n    };\n    /**\n     * @inheritDoc\n     */\n    Span.prototype.updateWithContext = function (spanContext) {\n        var _a, _b, _c, _d, _e;\n        this.data = (_a = spanContext.data, (_a !== null && _a !== void 0 ? _a : {}));\n        this.description = spanContext.description;\n        this.endTimestamp = spanContext.endTimestamp;\n        this.op = spanContext.op;\n        this.parentSpanId = spanContext.parentSpanId;\n        this.sampled = spanContext.sampled;\n        this.spanId = (_b = spanContext.spanId, (_b !== null && _b !== void 0 ? _b : this.spanId));\n        this.startTimestamp = (_c = spanContext.startTimestamp, (_c !== null && _c !== void 0 ? _c : this.startTimestamp));\n        this.status = spanContext.status;\n        this.tags = (_d = spanContext.tags, (_d !== null && _d !== void 0 ? _d : {}));\n        this.traceId = (_e = spanContext.traceId, (_e !== null && _e !== void 0 ? _e : this.traceId));\n        return this;\n    };\n    /**\n     * @inheritDoc\n     */\n    Span.prototype.getTraceContext = function () {\n        return dropUndefinedKeys({\n            data: Object.keys(this.data).length > 0 ? this.data : undefined,\n            description: this.description,\n            op: this.op,\n            parent_span_id: this.parentSpanId,\n            span_id: this.spanId,\n            status: this.status,\n            tags: Object.keys(this.tags).length > 0 ? this.tags : undefined,\n            trace_id: this.traceId,\n        });\n    };\n    /**\n     * @inheritDoc\n     */\n    Span.prototype.toJSON = function () {\n        return dropUndefinedKeys({\n            data: Object.keys(this.data).length > 0 ? this.data : undefined,\n            description: this.description,\n            op: this.op,\n            parent_span_id: this.parentSpanId,\n            span_id: this.spanId,\n            start_timestamp: this.startTimestamp,\n            status: this.status,\n            tags: Object.keys(this.tags).length > 0 ? this.tags : undefined,\n            timestamp: this.endTimestamp,\n            trace_id: this.traceId,\n        });\n    };\n    return Span;\n}());\nexport { Span };\n/**\n * Converts a HTTP status code into a {@link SpanStatusType}.\n *\n * @param httpStatus The HTTP response status code.\n * @returns The span status or unknown_error.\n */\nexport function spanStatusfromHttpCode(httpStatus) {\n    if (httpStatus < 400 && httpStatus >= 100) {\n        return 'ok';\n    }\n    if (httpStatus >= 400 && httpStatus < 500) {\n        switch (httpStatus) {\n            case 401:\n                return 'unauthenticated';\n            case 403:\n                return 'permission_denied';\n            case 404:\n                return 'not_found';\n            case 409:\n                return 'already_exists';\n            case 413:\n                return 'failed_precondition';\n            case 429:\n                return 'resource_exhausted';\n            default:\n                return 'invalid_argument';\n        }\n    }\n    if (httpStatus >= 500 && httpStatus < 600) {\n        switch (httpStatus) {\n            case 501:\n                return 'unimplemented';\n            case 503:\n                return 'unavailable';\n            case 504:\n                return 'deadline_exceeded';\n            default:\n                return 'internal_error';\n        }\n    }\n    return 'unknown_error';\n}\n//# sourceMappingURL=span.js.map","// Store finish reasons in tuple to save on bundle size\n// Readonly type should enforce that this is not mutated.\nexport var FINISH_REASON_TAG = 'finishReason';\nexport var IDLE_TRANSACTION_FINISH_REASONS = ['heartbeatFailed', 'idleTimeout', 'documentHidden'];\n//# sourceMappingURL=constants.js.map","import { __assign, __read, __spread } from \"tslib\";\nimport { getMainCarrier } from '@sentry/hub';\nimport { dynamicRequire, isNodeEnv, loadModule, logger } from '@sentry/utils';\nimport { registerErrorInstrumentation } from './errors';\nimport { IdleTransaction } from './idletransaction';\nimport { Transaction } from './transaction';\nimport { hasTracingEnabled } from './utils';\n/** Returns all trace headers that are currently on the top scope. */\nfunction traceHeaders() {\n    var scope = this.getScope();\n    if (scope) {\n        var span = scope.getSpan();\n        if (span) {\n            return {\n                'sentry-trace': span.toTraceparent(),\n            };\n        }\n    }\n    return {};\n}\n/**\n * Makes a sampling decision for the given transaction and stores it on the transaction.\n *\n * Called every time a transaction is created. Only transactions which emerge with a `sampled` value of `true` will be\n * sent to Sentry.\n *\n * @param transaction: The transaction needing a sampling decision\n * @param options: The current client's options, so we can access `tracesSampleRate` and/or `tracesSampler`\n * @param samplingContext: Default and user-provided data which may be used to help make the decision\n *\n * @returns The given transaction with its `sampled` value set\n */\nfunction sample(transaction, options, samplingContext) {\n    // nothing to do if tracing is not enabled\n    if (!hasTracingEnabled(options)) {\n        transaction.sampled = false;\n        return transaction;\n    }\n    // if the user has forced a sampling decision by passing a `sampled` value in their transaction context, go with that\n    if (transaction.sampled !== undefined) {\n        transaction.setMetadata({\n            transactionSampling: { method: 'explicitly_set' },\n        });\n        return transaction;\n    }\n    // we would have bailed already if neither `tracesSampler` nor `tracesSampleRate` were defined, so one of these should\n    // work; prefer the hook if so\n    var sampleRate;\n    if (typeof options.tracesSampler === 'function') {\n        sampleRate = options.tracesSampler(samplingContext);\n        transaction.setMetadata({\n            transactionSampling: {\n                method: 'client_sampler',\n                // cast to number in case it's a boolean\n                rate: Number(sampleRate),\n            },\n        });\n    }\n    else if (samplingContext.parentSampled !== undefined) {\n        sampleRate = samplingContext.parentSampled;\n        transaction.setMetadata({\n            transactionSampling: { method: 'inheritance' },\n        });\n    }\n    else {\n        sampleRate = options.tracesSampleRate;\n        transaction.setMetadata({\n            transactionSampling: {\n                method: 'client_rate',\n                // cast to number in case it's a boolean\n                rate: Number(sampleRate),\n            },\n        });\n    }\n    // Since this is coming from the user (or from a function provided by the user), who knows what we might get. (The\n    // only valid values are booleans or numbers between 0 and 1.)\n    if (!isValidSampleRate(sampleRate)) {\n        logger.warn(\"[Tracing] Discarding transaction because of invalid sample rate.\");\n        transaction.sampled = false;\n        return transaction;\n    }\n    // if the function returned 0 (or false), or if `tracesSampleRate` is 0, it's a sign the transaction should be dropped\n    if (!sampleRate) {\n        logger.log(\"[Tracing] Discarding transaction because \" + (typeof options.tracesSampler === 'function'\n            ? 'tracesSampler returned 0 or false'\n            : 'a negative sampling decision was inherited or tracesSampleRate is set to 0'));\n        transaction.sampled = false;\n        return transaction;\n    }\n    // Now we roll the dice. Math.random is inclusive of 0, but not of 1, so strict < is safe here. In case sampleRate is\n    // a boolean, the < comparison will cause it to be automatically cast to 1 if it's true and 0 if it's false.\n    transaction.sampled = Math.random() < sampleRate;\n    // if we're not going to keep it, we're done\n    if (!transaction.sampled) {\n        logger.log(\"[Tracing] Discarding transaction because it's not included in the random sample (sampling rate = \" + Number(sampleRate) + \")\");\n        return transaction;\n    }\n    logger.log(\"[Tracing] starting \" + transaction.op + \" transaction - \" + transaction.name);\n    return transaction;\n}\n/**\n * Checks the given sample rate to make sure it is valid type and value (a boolean, or a number between 0 and 1).\n */\nfunction isValidSampleRate(rate) {\n    // we need to check NaN explicitly because it's of type 'number' and therefore wouldn't get caught by this typecheck\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    if (isNaN(rate) || !(typeof rate === 'number' || typeof rate === 'boolean')) {\n        logger.warn(\"[Tracing] Given sample rate is invalid. Sample rate must be a boolean or a number between 0 and 1. Got \" + JSON.stringify(rate) + \" of type \" + JSON.stringify(typeof rate) + \".\");\n        return false;\n    }\n    // in case sampleRate is a boolean, it will get automatically cast to 1 if it's true and 0 if it's false\n    if (rate < 0 || rate > 1) {\n        logger.warn(\"[Tracing] Given sample rate is invalid. Sample rate must be between 0 and 1. Got \" + rate + \".\");\n        return false;\n    }\n    return true;\n}\n/**\n * Creates a new transaction and adds a sampling decision if it doesn't yet have one.\n *\n * The Hub.startTransaction method delegates to this method to do its work, passing the Hub instance in as `this`, as if\n * it had been called on the hub directly. Exists as a separate function so that it can be injected into the class as an\n * \"extension method.\"\n *\n * @param this: The Hub starting the transaction\n * @param transactionContext: Data used to configure the transaction\n * @param CustomSamplingContext: Optional data to be provided to the `tracesSampler` function (if any)\n *\n * @returns The new transaction\n *\n * @see {@link Hub.startTransaction}\n */\nfunction _startTransaction(transactionContext, customSamplingContext) {\n    var client = this.getClient();\n    var options = (client && client.getOptions()) || {};\n    var transaction = new Transaction(transactionContext, this);\n    transaction = sample(transaction, options, __assign({ parentSampled: transactionContext.parentSampled, transactionContext: transactionContext }, customSamplingContext));\n    if (transaction.sampled) {\n        transaction.initSpanRecorder(options._experiments && options._experiments.maxSpans);\n    }\n    return transaction;\n}\n/**\n * Create new idle transaction.\n */\nexport function startIdleTransaction(hub, transactionContext, idleTimeout, onScope, customSamplingContext) {\n    var client = hub.getClient();\n    var options = (client && client.getOptions()) || {};\n    var transaction = new IdleTransaction(transactionContext, hub, idleTimeout, onScope);\n    transaction = sample(transaction, options, __assign({ parentSampled: transactionContext.parentSampled, transactionContext: transactionContext }, customSamplingContext));\n    if (transaction.sampled) {\n        transaction.initSpanRecorder(options._experiments && options._experiments.maxSpans);\n    }\n    return transaction;\n}\n/**\n * @private\n */\nexport function _addTracingExtensions() {\n    var carrier = getMainCarrier();\n    if (!carrier.__SENTRY__) {\n        return;\n    }\n    carrier.__SENTRY__.extensions = carrier.__SENTRY__.extensions || {};\n    if (!carrier.__SENTRY__.extensions.startTransaction) {\n        carrier.__SENTRY__.extensions.startTransaction = _startTransaction;\n    }\n    if (!carrier.__SENTRY__.extensions.traceHeaders) {\n        carrier.__SENTRY__.extensions.traceHeaders = traceHeaders;\n    }\n}\n/**\n * @private\n */\nfunction _autoloadDatabaseIntegrations() {\n    var carrier = getMainCarrier();\n    if (!carrier.__SENTRY__) {\n        return;\n    }\n    var packageToIntegrationMapping = {\n        mongodb: function () {\n            var integration = dynamicRequire(module, './integrations/node/mongo');\n            return new integration.Mongo();\n        },\n        mongoose: function () {\n            var integration = dynamicRequire(module, './integrations/node/mongo');\n            return new integration.Mongo({ mongoose: true });\n        },\n        mysql: function () {\n            var integration = dynamicRequire(module, './integrations/node/mysql');\n            return new integration.Mysql();\n        },\n        pg: function () {\n            var integration = dynamicRequire(module, './integrations/node/postgres');\n            return new integration.Postgres();\n        },\n    };\n    var mappedPackages = Object.keys(packageToIntegrationMapping)\n        .filter(function (moduleName) { return !!loadModule(moduleName); })\n        .map(function (pkg) {\n        try {\n            return packageToIntegrationMapping[pkg]();\n        }\n        catch (e) {\n            return undefined;\n        }\n    })\n        .filter(function (p) { return p; });\n    if (mappedPackages.length > 0) {\n        carrier.__SENTRY__.integrations = __spread((carrier.__SENTRY__.integrations || []), mappedPackages);\n    }\n}\n/**\n * This patches the global object and injects the Tracing extensions methods\n */\nexport function addExtensionMethods() {\n    _addTracingExtensions();\n    // Detect and automatically load specified integrations.\n    if (isNodeEnv()) {\n        _autoloadDatabaseIntegrations();\n    }\n    // If an error happens globally, we should make sure transaction status is set to error.\n    registerErrorInstrumentation();\n}\n//# sourceMappingURL=hubextensions.js.map","/*!\n * jQuery JavaScript Library v3.5.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2020-05-04T22:49Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n      // Support: Chrome <=57, Firefox <=52\n      // In some browsers, typeof returns \"function\" for HTML <object> elements\n      // (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n      // We don't want to classify *any* DOM node as a function.\n      return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n  };\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\nvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, node, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[ i ] || node.getAttribute && node.getAttribute( i );\n\t\t\t\tif ( val ) {\n\t\t\t\t\tscript.setAttribute( i, val );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = \"3.5.1\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( _i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.5\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://js.foundation/\n *\n * Date: 2020-03-14\n */\n( function( window ) {\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ( {} ).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpushNative = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[ i ] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|\" +\n\t\t\"ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t// \"Attribute values must be CSS identifiers [capture 5]\n\t\t// or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\twhitespace + \"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" +\n\t\twhitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace +\n\t\t\"*\" ),\n\trdescend = new RegExp( whitespace + \"|>\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trhtml = /HTML$/i,\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace + \"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\treturn nonHex ?\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\tnonHex :\n\n\t\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t\t// Support: IE <=11+\n\t\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t\t// surrogate pair\n\t\t\thigh < 0 ?\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" +\n\t\t\t\tch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && elem.nodeName.toLowerCase() === \"fieldset\";\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t( arr = slice.call( preferredDoc.childNodes ) ),\n\t\tpreferredDoc.childNodes\n\t);\n\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\t// eslint-disable-next-line no-unused-expressions\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpushNative.apply( target, slice.call( els ) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( ( target[ j++ ] = els[ i++ ] ) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) &&\n\n\t\t\t\t// Support: IE 8 only\n\t\t\t\t// Exclude object elements\n\t\t\t\t( nodeType !== 1 || context.nodeName.toLowerCase() !== \"object\" ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rcombinators.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\tif ( newContext !== context || !support.scope ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement( \"fieldset\" );\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch ( e ) {\n\t\treturn false;\n\t} finally {\n\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split( \"|\" ),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[ i ] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( ( cur = cur.nextSibling ) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn ( name === \"input\" || name === \"button\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\tvar namespace = elem.namespaceURI,\n\t\tdocElem = ( elem.ownerDocument || elem ).documentElement;\n\n\t// Support: IE <=8\n\t// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes\n\t// https://bugs.jquery.com/ticket/4833\n\treturn !rhtml.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( preferredDoc != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t// Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,\n\t// Safari 4 - 5 only, Opera <=11.6 - 12.x only\n\t// IE/Edge & older browsers don't support the :scope pseudo-class.\n\t// Support: Safari 6.0 only\n\t// Safari 6.0 supports :scope but it's an alias of :root there.\n\tsupport.scope = assert( function( el ) {\n\t\tdocElem.appendChild( el ).appendChild( document.createElement( \"div\" ) );\n\t\treturn typeof el.querySelectorAll !== \"undefined\" &&\n\t\t\t!el.querySelectorAll( \":scope fieldset div\" ).length;\n\t} );\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert( function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute( \"className\" );\n\t} );\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert( function( el ) {\n\t\tel.appendChild( document.createComment( \"\" ) );\n\t\treturn !el.getElementsByTagName( \"*\" ).length;\n\t} );\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert( function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t} );\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter[ \"ID\" ] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find[ \"ID\" ] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter[ \"ID\" ] =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode( \"id\" );\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[ \"ID\" ] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( ( elem = elems[ i++ ] ) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[ \"TAG\" ] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[ \"CLASS\" ] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) {\n\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert( function( el ) {\n\n\t\t\tvar input;\n\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll( \"[msallowcapture^='']\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll( \"[selected]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"~=\" );\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t\t// Adding a temporary attribute to the document before the selection works\n\t\t\t// around the issue.\n\t\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\t\tinput = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"name\", \"\" );\n\t\t\tel.appendChild( input );\n\t\t\tif ( !el.querySelectorAll( \"[name='']\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll( \":checked\" ).length ) {\n\t\t\t\trbuggyQSA.push( \":checked\" );\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push( \".#.+[+~]\" );\n\t\t\t}\n\n\t\t\t// Support: Firefox <=3.6 - 5 only\n\t\t\t// Old Firefox doesn't throw on a badly-escaped identifier.\n\t\t\tel.querySelectorAll( \"\\\\\\f\" );\n\t\t\trbuggyQSA.push( \"[\\\\r\\\\n\\\\f]\" );\n\t\t} );\n\n\t\tassert( function( el ) {\n\t\t\tel.innerHTML = \"<a href='' disabled='disabled'></a>\" +\n\t\t\t\t\"<select disabled='disabled'><option/></select>\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll( \"[name=d]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll( \":enabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll( \":disabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: Opera 10 - 11 only\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll( \"*,:x\" );\n\t\t\trbuggyQSA.push( \",.*:\" );\n\t\t} );\n\t}\n\n\tif ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector ) ) ) ) {\n\n\t\tassert( function( el ) {\n\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t} );\n\t}\n\n\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\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( a == document || a.ownerDocument == preferredDoc &&\n\t\t\t\tcontains( preferredDoc, a ) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( b == document || b.ownerDocument == preferredDoc &&\n\t\t\t\tcontains( preferredDoc, b ) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t/* eslint-disable eqeqeq */\n\t\t\treturn a == document ? -1 :\n\t\t\t\tb == document ? 1 :\n\t\t\t\t/* eslint-enable eqeqeq */\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( ( cur = cur.parentNode ) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( ( cur = cur.parentNode ) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[ i ] === bp[ i ] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[ i ], bp[ i ] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t/* eslint-disable eqeqeq */\n\t\t\tap[ i ] == preferredDoc ? -1 :\n\t\t\tbp[ i ] == preferredDoc ? 1 :\n\t\t\t/* eslint-enable eqeqeq */\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\n\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t// fragment in IE 9\n\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( context.ownerDocument || context ) != document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( elem.ownerDocument || elem ) != document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t( val = elem.getAttributeNode( name ) ) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[ 1 ] = match[ 1 ].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[ 3 ] = ( match[ 3 ] || match[ 4 ] ||\n\t\t\t\tmatch[ 5 ] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\t\tSizzle.error( match[ 0 ] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" ) );\n\t\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[ 3 ] ) {\n\t\t\t\tSizzle.error( match[ 0 ] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\t\tif ( matchExpr[ \"CHILD\" ].test( match[ 0 ] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[ 3 ] ) {\n\t\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length ) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace +\n\t\t\t\t\t\")\" + className + \"(\" + whitespace + \"|$)\" ) ) && classCache(\n\t\t\t\t\t\tclassName, function( elem ) {\n\t\t\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\t/* eslint-disable max-len */\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t\t/* eslint-enable max-len */\n\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || ( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || ( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction( function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[ i ] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[ i ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} ) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\t\"has\": markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\t\"contains\": markFunction( function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement &&\n\t\t\t\t( !document.hasFocus || document.hasFocus() ) &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn ( nodeName === \"input\" && !!elem.checked ) ||\n\t\t\t\t( nodeName === \"option\" && !!elem.selected );\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[ \"empty\" ]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<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 ||\n\t\t\t\t\tattr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\t\"last\": createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\t\"eq\": createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\t\"even\": createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"odd\": createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"lt\": createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ?\n\t\t\t\targument + length :\n\t\t\t\targument > length ?\n\t\t\t\t\tlength :\n\t\t\t\t\targument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"gt\": createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\nExpr.pseudos[ \"nth\" ] = Expr.pseudos[ \"eq\" ];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rcombinators.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrim, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] ||\n\t\t\t\t\t\t\t( outerCache[ elem.uniqueID ] = {} );\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = uniqueCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts(\n\t\t\t\tselector || \"*\",\n\t\t\t\tcontext.nodeType ? [ context ] : context,\n\t\t\t\t[]\n\t\t\t),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\ttokens\n\t\t\t\t\t\t.slice( 0, i - 1 )\n\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[ \"TAG\" ]( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache(\n\t\t\tselector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers )\n\t\t);\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( Expr.find[ \"ID\" ]( token.matches[ 0 ]\n\t\t\t\t.replace( runescape, funescape ), context ) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[ \"needsContext\" ].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = Expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\ttoken.matches[ 0 ].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split( \"\" ).sort( sortOrder ).join( \"\" ) === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert( function( el ) {\n\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement( \"fieldset\" ) ) & 1;\n} );\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert( function( el ) {\n\tel.innerHTML = \"<a href='#'></a>\";\n\treturn el.firstChild.getAttribute( \"href\" ) === \"#\";\n} ) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t} );\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert( function( el ) {\n\tel.innerHTML = \"<input/>\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n} ) ) {\n\taddHandle( \"value\", function( elem, _name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t} );\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert( function( el ) {\n\treturn el.getAttribute( \"disabled\" ) == null;\n} ) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t( val = elem.getAttributeNode( name ) ) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\t\tnull;\n\t\t}\n\t} );\n}\n\nreturn Sizzle;\n\n} )( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n\n\nfunction nodeName( elem, name ) {\n\n  return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n};\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the master Deferred\n\t\t\tmaster = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tmaster.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( master.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn master.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), master.reject );\n\t\t}\n\n\t\treturn master.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (#9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t//  - Node\n\t//    - Node.ELEMENT_NODE\n\t//    - Node.DOCUMENT_NODE\n\t//  - Object\n\t//    - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t//   1. No key was specified\n\t\t//   2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t//   1. The entire cache object\n\t\t//   2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t//   1. An object of properties\n\t\t//   2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif ( documentElement.getRootNode ) {\n\t\tisAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t\t};\n\t}\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached( elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n\n\t// Support: IE <=9 only\n\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t// the select element.\n\tdiv.innerHTML = \"<option></option>\";\n\tsupport.option = !!div.lastChild;\n} )();\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// Support: IE <=9 only\nif ( !support.option ) {\n\twrapMap.optgroup = wrapMap.option = [ 1, \"<select multiple='multiple'>\", \"</select>\" ];\n}\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 - 11+\n// focus() and blur() are asynchronous, except when they are no-op.\n// So expect focus to be synchronous when the element is already active,\n// and blur to be synchronous when the element is not already active.\n// (focus and blur are always synchronous in other supported browsers,\n// this just defines when we can count on it).\nfunction expectSync( elem, type ) {\n\treturn ( elem === safeActiveElement() ) === ( type === \"focus\" );\n}\n\n// Support: IE <=9 only\n// Accessing document.activeElement can throw unexpectedly\n// https://bugs.jquery.com/ticket/13393\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#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 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", returnTrue );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, expectSync ) {\n\n\t// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !expectSync ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar notAsync, result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\t// Saved data should be false in such cases, but might be a leftover capture object\n\t\t\t\t// from an async native handler (gh-4350)\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t// focus() and blur() are asynchronous\n\t\t\t\t\tnotAsync = expectSync( this, type );\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tif ( saved !== result || notAsync ) {\n\t\t\t\t\t\tdataPriv.set( this, type, false );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = {};\n\t\t\t\t\t}\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\treturn result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering the\n\t\t\t\t// native event and prevent that from happening again here.\n\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t// less bad than duplication.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\n\t\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t\t// Extend with the prototype to reset the above stopImmediatePropagation()\n\t\t\t\t\t\tjQuery.extend( saved[ 0 ], jQuery.Event.prototype ),\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event\n\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (#504, #13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\n\twhich: function( event ) {\n\t\tvar button = event.button;\n\n\t\t// Add which for key events\n\t\tif ( event.which == null && rkeyEvent.test( event.type ) ) {\n\t\t\treturn event.charCode != null ? event.charCode : event.keyCode;\n\t\t}\n\n\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\tif ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {\n\t\t\tif ( button & 1 ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tif ( button & 2 ) {\n\t\t\t\treturn 3;\n\t\t\t}\n\n\t\t\tif ( button & 4 ) {\n\t\t\t\treturn 2;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn event.which;\n\t}\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, expectSync );\n\n\t\t\t// Return false to allow normal processing in the caller\n\t\t\treturn false;\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.get( src );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdataPriv.remove( dest, \"handle events\" );\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase()  !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute( \"nonce\" )\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && isAttached( node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html;\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = isAttached( elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, 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\nvar swap = function( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t// Support: Chrome <=64\n\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t},\n\n\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t// some versions of this test; make sure not to make it pass there!\n\t\treliableTrDimensions: function() {\n\t\t\tvar table, tr, trChild, trStyle;\n\t\t\tif ( reliableTrDimensionsVal == null ) {\n\t\t\t\ttable = document.createElement( \"table\" );\n\t\t\t\ttr = document.createElement( \"tr\" );\n\t\t\t\ttrChild = document.createElement( \"div\" );\n\n\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px\";\n\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\tdocumentElement\n\t\t\t\t\t.appendChild( table )\n\t\t\t\t\t.appendChild( tr )\n\t\t\t\t\t.appendChild( trChild );\n\n\t\t\t\ttrStyle = window.getComputedStyle( tr );\n\t\t\t\treliableTrDimensionsVal = parseInt( trStyle.height ) > 3;\n\n\t\t\t\tdocumentElement.removeChild( table );\n\t\t\t}\n\t\t\treturn reliableTrDimensionsVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t//   .css('filter') (IE 9 only, #12537)\n\t//   .css('--customProperty) (#3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style,\n\tvendorProps = {};\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\nfunction finalPropName( name ) {\n\tvar final = jQuery.cssProps[ name ] || vendorProps[ name ];\n\n\tif ( final ) {\n\t\treturn final;\n\t}\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorProps[ name ] = vendorPropName( name ) || name;\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trcustomProp = /^--/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\tif ( box === \"margin\" ) {\n\t\t\tdelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\t// Support: IE 9 - 11 only\n\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t// In those cases, the computed value can be trusted to be border-box.\n\tif ( ( !support.boxSizingReliable() && isBorderBox ||\n\n\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t!support.reliableTrDimensions() && nodeName( elem, \"tr\" ) ||\n\n\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\tval === \"auto\" ||\n\n\t\t// Support: Android <=4.1 - 4.3 only\n\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"gridArea\": true,\n\t\t\"gridColumn\": true,\n\t\t\"gridColumnEnd\": true,\n\t\t\"gridColumnStart\": true,\n\t\t\"gridRow\": true,\n\t\t\"gridRowEnd\": true,\n\t\t\"gridRowStart\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#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 (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t// \"px\" to a few hardcoded values.\n\t\t\tif ( type === \"number\" && !isCustomProp ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && scrollboxSizeBuggy ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\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 ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// https://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 input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( _i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// https://web.archive.org/web/20141116233347/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\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\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 = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\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 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\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 = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( isValidValue ) {\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 = classesToArray( value );\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\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (#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\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = (\n\t\t\t\t\tdataPriv.get( cur, \"events\" ) || Object.create( null )\n\t\t\t\t)[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\n\t\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\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\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\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// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce.guid++ ) +\n\t\t\t\t\tuncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script\n\t\t\tif ( !isSuccess && jQuery.inArray( \"script\", s.dataTypes ) > -1 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\"  ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain or forced-by-attrs requests\n\tif ( s.crossDomain || s.scriptAttrs ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" )\n\t\t\t\t\t.attr( s.scriptAttrs || {} )\n\t\t\t\t\t.prop( { charset: s.scriptCharset, src: s.url } )\n\t\t\t\t\t.on( \"load error\", callback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce.guid++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tif ( typeof props.top === \"number\" ) {\n\t\t\t\tprops.top += \"px\";\n\t\t\t}\n\t\t\tif ( typeof props.left === \"number\" ) {\n\t\t\t\tprops.left += \"px\";\n\t\t\t}\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\n\t// offset() relates an element's border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element's margin box to its offset parent's padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\t( offsetParent === doc.body || offsetParent === doc.documentElement ) &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\n\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, \"borderLeftWidth\", true );\n\t\t\t}\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t//    documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( _i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\t\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 ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( _i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t},\n\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\njQuery.each( ( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( _i, name ) {\n\n\t\t// Handle event binding\n\t\tjQuery.fn[ name ] = function( data, fn ) {\n\t\t\treturn arguments.length > 0 ?\n\t\t\t\tthis.on( name, null, data, fn ) :\n\t\t\t\tthis.trigger( name );\n\t\t};\n\t} );\n\n\n\n\n// Support: Android <=4.0 only\n// Make sure we trim BOM and NBSP\nvar rtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n\n// Bind a function to a context, optionally partially applying any\n// arguments.\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n// However, it is not slated for removal any time soon\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === \"string\" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( !isFunction( fn ) ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\njQuery.isFunction = isFunction;\njQuery.isWindow = isWindow;\njQuery.camelCase = camelCase;\njQuery.type = toType;\n\njQuery.now = Date.now;\n\njQuery.isNumeric = function( obj ) {\n\n\t// As of jQuery 3.0, isNumeric is limited to\n\t// strings and numbers (primitives or objects)\n\t// that can be coerced to finite numbers (gh-2662)\n\tvar type = jQuery.type( obj );\n\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t!isNaN( obj - parseFloat( obj ) );\n};\n\njQuery.trim = function( text ) {\n\treturn text == null ?\n\t\t\"\" :\n\t\t( text + \"\" ).replace( rtrim, \"\" );\n};\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( typeof noGlobal === \"undefined\" ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n","import { isRegExp, isString } from './is';\n/**\n * Truncates given string to the maximum characters count\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string (0 = unlimited)\n * @returns string Encoded\n */\nexport function truncate(str, max) {\n    if (max === void 0) { max = 0; }\n    if (typeof str !== 'string' || max === 0) {\n        return str;\n    }\n    return str.length <= max ? str : str.substr(0, max) + \"...\";\n}\n/**\n * This is basically just `trim_line` from\n * https://github.com/getsentry/sentry/blob/master/src/sentry/lang/javascript/processor.py#L67\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string\n * @returns string Encoded\n */\nexport function snipLine(line, colno) {\n    var newLine = line;\n    var lineLength = newLine.length;\n    if (lineLength <= 150) {\n        return newLine;\n    }\n    if (colno > lineLength) {\n        // eslint-disable-next-line no-param-reassign\n        colno = lineLength;\n    }\n    var start = Math.max(colno - 60, 0);\n    if (start < 5) {\n        start = 0;\n    }\n    var end = Math.min(start + 140, lineLength);\n    if (end > lineLength - 5) {\n        end = lineLength;\n    }\n    if (end === lineLength) {\n        start = Math.max(end - 140, 0);\n    }\n    newLine = newLine.slice(start, end);\n    if (start > 0) {\n        newLine = \"'{snip} \" + newLine;\n    }\n    if (end < lineLength) {\n        newLine += ' {snip}';\n    }\n    return newLine;\n}\n/**\n * Join values in array\n * @param input array of values to be joined together\n * @param delimiter string to be placed in-between values\n * @returns Joined values\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function safeJoin(input, delimiter) {\n    if (!Array.isArray(input)) {\n        return '';\n    }\n    var output = [];\n    // eslint-disable-next-line @typescript-eslint/prefer-for-of\n    for (var i = 0; i < input.length; i++) {\n        var value = input[i];\n        try {\n            output.push(String(value));\n        }\n        catch (e) {\n            output.push('[value cannot be serialized]');\n        }\n    }\n    return output.join(delimiter);\n}\n/**\n * Checks if the value matches a regex or includes the string\n * @param value The string value to be checked against\n * @param pattern Either a regex or a string that must be contained in value\n */\nexport function isMatchingPattern(value, pattern) {\n    if (!isString(value)) {\n        return false;\n    }\n    if (isRegExp(pattern)) {\n        return pattern.test(value);\n    }\n    if (typeof pattern === 'string') {\n        return value.indexOf(pattern) !== -1;\n    }\n    return false;\n}\n/**\n * Given a string, escape characters which have meaning in the regex grammar, such that the result is safe to feed to\n * `new RegExp()`.\n *\n * Based on https://github.com/sindresorhus/escape-string-regexp. Vendored to a) reduce the size by skipping the runtime\n * type-checking, and b) ensure it gets down-compiled for old versions of Node (the published package only supports Node\n * 12+).\n *\n * @param regexString The string to escape\n * @returns An version of the string with all special regex characters escaped\n */\nexport function escapeStringForRegex(regexString) {\n    // escape the hyphen separately so we can also replace it with a unicode literal hyphen, to avoid the problems\n    // discussed in https://github.com/sindresorhus/escape-string-regexp/issues/20.\n    return regexString.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&').replace(/-/g, '\\\\x2d');\n}\n//# sourceMappingURL=string.js.map","import { isRegExp, isString } from './is';\n/**\n * Truncates given string to the maximum characters count\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string (0 = unlimited)\n * @returns string Encoded\n */\nexport function truncate(str, max) {\n    if (max === void 0) { max = 0; }\n    if (typeof str !== 'string' || max === 0) {\n        return str;\n    }\n    return str.length <= max ? str : str.substr(0, max) + \"...\";\n}\n/**\n * This is basically just `trim_line` from\n * https://github.com/getsentry/sentry/blob/master/src/sentry/lang/javascript/processor.py#L67\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string\n * @returns string Encoded\n */\nexport function snipLine(line, colno) {\n    var newLine = line;\n    var ll = newLine.length;\n    if (ll <= 150) {\n        return newLine;\n    }\n    if (colno > ll) {\n        // eslint-disable-next-line no-param-reassign\n        colno = ll;\n    }\n    var start = Math.max(colno - 60, 0);\n    if (start < 5) {\n        start = 0;\n    }\n    var end = Math.min(start + 140, ll);\n    if (end > ll - 5) {\n        end = ll;\n    }\n    if (end === ll) {\n        start = Math.max(end - 140, 0);\n    }\n    newLine = newLine.slice(start, end);\n    if (start > 0) {\n        newLine = \"'{snip} \" + newLine;\n    }\n    if (end < ll) {\n        newLine += ' {snip}';\n    }\n    return newLine;\n}\n/**\n * Join values in array\n * @param input array of values to be joined together\n * @param delimiter string to be placed in-between values\n * @returns Joined values\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function safeJoin(input, delimiter) {\n    if (!Array.isArray(input)) {\n        return '';\n    }\n    var output = [];\n    // eslint-disable-next-line @typescript-eslint/prefer-for-of\n    for (var i = 0; i < input.length; i++) {\n        var value = input[i];\n        try {\n            output.push(String(value));\n        }\n        catch (e) {\n            output.push('[value cannot be serialized]');\n        }\n    }\n    return output.join(delimiter);\n}\n/**\n * Checks if the value matches a regex or includes the string\n * @param value The string value to be checked against\n * @param pattern Either a regex or a string that must be contained in value\n */\nexport function isMatchingPattern(value, pattern) {\n    if (!isString(value)) {\n        return false;\n    }\n    if (isRegExp(pattern)) {\n        return pattern.test(value);\n    }\n    if (typeof pattern === 'string') {\n        return value.indexOf(pattern) !== -1;\n    }\n    return false;\n}\n//# sourceMappingURL=string.js.map","import { __extends, __values } from \"tslib\";\nimport { logger, timestampWithMs } from '@sentry/utils';\nimport { FINISH_REASON_TAG, IDLE_TRANSACTION_FINISH_REASONS } from './constants';\nimport { SpanRecorder } from './span';\nimport { Transaction } from './transaction';\nexport var DEFAULT_IDLE_TIMEOUT = 1000;\nexport var HEARTBEAT_INTERVAL = 5000;\n/**\n * @inheritDoc\n */\nvar IdleTransactionSpanRecorder = /** @class */ (function (_super) {\n    __extends(IdleTransactionSpanRecorder, _super);\n    function IdleTransactionSpanRecorder(_pushActivity, _popActivity, transactionSpanId, maxlen) {\n        if (transactionSpanId === void 0) { transactionSpanId = ''; }\n        var _this = _super.call(this, maxlen) || this;\n        _this._pushActivity = _pushActivity;\n        _this._popActivity = _popActivity;\n        _this.transactionSpanId = transactionSpanId;\n        return _this;\n    }\n    /**\n     * @inheritDoc\n     */\n    IdleTransactionSpanRecorder.prototype.add = function (span) {\n        var _this = this;\n        // We should make sure we do not push and pop activities for\n        // the transaction that this span recorder belongs to.\n        if (span.spanId !== this.transactionSpanId) {\n            // We patch span.finish() to pop an activity after setting an endTimestamp.\n            span.finish = function (endTimestamp) {\n                span.endTimestamp = typeof endTimestamp === 'number' ? endTimestamp : timestampWithMs();\n                _this._popActivity(span.spanId);\n            };\n            // We should only push new activities if the span does not have an end timestamp.\n            if (span.endTimestamp === undefined) {\n                this._pushActivity(span.spanId);\n            }\n        }\n        _super.prototype.add.call(this, span);\n    };\n    return IdleTransactionSpanRecorder;\n}(SpanRecorder));\nexport { IdleTransactionSpanRecorder };\n/**\n * An IdleTransaction is a transaction that automatically finishes. It does this by tracking child spans as activities.\n * You can have multiple IdleTransactions active, but if the `onScope` option is specified, the idle transaction will\n * put itself on the scope on creation.\n */\nvar IdleTransaction = /** @class */ (function (_super) {\n    __extends(IdleTransaction, _super);\n    function IdleTransaction(transactionContext, _idleHub, \n    /**\n     * The time to wait in ms until the idle transaction will be finished.\n     * @default 1000\n     */\n    _idleTimeout, \n    // Whether or not the transaction should put itself on the scope when it starts and pop itself off when it ends\n    _onScope) {\n        if (_idleTimeout === void 0) { _idleTimeout = DEFAULT_IDLE_TIMEOUT; }\n        if (_onScope === void 0) { _onScope = false; }\n        var _this = _super.call(this, transactionContext, _idleHub) || this;\n        _this._idleHub = _idleHub;\n        _this._idleTimeout = _idleTimeout;\n        _this._onScope = _onScope;\n        // Activities store a list of active spans\n        _this.activities = {};\n        // Amount of times heartbeat has counted. Will cause transaction to finish after 3 beats.\n        _this._heartbeatCounter = 0;\n        // We should not use heartbeat if we finished a transaction\n        _this._finished = false;\n        _this._beforeFinishCallbacks = [];\n        if (_idleHub && _onScope) {\n            // There should only be one active transaction on the scope\n            clearActiveTransaction(_idleHub);\n            // We set the transaction here on the scope so error events pick up the trace\n            // context and attach it to the error.\n            logger.log(\"Setting idle transaction on scope. Span ID: \" + _this.spanId);\n            _idleHub.configureScope(function (scope) { return scope.setSpan(_this); });\n        }\n        _this._initTimeout = setTimeout(function () {\n            if (!_this._finished) {\n                _this.finish();\n            }\n        }, _this._idleTimeout);\n        return _this;\n    }\n    /** {@inheritDoc} */\n    IdleTransaction.prototype.finish = function (endTimestamp) {\n        var e_1, _a;\n        var _this = this;\n        if (endTimestamp === void 0) { endTimestamp = timestampWithMs(); }\n        this._finished = true;\n        this.activities = {};\n        if (this.spanRecorder) {\n            logger.log('[Tracing] finishing IdleTransaction', new Date(endTimestamp * 1000).toISOString(), this.op);\n            try {\n                for (var _b = __values(this._beforeFinishCallbacks), _c = _b.next(); !_c.done; _c = _b.next()) {\n                    var callback = _c.value;\n                    callback(this, endTimestamp);\n                }\n            }\n            catch (e_1_1) { e_1 = { error: e_1_1 }; }\n            finally {\n                try {\n                    if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n                }\n                finally { if (e_1) throw e_1.error; }\n            }\n            this.spanRecorder.spans = this.spanRecorder.spans.filter(function (span) {\n                // If we are dealing with the transaction itself, we just return it\n                if (span.spanId === _this.spanId) {\n                    return true;\n                }\n                // We cancel all pending spans with status \"cancelled\" to indicate the idle transaction was finished early\n                if (!span.endTimestamp) {\n                    span.endTimestamp = endTimestamp;\n                    span.setStatus('cancelled');\n                    logger.log('[Tracing] cancelling span since transaction ended early', JSON.stringify(span, undefined, 2));\n                }\n                var keepSpan = span.startTimestamp < endTimestamp;\n                if (!keepSpan) {\n                    logger.log('[Tracing] discarding Span since it happened after Transaction was finished', JSON.stringify(span, undefined, 2));\n                }\n                return keepSpan;\n            });\n            logger.log('[Tracing] flushing IdleTransaction');\n        }\n        else {\n            logger.log('[Tracing] No active IdleTransaction');\n        }\n        // if `this._onScope` is `true`, the transaction put itself on the scope when it started\n        if (this._onScope) {\n            clearActiveTransaction(this._idleHub);\n        }\n        return _super.prototype.finish.call(this, endTimestamp);\n    };\n    /**\n     * Register a callback function that gets excecuted before the transaction finishes.\n     * Useful for cleanup or if you want to add any additional spans based on current context.\n     *\n     * This is exposed because users have no other way of running something before an idle transaction\n     * finishes.\n     */\n    IdleTransaction.prototype.registerBeforeFinishCallback = function (callback) {\n        this._beforeFinishCallbacks.push(callback);\n    };\n    /**\n     * @inheritDoc\n     */\n    IdleTransaction.prototype.initSpanRecorder = function (maxlen) {\n        var _this = this;\n        if (!this.spanRecorder) {\n            var pushActivity = function (id) {\n                if (_this._finished) {\n                    return;\n                }\n                _this._pushActivity(id);\n            };\n            var popActivity = function (id) {\n                if (_this._finished) {\n                    return;\n                }\n                _this._popActivity(id);\n            };\n            this.spanRecorder = new IdleTransactionSpanRecorder(pushActivity, popActivity, this.spanId, maxlen);\n            // Start heartbeat so that transactions do not run forever.\n            logger.log('Starting heartbeat');\n            this._pingHeartbeat();\n        }\n        this.spanRecorder.add(this);\n    };\n    /**\n     * Start tracking a specific activity.\n     * @param spanId The span id that represents the activity\n     */\n    IdleTransaction.prototype._pushActivity = function (spanId) {\n        if (this._initTimeout) {\n            clearTimeout(this._initTimeout);\n            this._initTimeout = undefined;\n        }\n        logger.log(\"[Tracing] pushActivity: \" + spanId);\n        this.activities[spanId] = true;\n        logger.log('[Tracing] new activities count', Object.keys(this.activities).length);\n    };\n    /**\n     * Remove an activity from usage\n     * @param spanId The span id that represents the activity\n     */\n    IdleTransaction.prototype._popActivity = function (spanId) {\n        var _this = this;\n        if (this.activities[spanId]) {\n            logger.log(\"[Tracing] popActivity \" + spanId);\n            // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n            delete this.activities[spanId];\n            logger.log('[Tracing] new activities count', Object.keys(this.activities).length);\n        }\n        if (Object.keys(this.activities).length === 0) {\n            var timeout = this._idleTimeout;\n            // We need to add the timeout here to have the real endtimestamp of the transaction\n            // Remember timestampWithMs is in seconds, timeout is in ms\n            var end_1 = timestampWithMs() + timeout / 1000;\n            setTimeout(function () {\n                if (!_this._finished) {\n                    _this.setTag(FINISH_REASON_TAG, IDLE_TRANSACTION_FINISH_REASONS[1]);\n                    _this.finish(end_1);\n                }\n            }, timeout);\n        }\n    };\n    /**\n     * Checks when entries of this.activities are not changing for 3 beats.\n     * If this occurs we finish the transaction.\n     */\n    IdleTransaction.prototype._beat = function () {\n        // We should not be running heartbeat if the idle transaction is finished.\n        if (this._finished) {\n            return;\n        }\n        var heartbeatString = Object.keys(this.activities).join('');\n        if (heartbeatString === this._prevHeartbeatString) {\n            this._heartbeatCounter += 1;\n        }\n        else {\n            this._heartbeatCounter = 1;\n        }\n        this._prevHeartbeatString = heartbeatString;\n        if (this._heartbeatCounter >= 3) {\n            logger.log(\"[Tracing] Transaction finished because of no change for 3 heart beats\");\n            this.setStatus('deadline_exceeded');\n            this.setTag(FINISH_REASON_TAG, IDLE_TRANSACTION_FINISH_REASONS[0]);\n            this.finish();\n        }\n        else {\n            this._pingHeartbeat();\n        }\n    };\n    /**\n     * Pings the heartbeat\n     */\n    IdleTransaction.prototype._pingHeartbeat = function () {\n        var _this = this;\n        logger.log(\"pinging Heartbeat -> current counter: \" + this._heartbeatCounter);\n        setTimeout(function () {\n            _this._beat();\n        }, HEARTBEAT_INTERVAL);\n    };\n    return IdleTransaction;\n}(Transaction));\nexport { IdleTransaction };\n/**\n * Reset transaction on scope to `undefined`\n */\nfunction clearActiveTransaction(hub) {\n    if (hub) {\n        var scope = hub.getScope();\n        if (scope) {\n            var transaction = scope.getTransaction();\n            if (transaction) {\n                scope.setSpan(undefined);\n            }\n        }\n    }\n}\n//# sourceMappingURL=idletransaction.js.map","import { __assign, __extends } from \"tslib\";\nimport { getCurrentHub, Hub } from '@sentry/hub';\nimport { dropUndefinedKeys, isInstanceOf, logger } from '@sentry/utils';\nimport { Span as SpanClass, SpanRecorder } from './span';\n/** JSDoc */\nvar Transaction = /** @class */ (function (_super) {\n    __extends(Transaction, _super);\n    /**\n     * This constructor should never be called manually. Those instrumenting tracing should use\n     * `Sentry.startTransaction()`, and internal methods should use `hub.startTransaction()`.\n     * @internal\n     * @hideconstructor\n     * @hidden\n     */\n    function Transaction(transactionContext, hub) {\n        var _this = _super.call(this, transactionContext) || this;\n        _this._measurements = {};\n        /**\n         * The reference to the current hub.\n         */\n        _this._hub = getCurrentHub();\n        if (isInstanceOf(hub, Hub)) {\n            _this._hub = hub;\n        }\n        _this.name = transactionContext.name || '';\n        _this.metadata = transactionContext.metadata || {};\n        _this._trimEnd = transactionContext.trimEnd;\n        // this is because transactions are also spans, and spans have a transaction pointer\n        _this.transaction = _this;\n        return _this;\n    }\n    /**\n     * JSDoc\n     */\n    Transaction.prototype.setName = function (name) {\n        this.name = name;\n    };\n    /**\n     * Attaches SpanRecorder to the span itself\n     * @param maxlen maximum number of spans that can be recorded\n     */\n    Transaction.prototype.initSpanRecorder = function (maxlen) {\n        if (maxlen === void 0) { maxlen = 1000; }\n        if (!this.spanRecorder) {\n            this.spanRecorder = new SpanRecorder(maxlen);\n        }\n        this.spanRecorder.add(this);\n    };\n    /**\n     * Set observed measurements for this transaction.\n     * @hidden\n     */\n    Transaction.prototype.setMeasurements = function (measurements) {\n        this._measurements = __assign({}, measurements);\n    };\n    /**\n     * Set metadata for this transaction.\n     * @hidden\n     */\n    Transaction.prototype.setMetadata = function (newMetadata) {\n        this.metadata = __assign(__assign({}, this.metadata), newMetadata);\n    };\n    /**\n     * @inheritDoc\n     */\n    Transaction.prototype.finish = function (endTimestamp) {\n        var _this = this;\n        // This transaction is already finished, so we should not flush it again.\n        if (this.endTimestamp !== undefined) {\n            return undefined;\n        }\n        if (!this.name) {\n            logger.warn('Transaction has no name, falling back to `<unlabeled transaction>`.');\n            this.name = '<unlabeled transaction>';\n        }\n        // just sets the end timestamp\n        _super.prototype.finish.call(this, endTimestamp);\n        if (this.sampled !== true) {\n            // At this point if `sampled !== true` we want to discard the transaction.\n            logger.log('[Tracing] Discarding transaction because its trace was not chosen to be sampled.');\n            var client = this._hub.getClient();\n            var transport = client && client.getTransport && client.getTransport();\n            if (transport && transport.recordLostEvent) {\n                transport.recordLostEvent('sample_rate', 'transaction');\n            }\n            return undefined;\n        }\n        var finishedSpans = this.spanRecorder ? this.spanRecorder.spans.filter(function (s) { return s !== _this && s.endTimestamp; }) : [];\n        if (this._trimEnd && finishedSpans.length > 0) {\n            this.endTimestamp = finishedSpans.reduce(function (prev, current) {\n                if (prev.endTimestamp && current.endTimestamp) {\n                    return prev.endTimestamp > current.endTimestamp ? prev : current;\n                }\n                return prev;\n            }).endTimestamp;\n        }\n        var transaction = {\n            contexts: {\n                trace: this.getTraceContext(),\n            },\n            spans: finishedSpans,\n            start_timestamp: this.startTimestamp,\n            tags: this.tags,\n            timestamp: this.endTimestamp,\n            transaction: this.name,\n            type: 'transaction',\n            sdkProcessingMetadata: this.metadata,\n        };\n        var hasMeasurements = Object.keys(this._measurements).length > 0;\n        if (hasMeasurements) {\n            logger.log('[Measurements] Adding measurements to transaction', JSON.stringify(this._measurements, undefined, 2));\n            transaction.measurements = this._measurements;\n        }\n        logger.log(\"[Tracing] Finishing \" + this.op + \" transaction: \" + this.name + \".\");\n        return this._hub.captureEvent(transaction);\n    };\n    /**\n     * @inheritDoc\n     */\n    Transaction.prototype.toContext = function () {\n        var spanContext = _super.prototype.toContext.call(this);\n        return dropUndefinedKeys(__assign(__assign({}, spanContext), { name: this.name, trimEnd: this._trimEnd }));\n    };\n    /**\n     * @inheritDoc\n     */\n    Transaction.prototype.updateWithContext = function (transactionContext) {\n        var _a;\n        _super.prototype.updateWithContext.call(this, transactionContext);\n        this.name = (_a = transactionContext.name, (_a !== null && _a !== void 0 ? _a : ''));\n        this._trimEnd = transactionContext.trimEnd;\n        return this;\n    };\n    return Transaction;\n}(SpanClass));\nexport { Transaction };\n//# sourceMappingURL=transaction.js.map","/**\n * This module mostly exists for optimizations in the build process\n * through rollup and terser.  We define some global constants which\n * are normally undefined.  However terser overrides these with global\n * definitions which can be evaluated by the static analyzer when\n * creating a bundle.\n *\n * In turn the `isDebugBuild` and `isBrowserBundle` functions are pure\n * and can help us remove unused code from the bundles.\n */\n/**\n * Figures out if we're building with debug functionality.\n *\n * @returns true if this is a debug build\n */\nexport function isDebugBuild() {\n    return typeof __SENTRY_NO_DEBUG__ !== 'undefined' && !__SENTRY_BROWSER_BUNDLE__;\n}\n/**\n * Figures out if we're building a browser bundle.\n *\n * @returns true if this is a browser bundle build.\n */\nexport function isBrowserBundle() {\n    return typeof __SENTRY_BROWSER_BUNDLE__ !== 'undefined' && !!__SENTRY_BROWSER_BUNDLE__;\n}\n//# sourceMappingURL=env.js.map","/* eslint-disable @typescript-eslint/explicit-function-return-type */\n/* eslint-disable @typescript-eslint/typedef */\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { isThenable } from './is';\n/**\n * Creates a resolved sync promise.\n *\n * @param value the value to resolve the promise with\n * @returns the resolved sync promise\n */\nexport function resolvedSyncPromise(value) {\n    return new SyncPromise(function (resolve) {\n        resolve(value);\n    });\n}\n/**\n * Creates a rejected sync promise.\n *\n * @param value the value to reject the promise with\n * @returns the rejected sync promise\n */\nexport function rejectedSyncPromise(reason) {\n    return new SyncPromise(function (_, reject) {\n        reject(reason);\n    });\n}\n/**\n * Thenable class that behaves like a Promise and follows it's interface\n * but is not async internally\n */\nvar SyncPromise = /** @class */ (function () {\n    function SyncPromise(executor) {\n        var _this = this;\n        this._state = 0 /* PENDING */;\n        this._handlers = [];\n        /** JSDoc */\n        this._resolve = function (value) {\n            _this._setResult(1 /* RESOLVED */, value);\n        };\n        /** JSDoc */\n        this._reject = function (reason) {\n            _this._setResult(2 /* REJECTED */, reason);\n        };\n        /** JSDoc */\n        this._setResult = function (state, value) {\n            if (_this._state !== 0 /* PENDING */) {\n                return;\n            }\n            if (isThenable(value)) {\n                void value.then(_this._resolve, _this._reject);\n                return;\n            }\n            _this._state = state;\n            _this._value = value;\n            _this._executeHandlers();\n        };\n        /** JSDoc */\n        this._executeHandlers = function () {\n            if (_this._state === 0 /* PENDING */) {\n                return;\n            }\n            var cachedHandlers = _this._handlers.slice();\n            _this._handlers = [];\n            cachedHandlers.forEach(function (handler) {\n                if (handler[0]) {\n                    return;\n                }\n                if (_this._state === 1 /* RESOLVED */) {\n                    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n                    handler[1](_this._value);\n                }\n                if (_this._state === 2 /* REJECTED */) {\n                    handler[2](_this._value);\n                }\n                handler[0] = true;\n            });\n        };\n        try {\n            executor(this._resolve, this._reject);\n        }\n        catch (e) {\n            this._reject(e);\n        }\n    }\n    /** JSDoc */\n    SyncPromise.prototype.then = function (onfulfilled, onrejected) {\n        var _this = this;\n        return new SyncPromise(function (resolve, reject) {\n            _this._handlers.push([\n                false,\n                function (result) {\n                    if (!onfulfilled) {\n                        // TODO: ¯\\_(ツ)_/¯\n                        // TODO: FIXME\n                        resolve(result);\n                    }\n                    else {\n                        try {\n                            resolve(onfulfilled(result));\n                        }\n                        catch (e) {\n                            reject(e);\n                        }\n                    }\n                },\n                function (reason) {\n                    if (!onrejected) {\n                        reject(reason);\n                    }\n                    else {\n                        try {\n                            resolve(onrejected(reason));\n                        }\n                        catch (e) {\n                            reject(e);\n                        }\n                    }\n                },\n            ]);\n            _this._executeHandlers();\n        });\n    };\n    /** JSDoc */\n    SyncPromise.prototype.catch = function (onrejected) {\n        return this.then(function (val) { return val; }, onrejected);\n    };\n    /** JSDoc */\n    SyncPromise.prototype.finally = function (onfinally) {\n        var _this = this;\n        return new SyncPromise(function (resolve, reject) {\n            var val;\n            var isRejected;\n            return _this.then(function (value) {\n                isRejected = false;\n                val = value;\n                if (onfinally) {\n                    onfinally();\n                }\n            }, function (reason) {\n                isRejected = true;\n                val = reason;\n                if (onfinally) {\n                    onfinally();\n                }\n            }).then(function () {\n                if (isRejected) {\n                    reject(val);\n                    return;\n                }\n                resolve(val);\n            });\n        });\n    };\n    return SyncPromise;\n}());\nexport { SyncPromise };\n//# sourceMappingURL=syncpromise.js.map","import { __assign, __read, __spread } from \"tslib\";\nimport { dateTimestampInSeconds, getGlobalObject, isPlainObject, isThenable, SyncPromise } from '@sentry/utils';\n/**\n * Absolute maximum number of breadcrumbs added to an event.\n * The `maxBreadcrumbs` option cannot be higher than this value.\n */\nvar MAX_BREADCRUMBS = 100;\n/**\n * Holds additional event information. {@link Scope.applyToEvent} will be\n * called by the client before an event will be sent.\n */\nvar Scope = /** @class */ (function () {\n    function Scope() {\n        /** Flag if notifying is happening. */\n        this._notifyingListeners = false;\n        /** Callback for client to receive scope changes. */\n        this._scopeListeners = [];\n        /** Callback list that will be called after {@link applyToEvent}. */\n        this._eventProcessors = [];\n        /** Array of breadcrumbs. */\n        this._breadcrumbs = [];\n        /** User */\n        this._user = {};\n        /** Tags */\n        this._tags = {};\n        /** Extra */\n        this._extra = {};\n        /** Contexts */\n        this._contexts = {};\n        /**\n         * A place to stash data which is needed at some point in the SDK's event processing pipeline but which shouldn't get\n         * sent to Sentry\n         */\n        this._sdkProcessingMetadata = {};\n    }\n    /**\n     * Inherit values from the parent scope.\n     * @param scope to clone.\n     */\n    Scope.clone = function (scope) {\n        var newScope = new Scope();\n        if (scope) {\n            newScope._breadcrumbs = __spread(scope._breadcrumbs);\n            newScope._tags = __assign({}, scope._tags);\n            newScope._extra = __assign({}, scope._extra);\n            newScope._contexts = __assign({}, scope._contexts);\n            newScope._user = scope._user;\n            newScope._level = scope._level;\n            newScope._span = scope._span;\n            newScope._session = scope._session;\n            newScope._transactionName = scope._transactionName;\n            newScope._fingerprint = scope._fingerprint;\n            newScope._eventProcessors = __spread(scope._eventProcessors);\n            newScope._requestSession = scope._requestSession;\n        }\n        return newScope;\n    };\n    /**\n     * Add internal on change listener. Used for sub SDKs that need to store the scope.\n     * @hidden\n     */\n    Scope.prototype.addScopeListener = function (callback) {\n        this._scopeListeners.push(callback);\n    };\n    /**\n     * @inheritDoc\n     */\n    Scope.prototype.addEventProcessor = function (callback) {\n        this._eventProcessors.push(callback);\n        return this;\n    };\n    /**\n     * @inheritDoc\n     */\n    Scope.prototype.setUser = function (user) {\n        this._user = user || {};\n        if (this._session) {\n            this._session.update({ user: user });\n        }\n        this._notifyScopeListeners();\n        return this;\n    };\n    /**\n     * @inheritDoc\n     */\n    Scope.prototype.getUser = function () {\n        return this._user;\n    };\n    /**\n     * @inheritDoc\n     */\n    Scope.prototype.getRequestSession = function () {\n        return this._requestSession;\n    };\n    /**\n     * @inheritDoc\n     */\n    Scope.prototype.setRequestSession = function (requestSession) {\n        this._requestSession = requestSession;\n        return this;\n    };\n    /**\n     * @inheritDoc\n     */\n    Scope.prototype.setTags = function (tags) {\n        this._tags = __assign(__assign({}, this._tags), tags);\n        this._notifyScopeListeners();\n        return this;\n    };\n    /**\n     * @inheritDoc\n     */\n    Scope.prototype.setTag = function (key, value) {\n        var _a;\n        this._tags = __assign(__assign({}, this._tags), (_a = {}, _a[key] = value, _a));\n        this._notifyScopeListeners();\n        return this;\n    };\n    /**\n     * @inheritDoc\n     */\n    Scope.prototype.setExtras = function (extras) {\n        this._extra = __assign(__assign({}, this._extra), extras);\n        this._notifyScopeListeners();\n        return this;\n    };\n    /**\n     * @inheritDoc\n     */\n    Scope.prototype.setExtra = function (key, extra) {\n        var _a;\n        this._extra = __assign(__assign({}, this._extra), (_a = {}, _a[key] = extra, _a));\n        this._notifyScopeListeners();\n        return this;\n    };\n    /**\n     * @inheritDoc\n     */\n    Scope.prototype.setFingerprint = function (fingerprint) {\n        this._fingerprint = fingerprint;\n        this._notifyScopeListeners();\n        return this;\n    };\n    /**\n     * @inheritDoc\n     */\n    Scope.prototype.setLevel = function (level) {\n        this._level = level;\n        this._notifyScopeListeners();\n        return this;\n    };\n    /**\n     * @inheritDoc\n     */\n    Scope.prototype.setTransactionName = function (name) {\n        this._transactionName = name;\n        this._notifyScopeListeners();\n        return this;\n    };\n    /**\n     * Can be removed in major version.\n     * @deprecated in favor of {@link this.setTransactionName}\n     */\n    Scope.prototype.setTransaction = function (name) {\n        return this.setTransactionName(name);\n    };\n    /**\n     * @inheritDoc\n     */\n    Scope.prototype.setContext = function (key, context) {\n        var _a;\n        if (context === null) {\n            // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n            delete this._contexts[key];\n        }\n        else {\n            this._contexts = __assign(__assign({}, this._contexts), (_a = {}, _a[key] = context, _a));\n        }\n        this._notifyScopeListeners();\n        return this;\n    };\n    /**\n     * @inheritDoc\n     */\n    Scope.prototype.setSpan = function (span) {\n        this._span = span;\n        this._notifyScopeListeners();\n        return this;\n    };\n    /**\n     * @inheritDoc\n     */\n    Scope.prototype.getSpan = function () {\n        return this._span;\n    };\n    /**\n     * @inheritDoc\n     */\n    Scope.prototype.getTransaction = function () {\n        // Often, this span (if it exists at all) will be a transaction, but it's not guaranteed to be. Regardless, it will\n        // have a pointer to the currently-active transaction.\n        var span = this.getSpan();\n        return span && span.transaction;\n    };\n    /**\n     * @inheritDoc\n     */\n    Scope.prototype.setSession = function (session) {\n        if (!session) {\n            delete this._session;\n        }\n        else {\n            this._session = session;\n        }\n        this._notifyScopeListeners();\n        return this;\n    };\n    /**\n     * @inheritDoc\n     */\n    Scope.prototype.getSession = function () {\n        return this._session;\n    };\n    /**\n     * @inheritDoc\n     */\n    Scope.prototype.update = function (captureContext) {\n        if (!captureContext) {\n            return this;\n        }\n        if (typeof captureContext === 'function') {\n            var updatedScope = captureContext(this);\n            return updatedScope instanceof Scope ? updatedScope : this;\n        }\n        if (captureContext instanceof Scope) {\n            this._tags = __assign(__assign({}, this._tags), captureContext._tags);\n            this._extra = __assign(__assign({}, this._extra), captureContext._extra);\n            this._contexts = __assign(__assign({}, this._contexts), captureContext._contexts);\n            if (captureContext._user && Object.keys(captureContext._user).length) {\n                this._user = captureContext._user;\n            }\n            if (captureContext._level) {\n                this._level = captureContext._level;\n            }\n            if (captureContext._fingerprint) {\n                this._fingerprint = captureContext._fingerprint;\n            }\n            if (captureContext._requestSession) {\n                this._requestSession = captureContext._requestSession;\n            }\n        }\n        else if (isPlainObject(captureContext)) {\n            // eslint-disable-next-line no-param-reassign\n            captureContext = captureContext;\n            this._tags = __assign(__assign({}, this._tags), captureContext.tags);\n            this._extra = __assign(__assign({}, this._extra), captureContext.extra);\n            this._contexts = __assign(__assign({}, this._contexts), captureContext.contexts);\n            if (captureContext.user) {\n                this._user = captureContext.user;\n            }\n            if (captureContext.level) {\n                this._level = captureContext.level;\n            }\n            if (captureContext.fingerprint) {\n                this._fingerprint = captureContext.fingerprint;\n            }\n            if (captureContext.requestSession) {\n                this._requestSession = captureContext.requestSession;\n            }\n        }\n        return this;\n    };\n    /**\n     * @inheritDoc\n     */\n    Scope.prototype.clear = function () {\n        this._breadcrumbs = [];\n        this._tags = {};\n        this._extra = {};\n        this._user = {};\n        this._contexts = {};\n        this._level = undefined;\n        this._transactionName = undefined;\n        this._fingerprint = undefined;\n        this._requestSession = undefined;\n        this._span = undefined;\n        this._session = undefined;\n        this._notifyScopeListeners();\n        return this;\n    };\n    /**\n     * @inheritDoc\n     */\n    Scope.prototype.addBreadcrumb = function (breadcrumb, maxBreadcrumbs) {\n        var maxCrumbs = typeof maxBreadcrumbs === 'number' ? Math.min(maxBreadcrumbs, MAX_BREADCRUMBS) : MAX_BREADCRUMBS;\n        // No data has been changed, so don't notify scope listeners\n        if (maxCrumbs <= 0) {\n            return this;\n        }\n        var mergedBreadcrumb = __assign({ timestamp: dateTimestampInSeconds() }, breadcrumb);\n        this._breadcrumbs = __spread(this._breadcrumbs, [mergedBreadcrumb]).slice(-maxCrumbs);\n        this._notifyScopeListeners();\n        return this;\n    };\n    /**\n     * @inheritDoc\n     */\n    Scope.prototype.clearBreadcrumbs = function () {\n        this._breadcrumbs = [];\n        this._notifyScopeListeners();\n        return this;\n    };\n    /**\n     * Applies the current context and fingerprint to the event.\n     * Note that breadcrumbs will be added by the client.\n     * Also if the event has already breadcrumbs on it, we do not merge them.\n     * @param event Event\n     * @param hint May contain additional information about the original exception.\n     * @hidden\n     */\n    Scope.prototype.applyToEvent = function (event, hint) {\n        if (this._extra && Object.keys(this._extra).length) {\n            event.extra = __assign(__assign({}, this._extra), event.extra);\n        }\n        if (this._tags && Object.keys(this._tags).length) {\n            event.tags = __assign(__assign({}, this._tags), event.tags);\n        }\n        if (this._user && Object.keys(this._user).length) {\n            event.user = __assign(__assign({}, this._user), event.user);\n        }\n        if (this._contexts && Object.keys(this._contexts).length) {\n            event.contexts = __assign(__assign({}, this._contexts), event.contexts);\n        }\n        if (this._level) {\n            event.level = this._level;\n        }\n        if (this._transactionName) {\n            event.transaction = this._transactionName;\n        }\n        // We want to set the trace context for normal events only if there isn't already\n        // a trace context on the event. There is a product feature in place where we link\n        // errors with transaction and it relies on that.\n        if (this._span) {\n            event.contexts = __assign({ trace: this._span.getTraceContext() }, event.contexts);\n            var transactionName = this._span.transaction && this._span.transaction.name;\n            if (transactionName) {\n                event.tags = __assign({ transaction: transactionName }, event.tags);\n            }\n        }\n        this._applyFingerprint(event);\n        event.breadcrumbs = __spread((event.breadcrumbs || []), this._breadcrumbs);\n        event.breadcrumbs = event.breadcrumbs.length > 0 ? event.breadcrumbs : undefined;\n        event.sdkProcessingMetadata = this._sdkProcessingMetadata;\n        return this._notifyEventProcessors(__spread(getGlobalEventProcessors(), this._eventProcessors), event, hint);\n    };\n    /**\n     * Add data which will be accessible during event processing but won't get sent to Sentry\n     */\n    Scope.prototype.setSDKProcessingMetadata = function (newData) {\n        this._sdkProcessingMetadata = __assign(__assign({}, this._sdkProcessingMetadata), newData);\n        return this;\n    };\n    /**\n     * This will be called after {@link applyToEvent} is finished.\n     */\n    Scope.prototype._notifyEventProcessors = function (processors, event, hint, index) {\n        var _this = this;\n        if (index === void 0) { index = 0; }\n        return new SyncPromise(function (resolve, reject) {\n            var processor = processors[index];\n            if (event === null || typeof processor !== 'function') {\n                resolve(event);\n            }\n            else {\n                var result = processor(__assign({}, event), hint);\n                if (isThenable(result)) {\n                    void result\n                        .then(function (final) { return _this._notifyEventProcessors(processors, final, hint, index + 1).then(resolve); })\n                        .then(null, reject);\n                }\n                else {\n                    void _this._notifyEventProcessors(processors, result, hint, index + 1)\n                        .then(resolve)\n                        .then(null, reject);\n                }\n            }\n        });\n    };\n    /**\n     * This will be called on every set call.\n     */\n    Scope.prototype._notifyScopeListeners = function () {\n        var _this = this;\n        // We need this check for this._notifyingListeners to be able to work on scope during updates\n        // If this check is not here we'll produce endless recursion when something is done with the scope\n        // during the callback.\n        if (!this._notifyingListeners) {\n            this._notifyingListeners = true;\n            this._scopeListeners.forEach(function (callback) {\n                callback(_this);\n            });\n            this._notifyingListeners = false;\n        }\n    };\n    /**\n     * Applies fingerprint from the scope to the event if there's one,\n     * uses message if there's one instead or get rid of empty fingerprint\n     */\n    Scope.prototype._applyFingerprint = function (event) {\n        // Make sure it's an array first and we actually have something in place\n        event.fingerprint = event.fingerprint\n            ? Array.isArray(event.fingerprint)\n                ? event.fingerprint\n                : [event.fingerprint]\n            : [];\n        // If we have something on the scope, then merge it with event\n        if (this._fingerprint) {\n            event.fingerprint = event.fingerprint.concat(this._fingerprint);\n        }\n        // If we have no data at all, remove empty array default\n        if (event.fingerprint && !event.fingerprint.length) {\n            delete event.fingerprint;\n        }\n    };\n    return Scope;\n}());\nexport { Scope };\n/**\n * Returns the global event processors.\n */\nfunction getGlobalEventProcessors() {\n    /* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access  */\n    var global = getGlobalObject();\n    global.__SENTRY__ = global.__SENTRY__ || {};\n    global.__SENTRY__.globalEventProcessors = global.__SENTRY__.globalEventProcessors || [];\n    return global.__SENTRY__.globalEventProcessors;\n    /* eslint-enable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access */\n}\n/**\n * Add a EventProcessor to be kept globally.\n * @param callback EventProcessor to add\n */\nexport function addGlobalEventProcessor(callback) {\n    getGlobalEventProcessors().push(callback);\n}\n//# sourceMappingURL=scope.js.map","import { dropUndefinedKeys, timestampInSeconds, uuid4 } from '@sentry/utils';\n/**\n * @inheritdoc\n */\nvar Session = /** @class */ (function () {\n    function Session(context) {\n        this.errors = 0;\n        this.sid = uuid4();\n        this.duration = 0;\n        this.status = 'ok';\n        this.init = true;\n        this.ignoreDuration = false;\n        // Both timestamp and started are in seconds since the UNIX epoch.\n        var startingTime = timestampInSeconds();\n        this.timestamp = startingTime;\n        this.started = startingTime;\n        if (context) {\n            this.update(context);\n        }\n    }\n    /** JSDoc */\n    // eslint-disable-next-line complexity\n    Session.prototype.update = function (context) {\n        if (context === void 0) { context = {}; }\n        if (context.user) {\n            if (!this.ipAddress && context.user.ip_address) {\n                this.ipAddress = context.user.ip_address;\n            }\n            if (!this.did && !context.did) {\n                this.did = context.user.id || context.user.email || context.user.username;\n            }\n        }\n        this.timestamp = context.timestamp || timestampInSeconds();\n        if (context.ignoreDuration) {\n            this.ignoreDuration = context.ignoreDuration;\n        }\n        if (context.sid) {\n            // Good enough uuid validation. — Kamil\n            this.sid = context.sid.length === 32 ? context.sid : uuid4();\n        }\n        if (context.init !== undefined) {\n            this.init = context.init;\n        }\n        if (!this.did && context.did) {\n            this.did = \"\" + context.did;\n        }\n        if (typeof context.started === 'number') {\n            this.started = context.started;\n        }\n        if (this.ignoreDuration) {\n            this.duration = undefined;\n        }\n        else if (typeof context.duration === 'number') {\n            this.duration = context.duration;\n        }\n        else {\n            var duration = this.timestamp - this.started;\n            this.duration = duration >= 0 ? duration : 0;\n        }\n        if (context.release) {\n            this.release = context.release;\n        }\n        if (context.environment) {\n            this.environment = context.environment;\n        }\n        if (!this.ipAddress && context.ipAddress) {\n            this.ipAddress = context.ipAddress;\n        }\n        if (!this.userAgent && context.userAgent) {\n            this.userAgent = context.userAgent;\n        }\n        if (typeof context.errors === 'number') {\n            this.errors = context.errors;\n        }\n        if (context.status) {\n            this.status = context.status;\n        }\n    };\n    /** JSDoc */\n    Session.prototype.close = function (status) {\n        if (status) {\n            this.update({ status: status });\n        }\n        else if (this.status === 'ok') {\n            this.update({ status: 'exited' });\n        }\n        else {\n            this.update();\n        }\n    };\n    /** JSDoc */\n    Session.prototype.toJSON = function () {\n        return dropUndefinedKeys({\n            sid: \"\" + this.sid,\n            init: this.init,\n            // Make sure that sec is converted to ms for date constructor\n            started: new Date(this.started * 1000).toISOString(),\n            timestamp: new Date(this.timestamp * 1000).toISOString(),\n            status: this.status,\n            errors: this.errors,\n            did: typeof this.did === 'number' || typeof this.did === 'string' ? \"\" + this.did : undefined,\n            duration: this.duration,\n            attrs: {\n                release: this.release,\n                environment: this.environment,\n                ip_address: this.ipAddress,\n                user_agent: this.userAgent,\n            },\n        });\n    };\n    return Session;\n}());\nexport { Session };\n//# sourceMappingURL=session.js.map","import { __assign, __read, __spread } from \"tslib\";\nimport { consoleSandbox, dateTimestampInSeconds, getGlobalObject, isNodeEnv, logger, uuid4 } from '@sentry/utils';\nimport { Scope } from './scope';\nimport { Session } from './session';\n/**\n * API compatibility version of this hub.\n *\n * WARNING: This number should only be increased when the global interface\n * changes and new methods are introduced.\n *\n * @hidden\n */\nexport var API_VERSION = 4;\n/**\n * Default maximum number of breadcrumbs added to an event. Can be overwritten\n * with {@link Options.maxBreadcrumbs}.\n */\nvar DEFAULT_BREADCRUMBS = 100;\n/**\n * @inheritDoc\n */\nvar Hub = /** @class */ (function () {\n    /**\n     * Creates a new instance of the hub, will push one {@link Layer} into the\n     * internal stack on creation.\n     *\n     * @param client bound to the hub.\n     * @param scope bound to the hub.\n     * @param version number, higher number means higher priority.\n     */\n    function Hub(client, scope, _version) {\n        if (scope === void 0) { scope = new Scope(); }\n        if (_version === void 0) { _version = API_VERSION; }\n        this._version = _version;\n        /** Is a {@link Layer}[] containing the client and scope */\n        this._stack = [{}];\n        this.getStackTop().scope = scope;\n        if (client) {\n            this.bindClient(client);\n        }\n    }\n    /**\n     * @inheritDoc\n     */\n    Hub.prototype.isOlderThan = function (version) {\n        return this._version < version;\n    };\n    /**\n     * @inheritDoc\n     */\n    Hub.prototype.bindClient = function (client) {\n        var top = this.getStackTop();\n        top.client = client;\n        if (client && client.setupIntegrations) {\n            client.setupIntegrations();\n        }\n    };\n    /**\n     * @inheritDoc\n     */\n    Hub.prototype.pushScope = function () {\n        // We want to clone the content of prev scope\n        var scope = Scope.clone(this.getScope());\n        this.getStack().push({\n            client: this.getClient(),\n            scope: scope,\n        });\n        return scope;\n    };\n    /**\n     * @inheritDoc\n     */\n    Hub.prototype.popScope = function () {\n        if (this.getStack().length <= 1)\n            return false;\n        return !!this.getStack().pop();\n    };\n    /**\n     * @inheritDoc\n     */\n    Hub.prototype.withScope = function (callback) {\n        var scope = this.pushScope();\n        try {\n            callback(scope);\n        }\n        finally {\n            this.popScope();\n        }\n    };\n    /**\n     * @inheritDoc\n     */\n    Hub.prototype.getClient = function () {\n        return this.getStackTop().client;\n    };\n    /** Returns the scope of the top stack. */\n    Hub.prototype.getScope = function () {\n        return this.getStackTop().scope;\n    };\n    /** Returns the scope stack for domains or the process. */\n    Hub.prototype.getStack = function () {\n        return this._stack;\n    };\n    /** Returns the topmost scope layer in the order domain > local > process. */\n    Hub.prototype.getStackTop = function () {\n        return this._stack[this._stack.length - 1];\n    };\n    /**\n     * @inheritDoc\n     */\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n    Hub.prototype.captureException = function (exception, hint) {\n        var eventId = (this._lastEventId = uuid4());\n        var finalHint = hint;\n        // If there's no explicit hint provided, mimic the same thing that would happen\n        // in the minimal itself to create a consistent behavior.\n        // We don't do this in the client, as it's the lowest level API, and doing this,\n        // would prevent user from having full control over direct calls.\n        if (!hint) {\n            var syntheticException = void 0;\n            try {\n                throw new Error('Sentry syntheticException');\n            }\n            catch (exception) {\n                syntheticException = exception;\n            }\n            finalHint = {\n                originalException: exception,\n                syntheticException: syntheticException,\n            };\n        }\n        this._invokeClient('captureException', exception, __assign(__assign({}, finalHint), { event_id: eventId }));\n        return eventId;\n    };\n    /**\n     * @inheritDoc\n     */\n    Hub.prototype.captureMessage = function (message, level, hint) {\n        var eventId = (this._lastEventId = uuid4());\n        var finalHint = hint;\n        // If there's no explicit hint provided, mimic the same thing that would happen\n        // in the minimal itself to create a consistent behavior.\n        // We don't do this in the client, as it's the lowest level API, and doing this,\n        // would prevent user from having full control over direct calls.\n        if (!hint) {\n            var syntheticException = void 0;\n            try {\n                throw new Error(message);\n            }\n            catch (exception) {\n                syntheticException = exception;\n            }\n            finalHint = {\n                originalException: message,\n                syntheticException: syntheticException,\n            };\n        }\n        this._invokeClient('captureMessage', message, level, __assign(__assign({}, finalHint), { event_id: eventId }));\n        return eventId;\n    };\n    /**\n     * @inheritDoc\n     */\n    Hub.prototype.captureEvent = function (event, hint) {\n        var eventId = uuid4();\n        if (event.type !== 'transaction') {\n            this._lastEventId = eventId;\n        }\n        this._invokeClient('captureEvent', event, __assign(__assign({}, hint), { event_id: eventId }));\n        return eventId;\n    };\n    /**\n     * @inheritDoc\n     */\n    Hub.prototype.lastEventId = function () {\n        return this._lastEventId;\n    };\n    /**\n     * @inheritDoc\n     */\n    Hub.prototype.addBreadcrumb = function (breadcrumb, hint) {\n        var _a = this.getStackTop(), scope = _a.scope, client = _a.client;\n        if (!scope || !client)\n            return;\n        // eslint-disable-next-line @typescript-eslint/unbound-method\n        var _b = (client.getOptions && client.getOptions()) || {}, _c = _b.beforeBreadcrumb, beforeBreadcrumb = _c === void 0 ? null : _c, _d = _b.maxBreadcrumbs, maxBreadcrumbs = _d === void 0 ? DEFAULT_BREADCRUMBS : _d;\n        if (maxBreadcrumbs <= 0)\n            return;\n        var timestamp = dateTimestampInSeconds();\n        var mergedBreadcrumb = __assign({ timestamp: timestamp }, breadcrumb);\n        var finalBreadcrumb = beforeBreadcrumb\n            ? consoleSandbox(function () { return beforeBreadcrumb(mergedBreadcrumb, hint); })\n            : mergedBreadcrumb;\n        if (finalBreadcrumb === null)\n            return;\n        scope.addBreadcrumb(finalBreadcrumb, maxBreadcrumbs);\n    };\n    /**\n     * @inheritDoc\n     */\n    Hub.prototype.setUser = function (user) {\n        var scope = this.getScope();\n        if (scope)\n            scope.setUser(user);\n    };\n    /**\n     * @inheritDoc\n     */\n    Hub.prototype.setTags = function (tags) {\n        var scope = this.getScope();\n        if (scope)\n            scope.setTags(tags);\n    };\n    /**\n     * @inheritDoc\n     */\n    Hub.prototype.setExtras = function (extras) {\n        var scope = this.getScope();\n        if (scope)\n            scope.setExtras(extras);\n    };\n    /**\n     * @inheritDoc\n     */\n    Hub.prototype.setTag = function (key, value) {\n        var scope = this.getScope();\n        if (scope)\n            scope.setTag(key, value);\n    };\n    /**\n     * @inheritDoc\n     */\n    Hub.prototype.setExtra = function (key, extra) {\n        var scope = this.getScope();\n        if (scope)\n            scope.setExtra(key, extra);\n    };\n    /**\n     * @inheritDoc\n     */\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    Hub.prototype.setContext = function (name, context) {\n        var scope = this.getScope();\n        if (scope)\n            scope.setContext(name, context);\n    };\n    /**\n     * @inheritDoc\n     */\n    Hub.prototype.configureScope = function (callback) {\n        var _a = this.getStackTop(), scope = _a.scope, client = _a.client;\n        if (scope && client) {\n            callback(scope);\n        }\n    };\n    /**\n     * @inheritDoc\n     */\n    Hub.prototype.run = function (callback) {\n        var oldHub = makeMain(this);\n        try {\n            callback(this);\n        }\n        finally {\n            makeMain(oldHub);\n        }\n    };\n    /**\n     * @inheritDoc\n     */\n    Hub.prototype.getIntegration = function (integration) {\n        var client = this.getClient();\n        if (!client)\n            return null;\n        try {\n            return client.getIntegration(integration);\n        }\n        catch (_oO) {\n            logger.warn(\"Cannot retrieve integration \" + integration.id + \" from the current Hub\");\n            return null;\n        }\n    };\n    /**\n     * @inheritDoc\n     */\n    Hub.prototype.startSpan = function (context) {\n        return this._callExtensionMethod('startSpan', context);\n    };\n    /**\n     * @inheritDoc\n     */\n    Hub.prototype.startTransaction = function (context, customSamplingContext) {\n        return this._callExtensionMethod('startTransaction', context, customSamplingContext);\n    };\n    /**\n     * @inheritDoc\n     */\n    Hub.prototype.traceHeaders = function () {\n        return this._callExtensionMethod('traceHeaders');\n    };\n    /**\n     * @inheritDoc\n     */\n    Hub.prototype.captureSession = function (endSession) {\n        if (endSession === void 0) { endSession = false; }\n        // both send the update and pull the session from the scope\n        if (endSession) {\n            return this.endSession();\n        }\n        // only send the update\n        this._sendSessionUpdate();\n    };\n    /**\n     * @inheritDoc\n     */\n    Hub.prototype.endSession = function () {\n        var layer = this.getStackTop();\n        var scope = layer && layer.scope;\n        var session = scope && scope.getSession();\n        if (session) {\n            session.close();\n        }\n        this._sendSessionUpdate();\n        // the session is over; take it off of the scope\n        if (scope) {\n            scope.setSession();\n        }\n    };\n    /**\n     * @inheritDoc\n     */\n    Hub.prototype.startSession = function (context) {\n        var _a = this.getStackTop(), scope = _a.scope, client = _a.client;\n        var _b = (client && client.getOptions()) || {}, release = _b.release, environment = _b.environment;\n        // Will fetch userAgent if called from browser sdk\n        var global = getGlobalObject();\n        var userAgent = (global.navigator || {}).userAgent;\n        var session = new Session(__assign(__assign(__assign({ release: release,\n            environment: environment }, (scope && { user: scope.getUser() })), (userAgent && { userAgent: userAgent })), context));\n        if (scope) {\n            // End existing session if there's one\n            var currentSession = scope.getSession && scope.getSession();\n            if (currentSession && currentSession.status === 'ok') {\n                currentSession.update({ status: 'exited' });\n            }\n            this.endSession();\n            // Afterwards we set the new session on the scope\n            scope.setSession(session);\n        }\n        return session;\n    };\n    /**\n     * Sends the current Session on the scope\n     */\n    Hub.prototype._sendSessionUpdate = function () {\n        var _a = this.getStackTop(), scope = _a.scope, client = _a.client;\n        if (!scope)\n            return;\n        var session = scope.getSession && scope.getSession();\n        if (session) {\n            if (client && client.captureSession) {\n                client.captureSession(session);\n            }\n        }\n    };\n    /**\n     * Internal helper function to call a method on the top client if it exists.\n     *\n     * @param method The method to call on the client.\n     * @param args Arguments to pass to the client function.\n     */\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    Hub.prototype._invokeClient = function (method) {\n        var _a;\n        var args = [];\n        for (var _i = 1; _i < arguments.length; _i++) {\n            args[_i - 1] = arguments[_i];\n        }\n        var _b = this.getStackTop(), scope = _b.scope, client = _b.client;\n        if (client && client[method]) {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any\n            (_a = client)[method].apply(_a, __spread(args, [scope]));\n        }\n    };\n    /**\n     * Calls global extension method and binding current instance to the function call\n     */\n    // @ts-ignore Function lacks ending return statement and return type does not include 'undefined'. ts(2366)\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    Hub.prototype._callExtensionMethod = function (method) {\n        var args = [];\n        for (var _i = 1; _i < arguments.length; _i++) {\n            args[_i - 1] = arguments[_i];\n        }\n        var carrier = getMainCarrier();\n        var sentry = carrier.__SENTRY__;\n        if (sentry && sentry.extensions && typeof sentry.extensions[method] === 'function') {\n            return sentry.extensions[method].apply(this, args);\n        }\n        logger.warn(\"Extension method \" + method + \" couldn't be found, doing nothing.\");\n    };\n    return Hub;\n}());\nexport { Hub };\n/**\n * Returns the global shim registry.\n *\n * FIXME: This function is problematic, because despite always returning a valid Carrier,\n * it has an optional `__SENTRY__` property, which then in turn requires us to always perform an unnecessary check\n * at the call-site. We always access the carrier through this function, so we can guarantee that `__SENTRY__` is there.\n **/\nexport function getMainCarrier() {\n    var carrier = getGlobalObject();\n    carrier.__SENTRY__ = carrier.__SENTRY__ || {\n        extensions: {},\n        hub: undefined,\n    };\n    return carrier;\n}\n/**\n * Replaces the current main hub with the passed one on the global object\n *\n * @returns The old replaced hub\n */\nexport function makeMain(hub) {\n    var registry = getMainCarrier();\n    var oldHub = getHubFromCarrier(registry);\n    setHubOnCarrier(registry, hub);\n    return oldHub;\n}\n/**\n * Returns the default hub instance.\n *\n * If a hub is already registered in the global carrier but this module\n * contains a more recent version, it replaces the registered version.\n * Otherwise, the currently registered hub will be returned.\n */\nexport function getCurrentHub() {\n    // Get main carrier (global for every environment)\n    var registry = getMainCarrier();\n    // If there's no hub, or its an old API, assign a new one\n    if (!hasHubOnCarrier(registry) || getHubFromCarrier(registry).isOlderThan(API_VERSION)) {\n        setHubOnCarrier(registry, new Hub());\n    }\n    // Prefer domains over global if they are there (applicable only to Node environment)\n    if (isNodeEnv()) {\n        return getHubFromActiveDomain(registry);\n    }\n    // Return hub that lives on a global object\n    return getHubFromCarrier(registry);\n}\n/**\n * Returns the active domain, if one exists\n * @deprecated No longer used; remove in v7\n * @returns The domain, or undefined if there is no active domain\n */\n// eslint-disable-next-line deprecation/deprecation\nexport function getActiveDomain() {\n    logger.warn('Function `getActiveDomain` is deprecated and will be removed in a future version.');\n    var sentry = getMainCarrier().__SENTRY__;\n    return sentry && sentry.extensions && sentry.extensions.domain && sentry.extensions.domain.active;\n}\n/**\n * Try to read the hub from an active domain, and fallback to the registry if one doesn't exist\n * @returns discovered hub\n */\nfunction getHubFromActiveDomain(registry) {\n    try {\n        var sentry = getMainCarrier().__SENTRY__;\n        var activeDomain = sentry && sentry.extensions && sentry.extensions.domain && sentry.extensions.domain.active;\n        // If there's no active domain, just return global hub\n        if (!activeDomain) {\n            return getHubFromCarrier(registry);\n        }\n        // If there's no hub on current domain, or it's an old API, assign a new one\n        if (!hasHubOnCarrier(activeDomain) || getHubFromCarrier(activeDomain).isOlderThan(API_VERSION)) {\n            var registryHubTopStack = getHubFromCarrier(registry).getStackTop();\n            setHubOnCarrier(activeDomain, new Hub(registryHubTopStack.client, Scope.clone(registryHubTopStack.scope)));\n        }\n        // Return hub that lives on a domain\n        return getHubFromCarrier(activeDomain);\n    }\n    catch (_Oo) {\n        // Return hub that lives on a global object\n        return getHubFromCarrier(registry);\n    }\n}\n/**\n * This will tell whether a carrier has a hub on it or not\n * @param carrier object\n */\nfunction hasHubOnCarrier(carrier) {\n    return !!(carrier && carrier.__SENTRY__ && carrier.__SENTRY__.hub);\n}\n/**\n * This will create a new {@link Hub} and add to the passed object on\n * __SENTRY__.hub.\n * @param carrier object\n * @hidden\n */\nexport function getHubFromCarrier(carrier) {\n    if (carrier && carrier.__SENTRY__ && carrier.__SENTRY__.hub)\n        return carrier.__SENTRY__.hub;\n    carrier.__SENTRY__ = carrier.__SENTRY__ || {};\n    carrier.__SENTRY__.hub = new Hub();\n    return carrier.__SENTRY__.hub;\n}\n/**\n * This will set passed {@link Hub} on the passed object's __SENTRY__.hub attribute\n * @param carrier object\n * @param hub Hub\n * @returns A boolean indicating success or failure\n */\nexport function setHubOnCarrier(carrier, hub) {\n    if (!carrier)\n        return false;\n    carrier.__SENTRY__ = carrier.__SENTRY__ || {};\n    carrier.__SENTRY__.hub = hub;\n    return true;\n}\n//# sourceMappingURL=hub.js.map","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n  return function wrap() {\n    var args = new Array(arguments.length);\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i];\n    }\n    return fn.apply(thisArg, args);\n  };\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n  return encodeURIComponent(val).\n    replace(/%40/gi, '@').\n    replace(/%3A/gi, ':').\n    replace(/%24/g, '$').\n    replace(/%2C/gi, ',').\n    replace(/%20/g, '+').\n    replace(/%5B/gi, '[').\n    replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n  /*eslint no-param-reassign:0*/\n  if (!params) {\n    return url;\n  }\n\n  var serializedParams;\n  if (paramsSerializer) {\n    serializedParams = paramsSerializer(params);\n  } else if (utils.isURLSearchParams(params)) {\n    serializedParams = params.toString();\n  } else {\n    var parts = [];\n\n    utils.forEach(params, function serialize(val, key) {\n      if (val === null || typeof val === 'undefined') {\n        return;\n      }\n\n      if (utils.isArray(val)) {\n        key = key + '[]';\n      } else {\n        val = [val];\n      }\n\n      utils.forEach(val, function parseValue(v) {\n        if (utils.isDate(v)) {\n          v = v.toISOString();\n        } else if (utils.isObject(v)) {\n          v = JSON.stringify(v);\n        }\n        parts.push(encode(key) + '=' + encode(v));\n      });\n    });\n\n    serializedParams = parts.join('&');\n  }\n\n  if (serializedParams) {\n    var hashmarkIndex = url.indexOf('#');\n    if (hashmarkIndex !== -1) {\n      url = url.slice(0, hashmarkIndex);\n    }\n\n    url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n  }\n\n  return url;\n};\n","'use strict';\n\nmodule.exports = function isCancel(value) {\n  return !!(value && value.__CANCEL__);\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar normalizeHeaderName = require('./helpers/normalizeHeaderName');\n\nvar DEFAULT_CONTENT_TYPE = {\n  'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n  if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n    headers['Content-Type'] = value;\n  }\n}\n\nfunction getDefaultAdapter() {\n  var adapter;\n  // Only Node.JS has a process variable that is of [[Class]] process\n  if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n    // For node use HTTP adapter\n    adapter = require('./adapters/http');\n  } else if (typeof XMLHttpRequest !== 'undefined') {\n    // For browsers use XHR adapter\n    adapter = require('./adapters/xhr');\n  }\n  return adapter;\n}\n\nvar defaults = {\n  adapter: getDefaultAdapter(),\n\n  transformRequest: [function transformRequest(data, headers) {\n    normalizeHeaderName(headers, 'Accept');\n    normalizeHeaderName(headers, 'Content-Type');\n    if (utils.isFormData(data) ||\n      utils.isArrayBuffer(data) ||\n      utils.isBuffer(data) ||\n      utils.isStream(data) ||\n      utils.isFile(data) ||\n      utils.isBlob(data)\n    ) {\n      return data;\n    }\n    if (utils.isArrayBufferView(data)) {\n      return data.buffer;\n    }\n    if (utils.isURLSearchParams(data)) {\n      setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n      return data.toString();\n    }\n    if (utils.isObject(data)) {\n      setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n      return JSON.stringify(data);\n    }\n    return data;\n  }],\n\n  transformResponse: [function transformResponse(data) {\n    /*eslint no-param-reassign:0*/\n    if (typeof data === 'string') {\n      try {\n        data = JSON.parse(data);\n      } catch (e) { /* Ignore */ }\n    }\n    return data;\n  }],\n\n  /**\n   * A timeout in milliseconds to abort a request. If set to 0 (default) a\n   * timeout is not created.\n   */\n  timeout: 0,\n\n  xsrfCookieName: 'XSRF-TOKEN',\n  xsrfHeaderName: 'X-XSRF-TOKEN',\n\n  maxContentLength: -1,\n\n  validateStatus: function validateStatus(status) {\n    return status >= 200 && status < 300;\n  }\n};\n\ndefaults.headers = {\n  common: {\n    'Accept': 'application/json, text/plain, */*'\n  }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n  defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n  defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar buildURL = require('./../helpers/buildURL');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar createError = require('../core/createError');\n\nmodule.exports = function xhrAdapter(config) {\n  return new Promise(function dispatchXhrRequest(resolve, reject) {\n    var requestData = config.data;\n    var requestHeaders = config.headers;\n\n    if (utils.isFormData(requestData)) {\n      delete requestHeaders['Content-Type']; // Let the browser set it\n    }\n\n    var request = new XMLHttpRequest();\n\n    // HTTP basic authentication\n    if (config.auth) {\n      var username = config.auth.username || '';\n      var password = config.auth.password || '';\n      requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n    }\n\n    request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\n\n    // Set the request timeout in MS\n    request.timeout = config.timeout;\n\n    // Listen for ready state\n    request.onreadystatechange = function handleLoad() {\n      if (!request || request.readyState !== 4) {\n        return;\n      }\n\n      // The request errored out and we didn't get a response, this will be\n      // handled by onerror instead\n      // With one exception: request that using file: protocol, most browsers\n      // will return status as 0 even though it's a successful request\n      if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n        return;\n      }\n\n      // Prepare the response\n      var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n      var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n      var response = {\n        data: responseData,\n        status: request.status,\n        statusText: request.statusText,\n        headers: responseHeaders,\n        config: config,\n        request: request\n      };\n\n      settle(resolve, reject, response);\n\n      // Clean up request\n      request = null;\n    };\n\n    // Handle browser request cancellation (as opposed to a manual cancellation)\n    request.onabort = function handleAbort() {\n      if (!request) {\n        return;\n      }\n\n      reject(createError('Request aborted', config, 'ECONNABORTED', request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Handle low level network errors\n    request.onerror = function handleError() {\n      // Real errors are hidden from us by the browser\n      // onerror should only fire if it's a network error\n      reject(createError('Network Error', config, null, request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Handle timeout\n    request.ontimeout = function handleTimeout() {\n      reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED',\n        request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Add xsrf header\n    // This is only done if running in a standard browser environment.\n    // Specifically not if we're in a web worker, or react-native.\n    if (utils.isStandardBrowserEnv()) {\n      var cookies = require('./../helpers/cookies');\n\n      // Add xsrf header\n      var xsrfValue = (config.withCredentials || isURLSameOrigin(config.url)) && config.xsrfCookieName ?\n        cookies.read(config.xsrfCookieName) :\n        undefined;\n\n      if (xsrfValue) {\n        requestHeaders[config.xsrfHeaderName] = xsrfValue;\n      }\n    }\n\n    // Add headers to the request\n    if ('setRequestHeader' in request) {\n      utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n        if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n          // Remove Content-Type if data is undefined\n          delete requestHeaders[key];\n        } else {\n          // Otherwise add header to the request\n          request.setRequestHeader(key, val);\n        }\n      });\n    }\n\n    // Add withCredentials to request if needed\n    if (config.withCredentials) {\n      request.withCredentials = true;\n    }\n\n    // Add responseType to request if needed\n    if (config.responseType) {\n      try {\n        request.responseType = config.responseType;\n      } catch (e) {\n        // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.\n        // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.\n        if (config.responseType !== 'json') {\n          throw e;\n        }\n      }\n    }\n\n    // Handle progress if needed\n    if (typeof config.onDownloadProgress === 'function') {\n      request.addEventListener('progress', config.onDownloadProgress);\n    }\n\n    // Not all browsers support upload events\n    if (typeof config.onUploadProgress === 'function' && request.upload) {\n      request.upload.addEventListener('progress', config.onUploadProgress);\n    }\n\n    if (config.cancelToken) {\n      // Handle cancellation\n      config.cancelToken.promise.then(function onCanceled(cancel) {\n        if (!request) {\n          return;\n        }\n\n        request.abort();\n        reject(cancel);\n        // Clean up request\n        request = null;\n      });\n    }\n\n    if (requestData === undefined) {\n      requestData = null;\n    }\n\n    // Send the request\n    request.send(requestData);\n  });\n};\n","'use strict';\n\nvar enhanceError = require('./enhanceError');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n  var error = new Error(message);\n  return enhanceError(error, config, code, request, response);\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n  // eslint-disable-next-line no-param-reassign\n  config2 = config2 || {};\n  var config = {};\n\n  utils.forEach(['url', 'method', 'params', 'data'], function valueFromConfig2(prop) {\n    if (typeof config2[prop] !== 'undefined') {\n      config[prop] = config2[prop];\n    }\n  });\n\n  utils.forEach(['headers', 'auth', 'proxy'], function mergeDeepProperties(prop) {\n    if (utils.isObject(config2[prop])) {\n      config[prop] = utils.deepMerge(config1[prop], config2[prop]);\n    } else if (typeof config2[prop] !== 'undefined') {\n      config[prop] = config2[prop];\n    } else if (utils.isObject(config1[prop])) {\n      config[prop] = utils.deepMerge(config1[prop]);\n    } else if (typeof config1[prop] !== 'undefined') {\n      config[prop] = config1[prop];\n    }\n  });\n\n  utils.forEach([\n    'baseURL', 'transformRequest', 'transformResponse', 'paramsSerializer',\n    'timeout', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName',\n    'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress', 'maxContentLength',\n    'validateStatus', 'maxRedirects', 'httpAgent', 'httpsAgent', 'cancelToken',\n    'socketPath'\n  ], function defaultToConfig2(prop) {\n    if (typeof config2[prop] !== 'undefined') {\n      config[prop] = config2[prop];\n    } else if (typeof config1[prop] !== 'undefined') {\n      config[prop] = config1[prop];\n    }\n  });\n\n  return config;\n};\n","'use strict';\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n  this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n  return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","module.exports = function(originalModule) {\n\tif (!originalModule.webpackPolyfill) {\n\t\tvar module = Object.create(originalModule);\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"exports\", {\n\t\t\tenumerable: true\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","import { getDistance } from \"../core/utils\";\n\nexport const setUpMarkerLayout = options => {\n  options.label.style.left = `${options.x}px`;\n  options.label.style.top = `${options.y}px`;\n\n  const labelRect = options.label.getBoundingClientRect();\n  const labelHeight = labelRect.height;\n  const labelWidth = labelRect.width;\n\n  const leftMiddle = {\n    x: options.x - labelWidth / 2,\n    y: options.y\n  };\n  const rightMiddle = {\n    x: options.x + labelWidth / 2,\n    y: options.y\n  };\n  const topMiddle = {\n    x: options.x,\n    y: options.y + labelHeight / 2\n  };\n  const bottomMiddle = {\n    x: options.x,\n    y: options.y - labelHeight / 2\n  };\n\n  const labelPoints = [leftMiddle, rightMiddle, topMiddle, bottomMiddle];\n  const origin = { x: 0, y: 0 };\n  const closestPoint = labelPoints.reduce((min, point) => {\n    return getDistance(origin, point) < getDistance(origin, min) ? point : min;\n  });\n\n  // Are there any rating icons to consider?\n  const markerRatings = options.label.getElementsByClassName(\n    \"marker-ratings\"\n  )[0];\n  if (markerRatings !== undefined) {\n    if (closestPoint === rightMiddle) {\n      // If closest point is right middle, ratings should be placed left\n      markerRatings.classList.add(\"place-left\");\n      markerRatings.classList.remove(\"place-right\");\n    } else {\n      // Otherwise, ratings should be placed right\n      markerRatings.classList.add(\"place-right\");\n      markerRatings.classList.remove(\"place-left\");\n    }\n  }\n\n  const distance = Math.sqrt(\n    closestPoint.x * closestPoint.x + closestPoint.y * closestPoint.y\n  );\n\n  // For Courses, we always just draw from the label to the marker\n  if (options.showLabelLine === \"on\") {\n    options.line.setAttribute(\"x1\", 0);\n    options.line.setAttribute(\"y1\", 0);\n    options.line.setAttribute(\"x2\", closestPoint.x);\n    options.line.setAttribute(\"y2\", closestPoint.y);\n  } else {\n    if (distance > 100) {\n      // If the distance is greater than 100px, draw a line from the label towards the marker, capped at max 50px length\n      const cappedLength = 50;\n      const cappedX = (closestPoint.x / distance) * cappedLength;\n      const cappedY = (closestPoint.y / distance) * cappedLength;\n      options.line.setAttribute(\"x1\", closestPoint.x - cappedX);\n      options.line.setAttribute(\"y1\", closestPoint.y - cappedY);\n      options.line.setAttribute(\"x2\", closestPoint.x);\n      options.line.setAttribute(\"y2\", closestPoint.y);\n      options.line.setAttribute(\"marker-start\", \"url(#arrow)\");\n    } else if (distance > 50) {\n      // If the distance is greater than 50px, draw a line from the label to the marker\n      options.line.setAttribute(\"x1\", 0);\n      options.line.setAttribute(\"y1\", 0);\n      options.line.setAttribute(\"x2\", closestPoint.x);\n      options.line.setAttribute(\"y2\", closestPoint.y);\n      options.line.setAttribute(\"marker-start\", \"\");\n    } else {\n      // If the distance is less than 50px, don't draw a line at all\n      options.line.setAttribute(\"x1\", 0);\n      options.line.setAttribute(\"y1\", 0);\n      options.line.setAttribute(\"x2\", 0);\n      options.line.setAttribute(\"y2\", 0);\n      options.line.setAttribute(\"marker-start\", \"\");\n    }\n  }\n};\n","import { AREAS, COURSES, COURSE_GROUPS, GREEN } from \"../core/constants\";\n\nimport { setUpDraggableLabel } from \"./set-up-draggable-label\";\nimport { setUpMarkerLayout } from \"./set-up-marker-layout\";\n\nconst getAreaLabelInnerHTML = labelText => {\n  return `<div class=\"marker-label-inner\"><p class=\"marker-label-text\">${labelText}</p></div>`;\n};\n\nconst getCourseGroupMarkerInnerHTML = data => {\n  const stayAndPlay = data.stayAndPlay\n    ? `<img src=\"${window.bridge.stay_and_play}\">`\n    : \"\";\n  const ratingIcons = data.courses\n    .map(course => {\n      return data.isEditMode\n        ? `<div><img src=\"${window.bridge.ratings[course.rating]}\"></div>`\n        : `<div><a href=${course.link} target=\"_blank\"><img src=\"${\n            window.bridge.ratings[course.rating]\n          }\" alt=\"${course.searchName}\" title=\"${\n            course.searchName\n          }\"></a></div>`;\n    })\n    .join(\"\");\n  if (data.isEditMode) {\n    return `<div class=\"marker-label-inner\"><p class=\"marker-label-text\">${stayAndPlay}${data.labelText}</p><div class=\"marker-ratings\">${ratingIcons}</div></div>`;\n  } else {\n    return `<div class=\"marker-label-inner\"><a href=\"${data.courses[0].link}\" target=\"_blank\"><p class=\"marker-label-text\">${stayAndPlay}${data.labelText}</p></a><div class=\"marker-ratings\">${ratingIcons}</div></div>`;\n  }\n};\n\nconst getCourseLabelInnerHTML = data => {\n  const stayAndPlay = data.stayAndPlay\n    ? `<img src=\"${window.bridge.stay_and_play}\">`\n    : \"\";\n  let html;\n  if (data.rating === \"\") {\n    html = `<p class=\"marker-label-text\">${stayAndPlay}${data.labelText} (future)</p>`;\n  } else {\n    html = `<p class=\"marker-label-text\">${stayAndPlay}${\n      data.labelText\n    }</p><div class=\"marker-ratings\"><img src=\"${\n      window.bridge.ratings[data.rating]\n    }\" alt=\"${data.searchName}\" title=\"${data.searchName}\"></div>`;\n  }\n  if (data.isEditMode) {\n    return `<div class=\"marker-label-inner\">${html}</div>`;\n  } else {\n    return `<div class=\"marker-label-inner\"><a href=\"${data.link}\" target=\"_blank\">${html}</a></div>`;\n  }\n};\n\nexport function initCustomMarker() {\n  function CustomMarker(data) {\n    // Initialize all properties.\n    this.latlng = data.latlng;\n    this.className = data.className;\n    this.isEditMode = data.isEditMode;\n    this.labelText = data.labelText;\n    this.link = data.link;\n    this.rating = data.rating;\n    this.stayAndPlay = data.stayAndPlay;\n    this.labelOffsetX = data.labelOffsetX;\n    this.labelOffsetY = data.labelOffsetY;\n    this.id = data.id;\n    this.markerType = data.markerType;\n    this.showLabelLine = data.showLabelLine;\n    this.callback = data.callback;\n    this.courses = data.courses;\n    this.courseName = data.courseName;\n    this.searchName = data.searchName;\n    // Define a property to hold the image's div. We'll\n    // actually create this div upon receipt of the onAdd()\n    // method so we'll leave it null for now.\n    this.markerContainer = null;\n  }\n\n  CustomMarker.prototype = new window.google.maps.OverlayView();\n\n  CustomMarker.prototype.onAdd = function () {\n    // The containing div\n    const markerContainer = document.createElement(\"div\");\n    this.markerContainer = markerContainer;\n    this.markerContainer.className = this.className;\n    // The label outer\n    this.label = document.createElement(\"div\");\n    this.label.className = \"marker-label\";\n    let markerInnerHTML;\n    switch (this.markerType) {\n      case AREAS:\n        markerInnerHTML = getAreaLabelInnerHTML(this.labelText);\n        break;\n      case COURSE_GROUPS:\n        markerInnerHTML = getCourseGroupMarkerInnerHTML({\n          labelText: this.labelText,\n          courses: this.courses,\n          stayAndPlay: this.stayAndPlay,\n          isEditMode: this.isEditMode\n        });\n        break;\n      case COURSES:\n        markerInnerHTML = getCourseLabelInnerHTML({\n          labelText: this.labelText,\n          link: this.link,\n          rating: this.rating,\n          stayAndPlay: this.stayAndPlay,\n          courseName: this.courseName,\n          searchName: this.searchName,\n          isEditMode: this.isEditMode\n        });\n        break;\n    }\n    // The label inner, which may be a link or contain an image\n    this.label.innerHTML = markerInnerHTML;\n    // The line SVG\n    const lineSVG = document.createElementNS(\n      \"http://www.w3.org/2000/svg\",\n      \"svg\"\n    );\n    lineSVG.setAttribute(\"class\", \"marker-line-svg\");\n    // The arrow\n    const arrowDefs = document.createElementNS(\n      \"http://www.w3.org/2000/svg\",\n      \"defs\"\n    );\n    const arrowMarker = document.createElementNS(\n      \"http://www.w3.org/2000/svg\",\n      \"marker\"\n    );\n    arrowMarker.setAttribute(\"id\", \"arrow\");\n    arrowMarker.setAttribute(\"viewBox\", \"0 0 10 10\");\n    arrowMarker.setAttribute(\"refX\", \"5\");\n    arrowMarker.setAttribute(\"refY\", \"5\");\n    arrowMarker.setAttribute(\"markerUnits\", \"strokeWidth\");\n    arrowMarker.setAttribute(\"markerWidth\", \"8\");\n    arrowMarker.setAttribute(\"markerHeight\", \"8\");\n    arrowMarker.setAttribute(\"orient\", \"auto-start-reverse\");\n    const arrowPath = document.createElementNS(\n      \"http://www.w3.org/2000/svg\",\n      \"path\"\n    );\n    arrowPath.setAttribute(\"d\", \"M 0 0 L 10 5 L 0 10 z\");\n    arrowPath.setAttribute(\"fill\", \"black\");\n    // The line\n    this.line = document.createElementNS(\"http://www.w3.org/2000/svg\", \"line\");\n    this.line.setAttribute(\"stroke-width\", \"2\");\n    this.line.setAttribute(\n      \"stroke\",\n      this.markerType === AREAS ? \"black\" : GREEN\n    );\n    // Add elements into the SVG container\n    arrowMarker.append(arrowPath);\n    arrowDefs.append(arrowMarker);\n    lineSVG.append(arrowDefs);\n    lineSVG.append(this.line);\n    // The dot\n    if (this.markerType === COURSES || this.markerType === COURSE_GROUPS) {\n      this.dot = document.createElement(\"div\");\n      this.dot.className = \"marker-dot\";\n      this.markerContainer.appendChild(this.dot);\n    }\n    // Add elements to the container\n    this.markerContainer.appendChild(this.label);\n    this.markerContainer.appendChild(lineSVG);\n    // Make the label draggable if in edit mode\n    if (this.isEditMode) {\n      setUpDraggableLabel({\n        label: this.label,\n        id: this.id,\n        markerType: this.markerType,\n        line: this.line,\n        showLabelLine: this.showLabelLine\n      });\n    }\n    // Add the marker to the overlay layer\n    const panes = this.getPanes();\n    panes.overlayImage.appendChild(this.markerContainer);\n    // Attach the click handler to the label\n    if (this.callback !== undefined) {\n      this.label.onclick = this.callback;\n    }\n    // Set the layout of the elements that make up the marker\n    setUpMarkerLayout({\n      label: this.label,\n      line: this.line,\n      x: this.labelOffsetX,\n      y: this.labelOffsetY,\n      showLabelLine: this.showLabelLine\n    });\n  };\n\n  CustomMarker.prototype.draw = function () {\n    const overlayProjection = this.getProjection();\n    // The actual location of Area or Course as a point with x/y values\n    const markerPoint = overlayProjection.fromLatLngToDivPixel(this.latlng);\n\n    // Set the position of the containing div to these coordinates\n    this.markerContainer.style.left = markerPoint.x + \"px\";\n    this.markerContainer.style.top = markerPoint.y + \"px\";\n  };\n\n  CustomMarker.prototype.remove = function () {\n    // Remove elements from the container\n    this.markerContainer.parentNode.removeChild(this.markerContainer);\n    this.markerContainer = null;\n  };\n\n  return CustomMarker;\n}\n","import axios from \"axios\";\nimport { setUpMarkerLayout } from \"./set-up-marker-layout\";\n\nexport function setUpDraggableLabel(options) {\n  let mouseStartX = 0;\n  let mouseStartY = 0;\n  let markerStartX = 0;\n  let markerStartY = 0;\n  options.label.onmousedown = dragMouseDown;\n\n  function dragMouseDown(event) {\n    event = event || window.event;\n    event.preventDefault();\n    // get the mouse cursor position at startup:\n    mouseStartX = event.clientX;\n    mouseStartY = event.clientY;\n\n    markerStartX = options.label.offsetLeft;\n    markerStartY = options.label.offsetTop;\n\n    // call a function whenever the cursor moves:\n    document.onmousemove = elementDrag;\n    document.onmouseup = closeDragElement;\n  }\n\n  function elementDrag(event) {\n    event = event || window.event;\n    event.preventDefault();\n    // calculate the new cursor position:\n    const mouseDeltaX = event.clientX - mouseStartX;\n    const mouseDeltaY = event.clientY - mouseStartY;\n\n    setUpMarkerLayout({\n      label: options.label,\n      line: options.line,\n      x: markerStartX + mouseDeltaX,\n      y: markerStartY + mouseDeltaY,\n      showLabelLine: options.showLabelLine\n    });\n  }\n\n  function closeDragElement() {\n    // stop moving when mouse button is released:\n    axios\n      .patch(`/api/${options.markerType}/${options.id}/`, {\n        label_offset_x: parseInt(options.label.style.left),\n        label_offset_y: parseInt(options.label.style.top)\n      })\n      .then(() => {})\n      .catch(error => {\n        console.log(error);\n      });\n    document.onmouseup = null;\n    document.onmousemove = null;\n  }\n}\n","import { AREAS, COURSES, COURSE_GROUPS } from \"../core/constants\";\n\nimport { initCustomMarker } from \"./custom-marker\";\n\nexport const createChildAreaMarker = (childArea, callback) => {\n  const CustomMarker = initCustomMarker();\n  // The Area marker will be placed on the label lat lng, which may\n  // differ from the central lat lng\n  const labelLatLng = new window.google.maps.LatLng(\n    childArea.center_lat,\n    childArea.center_lng\n  );\n  const areaMarker = new CustomMarker({\n    latlng: labelLatLng,\n    labelText: childArea.map_name,\n    id: childArea.id,\n    markerType: AREAS,\n    className: \"area-marker\",\n    labelOffsetX: childArea.label_offset_x,\n    labelOffsetY: childArea.label_offset_y,\n    showLabelLine: \"auto\",\n    isEditMode: window.location.href.includes(\"w2g-cms\"),\n    callback: callback\n  });\n  return areaMarker;\n};\n\nexport const createCourseGroupMarker = courseGroup => {\n  const CustomMarker = initCustomMarker();\n  const latlng = new window.google.maps.LatLng(\n    courseGroup.courses[0].lat,\n    courseGroup.courses[0].lng\n  );\n  let courses = [];\n  let stayAndPlay = false;\n  courseGroup.courses.forEach(course => {\n    if (course.stay_and_play) stayAndPlay = true;\n    if (course.rating !== \"\") {\n      courses.push({\n        rating: course.rating,\n        name: course.full_name,\n        searchName: course.search_name,\n        link: course.url\n      });\n    }\n  });\n\n  const courseGroupMarker = new CustomMarker({\n    latlng,\n    labelText: courseGroup.name,\n    courses: courses,\n    stayAndPlay: stayAndPlay,\n    id: courseGroup.id,\n    markerType: COURSE_GROUPS,\n    className: \"course-marker\",\n    labelOffsetX: courseGroup.label_offset_x,\n    labelOffsetY: courseGroup.label_offset_y,\n    showLabelLine: \"on\",\n    isEditMode: window.location.href.includes(\"w2g-cms\")\n  });\n  return courseGroupMarker;\n};\n\nexport const createCourseMarker = course => {\n  const CustomMarker = initCustomMarker();\n  const latlng = new window.google.maps.LatLng(course.lat, course.lng);\n  const courseMarker = new CustomMarker({\n    latlng,\n    labelText: course.map_name,\n    courseName: course.full_name,\n    searchName: course.search_name,\n    rating: course.rating,\n    stayAndPlay: course.stay_and_play,\n    link: course.url,\n    id: course.id,\n    markerType: COURSES,\n    className: course.rating === \"\" ? \"course-marker future\" : \"course-marker\",\n    labelOffsetX: course.label_offset_x,\n    labelOffsetY: course.label_offset_y,\n    showLabelLine: \"on\",\n    isEditMode: window.location.href.includes(\"w2g-cms\")\n  });\n  return courseMarker;\n};\n","export const countryLevelMapStyles = [\n  {\n    featureType: \"administrative\",\n    elementType: \"geometry.fill\",\n    stylers: [\n      {\n        visibility: \"off\"\n      }\n    ]\n  },\n  {\n    featureType: \"administrative\",\n    elementType: \"geometry.stroke\",\n    stylers: [\n      {\n        visibility: \"on\"\n      },\n      {\n        color: \"#87ae79\"\n      }\n    ]\n  },\n  {\n    featureType: \"administrative.country\",\n    elementType: \"all\",\n    stylers: [\n      {\n        saturation: \"30\"\n      }\n    ]\n  },\n  {\n    featureType: \"administrative.country\",\n    elementType: \"geometry.stroke\",\n    stylers: [\n      {\n        color: \"#839c6d\"\n      },\n      {\n        weight: 0.5\n      }\n    ]\n  },\n  {\n    featureType: \"administrative.country\",\n    elementType: \"labels\",\n    stylers: [\n      {\n        visibility: \"off\"\n      }\n    ]\n  },\n  {\n    featureType: \"administrative.province\",\n    elementType: \"all\",\n    stylers: [\n      {\n        visibility: \"on\"\n      },\n      {\n        color: \"#839c6d\"\n      },\n      {\n        weight: \"1\"\n      }\n    ]\n  },\n  {\n    featureType: \"administrative\",\n    elementType: \"labels\",\n    stylers: [\n      {\n        visibility: \"off\"\n      }\n    ]\n  },\n  {\n    featureType: \"landscape\",\n    elementType: \"geometry.fill\",\n    stylers: [\n      {\n        visibility: \"on\"\n      },\n      {\n        color: \"#a4cd89\"\n      }\n    ]\n  },\n  {\n    featureType: \"poi\",\n    elementType: \"all\",\n    stylers: [\n      {\n        visibility: \"off\"\n      }\n    ]\n  },\n  {\n    featureType: \"road\",\n    elementType: \"all\",\n    stylers: [\n      {\n        visibility: \"off\"\n      }\n    ]\n  },\n  {\n    featureType: \"transit\",\n    elementType: \"all\",\n    stylers: [\n      {\n        visibility: \"off\"\n      }\n    ]\n  },\n  {\n    featureType: \"water\",\n    elementType: \"geometry\",\n    stylers: [\n      {\n        visibility: \"on\"\n      }\n    ]\n  },\n  {\n    featureType: \"water\",\n    elementType: \"geometry.fill\",\n    stylers: [\n      {\n        color: \"#c5eaff\"\n      },\n      {\n        visibility: \"on\"\n      },\n      {\n        weight: \"1.00\"\n      }\n    ]\n  },\n  {\n    featureType: \"water\",\n    elementType: \"geometry.stroke\",\n    stylers: [\n      {\n        visibility: \"off\"\n      },\n      {\n        color: \"#ff0000\"\n      }\n    ]\n  },\n  {\n    featureType: \"water\",\n    elementType: \"labels\",\n    stylers: [\n      {\n        visibility: \"off\"\n      }\n    ]\n  }\n];\n","export const stateLevelMapStyles = [\n  {\n    featureType: \"administrative\",\n    elementType: \"geometry.fill\",\n    stylers: [\n      {\n        visibility: \"off\"\n      }\n    ]\n  },\n  {\n    featureType: \"administrative\",\n    elementType: \"geometry.stroke\",\n    stylers: [\n      {\n        visibility: \"on\"\n      },\n      {\n        color: \"#87ae79\"\n      }\n    ]\n  },\n  {\n    featureType: \"administrative.country\",\n    elementType: \"all\",\n    stylers: [\n      {\n        saturation: \"30\"\n      }\n    ]\n  },\n  {\n    featureType: \"administrative.country\",\n    elementType: \"geometry.stroke\",\n    stylers: [\n      {\n        color: \"#4e4e4e\"\n      }\n    ]\n  },\n  {\n    featureType: \"administrative.province\",\n    elementType: \"geometry.stroke\",\n    stylers: [\n      {\n        color: \"#e7a028\"\n      },\n      {\n        weight: \"3.12\"\n      }\n    ]\n  },\n  {\n    featureType: \"administrative\",\n    elementType: \"labels\",\n    stylers: [\n      {\n        visibility: \"on\"\n      }\n    ]\n  },\n  {\n    featureType: \"administrative\",\n    elementType: \"labels.text.stroke\",\n    stylers: [\n      {\n        visibility: \"off\"\n      }\n    ]\n  },\n  {\n    featureType: \"administrative\",\n    elementType: \"labels.text.fill\",\n    stylers: [\n      {\n        color: \"#808080\"\n      }\n    ]\n  },\n  {\n    featureType: \"administrative.neighborhood\",\n    elementType: \"all\",\n    stylers: [\n      {\n        visibility: \"off\"\n      }\n    ]\n  },\n  {\n    featureType: \"administrative.land_parcel\",\n    elementType: \"all\",\n    stylers: [\n      {\n        visibility: \"off\"\n      }\n    ]\n  },\n  {\n    featureType: \"landscape\",\n    elementType: \"geometry.fill\",\n    stylers: [\n      {\n        visibility: \"on\"\n      },\n      {\n        color: \"#afcb8a\"\n      },\n      {\n        gamma: \"1.00\"\n      }\n    ]\n  },\n  {\n    featureType: \"landscape.man_made\",\n    elementType: \"geometry.fill\",\n    stylers: [\n      {\n        visibility: \"on\"\n      },\n      {\n        color: \"#c9d4db\"\n      },\n      {\n        gamma: \"1.5\"\n      }\n    ]\n  },\n  {\n    featureType: \"poi\",\n    elementType: \"all\",\n    stylers: [\n      {\n        visibility: \"off\"\n      }\n    ]\n  },\n  {\n    featureType: \"road\",\n    elementType: \"labels.icon\",\n    stylers: [\n      {\n        visibility: \"off\"\n      }\n    ]\n  },\n  {\n    featureType: \"road.highway\",\n    elementType: \"geometry.fill\",\n    stylers: [\n      {\n        visibility: \"on\"\n      },\n      {\n        color: \"#ffffff\"\n      }\n    ]\n  },\n  {\n    featureType: \"road.highway\",\n    elementType: \"geometry.stroke\",\n    stylers: [\n      {\n        color: \"#82bcf2\"\n      },\n      {\n        weight: \"1\"\n      },\n      {\n        visibility: \"off\"\n      }\n    ]\n  },\n  {\n    featureType: \"road.highway.controlled_access\",\n    elementType: \"geometry\",\n    stylers: [\n      {\n        visibility: \"on\"\n      }\n    ]\n  },\n  {\n    featureType: \"road.highway.controlled_access\",\n    elementType: \"geometry.fill\",\n    stylers: [\n      {\n        color: \"#ffffff\"\n      },\n      {\n        visibility: \"on\"\n      }\n    ]\n  },\n  {\n    featureType: \"road.highway.controlled_access\",\n    elementType: \"geometry.stroke\",\n    stylers: [\n      {\n        color: \"#51b1e7\"\n      },\n      {\n        weight: \"1\"\n      }\n    ]\n  },\n  {\n    featureType: \"road.arterial\",\n    elementType: \"all\",\n    stylers: [\n      {\n        visibility: \"off\"\n      }\n    ]\n  },\n  {\n    featureType: \"transit\",\n    elementType: \"all\",\n    stylers: [\n      {\n        visibility: \"off\"\n      }\n    ]\n  },\n  {\n    featureType: \"water\",\n    elementType: \"all\",\n    stylers: [\n      {\n        visibility: \"on\"\n      }\n    ]\n  },\n  {\n    featureType: \"water\",\n    elementType: \"geometry.fill\",\n    stylers: [\n      {\n        visibility: \"on\"\n      }\n    ]\n  }\n];\n","import {\n  createChildAreaMarker,\n  createCourseGroupMarker,\n  createCourseMarker\n} from \"../map-helpers/create-markers\";\n\nimport { GOOGLE_MAPS_API_KEY } from \"../core/constants\";\nimport axios from \"axios\";\nimport { countryLevelMapStyles } from \"../map-styles/country-level-map-styles\";\nimport { getScript } from \"../core/utils\";\nimport { stateLevelMapStyles } from \"../map-styles/state-level-map-styles\";\n\nexport default class MarkerMap {\n  constructor(el, allowDragging, titleEl) {\n    if (el) {\n      this.el = el;\n      this.titleEl = titleEl;\n      this.markers = [];\n      this.allowDragging = allowDragging;\n      try {\n        window.google.maps;\n        this.handleMapsAPILoaded();\n      } catch {\n        getScript(\n          `https://maps.googleapis.com/maps/api/js?key=${GOOGLE_MAPS_API_KEY}`,\n          () => {\n            this.handleMapsAPILoaded();\n          }\n        );\n      }\n    }\n  }\n\n  handleMapsAPILoaded() {\n    this.map = new window.google.maps.Map(this.el, {\n      disableDefaultUI: true,\n      scaleControl: true,\n      scrollwheel: false,\n      gestureHandling: this.allowDragging ? \"greedy\" : \"none\",\n      zoomControl: false\n    });\n    // For some annoying reason GM wants to reset the zoom to a whole number\n    // after panning, so force it back to where it should be using the stored value\n    this.map.addListener(\"dragend\", () => {\n      this.map.setOptions({\n        zoom: this.zoomLevel\n      });\n    });\n    this.updateAreaId(this.el.getAttribute(\"data-area-id\"));\n  }\n\n  updateZoom(zoomLevel) {\n    this.map.setZoom(zoomLevel);\n  }\n\n  updateAreaId(areaId) {\n    this.areaId = areaId;\n    // Remove existing markers that were already on the map\n    this.markers.forEach(marker => {\n      marker.setMap(null);\n    });\n    this.markers = [];\n\n    // Use the Area ID to make an API call to get the Area's data,\n    // plus child Areas, Courses and CourseGroups so we can update the map\n    axios\n      .get(`/api/areas/${this.areaId}`)\n      .then(({ data: area }) => {\n        const latlng = new window.google.maps.LatLng(\n          area.center_lat,\n          area.center_lng\n        );\n\n        const mapStyles =\n          area.map_style === \"Country level\"\n            ? countryLevelMapStyles\n            : stateLevelMapStyles;\n\n        // For some annoying reason GM wants to reset the zoom to a whole number\n        // after panning, so store the value to force it through on dragend\n        this.zoomLevel = parseFloat(area.zoom_level);\n\n        this.map.setOptions({\n          center: latlng,\n          zoom: this.zoomLevel,\n          styles: mapStyles\n        });\n\n        // Set the new map title\n        if (this.titleEl !== undefined)\n          this.titleEl.innerHTML = area.verbose_name;\n\n        // Create the child Area markers\n        area.child_areas.forEach(childArea => {\n          this.markers.push(\n            createChildAreaMarker(childArea, () => {\n              // Only navigate if we're not in the Admin\n              if (!window.location.href.includes(\"w2g-cms\")) {\n                this.updateAreaId(childArea.id);\n              }\n              const event = new CustomEvent(\"areaClick\", {\n                detail: {\n                  id: childArea.id,\n                  name: childArea.name\n                }\n              });\n              this.el.dispatchEvent(event);\n            })\n          );\n        });\n\n        // Create the course group markers\n        if (area.course_groups.length > 0) {\n          area.course_groups.forEach(courseGroup => {\n            courseGroup.courses.forEach(course => {\n              // If this course does not have a rating we want to display it on it's own\n              // label so we can reflect this properly, so add it to courses\n              if (course.rating === \"\") {\n                area.courses.push(course);\n              }\n            });\n            this.markers.push(createCourseGroupMarker(courseGroup));\n          });\n        }\n\n        // Create the course markers\n        if (area.courses.length > 0) {\n          area.courses.forEach(course => {\n            if (course.lat && course.lng) {\n              // Only add to map if lat/lng is not null\n              this.markers.push(createCourseMarker(course));\n            }\n          });\n        }\n\n        this.markers.forEach(marker => {\n          marker.setMap(this.map);\n        });\n      })\n      .catch(error => {\n        console.log(error);\n      });\n  }\n}\n","import { isString } from './is';\nimport { normalize } from './object';\n/**\n * Checks whether we're in the Node.js or Browser environment\n *\n * @returns Answer to given question\n */\nexport function isNodeEnv() {\n    return Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]';\n}\n/**\n * Requires a module which is protected against bundler minification.\n *\n * @param request The module path to resolve\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function dynamicRequire(mod, request) {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    return mod.require(request);\n}\n/** Default request keys that'll be used to extract data from the request */\nvar DEFAULT_REQUEST_KEYS = ['cookies', 'data', 'headers', 'method', 'query_string', 'url'];\n/**\n * Normalizes data from the request object, accounting for framework differences.\n *\n * @param req The request object from which to extract data\n * @param keys An optional array of keys to include in the normalized data. Defaults to DEFAULT_REQUEST_KEYS if not\n * provided.\n * @returns An object containing normalized request data\n */\nexport function extractNodeRequestData(req, keys) {\n    if (keys === void 0) { keys = DEFAULT_REQUEST_KEYS; }\n    // make sure we can safely use dynamicRequire below\n    if (!isNodeEnv()) {\n        throw new Error(\"Can't get node request data outside of a node environment\");\n    }\n    var requestData = {};\n    // headers:\n    //   node, express: req.headers\n    //   koa: req.header\n    var headers = (req.headers || req.header || {});\n    // method:\n    //   node, express, koa: req.method\n    var method = req.method;\n    // host:\n    //   express: req.hostname in > 4 and req.host in < 4\n    //   koa: req.host\n    //   node: req.headers.host\n    var host = req.hostname || req.host || headers.host || '<no host>';\n    // protocol:\n    //   node: <n/a>\n    //   express, koa: req.protocol\n    var protocol = req.protocol === 'https' || req.secure || (req.socket || {}).encrypted\n        ? 'https'\n        : 'http';\n    // url (including path and query string):\n    //   node, express: req.originalUrl\n    //   koa: req.url\n    var originalUrl = (req.originalUrl || req.url || '');\n    // absolute url\n    var absoluteUrl = protocol + \"://\" + host + originalUrl;\n    keys.forEach(function (key) {\n        switch (key) {\n            case 'headers':\n                requestData.headers = headers;\n                break;\n            case 'method':\n                requestData.method = method;\n                break;\n            case 'url':\n                requestData.url = absoluteUrl;\n                break;\n            case 'cookies':\n                // cookies:\n                //   node, express, koa: req.headers.cookie\n                //   vercel, sails.js, express (w/ cookie middleware): req.cookies\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n                requestData.cookies = req.cookies || dynamicRequire(module, 'cookie').parse(headers.cookie || '');\n                break;\n            case 'query_string':\n                // query string:\n                //   node: req.url (raw)\n                //   express, koa: req.query\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n                requestData.query_string = dynamicRequire(module, 'url').parse(originalUrl || '', false).query;\n                break;\n            case 'data':\n                if (method === 'GET' || method === 'HEAD') {\n                    break;\n                }\n                // body data:\n                //   node, express, koa: req.body\n                if (req.body !== undefined) {\n                    requestData.data = isString(req.body) ? req.body : JSON.stringify(normalize(req.body));\n                }\n                break;\n            default:\n                if ({}.hasOwnProperty.call(req, key)) {\n                    requestData[key] = req[key];\n                }\n        }\n    });\n    return requestData;\n}\n//# sourceMappingURL=node.js.map","import { getGlobalObject } from './global';\nimport { dynamicRequire, isNodeEnv } from './node';\n/**\n * A TimestampSource implementation for environments that do not support the Performance Web API natively.\n *\n * Note that this TimestampSource does not use a monotonic clock. A call to `nowSeconds` may return a timestamp earlier\n * than a previously returned value. We do not try to emulate a monotonic behavior in order to facilitate debugging. It\n * is more obvious to explain \"why does my span have negative duration\" than \"why my spans have zero duration\".\n */\nvar dateTimestampSource = {\n    nowSeconds: function () { return Date.now() / 1000; },\n};\n/**\n * Returns a wrapper around the native Performance API browser implementation, or undefined for browsers that do not\n * support the API.\n *\n * Wrapping the native API works around differences in behavior from different browsers.\n */\nfunction getBrowserPerformance() {\n    var performance = getGlobalObject().performance;\n    if (!performance || !performance.now) {\n        return undefined;\n    }\n    // Replace performance.timeOrigin with our own timeOrigin based on Date.now().\n    //\n    // This is a partial workaround for browsers reporting performance.timeOrigin such that performance.timeOrigin +\n    // performance.now() gives a date arbitrarily in the past.\n    //\n    // Additionally, computing timeOrigin in this way fills the gap for browsers where performance.timeOrigin is\n    // undefined.\n    //\n    // The assumption that performance.timeOrigin + performance.now() ~= Date.now() is flawed, but we depend on it to\n    // interact with data coming out of performance entries.\n    //\n    // Note that despite recommendations against it in the spec, browsers implement the Performance API with a clock that\n    // might stop when the computer is asleep (and perhaps under other circumstances). Such behavior causes\n    // performance.timeOrigin + performance.now() to have an arbitrary skew over Date.now(). In laptop computers, we have\n    // observed skews that can be as long as days, weeks or months.\n    //\n    // See https://github.com/getsentry/sentry-javascript/issues/2590.\n    //\n    // BUG: despite our best intentions, this workaround has its limitations. It mostly addresses timings of pageload\n    // transactions, but ignores the skew built up over time that can aversely affect timestamps of navigation\n    // transactions of long-lived web pages.\n    var timeOrigin = Date.now() - performance.now();\n    return {\n        now: function () { return performance.now(); },\n        timeOrigin: timeOrigin,\n    };\n}\n/**\n * Returns the native Performance API implementation from Node.js. Returns undefined in old Node.js versions that don't\n * implement the API.\n */\nfunction getNodePerformance() {\n    try {\n        var perfHooks = dynamicRequire(module, 'perf_hooks');\n        return perfHooks.performance;\n    }\n    catch (_) {\n        return undefined;\n    }\n}\n/**\n * The Performance API implementation for the current platform, if available.\n */\nvar platformPerformance = isNodeEnv() ? getNodePerformance() : getBrowserPerformance();\nvar timestampSource = platformPerformance === undefined\n    ? dateTimestampSource\n    : {\n        nowSeconds: function () { return (platformPerformance.timeOrigin + platformPerformance.now()) / 1000; },\n    };\n/**\n * Returns a timestamp in seconds since the UNIX epoch using the Date API.\n */\nexport var dateTimestampInSeconds = dateTimestampSource.nowSeconds.bind(dateTimestampSource);\n/**\n * Returns a timestamp in seconds since the UNIX epoch using either the Performance or Date APIs, depending on the\n * availability of the Performance API.\n *\n * See `usingPerformanceAPI` to test whether the Performance API is used.\n *\n * BUG: Note that because of how browsers implement the Performance API, the clock might stop when the computer is\n * asleep. This creates a skew between `dateTimestampInSeconds` and `timestampInSeconds`. The\n * skew can grow to arbitrary amounts like days, weeks or months.\n * See https://github.com/getsentry/sentry-javascript/issues/2590.\n */\nexport var timestampInSeconds = timestampSource.nowSeconds.bind(timestampSource);\n// Re-exported with an old name for backwards-compatibility.\nexport var timestampWithMs = timestampInSeconds;\n/**\n * A boolean that is true when timestampInSeconds uses the Performance API to produce monotonic timestamps.\n */\nexport var usingPerformanceAPI = platformPerformance !== undefined;\n/**\n * Internal helper to store what is the source of browserPerformanceTimeOrigin below. For debugging only.\n */\nexport var _browserPerformanceTimeOriginMode;\n/**\n * The number of milliseconds since the UNIX epoch. This value is only usable in a browser, and only when the\n * performance API is available.\n */\nexport var browserPerformanceTimeOrigin = (function () {\n    // Unfortunately browsers may report an inaccurate time origin data, through either performance.timeOrigin or\n    // performance.timing.navigationStart, which results in poor results in performance data. We only treat time origin\n    // data as reliable if they are within a reasonable threshold of the current time.\n    var performance = getGlobalObject().performance;\n    if (!performance || !performance.now) {\n        _browserPerformanceTimeOriginMode = 'none';\n        return undefined;\n    }\n    var threshold = 3600 * 1000;\n    var performanceNow = performance.now();\n    var dateNow = Date.now();\n    // if timeOrigin isn't available set delta to threshold so it isn't used\n    var timeOriginDelta = performance.timeOrigin\n        ? Math.abs(performance.timeOrigin + performanceNow - dateNow)\n        : threshold;\n    var timeOriginIsReliable = timeOriginDelta < threshold;\n    // While performance.timing.navigationStart is deprecated in favor of performance.timeOrigin, performance.timeOrigin\n    // is not as widely supported. Namely, performance.timeOrigin is undefined in Safari as of writing.\n    // Also as of writing, performance.timing is not available in Web Workers in mainstream browsers, so it is not always\n    // a valid fallback. In the absence of an initial time provided by the browser, fallback to the current time from the\n    // Date API.\n    // eslint-disable-next-line deprecation/deprecation\n    var navigationStart = performance.timing && performance.timing.navigationStart;\n    var hasNavigationStart = typeof navigationStart === 'number';\n    // if navigationStart isn't available set delta to threshold so it isn't used\n    var navigationStartDelta = hasNavigationStart ? Math.abs(navigationStart + performanceNow - dateNow) : threshold;\n    var navigationStartIsReliable = navigationStartDelta < threshold;\n    if (timeOriginIsReliable || navigationStartIsReliable) {\n        // Use the more reliable time origin\n        if (timeOriginDelta <= navigationStartDelta) {\n            _browserPerformanceTimeOriginMode = 'timeOrigin';\n            return performance.timeOrigin;\n        }\n        else {\n            _browserPerformanceTimeOriginMode = 'navigationStart';\n            return navigationStart;\n        }\n    }\n    // Either both timeOrigin and navigationStart are skewed or neither is available, fallback to Date.\n    _browserPerformanceTimeOriginMode = 'dateNow';\n    return dateNow;\n})();\n//# sourceMappingURL=time.js.map","import { __assign, __values } from \"tslib\";\nvar STACKTRACE_LIMIT = 50;\n/**\n * Creates a stack parser with the supplied line parsers\n *\n * StackFrames are returned in the correct order for Sentry Exception\n * frames and with Sentry SDK internal frames removed from the top and bottom\n *\n * */\nexport function createStackParser() {\n    var parsers = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        parsers[_i] = arguments[_i];\n    }\n    return function (stack, skipFirst) {\n        var e_1, _a, e_2, _b;\n        if (skipFirst === void 0) { skipFirst = 0; }\n        var frames = [];\n        try {\n            for (var _c = __values(stack.split('\\n').slice(skipFirst)), _d = _c.next(); !_d.done; _d = _c.next()) {\n                var line = _d.value;\n                try {\n                    for (var parsers_1 = (e_2 = void 0, __values(parsers)), parsers_1_1 = parsers_1.next(); !parsers_1_1.done; parsers_1_1 = parsers_1.next()) {\n                        var parser = parsers_1_1.value;\n                        var frame = parser(line);\n                        if (frame) {\n                            frames.push(frame);\n                            break;\n                        }\n                    }\n                }\n                catch (e_2_1) { e_2 = { error: e_2_1 }; }\n                finally {\n                    try {\n                        if (parsers_1_1 && !parsers_1_1.done && (_b = parsers_1.return)) _b.call(parsers_1);\n                    }\n                    finally { if (e_2) throw e_2.error; }\n                }\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (_d && !_d.done && (_a = _c.return)) _a.call(_c);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        return stripSentryFramesAndReverse(frames);\n    };\n}\n/**\n * @hidden\n */\nexport function stripSentryFramesAndReverse(stack) {\n    if (!stack.length) {\n        return [];\n    }\n    var localStack = stack;\n    var firstFrameFunction = localStack[0].function || '';\n    var lastFrameFunction = localStack[localStack.length - 1].function || '';\n    // If stack starts with one of our API calls, remove it (starts, meaning it's the top of the stack - aka last call)\n    if (firstFrameFunction.indexOf('captureMessage') !== -1 || firstFrameFunction.indexOf('captureException') !== -1) {\n        localStack = localStack.slice(1);\n    }\n    // If stack ends with one of our internal API calls, remove it (ends, meaning it's the bottom of the stack - aka top-most call)\n    if (lastFrameFunction.indexOf('sentryWrapped') !== -1) {\n        localStack = localStack.slice(0, -1);\n    }\n    // The frame where the crash happened, should be the last entry in the array\n    return localStack\n        .slice(0, STACKTRACE_LIMIT)\n        .map(function (frame) { return (__assign(__assign({}, frame), { filename: frame.filename || localStack[0].filename, function: frame.function || '?' })); })\n        .reverse();\n}\nvar defaultFunctionName = '<anonymous>';\n/**\n * Safely extract function name from itself\n */\nexport function getFunctionName(fn) {\n    try {\n        if (!fn || typeof fn !== 'function') {\n            return defaultFunctionName;\n        }\n        return fn.name || defaultFunctionName;\n    }\n    catch (e) {\n        // Just accessing custom props in some Selenium environments\n        // can cause a \"Permission denied\" exception (see raven-js#495).\n        return defaultFunctionName;\n    }\n}\n//# sourceMappingURL=stacktrace.js.map","var defaultFunctionName = '<anonymous>';\n/**\n * Safely extract function name from itself\n */\nexport function getFunctionName(fn) {\n    try {\n        if (!fn || typeof fn !== 'function') {\n            return defaultFunctionName;\n        }\n        return fn.name || defaultFunctionName;\n    }\n    catch (e) {\n        // Just accessing custom props in some Selenium environments\n        // can cause a \"Permission denied\" exception (see raven-js#495).\n        return defaultFunctionName;\n    }\n}\n//# sourceMappingURL=stacktrace.js.map","'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar mergeConfig = require('./core/mergeConfig');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n  var context = new Axios(defaultConfig);\n  var instance = bind(Axios.prototype.request, context);\n\n  // Copy axios.prototype to instance\n  utils.extend(instance, Axios.prototype, context);\n\n  // Copy context to instance\n  utils.extend(instance, context);\n\n  return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Factory for creating new instances\naxios.create = function create(instanceConfig) {\n  return createInstance(mergeConfig(axios.defaults, instanceConfig));\n};\n\n// Expose Cancel & CancelToken\naxios.Cancel = require('./cancel/Cancel');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\n\n// Expose all/spread\naxios.all = function all(promises) {\n  return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n","/*!\n * Determine if an object is a Buffer\n *\n * @author   Feross Aboukhadijeh <https://feross.org>\n * @license  MIT\n */\n\nmodule.exports = function isBuffer (obj) {\n  return obj != null && obj.constructor != null &&\n    typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n","'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('../helpers/buildURL');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\nvar mergeConfig = require('./mergeConfig');\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n  this.defaults = instanceConfig;\n  this.interceptors = {\n    request: new InterceptorManager(),\n    response: new InterceptorManager()\n  };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(config) {\n  /*eslint no-param-reassign:0*/\n  // Allow for axios('example/url'[, config]) a la fetch API\n  if (typeof config === 'string') {\n    config = arguments[1] || {};\n    config.url = arguments[0];\n  } else {\n    config = config || {};\n  }\n\n  config = mergeConfig(this.defaults, config);\n  config.method = config.method ? config.method.toLowerCase() : 'get';\n\n  // Hook up interceptors middleware\n  var chain = [dispatchRequest, undefined];\n  var promise = Promise.resolve(config);\n\n  this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n    chain.unshift(interceptor.fulfilled, interceptor.rejected);\n  });\n\n  this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n    chain.push(interceptor.fulfilled, interceptor.rejected);\n  });\n\n  while (chain.length) {\n    promise = promise.then(chain.shift(), chain.shift());\n  }\n\n  return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n  config = mergeConfig(this.defaults, config);\n  return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\\?/, '');\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n  /*eslint func-names:0*/\n  Axios.prototype[method] = function(url, config) {\n    return this.request(utils.merge(config || {}, {\n      method: method,\n      url: url\n    }));\n  };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n  /*eslint func-names:0*/\n  Axios.prototype[method] = function(url, data, config) {\n    return this.request(utils.merge(config || {}, {\n      method: method,\n      url: url,\n      data: data\n    }));\n  };\n});\n\nmodule.exports = Axios;\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n  this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n  this.handlers.push({\n    fulfilled: fulfilled,\n    rejected: rejected\n  });\n  return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n  if (this.handlers[id]) {\n    this.handlers[id] = null;\n  }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n  utils.forEach(this.handlers, function forEachHandler(h) {\n    if (h !== null) {\n      fn(h);\n    }\n  });\n};\n\nmodule.exports = InterceptorManager;\n","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\nvar isAbsoluteURL = require('./../helpers/isAbsoluteURL');\nvar combineURLs = require('./../helpers/combineURLs');\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n  if (config.cancelToken) {\n    config.cancelToken.throwIfRequested();\n  }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n  throwIfCancellationRequested(config);\n\n  // Support baseURL config\n  if (config.baseURL && !isAbsoluteURL(config.url)) {\n    config.url = combineURLs(config.baseURL, config.url);\n  }\n\n  // Ensure headers exist\n  config.headers = config.headers || {};\n\n  // Transform request data\n  config.data = transformData(\n    config.data,\n    config.headers,\n    config.transformRequest\n  );\n\n  // Flatten headers\n  config.headers = utils.merge(\n    config.headers.common || {},\n    config.headers[config.method] || {},\n    config.headers || {}\n  );\n\n  utils.forEach(\n    ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n    function cleanHeaderConfig(method) {\n      delete config.headers[method];\n    }\n  );\n\n  var adapter = config.adapter || defaults.adapter;\n\n  return adapter(config).then(function onAdapterResolution(response) {\n    throwIfCancellationRequested(config);\n\n    // Transform response data\n    response.data = transformData(\n      response.data,\n      response.headers,\n      config.transformResponse\n    );\n\n    return response;\n  }, function onAdapterRejection(reason) {\n    if (!isCancel(reason)) {\n      throwIfCancellationRequested(config);\n\n      // Transform response data\n      if (reason && reason.response) {\n        reason.response.data = transformData(\n          reason.response.data,\n          reason.response.headers,\n          config.transformResponse\n        );\n      }\n    }\n\n    return Promise.reject(reason);\n  });\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n  /*eslint no-param-reassign:0*/\n  utils.forEach(fns, function transform(fn) {\n    data = fn(data, headers);\n  });\n\n  return data;\n};\n","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n  utils.forEach(headers, function processHeader(value, name) {\n    if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n      headers[normalizedName] = value;\n      delete headers[name];\n    }\n  });\n};\n","'use strict';\n\nvar createError = require('./createError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n  var validateStatus = response.config.validateStatus;\n  if (!validateStatus || validateStatus(response.status)) {\n    resolve(response);\n  } else {\n    reject(createError(\n      'Request failed with status code ' + response.status,\n      response.config,\n      null,\n      response.request,\n      response\n    ));\n  }\n};\n","'use strict';\n\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\nmodule.exports = function enhanceError(error, config, code, request, response) {\n  error.config = config;\n  if (code) {\n    error.code = code;\n  }\n\n  error.request = request;\n  error.response = response;\n  error.isAxiosError = true;\n\n  error.toJSON = function() {\n    return {\n      // Standard\n      message: this.message,\n      name: this.name,\n      // Microsoft\n      description: this.description,\n      number: this.number,\n      // Mozilla\n      fileName: this.fileName,\n      lineNumber: this.lineNumber,\n      columnNumber: this.columnNumber,\n      stack: this.stack,\n      // Axios\n      config: this.config,\n      code: this.code\n    };\n  };\n  return error;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n  'age', 'authorization', 'content-length', 'content-type', 'etag',\n  'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n  'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n  'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n  var parsed = {};\n  var key;\n  var val;\n  var i;\n\n  if (!headers) { return parsed; }\n\n  utils.forEach(headers.split('\\n'), function parser(line) {\n    i = line.indexOf(':');\n    key = utils.trim(line.substr(0, i)).toLowerCase();\n    val = utils.trim(line.substr(i + 1));\n\n    if (key) {\n      if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n        return;\n      }\n      if (key === 'set-cookie') {\n        parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n      } else {\n        parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n      }\n    }\n  });\n\n  return parsed;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n  utils.isStandardBrowserEnv() ?\n\n  // Standard browser envs have full support of the APIs needed to test\n  // whether the request URL is of the same origin as current location.\n    (function standardBrowserEnv() {\n      var msie = /(msie|trident)/i.test(navigator.userAgent);\n      var urlParsingNode = document.createElement('a');\n      var originURL;\n\n      /**\n    * Parse a URL to discover it's components\n    *\n    * @param {String} url The URL to be parsed\n    * @returns {Object}\n    */\n      function resolveURL(url) {\n        var href = url;\n\n        if (msie) {\n        // IE needs attribute set twice to normalize properties\n          urlParsingNode.setAttribute('href', href);\n          href = urlParsingNode.href;\n        }\n\n        urlParsingNode.setAttribute('href', href);\n\n        // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n        return {\n          href: urlParsingNode.href,\n          protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n          host: urlParsingNode.host,\n          search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n          hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n          hostname: urlParsingNode.hostname,\n          port: urlParsingNode.port,\n          pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n            urlParsingNode.pathname :\n            '/' + urlParsingNode.pathname\n        };\n      }\n\n      originURL = resolveURL(window.location.href);\n\n      /**\n    * Determine if a URL shares the same origin as the current location\n    *\n    * @param {String} requestURL The URL to test\n    * @returns {boolean} True if URL shares the same origin, otherwise false\n    */\n      return function isURLSameOrigin(requestURL) {\n        var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n        return (parsed.protocol === originURL.protocol &&\n            parsed.host === originURL.host);\n      };\n    })() :\n\n  // Non standard browser envs (web workers, react-native) lack needed support.\n    (function nonStandardBrowserEnv() {\n      return function isURLSameOrigin() {\n        return true;\n      };\n    })()\n);\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n  utils.isStandardBrowserEnv() ?\n\n  // Standard browser envs support document.cookie\n    (function standardBrowserEnv() {\n      return {\n        write: function write(name, value, expires, path, domain, secure) {\n          var cookie = [];\n          cookie.push(name + '=' + encodeURIComponent(value));\n\n          if (utils.isNumber(expires)) {\n            cookie.push('expires=' + new Date(expires).toGMTString());\n          }\n\n          if (utils.isString(path)) {\n            cookie.push('path=' + path);\n          }\n\n          if (utils.isString(domain)) {\n            cookie.push('domain=' + domain);\n          }\n\n          if (secure === true) {\n            cookie.push('secure');\n          }\n\n          document.cookie = cookie.join('; ');\n        },\n\n        read: function read(name) {\n          var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n          return (match ? decodeURIComponent(match[3]) : null);\n        },\n\n        remove: function remove(name) {\n          this.write(name, '', Date.now() - 86400000);\n        }\n      };\n    })() :\n\n  // Non standard browser env (web workers, react-native) lack needed support.\n    (function nonStandardBrowserEnv() {\n      return {\n        write: function write() {},\n        read: function read() { return null; },\n        remove: function remove() {}\n      };\n    })()\n);\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n  // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n  // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n  // by any combination of letters, digits, plus, period, or hyphen.\n  return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n  return relativeURL\n    ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n    : baseURL;\n};\n","'use strict';\n\nvar Cancel = require('./Cancel');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n  if (typeof executor !== 'function') {\n    throw new TypeError('executor must be a function.');\n  }\n\n  var resolvePromise;\n  this.promise = new Promise(function promiseExecutor(resolve) {\n    resolvePromise = resolve;\n  });\n\n  var token = this;\n  executor(function cancel(message) {\n    if (token.reason) {\n      // Cancellation has already been requested\n      return;\n    }\n\n    token.reason = new Cancel(message);\n    resolvePromise(token.reason);\n  });\n}\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n  if (this.reason) {\n    throw this.reason;\n  }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n  var cancel;\n  var token = new CancelToken(function executor(c) {\n    cancel = c;\n  });\n  return {\n    token: token,\n    cancel: cancel\n  };\n};\n\nmodule.exports = CancelToken;\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n *  ```js\n *  function f(x, y, z) {}\n *  var args = [1, 2, 3];\n *  f.apply(null, args);\n *  ```\n *\n * With `spread` this example can be re-written.\n *\n *  ```js\n *  spread(function(x, y, z) {})([1, 2, 3]);\n *  ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n  return function wrap(arr) {\n    return callback.apply(null, arr);\n  };\n};\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","import { __assign } from \"tslib\";\nimport { getGlobalObject } from './global';\nimport { addNonEnumerableProperty } from './object';\nimport { snipLine } from './string';\n/**\n * UUID4 generator\n *\n * @returns string Generated UUID4.\n */\nexport function uuid4() {\n    var global = getGlobalObject();\n    var crypto = global.crypto || global.msCrypto;\n    if (!(crypto === void 0) && crypto.getRandomValues) {\n        // Use window.crypto API if available\n        var arr = new Uint16Array(8);\n        crypto.getRandomValues(arr);\n        // set 4 in byte 7\n        // eslint-disable-next-line no-bitwise\n        arr[3] = (arr[3] & 0xfff) | 0x4000;\n        // set 2 most significant bits of byte 9 to '10'\n        // eslint-disable-next-line no-bitwise\n        arr[4] = (arr[4] & 0x3fff) | 0x8000;\n        var pad = function (num) {\n            var v = num.toString(16);\n            while (v.length < 4) {\n                v = \"0\" + v;\n            }\n            return v;\n        };\n        return (pad(arr[0]) + pad(arr[1]) + pad(arr[2]) + pad(arr[3]) + pad(arr[4]) + pad(arr[5]) + pad(arr[6]) + pad(arr[7]));\n    }\n    // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n    return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n        // eslint-disable-next-line no-bitwise\n        var r = (Math.random() * 16) | 0;\n        // eslint-disable-next-line no-bitwise\n        var v = c === 'x' ? r : (r & 0x3) | 0x8;\n        return v.toString(16);\n    });\n}\n/**\n * Parses string form of URL into an object\n * // borrowed from https://tools.ietf.org/html/rfc3986#appendix-B\n * // intentionally using regex and not <a/> href parsing trick because React Native and other\n * // environments where DOM might not be available\n * @returns parsed URL object\n */\nexport function parseUrl(url) {\n    if (!url) {\n        return {};\n    }\n    var match = url.match(/^(([^:/?#]+):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n    if (!match) {\n        return {};\n    }\n    // coerce to undefined values to empty string so we don't get 'undefined'\n    var query = match[6] || '';\n    var fragment = match[8] || '';\n    return {\n        host: match[4],\n        path: match[5],\n        protocol: match[2],\n        relative: match[5] + query + fragment,\n    };\n}\nfunction getFirstException(event) {\n    return event.exception && event.exception.values ? event.exception.values[0] : undefined;\n}\n/**\n * Extracts either message or type+value from an event that can be used for user-facing logs\n * @returns event's description\n */\nexport function getEventDescription(event) {\n    var message = event.message, eventId = event.event_id;\n    if (message) {\n        return message;\n    }\n    var firstException = getFirstException(event);\n    if (firstException) {\n        if (firstException.type && firstException.value) {\n            return firstException.type + \": \" + firstException.value;\n        }\n        return firstException.type || firstException.value || eventId || '<unknown>';\n    }\n    return eventId || '<unknown>';\n}\n/**\n * Adds exception values, type and value to an synthetic Exception.\n * @param event The event to modify.\n * @param value Value of the exception.\n * @param type Type of the exception.\n * @hidden\n */\nexport function addExceptionTypeValue(event, value, type) {\n    var exception = (event.exception = event.exception || {});\n    var values = (exception.values = exception.values || []);\n    var firstException = (values[0] = values[0] || {});\n    if (!firstException.value) {\n        firstException.value = value || '';\n    }\n    if (!firstException.type) {\n        firstException.type = type || 'Error';\n    }\n}\n/**\n * Adds exception mechanism data to a given event. Uses defaults if the second parameter is not passed.\n *\n * @param event The event to modify.\n * @param newMechanism Mechanism data to add to the event.\n * @hidden\n */\nexport function addExceptionMechanism(event, newMechanism) {\n    var firstException = getFirstException(event);\n    if (!firstException) {\n        return;\n    }\n    var defaultMechanism = { type: 'generic', handled: true };\n    var currentMechanism = firstException.mechanism;\n    firstException.mechanism = __assign(__assign(__assign({}, defaultMechanism), currentMechanism), newMechanism);\n    if (newMechanism && 'data' in newMechanism) {\n        var mergedData = __assign(__assign({}, (currentMechanism && currentMechanism.data)), newMechanism.data);\n        firstException.mechanism.data = mergedData;\n    }\n}\n// https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string\nvar SEMVER_REGEXP = /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$/;\n/**\n * Parses input into a SemVer interface\n * @param input string representation of a semver version\n */\nexport function parseSemver(input) {\n    var match = input.match(SEMVER_REGEXP) || [];\n    var major = parseInt(match[1], 10);\n    var minor = parseInt(match[2], 10);\n    var patch = parseInt(match[3], 10);\n    return {\n        buildmetadata: match[5],\n        major: isNaN(major) ? undefined : major,\n        minor: isNaN(minor) ? undefined : minor,\n        patch: isNaN(patch) ? undefined : patch,\n        prerelease: match[4],\n    };\n}\nvar defaultRetryAfter = 60 * 1000; // 60 seconds\n/**\n * Extracts Retry-After value from the request header or returns default value\n * @param now current unix timestamp\n * @param header string representation of 'Retry-After' header\n */\nexport function parseRetryAfterHeader(now, header) {\n    if (!header) {\n        return defaultRetryAfter;\n    }\n    var headerDelay = parseInt(\"\" + header, 10);\n    if (!isNaN(headerDelay)) {\n        return headerDelay * 1000;\n    }\n    var headerDate = Date.parse(\"\" + header);\n    if (!isNaN(headerDate)) {\n        return headerDate - now;\n    }\n    return defaultRetryAfter;\n}\n/**\n * This function adds context (pre/post/line) lines to the provided frame\n *\n * @param lines string[] containing all lines\n * @param frame StackFrame that will be mutated\n * @param linesOfContext number of context lines we want to add pre/post\n */\nexport function addContextToFrame(lines, frame, linesOfContext) {\n    if (linesOfContext === void 0) { linesOfContext = 5; }\n    var lineno = frame.lineno || 0;\n    var maxLines = lines.length;\n    var sourceLine = Math.max(Math.min(maxLines, lineno - 1), 0);\n    frame.pre_context = lines\n        .slice(Math.max(0, sourceLine - linesOfContext), sourceLine)\n        .map(function (line) { return snipLine(line, 0); });\n    frame.context_line = snipLine(lines[Math.min(maxLines - 1, sourceLine)], frame.colno || 0);\n    frame.post_context = lines\n        .slice(Math.min(sourceLine + 1, maxLines), sourceLine + 1 + linesOfContext)\n        .map(function (line) { return snipLine(line, 0); });\n}\n/**\n * Strip the query string and fragment off of a given URL or path (if present)\n *\n * @param urlPath Full URL or path, including possible query string and/or fragment\n * @returns URL or path without query string or fragment\n */\nexport function stripUrlQueryAndFragment(urlPath) {\n    // eslint-disable-next-line no-useless-escape\n    return urlPath.split(/[\\?#]/, 1)[0];\n}\n/**\n * Checks whether or not we've already captured the given exception (note: not an identical exception - the very object\n * in question), and marks it captured if not.\n *\n * This is useful because it's possible for an error to get captured by more than one mechanism. After we intercept and\n * record an error, we rethrow it (assuming we've intercepted it before it's reached the top-level global handlers), so\n * that we don't interfere with whatever effects the error might have had were the SDK not there. At that point, because\n * the error has been rethrown, it's possible for it to bubble up to some other code we've instrumented. If it's not\n * caught after that, it will bubble all the way up to the global handlers (which of course we also instrument). This\n * function helps us ensure that even if we encounter the same error more than once, we only record it the first time we\n * see it.\n *\n * Note: It will ignore primitives (always return `false` and not mark them as seen), as properties can't be set on\n * them. {@link: Object.objectify} can be used on exceptions to convert any that are primitives into their equivalent\n * object wrapper forms so that this check will always work. However, because we need to flag the exact object which\n * will get rethrown, and because that rethrowing happens outside of the event processing pipeline, the objectification\n * must be done before the exception captured.\n *\n * @param A thrown exception to check or flag as having been seen\n * @returns `true` if the exception has already been captured, `false` if not (with the side effect of marking it seen)\n */\nexport function checkOrSetAlreadyCaught(exception) {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    if (exception && exception.__sentry_captured__) {\n        return true;\n    }\n    try {\n        // set it this way rather than by assignment so that it's not ennumerable and therefore isn't recorded by the\n        // `ExtraErrorData` integration\n        addNonEnumerableProperty(exception, '__sentry_captured__', true);\n    }\n    catch (err) {\n        // `exception` is a primitive, so we can't mark it seen\n    }\n    return false;\n}\n//# sourceMappingURL=misc.js.map","import { getGlobalObject } from './global';\nimport { isString } from './is';\n/**\n * Given a child DOM element, returns a query-selector statement describing that\n * and its ancestors\n * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]\n * @returns generated DOM path\n */\nexport function htmlTreeAsString(elem, keyAttrs) {\n    // try/catch both:\n    // - accessing event.target (see getsentry/raven-js#838, #768)\n    // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly\n    // - can throw an exception in some circumstances.\n    try {\n        var currentElem = elem;\n        var MAX_TRAVERSE_HEIGHT = 5;\n        var MAX_OUTPUT_LEN = 80;\n        var out = [];\n        var height = 0;\n        var len = 0;\n        var separator = ' > ';\n        var sepLength = separator.length;\n        var nextStr = void 0;\n        // eslint-disable-next-line no-plusplus\n        while (currentElem && height++ < MAX_TRAVERSE_HEIGHT) {\n            nextStr = _htmlElementAsString(currentElem, keyAttrs);\n            // bail out if\n            // - nextStr is the 'html' element\n            // - the length of the string that would be created exceeds MAX_OUTPUT_LEN\n            //   (ignore this limit if we are on the first iteration)\n            if (nextStr === 'html' || (height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN)) {\n                break;\n            }\n            out.push(nextStr);\n            len += nextStr.length;\n            currentElem = currentElem.parentNode;\n        }\n        return out.reverse().join(separator);\n    }\n    catch (_oO) {\n        return '<unknown>';\n    }\n}\n/**\n * Returns a simple, query-selector representation of a DOM element\n * e.g. [HTMLElement] => input#foo.btn[name=baz]\n * @returns generated DOM path\n */\nfunction _htmlElementAsString(el, keyAttrs) {\n    var elem = el;\n    var out = [];\n    var className;\n    var classes;\n    var key;\n    var attr;\n    var i;\n    if (!elem || !elem.tagName) {\n        return '';\n    }\n    out.push(elem.tagName.toLowerCase());\n    // Pairs of attribute keys defined in `serializeAttribute` and their values on element.\n    var keyAttrPairs = keyAttrs && keyAttrs.length\n        ? keyAttrs.filter(function (keyAttr) { return elem.getAttribute(keyAttr); }).map(function (keyAttr) { return [keyAttr, elem.getAttribute(keyAttr)]; })\n        : null;\n    if (keyAttrPairs && keyAttrPairs.length) {\n        keyAttrPairs.forEach(function (keyAttrPair) {\n            out.push(\"[\" + keyAttrPair[0] + \"=\\\"\" + keyAttrPair[1] + \"\\\"]\");\n        });\n    }\n    else {\n        if (elem.id) {\n            out.push(\"#\" + elem.id);\n        }\n        // eslint-disable-next-line prefer-const\n        className = elem.className;\n        if (className && isString(className)) {\n            classes = className.split(/\\s+/);\n            for (i = 0; i < classes.length; i++) {\n                out.push(\".\" + classes[i]);\n            }\n        }\n    }\n    var allowedAttrs = ['type', 'name', 'title', 'alt'];\n    for (i = 0; i < allowedAttrs.length; i++) {\n        key = allowedAttrs[i];\n        attr = elem.getAttribute(key);\n        if (attr) {\n            out.push(\"[\" + key + \"=\\\"\" + attr + \"\\\"]\");\n        }\n    }\n    return out.join('');\n}\n/**\n * A safe form of location.href\n */\nexport function getLocationHref() {\n    var global = getGlobalObject();\n    try {\n        return global.document.location.href;\n    }\n    catch (oO) {\n        return '';\n    }\n}\n//# sourceMappingURL=browser.js.map","import { isString } from './is';\n/**\n * Given a child DOM element, returns a query-selector statement describing that\n * and its ancestors\n * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]\n * @returns generated DOM path\n */\nexport function htmlTreeAsString(elem) {\n    // try/catch both:\n    // - accessing event.target (see getsentry/raven-js#838, #768)\n    // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly\n    // - can throw an exception in some circumstances.\n    try {\n        var currentElem = elem;\n        var MAX_TRAVERSE_HEIGHT = 5;\n        var MAX_OUTPUT_LEN = 80;\n        var out = [];\n        var height = 0;\n        var len = 0;\n        var separator = ' > ';\n        var sepLength = separator.length;\n        var nextStr = void 0;\n        // eslint-disable-next-line no-plusplus\n        while (currentElem && height++ < MAX_TRAVERSE_HEIGHT) {\n            nextStr = _htmlElementAsString(currentElem);\n            // bail out if\n            // - nextStr is the 'html' element\n            // - the length of the string that would be created exceeds MAX_OUTPUT_LEN\n            //   (ignore this limit if we are on the first iteration)\n            if (nextStr === 'html' || (height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN)) {\n                break;\n            }\n            out.push(nextStr);\n            len += nextStr.length;\n            currentElem = currentElem.parentNode;\n        }\n        return out.reverse().join(separator);\n    }\n    catch (_oO) {\n        return '<unknown>';\n    }\n}\n/**\n * Returns a simple, query-selector representation of a DOM element\n * e.g. [HTMLElement] => input#foo.btn[name=baz]\n * @returns generated DOM path\n */\nfunction _htmlElementAsString(el) {\n    var elem = el;\n    var out = [];\n    var className;\n    var classes;\n    var key;\n    var attr;\n    var i;\n    if (!elem || !elem.tagName) {\n        return '';\n    }\n    out.push(elem.tagName.toLowerCase());\n    if (elem.id) {\n        out.push(\"#\" + elem.id);\n    }\n    // eslint-disable-next-line prefer-const\n    className = elem.className;\n    if (className && isString(className)) {\n        classes = className.split(/\\s+/);\n        for (i = 0; i < classes.length; i++) {\n            out.push(\".\" + classes[i]);\n        }\n    }\n    var allowedAttrs = ['type', 'name', 'title', 'alt'];\n    for (i = 0; i < allowedAttrs.length; i++) {\n        key = allowedAttrs[i];\n        attr = elem.getAttribute(key);\n        if (attr) {\n            out.push(\"[\" + key + \"=\\\"\" + attr + \"\\\"]\");\n        }\n    }\n    return out.join('');\n}\n//# sourceMappingURL=browser.js.map","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var debounce = require('./debounce'),\n    isObject = require('./isObject');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n *  Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n *  Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n  var leading = true,\n      trailing = true;\n\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  if (isObject(options)) {\n    leading = 'leading' in options ? !!options.leading : leading;\n    trailing = 'trailing' in options ? !!options.trailing : trailing;\n  }\n  return debounce(func, wait, {\n    'leading': leading,\n    'maxWait': wait,\n    'trailing': trailing\n  });\n}\n\nmodule.exports = throttle;\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Helper to decycle json objects\n */\nexport function memoBuilder() {\n    var hasWeakSet = typeof WeakSet === 'function';\n    var inner = hasWeakSet ? new WeakSet() : [];\n    function memoize(obj) {\n        if (hasWeakSet) {\n            if (inner.has(obj)) {\n                return true;\n            }\n            inner.add(obj);\n            return false;\n        }\n        // eslint-disable-next-line @typescript-eslint/prefer-for-of\n        for (var i = 0; i < inner.length; i++) {\n            var value = inner[i];\n            if (value === obj) {\n                return true;\n            }\n        }\n        inner.push(obj);\n        return false;\n    }\n    function unmemoize(obj) {\n        if (hasWeakSet) {\n            inner.delete(obj);\n        }\n        else {\n            for (var i = 0; i < inner.length; i++) {\n                if (inner[i] === obj) {\n                    inner.splice(i, 1);\n                    break;\n                }\n            }\n        }\n    }\n    return [memoize, unmemoize];\n}\n//# sourceMappingURL=memo.js.map","import { addInstrumentationHandler, logger } from '@sentry/utils';\nimport { getActiveTransaction } from './utils';\n/**\n * Configures global error listeners\n */\nexport function registerErrorInstrumentation() {\n    addInstrumentationHandler('error', errorCallback);\n    addInstrumentationHandler('unhandledrejection', errorCallback);\n}\n/**\n * If an error or unhandled promise occurs, we mark the active transaction as failed\n */\nfunction errorCallback() {\n    var activeTransaction = getActiveTransaction();\n    if (activeTransaction) {\n        var status_1 = 'internal_error';\n        logger.log(\"[Tracing] Transaction: \" + status_1 + \" -> Global error occured\");\n        activeTransaction.setStatus(status_1);\n    }\n}\n//# sourceMappingURL=errors.js.map","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n/**\n * Memo class used for decycle json objects. Uses WeakSet if available otherwise array.\n */\nvar Memo = /** @class */ (function () {\n    function Memo() {\n        this._hasWeakSet = typeof WeakSet === 'function';\n        this._inner = this._hasWeakSet ? new WeakSet() : [];\n    }\n    /**\n     * Sets obj to remember.\n     * @param obj Object to remember\n     */\n    Memo.prototype.memoize = function (obj) {\n        if (this._hasWeakSet) {\n            if (this._inner.has(obj)) {\n                return true;\n            }\n            this._inner.add(obj);\n            return false;\n        }\n        // eslint-disable-next-line @typescript-eslint/prefer-for-of\n        for (var i = 0; i < this._inner.length; i++) {\n            var value = this._inner[i];\n            if (value === obj) {\n                return true;\n            }\n        }\n        this._inner.push(obj);\n        return false;\n    };\n    /**\n     * Removes object from internal storage.\n     * @param obj Object to forget\n     */\n    Memo.prototype.unmemoize = function (obj) {\n        if (this._hasWeakSet) {\n            this._inner.delete(obj);\n        }\n        else {\n            for (var i = 0; i < this._inner.length; i++) {\n                if (this._inner[i] === obj) {\n                    this._inner.splice(i, 1);\n                    break;\n                }\n            }\n        }\n    };\n    return Memo;\n}());\nexport { Memo };\n//# sourceMappingURL=memo.js.map","import { isDebugBuild } from './env';\nimport { getGlobalObject } from './global';\nimport { logger } from './logger';\n/**\n * Tells whether current environment supports ErrorEvent objects\n * {@link supportsErrorEvent}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsErrorEvent() {\n    try {\n        new ErrorEvent('');\n        return true;\n    }\n    catch (e) {\n        return false;\n    }\n}\n/**\n * Tells whether current environment supports DOMError objects\n * {@link supportsDOMError}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsDOMError() {\n    try {\n        // Chrome: VM89:1 Uncaught TypeError: Failed to construct 'DOMError':\n        // 1 argument required, but only 0 present.\n        // @ts-ignore It really needs 1 argument, not 0.\n        new DOMError('');\n        return true;\n    }\n    catch (e) {\n        return false;\n    }\n}\n/**\n * Tells whether current environment supports DOMException objects\n * {@link supportsDOMException}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsDOMException() {\n    try {\n        new DOMException('');\n        return true;\n    }\n    catch (e) {\n        return false;\n    }\n}\n/**\n * Tells whether current environment supports Fetch API\n * {@link supportsFetch}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsFetch() {\n    if (!('fetch' in getGlobalObject())) {\n        return false;\n    }\n    try {\n        new Headers();\n        new Request('');\n        new Response();\n        return true;\n    }\n    catch (e) {\n        return false;\n    }\n}\n/**\n * isNativeFetch checks if the given function is a native implementation of fetch()\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function isNativeFetch(func) {\n    return func && /^function fetch\\(\\)\\s+\\{\\s+\\[native code\\]\\s+\\}$/.test(func.toString());\n}\n/**\n * Tells whether current environment supports Fetch API natively\n * {@link supportsNativeFetch}.\n *\n * @returns true if `window.fetch` is natively implemented, false otherwise\n */\nexport function supportsNativeFetch() {\n    if (!supportsFetch()) {\n        return false;\n    }\n    var global = getGlobalObject();\n    // Fast path to avoid DOM I/O\n    // eslint-disable-next-line @typescript-eslint/unbound-method\n    if (isNativeFetch(global.fetch)) {\n        return true;\n    }\n    // window.fetch is implemented, but is polyfilled or already wrapped (e.g: by a chrome extension)\n    // so create a \"pure\" iframe to see if that has native fetch\n    var result = false;\n    var doc = global.document;\n    // eslint-disable-next-line deprecation/deprecation\n    if (doc && typeof doc.createElement === \"function\") {\n        try {\n            var sandbox = doc.createElement('iframe');\n            sandbox.hidden = true;\n            doc.head.appendChild(sandbox);\n            if (sandbox.contentWindow && sandbox.contentWindow.fetch) {\n                // eslint-disable-next-line @typescript-eslint/unbound-method\n                result = isNativeFetch(sandbox.contentWindow.fetch);\n            }\n            doc.head.removeChild(sandbox);\n        }\n        catch (err) {\n            if (isDebugBuild()) {\n                logger.warn('Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ', err);\n            }\n        }\n    }\n    return result;\n}\n/**\n * Tells whether current environment supports ReportingObserver API\n * {@link supportsReportingObserver}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsReportingObserver() {\n    return 'ReportingObserver' in getGlobalObject();\n}\n/**\n * Tells whether current environment supports Referrer Policy API\n * {@link supportsReferrerPolicy}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsReferrerPolicy() {\n    // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default'\n    // (see https://caniuse.com/#feat=referrer-policy),\n    // it doesn't. And it throws an exception instead of ignoring this parameter...\n    // REF: https://github.com/getsentry/raven-js/issues/1233\n    if (!supportsFetch()) {\n        return false;\n    }\n    try {\n        new Request('_', {\n            referrerPolicy: 'origin',\n        });\n        return true;\n    }\n    catch (e) {\n        return false;\n    }\n}\n/**\n * Tells whether current environment supports History API\n * {@link supportsHistory}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsHistory() {\n    // NOTE: in Chrome App environment, touching history.pushState, *even inside\n    //       a try/catch block*, will cause Chrome to output an error to console.error\n    // borrowed from: https://github.com/angular/angular.js/pull/13945/files\n    var global = getGlobalObject();\n    /* eslint-disable @typescript-eslint/no-unsafe-member-access */\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    var chrome = global.chrome;\n    var isChromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n    /* eslint-enable @typescript-eslint/no-unsafe-member-access */\n    var hasHistoryApi = 'history' in global && !!global.history.pushState && !!global.history.replaceState;\n    return !isChromePackagedApp && hasHistoryApi;\n}\n//# sourceMappingURL=supports.js.map","import { __assign, __values } from \"tslib\";\nimport { isDebugBuild } from './env';\nimport { getGlobalObject } from './global';\nimport { isInstanceOf, isString } from './is';\nimport { logger } from './logger';\nimport { fill } from './object';\nimport { getFunctionName } from './stacktrace';\nimport { supportsHistory, supportsNativeFetch } from './supports';\nvar global = getGlobalObject();\n/**\n * Instrument native APIs to call handlers that can be used to create breadcrumbs, APM spans etc.\n *  - Console API\n *  - Fetch API\n *  - XHR API\n *  - History API\n *  - DOM API (click/typing)\n *  - Error API\n *  - UnhandledRejection API\n */\nvar handlers = {};\nvar instrumented = {};\n/** Instruments given API */\nfunction instrument(type) {\n    if (instrumented[type]) {\n        return;\n    }\n    instrumented[type] = true;\n    switch (type) {\n        case 'console':\n            instrumentConsole();\n            break;\n        case 'dom':\n            instrumentDOM();\n            break;\n        case 'xhr':\n            instrumentXHR();\n            break;\n        case 'fetch':\n            instrumentFetch();\n            break;\n        case 'history':\n            instrumentHistory();\n            break;\n        case 'error':\n            instrumentError();\n            break;\n        case 'unhandledrejection':\n            instrumentUnhandledRejection();\n            break;\n        default:\n            logger.warn('unknown instrumentation type:', type);\n    }\n}\n/**\n * Add handler that will be called when given type of instrumentation triggers.\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addInstrumentationHandler(type, callback) {\n    handlers[type] = handlers[type] || [];\n    handlers[type].push(callback);\n    instrument(type);\n}\n/** JSDoc */\nfunction triggerHandlers(type, data) {\n    var e_1, _a;\n    if (!type || !handlers[type]) {\n        return;\n    }\n    try {\n        for (var _b = __values(handlers[type] || []), _c = _b.next(); !_c.done; _c = _b.next()) {\n            var handler = _c.value;\n            try {\n                handler(data);\n            }\n            catch (e) {\n                if (isDebugBuild()) {\n                    logger.error(\"Error while triggering instrumentation handler.\\nType: \" + type + \"\\nName: \" + getFunctionName(handler) + \"\\nError: \" + e);\n                }\n            }\n        }\n    }\n    catch (e_1_1) { e_1 = { error: e_1_1 }; }\n    finally {\n        try {\n            if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n        }\n        finally { if (e_1) throw e_1.error; }\n    }\n}\n/** JSDoc */\nfunction instrumentConsole() {\n    if (!('console' in global)) {\n        return;\n    }\n    ['debug', 'info', 'warn', 'error', 'log', 'assert'].forEach(function (level) {\n        if (!(level in global.console)) {\n            return;\n        }\n        fill(global.console, level, function (originalConsoleMethod) {\n            return function () {\n                var args = [];\n                for (var _i = 0; _i < arguments.length; _i++) {\n                    args[_i] = arguments[_i];\n                }\n                triggerHandlers('console', { args: args, level: level });\n                // this fails for some browsers. :(\n                if (originalConsoleMethod) {\n                    originalConsoleMethod.apply(global.console, args);\n                }\n            };\n        });\n    });\n}\n/** JSDoc */\nfunction instrumentFetch() {\n    if (!supportsNativeFetch()) {\n        return;\n    }\n    fill(global, 'fetch', function (originalFetch) {\n        return function () {\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            var handlerData = {\n                args: args,\n                fetchData: {\n                    method: getFetchMethod(args),\n                    url: getFetchUrl(args),\n                },\n                startTimestamp: Date.now(),\n            };\n            triggerHandlers('fetch', __assign({}, handlerData));\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n            return originalFetch.apply(global, args).then(function (response) {\n                triggerHandlers('fetch', __assign(__assign({}, handlerData), { endTimestamp: Date.now(), response: response }));\n                return response;\n            }, function (error) {\n                triggerHandlers('fetch', __assign(__assign({}, handlerData), { endTimestamp: Date.now(), error: error }));\n                // NOTE: If you are a Sentry user, and you are seeing this stack frame,\n                //       it means the sentry.javascript SDK caught an error invoking your application code.\n                //       This is expected behavior and NOT indicative of a bug with sentry.javascript.\n                throw error;\n            });\n        };\n    });\n}\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/** Extract `method` from fetch call arguments */\nfunction getFetchMethod(fetchArgs) {\n    if (fetchArgs === void 0) { fetchArgs = []; }\n    if ('Request' in global && isInstanceOf(fetchArgs[0], Request) && fetchArgs[0].method) {\n        return String(fetchArgs[0].method).toUpperCase();\n    }\n    if (fetchArgs[1] && fetchArgs[1].method) {\n        return String(fetchArgs[1].method).toUpperCase();\n    }\n    return 'GET';\n}\n/** Extract `url` from fetch call arguments */\nfunction getFetchUrl(fetchArgs) {\n    if (fetchArgs === void 0) { fetchArgs = []; }\n    if (typeof fetchArgs[0] === 'string') {\n        return fetchArgs[0];\n    }\n    if ('Request' in global && isInstanceOf(fetchArgs[0], Request)) {\n        return fetchArgs[0].url;\n    }\n    return String(fetchArgs[0]);\n}\n/* eslint-enable @typescript-eslint/no-unsafe-member-access */\n/** JSDoc */\nfunction instrumentXHR() {\n    if (!('XMLHttpRequest' in global)) {\n        return;\n    }\n    var xhrproto = XMLHttpRequest.prototype;\n    fill(xhrproto, 'open', function (originalOpen) {\n        return function () {\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            // eslint-disable-next-line @typescript-eslint/no-this-alias\n            var xhr = this;\n            var url = args[1];\n            var xhrInfo = (xhr.__sentry_xhr__ = {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n                method: isString(args[0]) ? args[0].toUpperCase() : args[0],\n                url: args[1],\n            });\n            // if Sentry key appears in URL, don't capture it as a request\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n            if (isString(url) && xhrInfo.method === 'POST' && url.match(/sentry_key/)) {\n                xhr.__sentry_own_request__ = true;\n            }\n            var onreadystatechangeHandler = function () {\n                if (xhr.readyState === 4) {\n                    try {\n                        // touching statusCode in some platforms throws\n                        // an exception\n                        xhrInfo.status_code = xhr.status;\n                    }\n                    catch (e) {\n                        /* do nothing */\n                    }\n                    triggerHandlers('xhr', {\n                        args: args,\n                        endTimestamp: Date.now(),\n                        startTimestamp: Date.now(),\n                        xhr: xhr,\n                    });\n                }\n            };\n            if ('onreadystatechange' in xhr && typeof xhr.onreadystatechange === 'function') {\n                fill(xhr, 'onreadystatechange', function (original) {\n                    return function () {\n                        var readyStateArgs = [];\n                        for (var _i = 0; _i < arguments.length; _i++) {\n                            readyStateArgs[_i] = arguments[_i];\n                        }\n                        onreadystatechangeHandler();\n                        return original.apply(xhr, readyStateArgs);\n                    };\n                });\n            }\n            else {\n                xhr.addEventListener('readystatechange', onreadystatechangeHandler);\n            }\n            return originalOpen.apply(xhr, args);\n        };\n    });\n    fill(xhrproto, 'send', function (originalSend) {\n        return function () {\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            if (this.__sentry_xhr__ && args[0] !== undefined) {\n                this.__sentry_xhr__.body = args[0];\n            }\n            triggerHandlers('xhr', {\n                args: args,\n                startTimestamp: Date.now(),\n                xhr: this,\n            });\n            return originalSend.apply(this, args);\n        };\n    });\n}\nvar lastHref;\n/** JSDoc */\nfunction instrumentHistory() {\n    if (!supportsHistory()) {\n        return;\n    }\n    var oldOnPopState = global.onpopstate;\n    global.onpopstate = function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        var to = global.location.href;\n        // keep track of the current URL state, as we always receive only the updated state\n        var from = lastHref;\n        lastHref = to;\n        triggerHandlers('history', {\n            from: from,\n            to: to,\n        });\n        if (oldOnPopState) {\n            // Apparently this can throw in Firefox when incorrectly implemented plugin is installed.\n            // https://github.com/getsentry/sentry-javascript/issues/3344\n            // https://github.com/bugsnag/bugsnag-js/issues/469\n            try {\n                return oldOnPopState.apply(this, args);\n            }\n            catch (_oO) {\n                // no-empty\n            }\n        }\n    };\n    /** @hidden */\n    function historyReplacementFunction(originalHistoryFunction) {\n        return function () {\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            var url = args.length > 2 ? args[2] : undefined;\n            if (url) {\n                // coerce to string (this is what pushState does)\n                var from = lastHref;\n                var to = String(url);\n                // keep track of the current URL state, as we always receive only the updated state\n                lastHref = to;\n                triggerHandlers('history', {\n                    from: from,\n                    to: to,\n                });\n            }\n            return originalHistoryFunction.apply(this, args);\n        };\n    }\n    fill(global.history, 'pushState', historyReplacementFunction);\n    fill(global.history, 'replaceState', historyReplacementFunction);\n}\nvar debounceDuration = 1000;\nvar debounceTimerID;\nvar lastCapturedEvent;\n/**\n * Decide whether the current event should finish the debounce of previously captured one.\n * @param previous previously captured event\n * @param current event to be captured\n */\nfunction shouldShortcircuitPreviousDebounce(previous, current) {\n    // If there was no previous event, it should always be swapped for the new one.\n    if (!previous) {\n        return true;\n    }\n    // If both events have different type, then user definitely performed two separate actions. e.g. click + keypress.\n    if (previous.type !== current.type) {\n        return true;\n    }\n    try {\n        // If both events have the same type, it's still possible that actions were performed on different targets.\n        // e.g. 2 clicks on different buttons.\n        if (previous.target !== current.target) {\n            return true;\n        }\n    }\n    catch (e) {\n        // just accessing `target` property can throw an exception in some rare circumstances\n        // see: https://github.com/getsentry/sentry-javascript/issues/838\n    }\n    // If both events have the same type _and_ same `target` (an element which triggered an event, _not necessarily_\n    // to which an event listener was attached), we treat them as the same action, as we want to capture\n    // only one breadcrumb. e.g. multiple clicks on the same button, or typing inside a user input box.\n    return false;\n}\n/**\n * Decide whether an event should be captured.\n * @param event event to be captured\n */\nfunction shouldSkipDOMEvent(event) {\n    // We are only interested in filtering `keypress` events for now.\n    if (event.type !== 'keypress') {\n        return false;\n    }\n    try {\n        var target = event.target;\n        if (!target || !target.tagName) {\n            return true;\n        }\n        // Only consider keypress events on actual input elements. This will disregard keypresses targeting body\n        // e.g.tabbing through elements, hotkeys, etc.\n        if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable) {\n            return false;\n        }\n    }\n    catch (e) {\n        // just accessing `target` property can throw an exception in some rare circumstances\n        // see: https://github.com/getsentry/sentry-javascript/issues/838\n    }\n    return true;\n}\n/**\n * Wraps addEventListener to capture UI breadcrumbs\n * @param handler function that will be triggered\n * @param globalListener indicates whether event was captured by the global event listener\n * @returns wrapped breadcrumb events handler\n * @hidden\n */\nfunction makeDOMEventHandler(handler, globalListener) {\n    if (globalListener === void 0) { globalListener = false; }\n    return function (event) {\n        // It's possible this handler might trigger multiple times for the same\n        // event (e.g. event propagation through node ancestors).\n        // Ignore if we've already captured that event.\n        if (!event || lastCapturedEvent === event) {\n            return;\n        }\n        // We always want to skip _some_ events.\n        if (shouldSkipDOMEvent(event)) {\n            return;\n        }\n        var name = event.type === 'keypress' ? 'input' : event.type;\n        // If there is no debounce timer, it means that we can safely capture the new event and store it for future comparisons.\n        if (debounceTimerID === undefined) {\n            handler({\n                event: event,\n                name: name,\n                global: globalListener,\n            });\n            lastCapturedEvent = event;\n        }\n        // If there is a debounce awaiting, see if the new event is different enough to treat it as a unique one.\n        // If that's the case, emit the previous event and store locally the newly-captured DOM event.\n        else if (shouldShortcircuitPreviousDebounce(lastCapturedEvent, event)) {\n            handler({\n                event: event,\n                name: name,\n                global: globalListener,\n            });\n            lastCapturedEvent = event;\n        }\n        // Start a new debounce timer that will prevent us from capturing multiple events that should be grouped together.\n        clearTimeout(debounceTimerID);\n        debounceTimerID = global.setTimeout(function () {\n            debounceTimerID = undefined;\n        }, debounceDuration);\n    };\n}\n/** JSDoc */\nfunction instrumentDOM() {\n    if (!('document' in global)) {\n        return;\n    }\n    // Make it so that any click or keypress that is unhandled / bubbled up all the way to the document triggers our dom\n    // handlers. (Normally we have only one, which captures a breadcrumb for each click or keypress.) Do this before\n    // we instrument `addEventListener` so that we don't end up attaching this handler twice.\n    var triggerDOMHandler = triggerHandlers.bind(null, 'dom');\n    var globalDOMEventHandler = makeDOMEventHandler(triggerDOMHandler, true);\n    global.document.addEventListener('click', globalDOMEventHandler, false);\n    global.document.addEventListener('keypress', globalDOMEventHandler, false);\n    // After hooking into click and keypress events bubbled up to `document`, we also hook into user-handled\n    // clicks & keypresses, by adding an event listener of our own to any element to which they add a listener. That\n    // way, whenever one of their handlers is triggered, ours will be, too. (This is needed because their handler\n    // could potentially prevent the event from bubbling up to our global listeners. This way, our handler are still\n    // guaranteed to fire at least once.)\n    ['EventTarget', 'Node'].forEach(function (target) {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n        var proto = global[target] && global[target].prototype;\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, no-prototype-builtins\n        if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty('addEventListener')) {\n            return;\n        }\n        fill(proto, 'addEventListener', function (originalAddEventListener) {\n            return function (type, listener, options) {\n                if (type === 'click' || type == 'keypress') {\n                    try {\n                        var el = this;\n                        var handlers_1 = (el.__sentry_instrumentation_handlers__ = el.__sentry_instrumentation_handlers__ || {});\n                        var handlerForType = (handlers_1[type] = handlers_1[type] || { refCount: 0 });\n                        if (!handlerForType.handler) {\n                            var handler = makeDOMEventHandler(triggerDOMHandler);\n                            handlerForType.handler = handler;\n                            originalAddEventListener.call(this, type, handler, options);\n                        }\n                        handlerForType.refCount += 1;\n                    }\n                    catch (e) {\n                        // Accessing dom properties is always fragile.\n                        // Also allows us to skip `addEventListenrs` calls with no proper `this` context.\n                    }\n                }\n                return originalAddEventListener.call(this, type, listener, options);\n            };\n        });\n        fill(proto, 'removeEventListener', function (originalRemoveEventListener) {\n            return function (type, listener, options) {\n                if (type === 'click' || type == 'keypress') {\n                    try {\n                        var el = this;\n                        var handlers_2 = el.__sentry_instrumentation_handlers__ || {};\n                        var handlerForType = handlers_2[type];\n                        if (handlerForType) {\n                            handlerForType.refCount -= 1;\n                            // If there are no longer any custom handlers of the current type on this element, we can remove ours, too.\n                            if (handlerForType.refCount <= 0) {\n                                originalRemoveEventListener.call(this, type, handlerForType.handler, options);\n                                handlerForType.handler = undefined;\n                                delete handlers_2[type]; // eslint-disable-line @typescript-eslint/no-dynamic-delete\n                            }\n                            // If there are no longer any custom handlers of any type on this element, cleanup everything.\n                            if (Object.keys(handlers_2).length === 0) {\n                                delete el.__sentry_instrumentation_handlers__;\n                            }\n                        }\n                    }\n                    catch (e) {\n                        // Accessing dom properties is always fragile.\n                        // Also allows us to skip `addEventListenrs` calls with no proper `this` context.\n                    }\n                }\n                return originalRemoveEventListener.call(this, type, listener, options);\n            };\n        });\n    });\n}\nvar _oldOnErrorHandler = null;\n/** JSDoc */\nfunction instrumentError() {\n    _oldOnErrorHandler = global.onerror;\n    global.onerror = function (msg, url, line, column, error) {\n        triggerHandlers('error', {\n            column: column,\n            error: error,\n            line: line,\n            msg: msg,\n            url: url,\n        });\n        if (_oldOnErrorHandler) {\n            // eslint-disable-next-line prefer-rest-params\n            return _oldOnErrorHandler.apply(this, arguments);\n        }\n        return false;\n    };\n}\nvar _oldOnUnhandledRejectionHandler = null;\n/** JSDoc */\nfunction instrumentUnhandledRejection() {\n    _oldOnUnhandledRejectionHandler = global.onunhandledrejection;\n    global.onunhandledrejection = function (e) {\n        triggerHandlers('unhandledrejection', e);\n        if (_oldOnUnhandledRejectionHandler) {\n            // eslint-disable-next-line prefer-rest-params\n            return _oldOnUnhandledRejectionHandler.apply(this, arguments);\n        }\n        return true;\n    };\n}\n//# sourceMappingURL=instrument.js.map","var isObject = require('./isObject'),\n    now = require('./now'),\n    toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n    nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n *  Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n *  The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n *  Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n *   'leading': true,\n *   'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n  var lastArgs,\n      lastThis,\n      maxWait,\n      result,\n      timerId,\n      lastCallTime,\n      lastInvokeTime = 0,\n      leading = false,\n      maxing = false,\n      trailing = true;\n\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  wait = toNumber(wait) || 0;\n  if (isObject(options)) {\n    leading = !!options.leading;\n    maxing = 'maxWait' in options;\n    maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n    trailing = 'trailing' in options ? !!options.trailing : trailing;\n  }\n\n  function invokeFunc(time) {\n    var args = lastArgs,\n        thisArg = lastThis;\n\n    lastArgs = lastThis = undefined;\n    lastInvokeTime = time;\n    result = func.apply(thisArg, args);\n    return result;\n  }\n\n  function leadingEdge(time) {\n    // Reset any `maxWait` timer.\n    lastInvokeTime = time;\n    // Start the timer for the trailing edge.\n    timerId = setTimeout(timerExpired, wait);\n    // Invoke the leading edge.\n    return leading ? invokeFunc(time) : result;\n  }\n\n  function remainingWait(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime,\n        timeWaiting = wait - timeSinceLastCall;\n\n    return maxing\n      ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n      : timeWaiting;\n  }\n\n  function shouldInvoke(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime;\n\n    // Either this is the first call, activity has stopped and we're at the\n    // trailing edge, the system time has gone backwards and we're treating\n    // it as the trailing edge, or we've hit the `maxWait` limit.\n    return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n      (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n  }\n\n  function timerExpired() {\n    var time = now();\n    if (shouldInvoke(time)) {\n      return trailingEdge(time);\n    }\n    // Restart the timer.\n    timerId = setTimeout(timerExpired, remainingWait(time));\n  }\n\n  function trailingEdge(time) {\n    timerId = undefined;\n\n    // Only invoke if we have `lastArgs` which means `func` has been\n    // debounced at least once.\n    if (trailing && lastArgs) {\n      return invokeFunc(time);\n    }\n    lastArgs = lastThis = undefined;\n    return result;\n  }\n\n  function cancel() {\n    if (timerId !== undefined) {\n      clearTimeout(timerId);\n    }\n    lastInvokeTime = 0;\n    lastArgs = lastCallTime = lastThis = timerId = undefined;\n  }\n\n  function flush() {\n    return timerId === undefined ? result : trailingEdge(now());\n  }\n\n  function debounced() {\n    var time = now(),\n        isInvoking = shouldInvoke(time);\n\n    lastArgs = arguments;\n    lastThis = this;\n    lastCallTime = time;\n\n    if (isInvoking) {\n      if (timerId === undefined) {\n        return leadingEdge(lastCallTime);\n      }\n      if (maxing) {\n        // Handle invocations in a tight loop.\n        clearTimeout(timerId);\n        timerId = setTimeout(timerExpired, wait);\n        return invokeFunc(lastCallTime);\n      }\n    }\n    if (timerId === undefined) {\n      timerId = setTimeout(timerExpired, wait);\n    }\n    return result;\n  }\n  debounced.cancel = cancel;\n  debounced.flush = flush;\n  return debounced;\n}\n\nmodule.exports = debounce;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n *   console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n  return root.Date.now();\n};\n\nmodule.exports = now;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var isObject = require('./isObject'),\n    isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n  if (typeof value == 'number') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return NAN;\n  }\n  if (isObject(value)) {\n    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n    value = isObject(other) ? (other + '') : other;\n  }\n  if (typeof value != 'string') {\n    return value === 0 ? value : +value;\n  }\n  value = value.replace(reTrim, '');\n  var isBinary = reIsBinary.test(value);\n  return (isBinary || reIsOctal.test(value))\n    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n    : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var baseGetTag = require('./_baseGetTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var Symbol = require('./_Symbol'),\n    getRawTag = require('./_getRawTag'),\n    objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n    undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","/*!\n * Select2 4.0.13\n * https://select2.github.io\n *\n * Released under the MIT license\n * https://github.com/select2/select2/blob/master/LICENSE.md\n */\n;(function (factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define(['jquery'], factory);\n  } else if (typeof module === 'object' && module.exports) {\n    // Node/CommonJS\n    module.exports = function (root, jQuery) {\n      if (jQuery === undefined) {\n        // require('jQuery') returns a factory that requires window to\n        // build a jQuery instance, we normalize how we use modules\n        // that require this pattern but the window provided is a noop\n        // if it's defined (how jquery works)\n        if (typeof window !== 'undefined') {\n          jQuery = require('jquery');\n        }\n        else {\n          jQuery = require('jquery')(root);\n        }\n      }\n      factory(jQuery);\n      return jQuery;\n    };\n  } else {\n    // Browser globals\n    factory(jQuery);\n  }\n} (function (jQuery) {\n  // This is needed so we can catch the AMD loader configuration and use it\n  // The inner file should be wrapped (by `banner.start.js`) in a function that\n  // returns the AMD loader references.\n  var S2 =(function () {\n  // Restore the Select2 AMD loader so it can be used\n  // Needed mostly in the language files, where the loader is not inserted\n  if (jQuery && jQuery.fn && jQuery.fn.select2 && jQuery.fn.select2.amd) {\n    var S2 = jQuery.fn.select2.amd;\n  }\nvar S2;(function () { if (!S2 || !S2.requirejs) {\nif (!S2) { S2 = {}; } else { require = S2; }\n/**\n * @license almond 0.3.3 Copyright jQuery Foundation and other contributors.\n * Released under MIT license, http://github.com/requirejs/almond/LICENSE\n */\n//Going sloppy to avoid 'use strict' string cost, but strict practices should\n//be followed.\n/*global setTimeout: false */\n\nvar requirejs, require, define;\n(function (undef) {\n    var main, req, makeMap, handlers,\n        defined = {},\n        waiting = {},\n        config = {},\n        defining = {},\n        hasOwn = Object.prototype.hasOwnProperty,\n        aps = [].slice,\n        jsSuffixRegExp = /\\.js$/;\n\n    function hasProp(obj, prop) {\n        return hasOwn.call(obj, prop);\n    }\n\n    /**\n     * Given a relative module name, like ./something, normalize it to\n     * a real name that can be mapped to a path.\n     * @param {String} name the relative name\n     * @param {String} baseName a real name that the name arg is relative\n     * to.\n     * @returns {String} normalized name\n     */\n    function normalize(name, baseName) {\n        var nameParts, nameSegment, mapValue, foundMap, lastIndex,\n            foundI, foundStarMap, starI, i, j, part, normalizedBaseParts,\n            baseParts = baseName && baseName.split(\"/\"),\n            map = config.map,\n            starMap = (map && map['*']) || {};\n\n        //Adjust any relative paths.\n        if (name) {\n            name = name.split('/');\n            lastIndex = name.length - 1;\n\n            // If wanting node ID compatibility, strip .js from end\n            // of IDs. Have to do this here, and not in nameToUrl\n            // because node allows either .js or non .js to map\n            // to same file.\n            if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {\n                name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');\n            }\n\n            // Starts with a '.' so need the baseName\n            if (name[0].charAt(0) === '.' && baseParts) {\n                //Convert baseName to array, and lop off the last part,\n                //so that . matches that 'directory' and not name of the baseName's\n                //module. For instance, baseName of 'one/two/three', maps to\n                //'one/two/three.js', but we want the directory, 'one/two' for\n                //this normalization.\n                normalizedBaseParts = baseParts.slice(0, baseParts.length - 1);\n                name = normalizedBaseParts.concat(name);\n            }\n\n            //start trimDots\n            for (i = 0; i < name.length; i++) {\n                part = name[i];\n                if (part === '.') {\n                    name.splice(i, 1);\n                    i -= 1;\n                } else if (part === '..') {\n                    // If at the start, or previous value is still ..,\n                    // keep them so that when converted to a path it may\n                    // still work when converted to a path, even though\n                    // as an ID it is less than ideal. In larger point\n                    // releases, may be better to just kick out an error.\n                    if (i === 0 || (i === 1 && name[2] === '..') || name[i - 1] === '..') {\n                        continue;\n                    } else if (i > 0) {\n                        name.splice(i - 1, 2);\n                        i -= 2;\n                    }\n                }\n            }\n            //end trimDots\n\n            name = name.join('/');\n        }\n\n        //Apply map config if available.\n        if ((baseParts || starMap) && map) {\n            nameParts = name.split('/');\n\n            for (i = nameParts.length; i > 0; i -= 1) {\n                nameSegment = nameParts.slice(0, i).join(\"/\");\n\n                if (baseParts) {\n                    //Find the longest baseName segment match in the config.\n                    //So, do joins on the biggest to smallest lengths of baseParts.\n                    for (j = baseParts.length; j > 0; j -= 1) {\n                        mapValue = map[baseParts.slice(0, j).join('/')];\n\n                        //baseName segment has  config, find if it has one for\n                        //this name.\n                        if (mapValue) {\n                            mapValue = mapValue[nameSegment];\n                            if (mapValue) {\n                                //Match, update name to the new value.\n                                foundMap = mapValue;\n                                foundI = i;\n                                break;\n                            }\n                        }\n                    }\n                }\n\n                if (foundMap) {\n                    break;\n                }\n\n                //Check for a star map match, but just hold on to it,\n                //if there is a shorter segment match later in a matching\n                //config, then favor over this star map.\n                if (!foundStarMap && starMap && starMap[nameSegment]) {\n                    foundStarMap = starMap[nameSegment];\n                    starI = i;\n                }\n            }\n\n            if (!foundMap && foundStarMap) {\n                foundMap = foundStarMap;\n                foundI = starI;\n            }\n\n            if (foundMap) {\n                nameParts.splice(0, foundI, foundMap);\n                name = nameParts.join('/');\n            }\n        }\n\n        return name;\n    }\n\n    function makeRequire(relName, forceSync) {\n        return function () {\n            //A version of a require function that passes a moduleName\n            //value for items that may need to\n            //look up paths relative to the moduleName\n            var args = aps.call(arguments, 0);\n\n            //If first arg is not require('string'), and there is only\n            //one arg, it is the array form without a callback. Insert\n            //a null so that the following concat is correct.\n            if (typeof args[0] !== 'string' && args.length === 1) {\n                args.push(null);\n            }\n            return req.apply(undef, args.concat([relName, forceSync]));\n        };\n    }\n\n    function makeNormalize(relName) {\n        return function (name) {\n            return normalize(name, relName);\n        };\n    }\n\n    function makeLoad(depName) {\n        return function (value) {\n            defined[depName] = value;\n        };\n    }\n\n    function callDep(name) {\n        if (hasProp(waiting, name)) {\n            var args = waiting[name];\n            delete waiting[name];\n            defining[name] = true;\n            main.apply(undef, args);\n        }\n\n        if (!hasProp(defined, name) && !hasProp(defining, name)) {\n            throw new Error('No ' + name);\n        }\n        return defined[name];\n    }\n\n    //Turns a plugin!resource to [plugin, resource]\n    //with the plugin being undefined if the name\n    //did not have a plugin prefix.\n    function splitPrefix(name) {\n        var prefix,\n            index = name ? name.indexOf('!') : -1;\n        if (index > -1) {\n            prefix = name.substring(0, index);\n            name = name.substring(index + 1, name.length);\n        }\n        return [prefix, name];\n    }\n\n    //Creates a parts array for a relName where first part is plugin ID,\n    //second part is resource ID. Assumes relName has already been normalized.\n    function makeRelParts(relName) {\n        return relName ? splitPrefix(relName) : [];\n    }\n\n    /**\n     * Makes a name map, normalizing the name, and using a plugin\n     * for normalization if necessary. Grabs a ref to plugin\n     * too, as an optimization.\n     */\n    makeMap = function (name, relParts) {\n        var plugin,\n            parts = splitPrefix(name),\n            prefix = parts[0],\n            relResourceName = relParts[1];\n\n        name = parts[1];\n\n        if (prefix) {\n            prefix = normalize(prefix, relResourceName);\n            plugin = callDep(prefix);\n        }\n\n        //Normalize according\n        if (prefix) {\n            if (plugin && plugin.normalize) {\n                name = plugin.normalize(name, makeNormalize(relResourceName));\n            } else {\n                name = normalize(name, relResourceName);\n            }\n        } else {\n            name = normalize(name, relResourceName);\n            parts = splitPrefix(name);\n            prefix = parts[0];\n            name = parts[1];\n            if (prefix) {\n                plugin = callDep(prefix);\n            }\n        }\n\n        //Using ridiculous property names for space reasons\n        return {\n            f: prefix ? prefix + '!' + name : name, //fullName\n            n: name,\n            pr: prefix,\n            p: plugin\n        };\n    };\n\n    function makeConfig(name) {\n        return function () {\n            return (config && config.config && config.config[name]) || {};\n        };\n    }\n\n    handlers = {\n        require: function (name) {\n            return makeRequire(name);\n        },\n        exports: function (name) {\n            var e = defined[name];\n            if (typeof e !== 'undefined') {\n                return e;\n            } else {\n                return (defined[name] = {});\n            }\n        },\n        module: function (name) {\n            return {\n                id: name,\n                uri: '',\n                exports: defined[name],\n                config: makeConfig(name)\n            };\n        }\n    };\n\n    main = function (name, deps, callback, relName) {\n        var cjsModule, depName, ret, map, i, relParts,\n            args = [],\n            callbackType = typeof callback,\n            usingExports;\n\n        //Use name if no relName\n        relName = relName || name;\n        relParts = makeRelParts(relName);\n\n        //Call the callback to define the module, if necessary.\n        if (callbackType === 'undefined' || callbackType === 'function') {\n            //Pull out the defined dependencies and pass the ordered\n            //values to the callback.\n            //Default to [require, exports, module] if no deps\n            deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps;\n            for (i = 0; i < deps.length; i += 1) {\n                map = makeMap(deps[i], relParts);\n                depName = map.f;\n\n                //Fast path CommonJS standard dependencies.\n                if (depName === \"require\") {\n                    args[i] = handlers.require(name);\n                } else if (depName === \"exports\") {\n                    //CommonJS module spec 1.1\n                    args[i] = handlers.exports(name);\n                    usingExports = true;\n                } else if (depName === \"module\") {\n                    //CommonJS module spec 1.1\n                    cjsModule = args[i] = handlers.module(name);\n                } else if (hasProp(defined, depName) ||\n                           hasProp(waiting, depName) ||\n                           hasProp(defining, depName)) {\n                    args[i] = callDep(depName);\n                } else if (map.p) {\n                    map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {});\n                    args[i] = defined[depName];\n                } else {\n                    throw new Error(name + ' missing ' + depName);\n                }\n            }\n\n            ret = callback ? callback.apply(defined[name], args) : undefined;\n\n            if (name) {\n                //If setting exports via \"module\" is in play,\n                //favor that over return value and exports. After that,\n                //favor a non-undefined return value over exports use.\n                if (cjsModule && cjsModule.exports !== undef &&\n                        cjsModule.exports !== defined[name]) {\n                    defined[name] = cjsModule.exports;\n                } else if (ret !== undef || !usingExports) {\n                    //Use the return value from the function.\n                    defined[name] = ret;\n                }\n            }\n        } else if (name) {\n            //May just be an object definition for the module. Only\n            //worry about defining if have a module name.\n            defined[name] = callback;\n        }\n    };\n\n    requirejs = require = req = function (deps, callback, relName, forceSync, alt) {\n        if (typeof deps === \"string\") {\n            if (handlers[deps]) {\n                //callback in this case is really relName\n                return handlers[deps](callback);\n            }\n            //Just return the module wanted. In this scenario, the\n            //deps arg is the module name, and second arg (if passed)\n            //is just the relName.\n            //Normalize module name, if it contains . or ..\n            return callDep(makeMap(deps, makeRelParts(callback)).f);\n        } else if (!deps.splice) {\n            //deps is a config object, not an array.\n            config = deps;\n            if (config.deps) {\n                req(config.deps, config.callback);\n            }\n            if (!callback) {\n                return;\n            }\n\n            if (callback.splice) {\n                //callback is an array, which means it is a dependency list.\n                //Adjust args if there are dependencies\n                deps = callback;\n                callback = relName;\n                relName = null;\n            } else {\n                deps = undef;\n            }\n        }\n\n        //Support require(['a'])\n        callback = callback || function () {};\n\n        //If relName is a function, it is an errback handler,\n        //so remove it.\n        if (typeof relName === 'function') {\n            relName = forceSync;\n            forceSync = alt;\n        }\n\n        //Simulate async callback;\n        if (forceSync) {\n            main(undef, deps, callback, relName);\n        } else {\n            //Using a non-zero value because of concern for what old browsers\n            //do, and latest browsers \"upgrade\" to 4 if lower value is used:\n            //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout:\n            //If want a value immediately, use require('id') instead -- something\n            //that works in almond on the global level, but not guaranteed and\n            //unlikely to work in other AMD implementations.\n            setTimeout(function () {\n                main(undef, deps, callback, relName);\n            }, 4);\n        }\n\n        return req;\n    };\n\n    /**\n     * Just drops the config on the floor, but returns req in case\n     * the config return value is used.\n     */\n    req.config = function (cfg) {\n        return req(cfg);\n    };\n\n    /**\n     * Expose module registry for debugging and tooling\n     */\n    requirejs._defined = defined;\n\n    define = function (name, deps, callback) {\n        if (typeof name !== 'string') {\n            throw new Error('See almond README: incorrect module build, no module name');\n        }\n\n        //This module may not have dependencies\n        if (!deps.splice) {\n            //deps is not an array, so probably means\n            //an object literal or factory function for\n            //the value. Adjust args.\n            callback = deps;\n            deps = [];\n        }\n\n        if (!hasProp(defined, name) && !hasProp(waiting, name)) {\n            waiting[name] = [name, deps, callback];\n        }\n    };\n\n    define.amd = {\n        jQuery: true\n    };\n}());\n\nS2.requirejs = requirejs;S2.require = require;S2.define = define;\n}\n}());\nS2.define(\"almond\", function(){});\n\n/* global jQuery:false, $:false */\nS2.define('jquery',[],function () {\n  var _$ = jQuery || $;\n\n  if (_$ == null && console && console.error) {\n    console.error(\n      'Select2: An instance of jQuery or a jQuery-compatible library was not ' +\n      'found. Make sure that you are including jQuery before Select2 on your ' +\n      'web page.'\n    );\n  }\n\n  return _$;\n});\n\nS2.define('select2/utils',[\n  'jquery'\n], function ($) {\n  var Utils = {};\n\n  Utils.Extend = function (ChildClass, SuperClass) {\n    var __hasProp = {}.hasOwnProperty;\n\n    function BaseConstructor () {\n      this.constructor = ChildClass;\n    }\n\n    for (var key in SuperClass) {\n      if (__hasProp.call(SuperClass, key)) {\n        ChildClass[key] = SuperClass[key];\n      }\n    }\n\n    BaseConstructor.prototype = SuperClass.prototype;\n    ChildClass.prototype = new BaseConstructor();\n    ChildClass.__super__ = SuperClass.prototype;\n\n    return ChildClass;\n  };\n\n  function getMethods (theClass) {\n    var proto = theClass.prototype;\n\n    var methods = [];\n\n    for (var methodName in proto) {\n      var m = proto[methodName];\n\n      if (typeof m !== 'function') {\n        continue;\n      }\n\n      if (methodName === 'constructor') {\n        continue;\n      }\n\n      methods.push(methodName);\n    }\n\n    return methods;\n  }\n\n  Utils.Decorate = function (SuperClass, DecoratorClass) {\n    var decoratedMethods = getMethods(DecoratorClass);\n    var superMethods = getMethods(SuperClass);\n\n    function DecoratedClass () {\n      var unshift = Array.prototype.unshift;\n\n      var argCount = DecoratorClass.prototype.constructor.length;\n\n      var calledConstructor = SuperClass.prototype.constructor;\n\n      if (argCount > 0) {\n        unshift.call(arguments, SuperClass.prototype.constructor);\n\n        calledConstructor = DecoratorClass.prototype.constructor;\n      }\n\n      calledConstructor.apply(this, arguments);\n    }\n\n    DecoratorClass.displayName = SuperClass.displayName;\n\n    function ctr () {\n      this.constructor = DecoratedClass;\n    }\n\n    DecoratedClass.prototype = new ctr();\n\n    for (var m = 0; m < superMethods.length; m++) {\n      var superMethod = superMethods[m];\n\n      DecoratedClass.prototype[superMethod] =\n        SuperClass.prototype[superMethod];\n    }\n\n    var calledMethod = function (methodName) {\n      // Stub out the original method if it's not decorating an actual method\n      var originalMethod = function () {};\n\n      if (methodName in DecoratedClass.prototype) {\n        originalMethod = DecoratedClass.prototype[methodName];\n      }\n\n      var decoratedMethod = DecoratorClass.prototype[methodName];\n\n      return function () {\n        var unshift = Array.prototype.unshift;\n\n        unshift.call(arguments, originalMethod);\n\n        return decoratedMethod.apply(this, arguments);\n      };\n    };\n\n    for (var d = 0; d < decoratedMethods.length; d++) {\n      var decoratedMethod = decoratedMethods[d];\n\n      DecoratedClass.prototype[decoratedMethod] = calledMethod(decoratedMethod);\n    }\n\n    return DecoratedClass;\n  };\n\n  var Observable = function () {\n    this.listeners = {};\n  };\n\n  Observable.prototype.on = function (event, callback) {\n    this.listeners = this.listeners || {};\n\n    if (event in this.listeners) {\n      this.listeners[event].push(callback);\n    } else {\n      this.listeners[event] = [callback];\n    }\n  };\n\n  Observable.prototype.trigger = function (event) {\n    var slice = Array.prototype.slice;\n    var params = slice.call(arguments, 1);\n\n    this.listeners = this.listeners || {};\n\n    // Params should always come in as an array\n    if (params == null) {\n      params = [];\n    }\n\n    // If there are no arguments to the event, use a temporary object\n    if (params.length === 0) {\n      params.push({});\n    }\n\n    // Set the `_type` of the first object to the event\n    params[0]._type = event;\n\n    if (event in this.listeners) {\n      this.invoke(this.listeners[event], slice.call(arguments, 1));\n    }\n\n    if ('*' in this.listeners) {\n      this.invoke(this.listeners['*'], arguments);\n    }\n  };\n\n  Observable.prototype.invoke = function (listeners, params) {\n    for (var i = 0, len = listeners.length; i < len; i++) {\n      listeners[i].apply(this, params);\n    }\n  };\n\n  Utils.Observable = Observable;\n\n  Utils.generateChars = function (length) {\n    var chars = '';\n\n    for (var i = 0; i < length; i++) {\n      var randomChar = Math.floor(Math.random() * 36);\n      chars += randomChar.toString(36);\n    }\n\n    return chars;\n  };\n\n  Utils.bind = function (func, context) {\n    return function () {\n      func.apply(context, arguments);\n    };\n  };\n\n  Utils._convertData = function (data) {\n    for (var originalKey in data) {\n      var keys = originalKey.split('-');\n\n      var dataLevel = data;\n\n      if (keys.length === 1) {\n        continue;\n      }\n\n      for (var k = 0; k < keys.length; k++) {\n        var key = keys[k];\n\n        // Lowercase the first letter\n        // By default, dash-separated becomes camelCase\n        key = key.substring(0, 1).toLowerCase() + key.substring(1);\n\n        if (!(key in dataLevel)) {\n          dataLevel[key] = {};\n        }\n\n        if (k == keys.length - 1) {\n          dataLevel[key] = data[originalKey];\n        }\n\n        dataLevel = dataLevel[key];\n      }\n\n      delete data[originalKey];\n    }\n\n    return data;\n  };\n\n  Utils.hasScroll = function (index, el) {\n    // Adapted from the function created by @ShadowScripter\n    // and adapted by @BillBarry on the Stack Exchange Code Review website.\n    // The original code can be found at\n    // http://codereview.stackexchange.com/q/13338\n    // and was designed to be used with the Sizzle selector engine.\n\n    var $el = $(el);\n    var overflowX = el.style.overflowX;\n    var overflowY = el.style.overflowY;\n\n    //Check both x and y declarations\n    if (overflowX === overflowY &&\n        (overflowY === 'hidden' || overflowY === 'visible')) {\n      return false;\n    }\n\n    if (overflowX === 'scroll' || overflowY === 'scroll') {\n      return true;\n    }\n\n    return ($el.innerHeight() < el.scrollHeight ||\n      $el.innerWidth() < el.scrollWidth);\n  };\n\n  Utils.escapeMarkup = function (markup) {\n    var replaceMap = {\n      '\\\\': '&#92;',\n      '&': '&amp;',\n      '<': '&lt;',\n      '>': '&gt;',\n      '\"': '&quot;',\n      '\\'': '&#39;',\n      '/': '&#47;'\n    };\n\n    // Do not try to escape the markup if it's not a string\n    if (typeof markup !== 'string') {\n      return markup;\n    }\n\n    return String(markup).replace(/[&<>\"'\\/\\\\]/g, function (match) {\n      return replaceMap[match];\n    });\n  };\n\n  // Append an array of jQuery nodes to a given element.\n  Utils.appendMany = function ($element, $nodes) {\n    // jQuery 1.7.x does not support $.fn.append() with an array\n    // Fall back to a jQuery object collection using $.fn.add()\n    if ($.fn.jquery.substr(0, 3) === '1.7') {\n      var $jqNodes = $();\n\n      $.map($nodes, function (node) {\n        $jqNodes = $jqNodes.add(node);\n      });\n\n      $nodes = $jqNodes;\n    }\n\n    $element.append($nodes);\n  };\n\n  // Cache objects in Utils.__cache instead of $.data (see #4346)\n  Utils.__cache = {};\n\n  var id = 0;\n  Utils.GetUniqueElementId = function (element) {\n    // Get a unique element Id. If element has no id,\n    // creates a new unique number, stores it in the id\n    // attribute and returns the new id.\n    // If an id already exists, it simply returns it.\n\n    var select2Id = element.getAttribute('data-select2-id');\n    if (select2Id == null) {\n      // If element has id, use it.\n      if (element.id) {\n        select2Id = element.id;\n        element.setAttribute('data-select2-id', select2Id);\n      } else {\n        element.setAttribute('data-select2-id', ++id);\n        select2Id = id.toString();\n      }\n    }\n    return select2Id;\n  };\n\n  Utils.StoreData = function (element, name, value) {\n    // Stores an item in the cache for a specified element.\n    // name is the cache key.\n    var id = Utils.GetUniqueElementId(element);\n    if (!Utils.__cache[id]) {\n      Utils.__cache[id] = {};\n    }\n\n    Utils.__cache[id][name] = value;\n  };\n\n  Utils.GetData = function (element, name) {\n    // Retrieves a value from the cache by its key (name)\n    // name is optional. If no name specified, return\n    // all cache items for the specified element.\n    // and for a specified element.\n    var id = Utils.GetUniqueElementId(element);\n    if (name) {\n      if (Utils.__cache[id]) {\n        if (Utils.__cache[id][name] != null) {\n          return Utils.__cache[id][name];\n        }\n        return $(element).data(name); // Fallback to HTML5 data attribs.\n      }\n      return $(element).data(name); // Fallback to HTML5 data attribs.\n    } else {\n      return Utils.__cache[id];\n    }\n  };\n\n  Utils.RemoveData = function (element) {\n    // Removes all cached items for a specified element.\n    var id = Utils.GetUniqueElementId(element);\n    if (Utils.__cache[id] != null) {\n      delete Utils.__cache[id];\n    }\n\n    element.removeAttribute('data-select2-id');\n  };\n\n  return Utils;\n});\n\nS2.define('select2/results',[\n  'jquery',\n  './utils'\n], function ($, Utils) {\n  function Results ($element, options, dataAdapter) {\n    this.$element = $element;\n    this.data = dataAdapter;\n    this.options = options;\n\n    Results.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(Results, Utils.Observable);\n\n  Results.prototype.render = function () {\n    var $results = $(\n      '<ul class=\"select2-results__options\" role=\"listbox\"></ul>'\n    );\n\n    if (this.options.get('multiple')) {\n      $results.attr('aria-multiselectable', 'true');\n    }\n\n    this.$results = $results;\n\n    return $results;\n  };\n\n  Results.prototype.clear = function () {\n    this.$results.empty();\n  };\n\n  Results.prototype.displayMessage = function (params) {\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    this.clear();\n    this.hideLoading();\n\n    var $message = $(\n      '<li role=\"alert\" aria-live=\"assertive\"' +\n      ' class=\"select2-results__option\"></li>'\n    );\n\n    var message = this.options.get('translations').get(params.message);\n\n    $message.append(\n      escapeMarkup(\n        message(params.args)\n      )\n    );\n\n    $message[0].className += ' select2-results__message';\n\n    this.$results.append($message);\n  };\n\n  Results.prototype.hideMessages = function () {\n    this.$results.find('.select2-results__message').remove();\n  };\n\n  Results.prototype.append = function (data) {\n    this.hideLoading();\n\n    var $options = [];\n\n    if (data.results == null || data.results.length === 0) {\n      if (this.$results.children().length === 0) {\n        this.trigger('results:message', {\n          message: 'noResults'\n        });\n      }\n\n      return;\n    }\n\n    data.results = this.sort(data.results);\n\n    for (var d = 0; d < data.results.length; d++) {\n      var item = data.results[d];\n\n      var $option = this.option(item);\n\n      $options.push($option);\n    }\n\n    this.$results.append($options);\n  };\n\n  Results.prototype.position = function ($results, $dropdown) {\n    var $resultsContainer = $dropdown.find('.select2-results');\n    $resultsContainer.append($results);\n  };\n\n  Results.prototype.sort = function (data) {\n    var sorter = this.options.get('sorter');\n\n    return sorter(data);\n  };\n\n  Results.prototype.highlightFirstItem = function () {\n    var $options = this.$results\n      .find('.select2-results__option[aria-selected]');\n\n    var $selected = $options.filter('[aria-selected=true]');\n\n    // Check if there are any selected options\n    if ($selected.length > 0) {\n      // If there are selected options, highlight the first\n      $selected.first().trigger('mouseenter');\n    } else {\n      // If there are no selected options, highlight the first option\n      // in the dropdown\n      $options.first().trigger('mouseenter');\n    }\n\n    this.ensureHighlightVisible();\n  };\n\n  Results.prototype.setClasses = function () {\n    var self = this;\n\n    this.data.current(function (selected) {\n      var selectedIds = $.map(selected, function (s) {\n        return s.id.toString();\n      });\n\n      var $options = self.$results\n        .find('.select2-results__option[aria-selected]');\n\n      $options.each(function () {\n        var $option = $(this);\n\n        var item = Utils.GetData(this, 'data');\n\n        // id needs to be converted to a string when comparing\n        var id = '' + item.id;\n\n        if ((item.element != null && item.element.selected) ||\n            (item.element == null && $.inArray(id, selectedIds) > -1)) {\n          $option.attr('aria-selected', 'true');\n        } else {\n          $option.attr('aria-selected', 'false');\n        }\n      });\n\n    });\n  };\n\n  Results.prototype.showLoading = function (params) {\n    this.hideLoading();\n\n    var loadingMore = this.options.get('translations').get('searching');\n\n    var loading = {\n      disabled: true,\n      loading: true,\n      text: loadingMore(params)\n    };\n    var $loading = this.option(loading);\n    $loading.className += ' loading-results';\n\n    this.$results.prepend($loading);\n  };\n\n  Results.prototype.hideLoading = function () {\n    this.$results.find('.loading-results').remove();\n  };\n\n  Results.prototype.option = function (data) {\n    var option = document.createElement('li');\n    option.className = 'select2-results__option';\n\n    var attrs = {\n      'role': 'option',\n      'aria-selected': 'false'\n    };\n\n    var matches = window.Element.prototype.matches ||\n      window.Element.prototype.msMatchesSelector ||\n      window.Element.prototype.webkitMatchesSelector;\n\n    if ((data.element != null && matches.call(data.element, ':disabled')) ||\n        (data.element == null && data.disabled)) {\n      delete attrs['aria-selected'];\n      attrs['aria-disabled'] = 'true';\n    }\n\n    if (data.id == null) {\n      delete attrs['aria-selected'];\n    }\n\n    if (data._resultId != null) {\n      option.id = data._resultId;\n    }\n\n    if (data.title) {\n      option.title = data.title;\n    }\n\n    if (data.children) {\n      attrs.role = 'group';\n      attrs['aria-label'] = data.text;\n      delete attrs['aria-selected'];\n    }\n\n    for (var attr in attrs) {\n      var val = attrs[attr];\n\n      option.setAttribute(attr, val);\n    }\n\n    if (data.children) {\n      var $option = $(option);\n\n      var label = document.createElement('strong');\n      label.className = 'select2-results__group';\n\n      var $label = $(label);\n      this.template(data, label);\n\n      var $children = [];\n\n      for (var c = 0; c < data.children.length; c++) {\n        var child = data.children[c];\n\n        var $child = this.option(child);\n\n        $children.push($child);\n      }\n\n      var $childrenContainer = $('<ul></ul>', {\n        'class': 'select2-results__options select2-results__options--nested'\n      });\n\n      $childrenContainer.append($children);\n\n      $option.append(label);\n      $option.append($childrenContainer);\n    } else {\n      this.template(data, option);\n    }\n\n    Utils.StoreData(option, 'data', data);\n\n    return option;\n  };\n\n  Results.prototype.bind = function (container, $container) {\n    var self = this;\n\n    var id = container.id + '-results';\n\n    this.$results.attr('id', id);\n\n    container.on('results:all', function (params) {\n      self.clear();\n      self.append(params.data);\n\n      if (container.isOpen()) {\n        self.setClasses();\n        self.highlightFirstItem();\n      }\n    });\n\n    container.on('results:append', function (params) {\n      self.append(params.data);\n\n      if (container.isOpen()) {\n        self.setClasses();\n      }\n    });\n\n    container.on('query', function (params) {\n      self.hideMessages();\n      self.showLoading(params);\n    });\n\n    container.on('select', function () {\n      if (!container.isOpen()) {\n        return;\n      }\n\n      self.setClasses();\n\n      if (self.options.get('scrollAfterSelect')) {\n        self.highlightFirstItem();\n      }\n    });\n\n    container.on('unselect', function () {\n      if (!container.isOpen()) {\n        return;\n      }\n\n      self.setClasses();\n\n      if (self.options.get('scrollAfterSelect')) {\n        self.highlightFirstItem();\n      }\n    });\n\n    container.on('open', function () {\n      // When the dropdown is open, aria-expended=\"true\"\n      self.$results.attr('aria-expanded', 'true');\n      self.$results.attr('aria-hidden', 'false');\n\n      self.setClasses();\n      self.ensureHighlightVisible();\n    });\n\n    container.on('close', function () {\n      // When the dropdown is closed, aria-expended=\"false\"\n      self.$results.attr('aria-expanded', 'false');\n      self.$results.attr('aria-hidden', 'true');\n      self.$results.removeAttr('aria-activedescendant');\n    });\n\n    container.on('results:toggle', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      if ($highlighted.length === 0) {\n        return;\n      }\n\n      $highlighted.trigger('mouseup');\n    });\n\n    container.on('results:select', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      if ($highlighted.length === 0) {\n        return;\n      }\n\n      var data = Utils.GetData($highlighted[0], 'data');\n\n      if ($highlighted.attr('aria-selected') == 'true') {\n        self.trigger('close', {});\n      } else {\n        self.trigger('select', {\n          data: data\n        });\n      }\n    });\n\n    container.on('results:previous', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      var $options = self.$results.find('[aria-selected]');\n\n      var currentIndex = $options.index($highlighted);\n\n      // If we are already at the top, don't move further\n      // If no options, currentIndex will be -1\n      if (currentIndex <= 0) {\n        return;\n      }\n\n      var nextIndex = currentIndex - 1;\n\n      // If none are highlighted, highlight the first\n      if ($highlighted.length === 0) {\n        nextIndex = 0;\n      }\n\n      var $next = $options.eq(nextIndex);\n\n      $next.trigger('mouseenter');\n\n      var currentOffset = self.$results.offset().top;\n      var nextTop = $next.offset().top;\n      var nextOffset = self.$results.scrollTop() + (nextTop - currentOffset);\n\n      if (nextIndex === 0) {\n        self.$results.scrollTop(0);\n      } else if (nextTop - currentOffset < 0) {\n        self.$results.scrollTop(nextOffset);\n      }\n    });\n\n    container.on('results:next', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      var $options = self.$results.find('[aria-selected]');\n\n      var currentIndex = $options.index($highlighted);\n\n      var nextIndex = currentIndex + 1;\n\n      // If we are at the last option, stay there\n      if (nextIndex >= $options.length) {\n        return;\n      }\n\n      var $next = $options.eq(nextIndex);\n\n      $next.trigger('mouseenter');\n\n      var currentOffset = self.$results.offset().top +\n        self.$results.outerHeight(false);\n      var nextBottom = $next.offset().top + $next.outerHeight(false);\n      var nextOffset = self.$results.scrollTop() + nextBottom - currentOffset;\n\n      if (nextIndex === 0) {\n        self.$results.scrollTop(0);\n      } else if (nextBottom > currentOffset) {\n        self.$results.scrollTop(nextOffset);\n      }\n    });\n\n    container.on('results:focus', function (params) {\n      params.element.addClass('select2-results__option--highlighted');\n    });\n\n    container.on('results:message', function (params) {\n      self.displayMessage(params);\n    });\n\n    if ($.fn.mousewheel) {\n      this.$results.on('mousewheel', function (e) {\n        var top = self.$results.scrollTop();\n\n        var bottom = self.$results.get(0).scrollHeight - top + e.deltaY;\n\n        var isAtTop = e.deltaY > 0 && top - e.deltaY <= 0;\n        var isAtBottom = e.deltaY < 0 && bottom <= self.$results.height();\n\n        if (isAtTop) {\n          self.$results.scrollTop(0);\n\n          e.preventDefault();\n          e.stopPropagation();\n        } else if (isAtBottom) {\n          self.$results.scrollTop(\n            self.$results.get(0).scrollHeight - self.$results.height()\n          );\n\n          e.preventDefault();\n          e.stopPropagation();\n        }\n      });\n    }\n\n    this.$results.on('mouseup', '.select2-results__option[aria-selected]',\n      function (evt) {\n      var $this = $(this);\n\n      var data = Utils.GetData(this, 'data');\n\n      if ($this.attr('aria-selected') === 'true') {\n        if (self.options.get('multiple')) {\n          self.trigger('unselect', {\n            originalEvent: evt,\n            data: data\n          });\n        } else {\n          self.trigger('close', {});\n        }\n\n        return;\n      }\n\n      self.trigger('select', {\n        originalEvent: evt,\n        data: data\n      });\n    });\n\n    this.$results.on('mouseenter', '.select2-results__option[aria-selected]',\n      function (evt) {\n      var data = Utils.GetData(this, 'data');\n\n      self.getHighlightedResults()\n          .removeClass('select2-results__option--highlighted');\n\n      self.trigger('results:focus', {\n        data: data,\n        element: $(this)\n      });\n    });\n  };\n\n  Results.prototype.getHighlightedResults = function () {\n    var $highlighted = this.$results\n    .find('.select2-results__option--highlighted');\n\n    return $highlighted;\n  };\n\n  Results.prototype.destroy = function () {\n    this.$results.remove();\n  };\n\n  Results.prototype.ensureHighlightVisible = function () {\n    var $highlighted = this.getHighlightedResults();\n\n    if ($highlighted.length === 0) {\n      return;\n    }\n\n    var $options = this.$results.find('[aria-selected]');\n\n    var currentIndex = $options.index($highlighted);\n\n    var currentOffset = this.$results.offset().top;\n    var nextTop = $highlighted.offset().top;\n    var nextOffset = this.$results.scrollTop() + (nextTop - currentOffset);\n\n    var offsetDelta = nextTop - currentOffset;\n    nextOffset -= $highlighted.outerHeight(false) * 2;\n\n    if (currentIndex <= 2) {\n      this.$results.scrollTop(0);\n    } else if (offsetDelta > this.$results.outerHeight() || offsetDelta < 0) {\n      this.$results.scrollTop(nextOffset);\n    }\n  };\n\n  Results.prototype.template = function (result, container) {\n    var template = this.options.get('templateResult');\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    var content = template(result, container);\n\n    if (content == null) {\n      container.style.display = 'none';\n    } else if (typeof content === 'string') {\n      container.innerHTML = escapeMarkup(content);\n    } else {\n      $(container).append(content);\n    }\n  };\n\n  return Results;\n});\n\nS2.define('select2/keys',[\n\n], function () {\n  var KEYS = {\n    BACKSPACE: 8,\n    TAB: 9,\n    ENTER: 13,\n    SHIFT: 16,\n    CTRL: 17,\n    ALT: 18,\n    ESC: 27,\n    SPACE: 32,\n    PAGE_UP: 33,\n    PAGE_DOWN: 34,\n    END: 35,\n    HOME: 36,\n    LEFT: 37,\n    UP: 38,\n    RIGHT: 39,\n    DOWN: 40,\n    DELETE: 46\n  };\n\n  return KEYS;\n});\n\nS2.define('select2/selection/base',[\n  'jquery',\n  '../utils',\n  '../keys'\n], function ($, Utils, KEYS) {\n  function BaseSelection ($element, options) {\n    this.$element = $element;\n    this.options = options;\n\n    BaseSelection.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(BaseSelection, Utils.Observable);\n\n  BaseSelection.prototype.render = function () {\n    var $selection = $(\n      '<span class=\"select2-selection\" role=\"combobox\" ' +\n      ' aria-haspopup=\"true\" aria-expanded=\"false\">' +\n      '</span>'\n    );\n\n    this._tabindex = 0;\n\n    if (Utils.GetData(this.$element[0], 'old-tabindex') != null) {\n      this._tabindex = Utils.GetData(this.$element[0], 'old-tabindex');\n    } else if (this.$element.attr('tabindex') != null) {\n      this._tabindex = this.$element.attr('tabindex');\n    }\n\n    $selection.attr('title', this.$element.attr('title'));\n    $selection.attr('tabindex', this._tabindex);\n    $selection.attr('aria-disabled', 'false');\n\n    this.$selection = $selection;\n\n    return $selection;\n  };\n\n  BaseSelection.prototype.bind = function (container, $container) {\n    var self = this;\n\n    var resultsId = container.id + '-results';\n\n    this.container = container;\n\n    this.$selection.on('focus', function (evt) {\n      self.trigger('focus', evt);\n    });\n\n    this.$selection.on('blur', function (evt) {\n      self._handleBlur(evt);\n    });\n\n    this.$selection.on('keydown', function (evt) {\n      self.trigger('keypress', evt);\n\n      if (evt.which === KEYS.SPACE) {\n        evt.preventDefault();\n      }\n    });\n\n    container.on('results:focus', function (params) {\n      self.$selection.attr('aria-activedescendant', params.data._resultId);\n    });\n\n    container.on('selection:update', function (params) {\n      self.update(params.data);\n    });\n\n    container.on('open', function () {\n      // When the dropdown is open, aria-expanded=\"true\"\n      self.$selection.attr('aria-expanded', 'true');\n      self.$selection.attr('aria-owns', resultsId);\n\n      self._attachCloseHandler(container);\n    });\n\n    container.on('close', function () {\n      // When the dropdown is closed, aria-expanded=\"false\"\n      self.$selection.attr('aria-expanded', 'false');\n      self.$selection.removeAttr('aria-activedescendant');\n      self.$selection.removeAttr('aria-owns');\n\n      self.$selection.trigger('focus');\n\n      self._detachCloseHandler(container);\n    });\n\n    container.on('enable', function () {\n      self.$selection.attr('tabindex', self._tabindex);\n      self.$selection.attr('aria-disabled', 'false');\n    });\n\n    container.on('disable', function () {\n      self.$selection.attr('tabindex', '-1');\n      self.$selection.attr('aria-disabled', 'true');\n    });\n  };\n\n  BaseSelection.prototype._handleBlur = function (evt) {\n    var self = this;\n\n    // This needs to be delayed as the active element is the body when the tab\n    // key is pressed, possibly along with others.\n    window.setTimeout(function () {\n      // Don't trigger `blur` if the focus is still in the selection\n      if (\n        (document.activeElement == self.$selection[0]) ||\n        ($.contains(self.$selection[0], document.activeElement))\n      ) {\n        return;\n      }\n\n      self.trigger('blur', evt);\n    }, 1);\n  };\n\n  BaseSelection.prototype._attachCloseHandler = function (container) {\n\n    $(document.body).on('mousedown.select2.' + container.id, function (e) {\n      var $target = $(e.target);\n\n      var $select = $target.closest('.select2');\n\n      var $all = $('.select2.select2-container--open');\n\n      $all.each(function () {\n        if (this == $select[0]) {\n          return;\n        }\n\n        var $element = Utils.GetData(this, 'element');\n\n        $element.select2('close');\n      });\n    });\n  };\n\n  BaseSelection.prototype._detachCloseHandler = function (container) {\n    $(document.body).off('mousedown.select2.' + container.id);\n  };\n\n  BaseSelection.prototype.position = function ($selection, $container) {\n    var $selectionContainer = $container.find('.selection');\n    $selectionContainer.append($selection);\n  };\n\n  BaseSelection.prototype.destroy = function () {\n    this._detachCloseHandler(this.container);\n  };\n\n  BaseSelection.prototype.update = function (data) {\n    throw new Error('The `update` method must be defined in child classes.');\n  };\n\n  /**\n   * Helper method to abstract the \"enabled\" (not \"disabled\") state of this\n   * object.\n   *\n   * @return {true} if the instance is not disabled.\n   * @return {false} if the instance is disabled.\n   */\n  BaseSelection.prototype.isEnabled = function () {\n    return !this.isDisabled();\n  };\n\n  /**\n   * Helper method to abstract the \"disabled\" state of this object.\n   *\n   * @return {true} if the disabled option is true.\n   * @return {false} if the disabled option is false.\n   */\n  BaseSelection.prototype.isDisabled = function () {\n    return this.options.get('disabled');\n  };\n\n  return BaseSelection;\n});\n\nS2.define('select2/selection/single',[\n  'jquery',\n  './base',\n  '../utils',\n  '../keys'\n], function ($, BaseSelection, Utils, KEYS) {\n  function SingleSelection () {\n    SingleSelection.__super__.constructor.apply(this, arguments);\n  }\n\n  Utils.Extend(SingleSelection, BaseSelection);\n\n  SingleSelection.prototype.render = function () {\n    var $selection = SingleSelection.__super__.render.call(this);\n\n    $selection.addClass('select2-selection--single');\n\n    $selection.html(\n      '<span class=\"select2-selection__rendered\"></span>' +\n      '<span class=\"select2-selection__arrow\" role=\"presentation\">' +\n        '<b role=\"presentation\"></b>' +\n      '</span>'\n    );\n\n    return $selection;\n  };\n\n  SingleSelection.prototype.bind = function (container, $container) {\n    var self = this;\n\n    SingleSelection.__super__.bind.apply(this, arguments);\n\n    var id = container.id + '-container';\n\n    this.$selection.find('.select2-selection__rendered')\n      .attr('id', id)\n      .attr('role', 'textbox')\n      .attr('aria-readonly', 'true');\n    this.$selection.attr('aria-labelledby', id);\n\n    this.$selection.on('mousedown', function (evt) {\n      // Only respond to left clicks\n      if (evt.which !== 1) {\n        return;\n      }\n\n      self.trigger('toggle', {\n        originalEvent: evt\n      });\n    });\n\n    this.$selection.on('focus', function (evt) {\n      // User focuses on the container\n    });\n\n    this.$selection.on('blur', function (evt) {\n      // User exits the container\n    });\n\n    container.on('focus', function (evt) {\n      if (!container.isOpen()) {\n        self.$selection.trigger('focus');\n      }\n    });\n  };\n\n  SingleSelection.prototype.clear = function () {\n    var $rendered = this.$selection.find('.select2-selection__rendered');\n    $rendered.empty();\n    $rendered.removeAttr('title'); // clear tooltip on empty\n  };\n\n  SingleSelection.prototype.display = function (data, container) {\n    var template = this.options.get('templateSelection');\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    return escapeMarkup(template(data, container));\n  };\n\n  SingleSelection.prototype.selectionContainer = function () {\n    return $('<span></span>');\n  };\n\n  SingleSelection.prototype.update = function (data) {\n    if (data.length === 0) {\n      this.clear();\n      return;\n    }\n\n    var selection = data[0];\n\n    var $rendered = this.$selection.find('.select2-selection__rendered');\n    var formatted = this.display(selection, $rendered);\n\n    $rendered.empty().append(formatted);\n\n    var title = selection.title || selection.text;\n\n    if (title) {\n      $rendered.attr('title', title);\n    } else {\n      $rendered.removeAttr('title');\n    }\n  };\n\n  return SingleSelection;\n});\n\nS2.define('select2/selection/multiple',[\n  'jquery',\n  './base',\n  '../utils'\n], function ($, BaseSelection, Utils) {\n  function MultipleSelection ($element, options) {\n    MultipleSelection.__super__.constructor.apply(this, arguments);\n  }\n\n  Utils.Extend(MultipleSelection, BaseSelection);\n\n  MultipleSelection.prototype.render = function () {\n    var $selection = MultipleSelection.__super__.render.call(this);\n\n    $selection.addClass('select2-selection--multiple');\n\n    $selection.html(\n      '<ul class=\"select2-selection__rendered\"></ul>'\n    );\n\n    return $selection;\n  };\n\n  MultipleSelection.prototype.bind = function (container, $container) {\n    var self = this;\n\n    MultipleSelection.__super__.bind.apply(this, arguments);\n\n    this.$selection.on('click', function (evt) {\n      self.trigger('toggle', {\n        originalEvent: evt\n      });\n    });\n\n    this.$selection.on(\n      'click',\n      '.select2-selection__choice__remove',\n      function (evt) {\n        // Ignore the event if it is disabled\n        if (self.isDisabled()) {\n          return;\n        }\n\n        var $remove = $(this);\n        var $selection = $remove.parent();\n\n        var data = Utils.GetData($selection[0], 'data');\n\n        self.trigger('unselect', {\n          originalEvent: evt,\n          data: data\n        });\n      }\n    );\n  };\n\n  MultipleSelection.prototype.clear = function () {\n    var $rendered = this.$selection.find('.select2-selection__rendered');\n    $rendered.empty();\n    $rendered.removeAttr('title');\n  };\n\n  MultipleSelection.prototype.display = function (data, container) {\n    var template = this.options.get('templateSelection');\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    return escapeMarkup(template(data, container));\n  };\n\n  MultipleSelection.prototype.selectionContainer = function () {\n    var $container = $(\n      '<li class=\"select2-selection__choice\">' +\n        '<span class=\"select2-selection__choice__remove\" role=\"presentation\">' +\n          '&times;' +\n        '</span>' +\n      '</li>'\n    );\n\n    return $container;\n  };\n\n  MultipleSelection.prototype.update = function (data) {\n    this.clear();\n\n    if (data.length === 0) {\n      return;\n    }\n\n    var $selections = [];\n\n    for (var d = 0; d < data.length; d++) {\n      var selection = data[d];\n\n      var $selection = this.selectionContainer();\n      var formatted = this.display(selection, $selection);\n\n      $selection.append(formatted);\n\n      var title = selection.title || selection.text;\n\n      if (title) {\n        $selection.attr('title', title);\n      }\n\n      Utils.StoreData($selection[0], 'data', selection);\n\n      $selections.push($selection);\n    }\n\n    var $rendered = this.$selection.find('.select2-selection__rendered');\n\n    Utils.appendMany($rendered, $selections);\n  };\n\n  return MultipleSelection;\n});\n\nS2.define('select2/selection/placeholder',[\n  '../utils'\n], function (Utils) {\n  function Placeholder (decorated, $element, options) {\n    this.placeholder = this.normalizePlaceholder(options.get('placeholder'));\n\n    decorated.call(this, $element, options);\n  }\n\n  Placeholder.prototype.normalizePlaceholder = function (_, placeholder) {\n    if (typeof placeholder === 'string') {\n      placeholder = {\n        id: '',\n        text: placeholder\n      };\n    }\n\n    return placeholder;\n  };\n\n  Placeholder.prototype.createPlaceholder = function (decorated, placeholder) {\n    var $placeholder = this.selectionContainer();\n\n    $placeholder.html(this.display(placeholder));\n    $placeholder.addClass('select2-selection__placeholder')\n                .removeClass('select2-selection__choice');\n\n    return $placeholder;\n  };\n\n  Placeholder.prototype.update = function (decorated, data) {\n    var singlePlaceholder = (\n      data.length == 1 && data[0].id != this.placeholder.id\n    );\n    var multipleSelections = data.length > 1;\n\n    if (multipleSelections || singlePlaceholder) {\n      return decorated.call(this, data);\n    }\n\n    this.clear();\n\n    var $placeholder = this.createPlaceholder(this.placeholder);\n\n    this.$selection.find('.select2-selection__rendered').append($placeholder);\n  };\n\n  return Placeholder;\n});\n\nS2.define('select2/selection/allowClear',[\n  'jquery',\n  '../keys',\n  '../utils'\n], function ($, KEYS, Utils) {\n  function AllowClear () { }\n\n  AllowClear.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    if (this.placeholder == null) {\n      if (this.options.get('debug') && window.console && console.error) {\n        console.error(\n          'Select2: The `allowClear` option should be used in combination ' +\n          'with the `placeholder` option.'\n        );\n      }\n    }\n\n    this.$selection.on('mousedown', '.select2-selection__clear',\n      function (evt) {\n        self._handleClear(evt);\n    });\n\n    container.on('keypress', function (evt) {\n      self._handleKeyboardClear(evt, container);\n    });\n  };\n\n  AllowClear.prototype._handleClear = function (_, evt) {\n    // Ignore the event if it is disabled\n    if (this.isDisabled()) {\n      return;\n    }\n\n    var $clear = this.$selection.find('.select2-selection__clear');\n\n    // Ignore the event if nothing has been selected\n    if ($clear.length === 0) {\n      return;\n    }\n\n    evt.stopPropagation();\n\n    var data = Utils.GetData($clear[0], 'data');\n\n    var previousVal = this.$element.val();\n    this.$element.val(this.placeholder.id);\n\n    var unselectData = {\n      data: data\n    };\n    this.trigger('clear', unselectData);\n    if (unselectData.prevented) {\n      this.$element.val(previousVal);\n      return;\n    }\n\n    for (var d = 0; d < data.length; d++) {\n      unselectData = {\n        data: data[d]\n      };\n\n      // Trigger the `unselect` event, so people can prevent it from being\n      // cleared.\n      this.trigger('unselect', unselectData);\n\n      // If the event was prevented, don't clear it out.\n      if (unselectData.prevented) {\n        this.$element.val(previousVal);\n        return;\n      }\n    }\n\n    this.$element.trigger('input').trigger('change');\n\n    this.trigger('toggle', {});\n  };\n\n  AllowClear.prototype._handleKeyboardClear = function (_, evt, container) {\n    if (container.isOpen()) {\n      return;\n    }\n\n    if (evt.which == KEYS.DELETE || evt.which == KEYS.BACKSPACE) {\n      this._handleClear(evt);\n    }\n  };\n\n  AllowClear.prototype.update = function (decorated, data) {\n    decorated.call(this, data);\n\n    if (this.$selection.find('.select2-selection__placeholder').length > 0 ||\n        data.length === 0) {\n      return;\n    }\n\n    var removeAll = this.options.get('translations').get('removeAllItems');\n\n    var $remove = $(\n      '<span class=\"select2-selection__clear\" title=\"' + removeAll() +'\">' +\n        '&times;' +\n      '</span>'\n    );\n    Utils.StoreData($remove[0], 'data', data);\n\n    this.$selection.find('.select2-selection__rendered').prepend($remove);\n  };\n\n  return AllowClear;\n});\n\nS2.define('select2/selection/search',[\n  'jquery',\n  '../utils',\n  '../keys'\n], function ($, Utils, KEYS) {\n  function Search (decorated, $element, options) {\n    decorated.call(this, $element, options);\n  }\n\n  Search.prototype.render = function (decorated) {\n    var $search = $(\n      '<li class=\"select2-search select2-search--inline\">' +\n        '<input class=\"select2-search__field\" type=\"search\" tabindex=\"-1\"' +\n        ' autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"none\"' +\n        ' spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" />' +\n      '</li>'\n    );\n\n    this.$searchContainer = $search;\n    this.$search = $search.find('input');\n\n    var $rendered = decorated.call(this);\n\n    this._transferTabIndex();\n\n    return $rendered;\n  };\n\n  Search.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    var resultsId = container.id + '-results';\n\n    decorated.call(this, container, $container);\n\n    container.on('open', function () {\n      self.$search.attr('aria-controls', resultsId);\n      self.$search.trigger('focus');\n    });\n\n    container.on('close', function () {\n      self.$search.val('');\n      self.$search.removeAttr('aria-controls');\n      self.$search.removeAttr('aria-activedescendant');\n      self.$search.trigger('focus');\n    });\n\n    container.on('enable', function () {\n      self.$search.prop('disabled', false);\n\n      self._transferTabIndex();\n    });\n\n    container.on('disable', function () {\n      self.$search.prop('disabled', true);\n    });\n\n    container.on('focus', function (evt) {\n      self.$search.trigger('focus');\n    });\n\n    container.on('results:focus', function (params) {\n      if (params.data._resultId) {\n        self.$search.attr('aria-activedescendant', params.data._resultId);\n      } else {\n        self.$search.removeAttr('aria-activedescendant');\n      }\n    });\n\n    this.$selection.on('focusin', '.select2-search--inline', function (evt) {\n      self.trigger('focus', evt);\n    });\n\n    this.$selection.on('focusout', '.select2-search--inline', function (evt) {\n      self._handleBlur(evt);\n    });\n\n    this.$selection.on('keydown', '.select2-search--inline', function (evt) {\n      evt.stopPropagation();\n\n      self.trigger('keypress', evt);\n\n      self._keyUpPrevented = evt.isDefaultPrevented();\n\n      var key = evt.which;\n\n      if (key === KEYS.BACKSPACE && self.$search.val() === '') {\n        var $previousChoice = self.$searchContainer\n          .prev('.select2-selection__choice');\n\n        if ($previousChoice.length > 0) {\n          var item = Utils.GetData($previousChoice[0], 'data');\n\n          self.searchRemoveChoice(item);\n\n          evt.preventDefault();\n        }\n      }\n    });\n\n    this.$selection.on('click', '.select2-search--inline', function (evt) {\n      if (self.$search.val()) {\n        evt.stopPropagation();\n      }\n    });\n\n    // Try to detect the IE version should the `documentMode` property that\n    // is stored on the document. This is only implemented in IE and is\n    // slightly cleaner than doing a user agent check.\n    // This property is not available in Edge, but Edge also doesn't have\n    // this bug.\n    var msie = document.documentMode;\n    var disableInputEvents = msie && msie <= 11;\n\n    // Workaround for browsers which do not support the `input` event\n    // This will prevent double-triggering of events for browsers which support\n    // both the `keyup` and `input` events.\n    this.$selection.on(\n      'input.searchcheck',\n      '.select2-search--inline',\n      function (evt) {\n        // IE will trigger the `input` event when a placeholder is used on a\n        // search box. To get around this issue, we are forced to ignore all\n        // `input` events in IE and keep using `keyup`.\n        if (disableInputEvents) {\n          self.$selection.off('input.search input.searchcheck');\n          return;\n        }\n\n        // Unbind the duplicated `keyup` event\n        self.$selection.off('keyup.search');\n      }\n    );\n\n    this.$selection.on(\n      'keyup.search input.search',\n      '.select2-search--inline',\n      function (evt) {\n        // IE will trigger the `input` event when a placeholder is used on a\n        // search box. To get around this issue, we are forced to ignore all\n        // `input` events in IE and keep using `keyup`.\n        if (disableInputEvents && evt.type === 'input') {\n          self.$selection.off('input.search input.searchcheck');\n          return;\n        }\n\n        var key = evt.which;\n\n        // We can freely ignore events from modifier keys\n        if (key == KEYS.SHIFT || key == KEYS.CTRL || key == KEYS.ALT) {\n          return;\n        }\n\n        // Tabbing will be handled during the `keydown` phase\n        if (key == KEYS.TAB) {\n          return;\n        }\n\n        self.handleSearch(evt);\n      }\n    );\n  };\n\n  /**\n   * This method will transfer the tabindex attribute from the rendered\n   * selection to the search box. This allows for the search box to be used as\n   * the primary focus instead of the selection container.\n   *\n   * @private\n   */\n  Search.prototype._transferTabIndex = function (decorated) {\n    this.$search.attr('tabindex', this.$selection.attr('tabindex'));\n    this.$selection.attr('tabindex', '-1');\n  };\n\n  Search.prototype.createPlaceholder = function (decorated, placeholder) {\n    this.$search.attr('placeholder', placeholder.text);\n  };\n\n  Search.prototype.update = function (decorated, data) {\n    var searchHadFocus = this.$search[0] == document.activeElement;\n\n    this.$search.attr('placeholder', '');\n\n    decorated.call(this, data);\n\n    this.$selection.find('.select2-selection__rendered')\n                   .append(this.$searchContainer);\n\n    this.resizeSearch();\n    if (searchHadFocus) {\n      this.$search.trigger('focus');\n    }\n  };\n\n  Search.prototype.handleSearch = function () {\n    this.resizeSearch();\n\n    if (!this._keyUpPrevented) {\n      var input = this.$search.val();\n\n      this.trigger('query', {\n        term: input\n      });\n    }\n\n    this._keyUpPrevented = false;\n  };\n\n  Search.prototype.searchRemoveChoice = function (decorated, item) {\n    this.trigger('unselect', {\n      data: item\n    });\n\n    this.$search.val(item.text);\n    this.handleSearch();\n  };\n\n  Search.prototype.resizeSearch = function () {\n    this.$search.css('width', '25px');\n\n    var width = '';\n\n    if (this.$search.attr('placeholder') !== '') {\n      width = this.$selection.find('.select2-selection__rendered').width();\n    } else {\n      var minimumWidth = this.$search.val().length + 1;\n\n      width = (minimumWidth * 0.75) + 'em';\n    }\n\n    this.$search.css('width', width);\n  };\n\n  return Search;\n});\n\nS2.define('select2/selection/eventRelay',[\n  'jquery'\n], function ($) {\n  function EventRelay () { }\n\n  EventRelay.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n    var relayEvents = [\n      'open', 'opening',\n      'close', 'closing',\n      'select', 'selecting',\n      'unselect', 'unselecting',\n      'clear', 'clearing'\n    ];\n\n    var preventableEvents = [\n      'opening', 'closing', 'selecting', 'unselecting', 'clearing'\n    ];\n\n    decorated.call(this, container, $container);\n\n    container.on('*', function (name, params) {\n      // Ignore events that should not be relayed\n      if ($.inArray(name, relayEvents) === -1) {\n        return;\n      }\n\n      // The parameters should always be an object\n      params = params || {};\n\n      // Generate the jQuery event for the Select2 event\n      var evt = $.Event('select2:' + name, {\n        params: params\n      });\n\n      self.$element.trigger(evt);\n\n      // Only handle preventable events if it was one\n      if ($.inArray(name, preventableEvents) === -1) {\n        return;\n      }\n\n      params.prevented = evt.isDefaultPrevented();\n    });\n  };\n\n  return EventRelay;\n});\n\nS2.define('select2/translation',[\n  'jquery',\n  'require'\n], function ($, require) {\n  function Translation (dict) {\n    this.dict = dict || {};\n  }\n\n  Translation.prototype.all = function () {\n    return this.dict;\n  };\n\n  Translation.prototype.get = function (key) {\n    return this.dict[key];\n  };\n\n  Translation.prototype.extend = function (translation) {\n    this.dict = $.extend({}, translation.all(), this.dict);\n  };\n\n  // Static functions\n\n  Translation._cache = {};\n\n  Translation.loadPath = function (path) {\n    if (!(path in Translation._cache)) {\n      var translations = require(path);\n\n      Translation._cache[path] = translations;\n    }\n\n    return new Translation(Translation._cache[path]);\n  };\n\n  return Translation;\n});\n\nS2.define('select2/diacritics',[\n\n], function () {\n  var diacritics = {\n    '\\u24B6': 'A',\n    '\\uFF21': 'A',\n    '\\u00C0': 'A',\n    '\\u00C1': 'A',\n    '\\u00C2': 'A',\n    '\\u1EA6': 'A',\n    '\\u1EA4': 'A',\n    '\\u1EAA': 'A',\n    '\\u1EA8': 'A',\n    '\\u00C3': 'A',\n    '\\u0100': 'A',\n    '\\u0102': 'A',\n    '\\u1EB0': 'A',\n    '\\u1EAE': 'A',\n    '\\u1EB4': 'A',\n    '\\u1EB2': 'A',\n    '\\u0226': 'A',\n    '\\u01E0': 'A',\n    '\\u00C4': 'A',\n    '\\u01DE': 'A',\n    '\\u1EA2': 'A',\n    '\\u00C5': 'A',\n    '\\u01FA': 'A',\n    '\\u01CD': 'A',\n    '\\u0200': 'A',\n    '\\u0202': 'A',\n    '\\u1EA0': 'A',\n    '\\u1EAC': 'A',\n    '\\u1EB6': 'A',\n    '\\u1E00': 'A',\n    '\\u0104': 'A',\n    '\\u023A': 'A',\n    '\\u2C6F': 'A',\n    '\\uA732': 'AA',\n    '\\u00C6': 'AE',\n    '\\u01FC': 'AE',\n    '\\u01E2': 'AE',\n    '\\uA734': 'AO',\n    '\\uA736': 'AU',\n    '\\uA738': 'AV',\n    '\\uA73A': 'AV',\n    '\\uA73C': 'AY',\n    '\\u24B7': 'B',\n    '\\uFF22': 'B',\n    '\\u1E02': 'B',\n    '\\u1E04': 'B',\n    '\\u1E06': 'B',\n    '\\u0243': 'B',\n    '\\u0182': 'B',\n    '\\u0181': 'B',\n    '\\u24B8': 'C',\n    '\\uFF23': 'C',\n    '\\u0106': 'C',\n    '\\u0108': 'C',\n    '\\u010A': 'C',\n    '\\u010C': 'C',\n    '\\u00C7': 'C',\n    '\\u1E08': 'C',\n    '\\u0187': 'C',\n    '\\u023B': 'C',\n    '\\uA73E': 'C',\n    '\\u24B9': 'D',\n    '\\uFF24': 'D',\n    '\\u1E0A': 'D',\n    '\\u010E': 'D',\n    '\\u1E0C': 'D',\n    '\\u1E10': 'D',\n    '\\u1E12': 'D',\n    '\\u1E0E': 'D',\n    '\\u0110': 'D',\n    '\\u018B': 'D',\n    '\\u018A': 'D',\n    '\\u0189': 'D',\n    '\\uA779': 'D',\n    '\\u01F1': 'DZ',\n    '\\u01C4': 'DZ',\n    '\\u01F2': 'Dz',\n    '\\u01C5': 'Dz',\n    '\\u24BA': 'E',\n    '\\uFF25': 'E',\n    '\\u00C8': 'E',\n    '\\u00C9': 'E',\n    '\\u00CA': 'E',\n    '\\u1EC0': 'E',\n    '\\u1EBE': 'E',\n    '\\u1EC4': 'E',\n    '\\u1EC2': 'E',\n    '\\u1EBC': 'E',\n    '\\u0112': 'E',\n    '\\u1E14': 'E',\n    '\\u1E16': 'E',\n    '\\u0114': 'E',\n    '\\u0116': 'E',\n    '\\u00CB': 'E',\n    '\\u1EBA': 'E',\n    '\\u011A': 'E',\n    '\\u0204': 'E',\n    '\\u0206': 'E',\n    '\\u1EB8': 'E',\n    '\\u1EC6': 'E',\n    '\\u0228': 'E',\n    '\\u1E1C': 'E',\n    '\\u0118': 'E',\n    '\\u1E18': 'E',\n    '\\u1E1A': 'E',\n    '\\u0190': 'E',\n    '\\u018E': 'E',\n    '\\u24BB': 'F',\n    '\\uFF26': 'F',\n    '\\u1E1E': 'F',\n    '\\u0191': 'F',\n    '\\uA77B': 'F',\n    '\\u24BC': 'G',\n    '\\uFF27': 'G',\n    '\\u01F4': 'G',\n    '\\u011C': 'G',\n    '\\u1E20': 'G',\n    '\\u011E': 'G',\n    '\\u0120': 'G',\n    '\\u01E6': 'G',\n    '\\u0122': 'G',\n    '\\u01E4': 'G',\n    '\\u0193': 'G',\n    '\\uA7A0': 'G',\n    '\\uA77D': 'G',\n    '\\uA77E': 'G',\n    '\\u24BD': 'H',\n    '\\uFF28': 'H',\n    '\\u0124': 'H',\n    '\\u1E22': 'H',\n    '\\u1E26': 'H',\n    '\\u021E': 'H',\n    '\\u1E24': 'H',\n    '\\u1E28': 'H',\n    '\\u1E2A': 'H',\n    '\\u0126': 'H',\n    '\\u2C67': 'H',\n    '\\u2C75': 'H',\n    '\\uA78D': 'H',\n    '\\u24BE': 'I',\n    '\\uFF29': 'I',\n    '\\u00CC': 'I',\n    '\\u00CD': 'I',\n    '\\u00CE': 'I',\n    '\\u0128': 'I',\n    '\\u012A': 'I',\n    '\\u012C': 'I',\n    '\\u0130': 'I',\n    '\\u00CF': 'I',\n    '\\u1E2E': 'I',\n    '\\u1EC8': 'I',\n    '\\u01CF': 'I',\n    '\\u0208': 'I',\n    '\\u020A': 'I',\n    '\\u1ECA': 'I',\n    '\\u012E': 'I',\n    '\\u1E2C': 'I',\n    '\\u0197': 'I',\n    '\\u24BF': 'J',\n    '\\uFF2A': 'J',\n    '\\u0134': 'J',\n    '\\u0248': 'J',\n    '\\u24C0': 'K',\n    '\\uFF2B': 'K',\n    '\\u1E30': 'K',\n    '\\u01E8': 'K',\n    '\\u1E32': 'K',\n    '\\u0136': 'K',\n    '\\u1E34': 'K',\n    '\\u0198': 'K',\n    '\\u2C69': 'K',\n    '\\uA740': 'K',\n    '\\uA742': 'K',\n    '\\uA744': 'K',\n    '\\uA7A2': 'K',\n    '\\u24C1': 'L',\n    '\\uFF2C': 'L',\n    '\\u013F': 'L',\n    '\\u0139': 'L',\n    '\\u013D': 'L',\n    '\\u1E36': 'L',\n    '\\u1E38': 'L',\n    '\\u013B': 'L',\n    '\\u1E3C': 'L',\n    '\\u1E3A': 'L',\n    '\\u0141': 'L',\n    '\\u023D': 'L',\n    '\\u2C62': 'L',\n    '\\u2C60': 'L',\n    '\\uA748': 'L',\n    '\\uA746': 'L',\n    '\\uA780': 'L',\n    '\\u01C7': 'LJ',\n    '\\u01C8': 'Lj',\n    '\\u24C2': 'M',\n    '\\uFF2D': 'M',\n    '\\u1E3E': 'M',\n    '\\u1E40': 'M',\n    '\\u1E42': 'M',\n    '\\u2C6E': 'M',\n    '\\u019C': 'M',\n    '\\u24C3': 'N',\n    '\\uFF2E': 'N',\n    '\\u01F8': 'N',\n    '\\u0143': 'N',\n    '\\u00D1': 'N',\n    '\\u1E44': 'N',\n    '\\u0147': 'N',\n    '\\u1E46': 'N',\n    '\\u0145': 'N',\n    '\\u1E4A': 'N',\n    '\\u1E48': 'N',\n    '\\u0220': 'N',\n    '\\u019D': 'N',\n    '\\uA790': 'N',\n    '\\uA7A4': 'N',\n    '\\u01CA': 'NJ',\n    '\\u01CB': 'Nj',\n    '\\u24C4': 'O',\n    '\\uFF2F': 'O',\n    '\\u00D2': 'O',\n    '\\u00D3': 'O',\n    '\\u00D4': 'O',\n    '\\u1ED2': 'O',\n    '\\u1ED0': 'O',\n    '\\u1ED6': 'O',\n    '\\u1ED4': 'O',\n    '\\u00D5': 'O',\n    '\\u1E4C': 'O',\n    '\\u022C': 'O',\n    '\\u1E4E': 'O',\n    '\\u014C': 'O',\n    '\\u1E50': 'O',\n    '\\u1E52': 'O',\n    '\\u014E': 'O',\n    '\\u022E': 'O',\n    '\\u0230': 'O',\n    '\\u00D6': 'O',\n    '\\u022A': 'O',\n    '\\u1ECE': 'O',\n    '\\u0150': 'O',\n    '\\u01D1': 'O',\n    '\\u020C': 'O',\n    '\\u020E': 'O',\n    '\\u01A0': 'O',\n    '\\u1EDC': 'O',\n    '\\u1EDA': 'O',\n    '\\u1EE0': 'O',\n    '\\u1EDE': 'O',\n    '\\u1EE2': 'O',\n    '\\u1ECC': 'O',\n    '\\u1ED8': 'O',\n    '\\u01EA': 'O',\n    '\\u01EC': 'O',\n    '\\u00D8': 'O',\n    '\\u01FE': 'O',\n    '\\u0186': 'O',\n    '\\u019F': 'O',\n    '\\uA74A': 'O',\n    '\\uA74C': 'O',\n    '\\u0152': 'OE',\n    '\\u01A2': 'OI',\n    '\\uA74E': 'OO',\n    '\\u0222': 'OU',\n    '\\u24C5': 'P',\n    '\\uFF30': 'P',\n    '\\u1E54': 'P',\n    '\\u1E56': 'P',\n    '\\u01A4': 'P',\n    '\\u2C63': 'P',\n    '\\uA750': 'P',\n    '\\uA752': 'P',\n    '\\uA754': 'P',\n    '\\u24C6': 'Q',\n    '\\uFF31': 'Q',\n    '\\uA756': 'Q',\n    '\\uA758': 'Q',\n    '\\u024A': 'Q',\n    '\\u24C7': 'R',\n    '\\uFF32': 'R',\n    '\\u0154': 'R',\n    '\\u1E58': 'R',\n    '\\u0158': 'R',\n    '\\u0210': 'R',\n    '\\u0212': 'R',\n    '\\u1E5A': 'R',\n    '\\u1E5C': 'R',\n    '\\u0156': 'R',\n    '\\u1E5E': 'R',\n    '\\u024C': 'R',\n    '\\u2C64': 'R',\n    '\\uA75A': 'R',\n    '\\uA7A6': 'R',\n    '\\uA782': 'R',\n    '\\u24C8': 'S',\n    '\\uFF33': 'S',\n    '\\u1E9E': 'S',\n    '\\u015A': 'S',\n    '\\u1E64': 'S',\n    '\\u015C': 'S',\n    '\\u1E60': 'S',\n    '\\u0160': 'S',\n    '\\u1E66': 'S',\n    '\\u1E62': 'S',\n    '\\u1E68': 'S',\n    '\\u0218': 'S',\n    '\\u015E': 'S',\n    '\\u2C7E': 'S',\n    '\\uA7A8': 'S',\n    '\\uA784': 'S',\n    '\\u24C9': 'T',\n    '\\uFF34': 'T',\n    '\\u1E6A': 'T',\n    '\\u0164': 'T',\n    '\\u1E6C': 'T',\n    '\\u021A': 'T',\n    '\\u0162': 'T',\n    '\\u1E70': 'T',\n    '\\u1E6E': 'T',\n    '\\u0166': 'T',\n    '\\u01AC': 'T',\n    '\\u01AE': 'T',\n    '\\u023E': 'T',\n    '\\uA786': 'T',\n    '\\uA728': 'TZ',\n    '\\u24CA': 'U',\n    '\\uFF35': 'U',\n    '\\u00D9': 'U',\n    '\\u00DA': 'U',\n    '\\u00DB': 'U',\n    '\\u0168': 'U',\n    '\\u1E78': 'U',\n    '\\u016A': 'U',\n    '\\u1E7A': 'U',\n    '\\u016C': 'U',\n    '\\u00DC': 'U',\n    '\\u01DB': 'U',\n    '\\u01D7': 'U',\n    '\\u01D5': 'U',\n    '\\u01D9': 'U',\n    '\\u1EE6': 'U',\n    '\\u016E': 'U',\n    '\\u0170': 'U',\n    '\\u01D3': 'U',\n    '\\u0214': 'U',\n    '\\u0216': 'U',\n    '\\u01AF': 'U',\n    '\\u1EEA': 'U',\n    '\\u1EE8': 'U',\n    '\\u1EEE': 'U',\n    '\\u1EEC': 'U',\n    '\\u1EF0': 'U',\n    '\\u1EE4': 'U',\n    '\\u1E72': 'U',\n    '\\u0172': 'U',\n    '\\u1E76': 'U',\n    '\\u1E74': 'U',\n    '\\u0244': 'U',\n    '\\u24CB': 'V',\n    '\\uFF36': 'V',\n    '\\u1E7C': 'V',\n    '\\u1E7E': 'V',\n    '\\u01B2': 'V',\n    '\\uA75E': 'V',\n    '\\u0245': 'V',\n    '\\uA760': 'VY',\n    '\\u24CC': 'W',\n    '\\uFF37': 'W',\n    '\\u1E80': 'W',\n    '\\u1E82': 'W',\n    '\\u0174': 'W',\n    '\\u1E86': 'W',\n    '\\u1E84': 'W',\n    '\\u1E88': 'W',\n    '\\u2C72': 'W',\n    '\\u24CD': 'X',\n    '\\uFF38': 'X',\n    '\\u1E8A': 'X',\n    '\\u1E8C': 'X',\n    '\\u24CE': 'Y',\n    '\\uFF39': 'Y',\n    '\\u1EF2': 'Y',\n    '\\u00DD': 'Y',\n    '\\u0176': 'Y',\n    '\\u1EF8': 'Y',\n    '\\u0232': 'Y',\n    '\\u1E8E': 'Y',\n    '\\u0178': 'Y',\n    '\\u1EF6': 'Y',\n    '\\u1EF4': 'Y',\n    '\\u01B3': 'Y',\n    '\\u024E': 'Y',\n    '\\u1EFE': 'Y',\n    '\\u24CF': 'Z',\n    '\\uFF3A': 'Z',\n    '\\u0179': 'Z',\n    '\\u1E90': 'Z',\n    '\\u017B': 'Z',\n    '\\u017D': 'Z',\n    '\\u1E92': 'Z',\n    '\\u1E94': 'Z',\n    '\\u01B5': 'Z',\n    '\\u0224': 'Z',\n    '\\u2C7F': 'Z',\n    '\\u2C6B': 'Z',\n    '\\uA762': 'Z',\n    '\\u24D0': 'a',\n    '\\uFF41': 'a',\n    '\\u1E9A': 'a',\n    '\\u00E0': 'a',\n    '\\u00E1': 'a',\n    '\\u00E2': 'a',\n    '\\u1EA7': 'a',\n    '\\u1EA5': 'a',\n    '\\u1EAB': 'a',\n    '\\u1EA9': 'a',\n    '\\u00E3': 'a',\n    '\\u0101': 'a',\n    '\\u0103': 'a',\n    '\\u1EB1': 'a',\n    '\\u1EAF': 'a',\n    '\\u1EB5': 'a',\n    '\\u1EB3': 'a',\n    '\\u0227': 'a',\n    '\\u01E1': 'a',\n    '\\u00E4': 'a',\n    '\\u01DF': 'a',\n    '\\u1EA3': 'a',\n    '\\u00E5': 'a',\n    '\\u01FB': 'a',\n    '\\u01CE': 'a',\n    '\\u0201': 'a',\n    '\\u0203': 'a',\n    '\\u1EA1': 'a',\n    '\\u1EAD': 'a',\n    '\\u1EB7': 'a',\n    '\\u1E01': 'a',\n    '\\u0105': 'a',\n    '\\u2C65': 'a',\n    '\\u0250': 'a',\n    '\\uA733': 'aa',\n    '\\u00E6': 'ae',\n    '\\u01FD': 'ae',\n    '\\u01E3': 'ae',\n    '\\uA735': 'ao',\n    '\\uA737': 'au',\n    '\\uA739': 'av',\n    '\\uA73B': 'av',\n    '\\uA73D': 'ay',\n    '\\u24D1': 'b',\n    '\\uFF42': 'b',\n    '\\u1E03': 'b',\n    '\\u1E05': 'b',\n    '\\u1E07': 'b',\n    '\\u0180': 'b',\n    '\\u0183': 'b',\n    '\\u0253': 'b',\n    '\\u24D2': 'c',\n    '\\uFF43': 'c',\n    '\\u0107': 'c',\n    '\\u0109': 'c',\n    '\\u010B': 'c',\n    '\\u010D': 'c',\n    '\\u00E7': 'c',\n    '\\u1E09': 'c',\n    '\\u0188': 'c',\n    '\\u023C': 'c',\n    '\\uA73F': 'c',\n    '\\u2184': 'c',\n    '\\u24D3': 'd',\n    '\\uFF44': 'd',\n    '\\u1E0B': 'd',\n    '\\u010F': 'd',\n    '\\u1E0D': 'd',\n    '\\u1E11': 'd',\n    '\\u1E13': 'd',\n    '\\u1E0F': 'd',\n    '\\u0111': 'd',\n    '\\u018C': 'd',\n    '\\u0256': 'd',\n    '\\u0257': 'd',\n    '\\uA77A': 'd',\n    '\\u01F3': 'dz',\n    '\\u01C6': 'dz',\n    '\\u24D4': 'e',\n    '\\uFF45': 'e',\n    '\\u00E8': 'e',\n    '\\u00E9': 'e',\n    '\\u00EA': 'e',\n    '\\u1EC1': 'e',\n    '\\u1EBF': 'e',\n    '\\u1EC5': 'e',\n    '\\u1EC3': 'e',\n    '\\u1EBD': 'e',\n    '\\u0113': 'e',\n    '\\u1E15': 'e',\n    '\\u1E17': 'e',\n    '\\u0115': 'e',\n    '\\u0117': 'e',\n    '\\u00EB': 'e',\n    '\\u1EBB': 'e',\n    '\\u011B': 'e',\n    '\\u0205': 'e',\n    '\\u0207': 'e',\n    '\\u1EB9': 'e',\n    '\\u1EC7': 'e',\n    '\\u0229': 'e',\n    '\\u1E1D': 'e',\n    '\\u0119': 'e',\n    '\\u1E19': 'e',\n    '\\u1E1B': 'e',\n    '\\u0247': 'e',\n    '\\u025B': 'e',\n    '\\u01DD': 'e',\n    '\\u24D5': 'f',\n    '\\uFF46': 'f',\n    '\\u1E1F': 'f',\n    '\\u0192': 'f',\n    '\\uA77C': 'f',\n    '\\u24D6': 'g',\n    '\\uFF47': 'g',\n    '\\u01F5': 'g',\n    '\\u011D': 'g',\n    '\\u1E21': 'g',\n    '\\u011F': 'g',\n    '\\u0121': 'g',\n    '\\u01E7': 'g',\n    '\\u0123': 'g',\n    '\\u01E5': 'g',\n    '\\u0260': 'g',\n    '\\uA7A1': 'g',\n    '\\u1D79': 'g',\n    '\\uA77F': 'g',\n    '\\u24D7': 'h',\n    '\\uFF48': 'h',\n    '\\u0125': 'h',\n    '\\u1E23': 'h',\n    '\\u1E27': 'h',\n    '\\u021F': 'h',\n    '\\u1E25': 'h',\n    '\\u1E29': 'h',\n    '\\u1E2B': 'h',\n    '\\u1E96': 'h',\n    '\\u0127': 'h',\n    '\\u2C68': 'h',\n    '\\u2C76': 'h',\n    '\\u0265': 'h',\n    '\\u0195': 'hv',\n    '\\u24D8': 'i',\n    '\\uFF49': 'i',\n    '\\u00EC': 'i',\n    '\\u00ED': 'i',\n    '\\u00EE': 'i',\n    '\\u0129': 'i',\n    '\\u012B': 'i',\n    '\\u012D': 'i',\n    '\\u00EF': 'i',\n    '\\u1E2F': 'i',\n    '\\u1EC9': 'i',\n    '\\u01D0': 'i',\n    '\\u0209': 'i',\n    '\\u020B': 'i',\n    '\\u1ECB': 'i',\n    '\\u012F': 'i',\n    '\\u1E2D': 'i',\n    '\\u0268': 'i',\n    '\\u0131': 'i',\n    '\\u24D9': 'j',\n    '\\uFF4A': 'j',\n    '\\u0135': 'j',\n    '\\u01F0': 'j',\n    '\\u0249': 'j',\n    '\\u24DA': 'k',\n    '\\uFF4B': 'k',\n    '\\u1E31': 'k',\n    '\\u01E9': 'k',\n    '\\u1E33': 'k',\n    '\\u0137': 'k',\n    '\\u1E35': 'k',\n    '\\u0199': 'k',\n    '\\u2C6A': 'k',\n    '\\uA741': 'k',\n    '\\uA743': 'k',\n    '\\uA745': 'k',\n    '\\uA7A3': 'k',\n    '\\u24DB': 'l',\n    '\\uFF4C': 'l',\n    '\\u0140': 'l',\n    '\\u013A': 'l',\n    '\\u013E': 'l',\n    '\\u1E37': 'l',\n    '\\u1E39': 'l',\n    '\\u013C': 'l',\n    '\\u1E3D': 'l',\n    '\\u1E3B': 'l',\n    '\\u017F': 'l',\n    '\\u0142': 'l',\n    '\\u019A': 'l',\n    '\\u026B': 'l',\n    '\\u2C61': 'l',\n    '\\uA749': 'l',\n    '\\uA781': 'l',\n    '\\uA747': 'l',\n    '\\u01C9': 'lj',\n    '\\u24DC': 'm',\n    '\\uFF4D': 'm',\n    '\\u1E3F': 'm',\n    '\\u1E41': 'm',\n    '\\u1E43': 'm',\n    '\\u0271': 'm',\n    '\\u026F': 'm',\n    '\\u24DD': 'n',\n    '\\uFF4E': 'n',\n    '\\u01F9': 'n',\n    '\\u0144': 'n',\n    '\\u00F1': 'n',\n    '\\u1E45': 'n',\n    '\\u0148': 'n',\n    '\\u1E47': 'n',\n    '\\u0146': 'n',\n    '\\u1E4B': 'n',\n    '\\u1E49': 'n',\n    '\\u019E': 'n',\n    '\\u0272': 'n',\n    '\\u0149': 'n',\n    '\\uA791': 'n',\n    '\\uA7A5': 'n',\n    '\\u01CC': 'nj',\n    '\\u24DE': 'o',\n    '\\uFF4F': 'o',\n    '\\u00F2': 'o',\n    '\\u00F3': 'o',\n    '\\u00F4': 'o',\n    '\\u1ED3': 'o',\n    '\\u1ED1': 'o',\n    '\\u1ED7': 'o',\n    '\\u1ED5': 'o',\n    '\\u00F5': 'o',\n    '\\u1E4D': 'o',\n    '\\u022D': 'o',\n    '\\u1E4F': 'o',\n    '\\u014D': 'o',\n    '\\u1E51': 'o',\n    '\\u1E53': 'o',\n    '\\u014F': 'o',\n    '\\u022F': 'o',\n    '\\u0231': 'o',\n    '\\u00F6': 'o',\n    '\\u022B': 'o',\n    '\\u1ECF': 'o',\n    '\\u0151': 'o',\n    '\\u01D2': 'o',\n    '\\u020D': 'o',\n    '\\u020F': 'o',\n    '\\u01A1': 'o',\n    '\\u1EDD': 'o',\n    '\\u1EDB': 'o',\n    '\\u1EE1': 'o',\n    '\\u1EDF': 'o',\n    '\\u1EE3': 'o',\n    '\\u1ECD': 'o',\n    '\\u1ED9': 'o',\n    '\\u01EB': 'o',\n    '\\u01ED': 'o',\n    '\\u00F8': 'o',\n    '\\u01FF': 'o',\n    '\\u0254': 'o',\n    '\\uA74B': 'o',\n    '\\uA74D': 'o',\n    '\\u0275': 'o',\n    '\\u0153': 'oe',\n    '\\u01A3': 'oi',\n    '\\u0223': 'ou',\n    '\\uA74F': 'oo',\n    '\\u24DF': 'p',\n    '\\uFF50': 'p',\n    '\\u1E55': 'p',\n    '\\u1E57': 'p',\n    '\\u01A5': 'p',\n    '\\u1D7D': 'p',\n    '\\uA751': 'p',\n    '\\uA753': 'p',\n    '\\uA755': 'p',\n    '\\u24E0': 'q',\n    '\\uFF51': 'q',\n    '\\u024B': 'q',\n    '\\uA757': 'q',\n    '\\uA759': 'q',\n    '\\u24E1': 'r',\n    '\\uFF52': 'r',\n    '\\u0155': 'r',\n    '\\u1E59': 'r',\n    '\\u0159': 'r',\n    '\\u0211': 'r',\n    '\\u0213': 'r',\n    '\\u1E5B': 'r',\n    '\\u1E5D': 'r',\n    '\\u0157': 'r',\n    '\\u1E5F': 'r',\n    '\\u024D': 'r',\n    '\\u027D': 'r',\n    '\\uA75B': 'r',\n    '\\uA7A7': 'r',\n    '\\uA783': 'r',\n    '\\u24E2': 's',\n    '\\uFF53': 's',\n    '\\u00DF': 's',\n    '\\u015B': 's',\n    '\\u1E65': 's',\n    '\\u015D': 's',\n    '\\u1E61': 's',\n    '\\u0161': 's',\n    '\\u1E67': 's',\n    '\\u1E63': 's',\n    '\\u1E69': 's',\n    '\\u0219': 's',\n    '\\u015F': 's',\n    '\\u023F': 's',\n    '\\uA7A9': 's',\n    '\\uA785': 's',\n    '\\u1E9B': 's',\n    '\\u24E3': 't',\n    '\\uFF54': 't',\n    '\\u1E6B': 't',\n    '\\u1E97': 't',\n    '\\u0165': 't',\n    '\\u1E6D': 't',\n    '\\u021B': 't',\n    '\\u0163': 't',\n    '\\u1E71': 't',\n    '\\u1E6F': 't',\n    '\\u0167': 't',\n    '\\u01AD': 't',\n    '\\u0288': 't',\n    '\\u2C66': 't',\n    '\\uA787': 't',\n    '\\uA729': 'tz',\n    '\\u24E4': 'u',\n    '\\uFF55': 'u',\n    '\\u00F9': 'u',\n    '\\u00FA': 'u',\n    '\\u00FB': 'u',\n    '\\u0169': 'u',\n    '\\u1E79': 'u',\n    '\\u016B': 'u',\n    '\\u1E7B': 'u',\n    '\\u016D': 'u',\n    '\\u00FC': 'u',\n    '\\u01DC': 'u',\n    '\\u01D8': 'u',\n    '\\u01D6': 'u',\n    '\\u01DA': 'u',\n    '\\u1EE7': 'u',\n    '\\u016F': 'u',\n    '\\u0171': 'u',\n    '\\u01D4': 'u',\n    '\\u0215': 'u',\n    '\\u0217': 'u',\n    '\\u01B0': 'u',\n    '\\u1EEB': 'u',\n    '\\u1EE9': 'u',\n    '\\u1EEF': 'u',\n    '\\u1EED': 'u',\n    '\\u1EF1': 'u',\n    '\\u1EE5': 'u',\n    '\\u1E73': 'u',\n    '\\u0173': 'u',\n    '\\u1E77': 'u',\n    '\\u1E75': 'u',\n    '\\u0289': 'u',\n    '\\u24E5': 'v',\n    '\\uFF56': 'v',\n    '\\u1E7D': 'v',\n    '\\u1E7F': 'v',\n    '\\u028B': 'v',\n    '\\uA75F': 'v',\n    '\\u028C': 'v',\n    '\\uA761': 'vy',\n    '\\u24E6': 'w',\n    '\\uFF57': 'w',\n    '\\u1E81': 'w',\n    '\\u1E83': 'w',\n    '\\u0175': 'w',\n    '\\u1E87': 'w',\n    '\\u1E85': 'w',\n    '\\u1E98': 'w',\n    '\\u1E89': 'w',\n    '\\u2C73': 'w',\n    '\\u24E7': 'x',\n    '\\uFF58': 'x',\n    '\\u1E8B': 'x',\n    '\\u1E8D': 'x',\n    '\\u24E8': 'y',\n    '\\uFF59': 'y',\n    '\\u1EF3': 'y',\n    '\\u00FD': 'y',\n    '\\u0177': 'y',\n    '\\u1EF9': 'y',\n    '\\u0233': 'y',\n    '\\u1E8F': 'y',\n    '\\u00FF': 'y',\n    '\\u1EF7': 'y',\n    '\\u1E99': 'y',\n    '\\u1EF5': 'y',\n    '\\u01B4': 'y',\n    '\\u024F': 'y',\n    '\\u1EFF': 'y',\n    '\\u24E9': 'z',\n    '\\uFF5A': 'z',\n    '\\u017A': 'z',\n    '\\u1E91': 'z',\n    '\\u017C': 'z',\n    '\\u017E': 'z',\n    '\\u1E93': 'z',\n    '\\u1E95': 'z',\n    '\\u01B6': 'z',\n    '\\u0225': 'z',\n    '\\u0240': 'z',\n    '\\u2C6C': 'z',\n    '\\uA763': 'z',\n    '\\u0386': '\\u0391',\n    '\\u0388': '\\u0395',\n    '\\u0389': '\\u0397',\n    '\\u038A': '\\u0399',\n    '\\u03AA': '\\u0399',\n    '\\u038C': '\\u039F',\n    '\\u038E': '\\u03A5',\n    '\\u03AB': '\\u03A5',\n    '\\u038F': '\\u03A9',\n    '\\u03AC': '\\u03B1',\n    '\\u03AD': '\\u03B5',\n    '\\u03AE': '\\u03B7',\n    '\\u03AF': '\\u03B9',\n    '\\u03CA': '\\u03B9',\n    '\\u0390': '\\u03B9',\n    '\\u03CC': '\\u03BF',\n    '\\u03CD': '\\u03C5',\n    '\\u03CB': '\\u03C5',\n    '\\u03B0': '\\u03C5',\n    '\\u03CE': '\\u03C9',\n    '\\u03C2': '\\u03C3',\n    '\\u2019': '\\''\n  };\n\n  return diacritics;\n});\n\nS2.define('select2/data/base',[\n  '../utils'\n], function (Utils) {\n  function BaseAdapter ($element, options) {\n    BaseAdapter.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(BaseAdapter, Utils.Observable);\n\n  BaseAdapter.prototype.current = function (callback) {\n    throw new Error('The `current` method must be defined in child classes.');\n  };\n\n  BaseAdapter.prototype.query = function (params, callback) {\n    throw new Error('The `query` method must be defined in child classes.');\n  };\n\n  BaseAdapter.prototype.bind = function (container, $container) {\n    // Can be implemented in subclasses\n  };\n\n  BaseAdapter.prototype.destroy = function () {\n    // Can be implemented in subclasses\n  };\n\n  BaseAdapter.prototype.generateResultId = function (container, data) {\n    var id = container.id + '-result-';\n\n    id += Utils.generateChars(4);\n\n    if (data.id != null) {\n      id += '-' + data.id.toString();\n    } else {\n      id += '-' + Utils.generateChars(4);\n    }\n    return id;\n  };\n\n  return BaseAdapter;\n});\n\nS2.define('select2/data/select',[\n  './base',\n  '../utils',\n  'jquery'\n], function (BaseAdapter, Utils, $) {\n  function SelectAdapter ($element, options) {\n    this.$element = $element;\n    this.options = options;\n\n    SelectAdapter.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(SelectAdapter, BaseAdapter);\n\n  SelectAdapter.prototype.current = function (callback) {\n    var data = [];\n    var self = this;\n\n    this.$element.find(':selected').each(function () {\n      var $option = $(this);\n\n      var option = self.item($option);\n\n      data.push(option);\n    });\n\n    callback(data);\n  };\n\n  SelectAdapter.prototype.select = function (data) {\n    var self = this;\n\n    data.selected = true;\n\n    // If data.element is a DOM node, use it instead\n    if ($(data.element).is('option')) {\n      data.element.selected = true;\n\n      this.$element.trigger('input').trigger('change');\n\n      return;\n    }\n\n    if (this.$element.prop('multiple')) {\n      this.current(function (currentData) {\n        var val = [];\n\n        data = [data];\n        data.push.apply(data, currentData);\n\n        for (var d = 0; d < data.length; d++) {\n          var id = data[d].id;\n\n          if ($.inArray(id, val) === -1) {\n            val.push(id);\n          }\n        }\n\n        self.$element.val(val);\n        self.$element.trigger('input').trigger('change');\n      });\n    } else {\n      var val = data.id;\n\n      this.$element.val(val);\n      this.$element.trigger('input').trigger('change');\n    }\n  };\n\n  SelectAdapter.prototype.unselect = function (data) {\n    var self = this;\n\n    if (!this.$element.prop('multiple')) {\n      return;\n    }\n\n    data.selected = false;\n\n    if ($(data.element).is('option')) {\n      data.element.selected = false;\n\n      this.$element.trigger('input').trigger('change');\n\n      return;\n    }\n\n    this.current(function (currentData) {\n      var val = [];\n\n      for (var d = 0; d < currentData.length; d++) {\n        var id = currentData[d].id;\n\n        if (id !== data.id && $.inArray(id, val) === -1) {\n          val.push(id);\n        }\n      }\n\n      self.$element.val(val);\n\n      self.$element.trigger('input').trigger('change');\n    });\n  };\n\n  SelectAdapter.prototype.bind = function (container, $container) {\n    var self = this;\n\n    this.container = container;\n\n    container.on('select', function (params) {\n      self.select(params.data);\n    });\n\n    container.on('unselect', function (params) {\n      self.unselect(params.data);\n    });\n  };\n\n  SelectAdapter.prototype.destroy = function () {\n    // Remove anything added to child elements\n    this.$element.find('*').each(function () {\n      // Remove any custom data set by Select2\n      Utils.RemoveData(this);\n    });\n  };\n\n  SelectAdapter.prototype.query = function (params, callback) {\n    var data = [];\n    var self = this;\n\n    var $options = this.$element.children();\n\n    $options.each(function () {\n      var $option = $(this);\n\n      if (!$option.is('option') && !$option.is('optgroup')) {\n        return;\n      }\n\n      var option = self.item($option);\n\n      var matches = self.matches(params, option);\n\n      if (matches !== null) {\n        data.push(matches);\n      }\n    });\n\n    callback({\n      results: data\n    });\n  };\n\n  SelectAdapter.prototype.addOptions = function ($options) {\n    Utils.appendMany(this.$element, $options);\n  };\n\n  SelectAdapter.prototype.option = function (data) {\n    var option;\n\n    if (data.children) {\n      option = document.createElement('optgroup');\n      option.label = data.text;\n    } else {\n      option = document.createElement('option');\n\n      if (option.textContent !== undefined) {\n        option.textContent = data.text;\n      } else {\n        option.innerText = data.text;\n      }\n    }\n\n    if (data.id !== undefined) {\n      option.value = data.id;\n    }\n\n    if (data.disabled) {\n      option.disabled = true;\n    }\n\n    if (data.selected) {\n      option.selected = true;\n    }\n\n    if (data.title) {\n      option.title = data.title;\n    }\n\n    var $option = $(option);\n\n    var normalizedData = this._normalizeItem(data);\n    normalizedData.element = option;\n\n    // Override the option's data with the combined data\n    Utils.StoreData(option, 'data', normalizedData);\n\n    return $option;\n  };\n\n  SelectAdapter.prototype.item = function ($option) {\n    var data = {};\n\n    data = Utils.GetData($option[0], 'data');\n\n    if (data != null) {\n      return data;\n    }\n\n    if ($option.is('option')) {\n      data = {\n        id: $option.val(),\n        text: $option.text(),\n        disabled: $option.prop('disabled'),\n        selected: $option.prop('selected'),\n        title: $option.prop('title')\n      };\n    } else if ($option.is('optgroup')) {\n      data = {\n        text: $option.prop('label'),\n        children: [],\n        title: $option.prop('title')\n      };\n\n      var $children = $option.children('option');\n      var children = [];\n\n      for (var c = 0; c < $children.length; c++) {\n        var $child = $($children[c]);\n\n        var child = this.item($child);\n\n        children.push(child);\n      }\n\n      data.children = children;\n    }\n\n    data = this._normalizeItem(data);\n    data.element = $option[0];\n\n    Utils.StoreData($option[0], 'data', data);\n\n    return data;\n  };\n\n  SelectAdapter.prototype._normalizeItem = function (item) {\n    if (item !== Object(item)) {\n      item = {\n        id: item,\n        text: item\n      };\n    }\n\n    item = $.extend({}, {\n      text: ''\n    }, item);\n\n    var defaults = {\n      selected: false,\n      disabled: false\n    };\n\n    if (item.id != null) {\n      item.id = item.id.toString();\n    }\n\n    if (item.text != null) {\n      item.text = item.text.toString();\n    }\n\n    if (item._resultId == null && item.id && this.container != null) {\n      item._resultId = this.generateResultId(this.container, item);\n    }\n\n    return $.extend({}, defaults, item);\n  };\n\n  SelectAdapter.prototype.matches = function (params, data) {\n    var matcher = this.options.get('matcher');\n\n    return matcher(params, data);\n  };\n\n  return SelectAdapter;\n});\n\nS2.define('select2/data/array',[\n  './select',\n  '../utils',\n  'jquery'\n], function (SelectAdapter, Utils, $) {\n  function ArrayAdapter ($element, options) {\n    this._dataToConvert = options.get('data') || [];\n\n    ArrayAdapter.__super__.constructor.call(this, $element, options);\n  }\n\n  Utils.Extend(ArrayAdapter, SelectAdapter);\n\n  ArrayAdapter.prototype.bind = function (container, $container) {\n    ArrayAdapter.__super__.bind.call(this, container, $container);\n\n    this.addOptions(this.convertToOptions(this._dataToConvert));\n  };\n\n  ArrayAdapter.prototype.select = function (data) {\n    var $option = this.$element.find('option').filter(function (i, elm) {\n      return elm.value == data.id.toString();\n    });\n\n    if ($option.length === 0) {\n      $option = this.option(data);\n\n      this.addOptions($option);\n    }\n\n    ArrayAdapter.__super__.select.call(this, data);\n  };\n\n  ArrayAdapter.prototype.convertToOptions = function (data) {\n    var self = this;\n\n    var $existing = this.$element.find('option');\n    var existingIds = $existing.map(function () {\n      return self.item($(this)).id;\n    }).get();\n\n    var $options = [];\n\n    // Filter out all items except for the one passed in the argument\n    function onlyItem (item) {\n      return function () {\n        return $(this).val() == item.id;\n      };\n    }\n\n    for (var d = 0; d < data.length; d++) {\n      var item = this._normalizeItem(data[d]);\n\n      // Skip items which were pre-loaded, only merge the data\n      if ($.inArray(item.id, existingIds) >= 0) {\n        var $existingOption = $existing.filter(onlyItem(item));\n\n        var existingData = this.item($existingOption);\n        var newData = $.extend(true, {}, item, existingData);\n\n        var $newOption = this.option(newData);\n\n        $existingOption.replaceWith($newOption);\n\n        continue;\n      }\n\n      var $option = this.option(item);\n\n      if (item.children) {\n        var $children = this.convertToOptions(item.children);\n\n        Utils.appendMany($option, $children);\n      }\n\n      $options.push($option);\n    }\n\n    return $options;\n  };\n\n  return ArrayAdapter;\n});\n\nS2.define('select2/data/ajax',[\n  './array',\n  '../utils',\n  'jquery'\n], function (ArrayAdapter, Utils, $) {\n  function AjaxAdapter ($element, options) {\n    this.ajaxOptions = this._applyDefaults(options.get('ajax'));\n\n    if (this.ajaxOptions.processResults != null) {\n      this.processResults = this.ajaxOptions.processResults;\n    }\n\n    AjaxAdapter.__super__.constructor.call(this, $element, options);\n  }\n\n  Utils.Extend(AjaxAdapter, ArrayAdapter);\n\n  AjaxAdapter.prototype._applyDefaults = function (options) {\n    var defaults = {\n      data: function (params) {\n        return $.extend({}, params, {\n          q: params.term\n        });\n      },\n      transport: function (params, success, failure) {\n        var $request = $.ajax(params);\n\n        $request.then(success);\n        $request.fail(failure);\n\n        return $request;\n      }\n    };\n\n    return $.extend({}, defaults, options, true);\n  };\n\n  AjaxAdapter.prototype.processResults = function (results) {\n    return results;\n  };\n\n  AjaxAdapter.prototype.query = function (params, callback) {\n    var matches = [];\n    var self = this;\n\n    if (this._request != null) {\n      // JSONP requests cannot always be aborted\n      if ($.isFunction(this._request.abort)) {\n        this._request.abort();\n      }\n\n      this._request = null;\n    }\n\n    var options = $.extend({\n      type: 'GET'\n    }, this.ajaxOptions);\n\n    if (typeof options.url === 'function') {\n      options.url = options.url.call(this.$element, params);\n    }\n\n    if (typeof options.data === 'function') {\n      options.data = options.data.call(this.$element, params);\n    }\n\n    function request () {\n      var $request = options.transport(options, function (data) {\n        var results = self.processResults(data, params);\n\n        if (self.options.get('debug') && window.console && console.error) {\n          // Check to make sure that the response included a `results` key.\n          if (!results || !results.results || !$.isArray(results.results)) {\n            console.error(\n              'Select2: The AJAX results did not return an array in the ' +\n              '`results` key of the response.'\n            );\n          }\n        }\n\n        callback(results);\n      }, function () {\n        // Attempt to detect if a request was aborted\n        // Only works if the transport exposes a status property\n        if ('status' in $request &&\n            ($request.status === 0 || $request.status === '0')) {\n          return;\n        }\n\n        self.trigger('results:message', {\n          message: 'errorLoading'\n        });\n      });\n\n      self._request = $request;\n    }\n\n    if (this.ajaxOptions.delay && params.term != null) {\n      if (this._queryTimeout) {\n        window.clearTimeout(this._queryTimeout);\n      }\n\n      this._queryTimeout = window.setTimeout(request, this.ajaxOptions.delay);\n    } else {\n      request();\n    }\n  };\n\n  return AjaxAdapter;\n});\n\nS2.define('select2/data/tags',[\n  'jquery'\n], function ($) {\n  function Tags (decorated, $element, options) {\n    var tags = options.get('tags');\n\n    var createTag = options.get('createTag');\n\n    if (createTag !== undefined) {\n      this.createTag = createTag;\n    }\n\n    var insertTag = options.get('insertTag');\n\n    if (insertTag !== undefined) {\n        this.insertTag = insertTag;\n    }\n\n    decorated.call(this, $element, options);\n\n    if ($.isArray(tags)) {\n      for (var t = 0; t < tags.length; t++) {\n        var tag = tags[t];\n        var item = this._normalizeItem(tag);\n\n        var $option = this.option(item);\n\n        this.$element.append($option);\n      }\n    }\n  }\n\n  Tags.prototype.query = function (decorated, params, callback) {\n    var self = this;\n\n    this._removeOldTags();\n\n    if (params.term == null || params.page != null) {\n      decorated.call(this, params, callback);\n      return;\n    }\n\n    function wrapper (obj, child) {\n      var data = obj.results;\n\n      for (var i = 0; i < data.length; i++) {\n        var option = data[i];\n\n        var checkChildren = (\n          option.children != null &&\n          !wrapper({\n            results: option.children\n          }, true)\n        );\n\n        var optionText = (option.text || '').toUpperCase();\n        var paramsTerm = (params.term || '').toUpperCase();\n\n        var checkText = optionText === paramsTerm;\n\n        if (checkText || checkChildren) {\n          if (child) {\n            return false;\n          }\n\n          obj.data = data;\n          callback(obj);\n\n          return;\n        }\n      }\n\n      if (child) {\n        return true;\n      }\n\n      var tag = self.createTag(params);\n\n      if (tag != null) {\n        var $option = self.option(tag);\n        $option.attr('data-select2-tag', true);\n\n        self.addOptions([$option]);\n\n        self.insertTag(data, tag);\n      }\n\n      obj.results = data;\n\n      callback(obj);\n    }\n\n    decorated.call(this, params, wrapper);\n  };\n\n  Tags.prototype.createTag = function (decorated, params) {\n    var term = $.trim(params.term);\n\n    if (term === '') {\n      return null;\n    }\n\n    return {\n      id: term,\n      text: term\n    };\n  };\n\n  Tags.prototype.insertTag = function (_, data, tag) {\n    data.unshift(tag);\n  };\n\n  Tags.prototype._removeOldTags = function (_) {\n    var $options = this.$element.find('option[data-select2-tag]');\n\n    $options.each(function () {\n      if (this.selected) {\n        return;\n      }\n\n      $(this).remove();\n    });\n  };\n\n  return Tags;\n});\n\nS2.define('select2/data/tokenizer',[\n  'jquery'\n], function ($) {\n  function Tokenizer (decorated, $element, options) {\n    var tokenizer = options.get('tokenizer');\n\n    if (tokenizer !== undefined) {\n      this.tokenizer = tokenizer;\n    }\n\n    decorated.call(this, $element, options);\n  }\n\n  Tokenizer.prototype.bind = function (decorated, container, $container) {\n    decorated.call(this, container, $container);\n\n    this.$search =  container.dropdown.$search || container.selection.$search ||\n      $container.find('.select2-search__field');\n  };\n\n  Tokenizer.prototype.query = function (decorated, params, callback) {\n    var self = this;\n\n    function createAndSelect (data) {\n      // Normalize the data object so we can use it for checks\n      var item = self._normalizeItem(data);\n\n      // Check if the data object already exists as a tag\n      // Select it if it doesn't\n      var $existingOptions = self.$element.find('option').filter(function () {\n        return $(this).val() === item.id;\n      });\n\n      // If an existing option wasn't found for it, create the option\n      if (!$existingOptions.length) {\n        var $option = self.option(item);\n        $option.attr('data-select2-tag', true);\n\n        self._removeOldTags();\n        self.addOptions([$option]);\n      }\n\n      // Select the item, now that we know there is an option for it\n      select(item);\n    }\n\n    function select (data) {\n      self.trigger('select', {\n        data: data\n      });\n    }\n\n    params.term = params.term || '';\n\n    var tokenData = this.tokenizer(params, this.options, createAndSelect);\n\n    if (tokenData.term !== params.term) {\n      // Replace the search term if we have the search box\n      if (this.$search.length) {\n        this.$search.val(tokenData.term);\n        this.$search.trigger('focus');\n      }\n\n      params.term = tokenData.term;\n    }\n\n    decorated.call(this, params, callback);\n  };\n\n  Tokenizer.prototype.tokenizer = function (_, params, options, callback) {\n    var separators = options.get('tokenSeparators') || [];\n    var term = params.term;\n    var i = 0;\n\n    var createTag = this.createTag || function (params) {\n      return {\n        id: params.term,\n        text: params.term\n      };\n    };\n\n    while (i < term.length) {\n      var termChar = term[i];\n\n      if ($.inArray(termChar, separators) === -1) {\n        i++;\n\n        continue;\n      }\n\n      var part = term.substr(0, i);\n      var partParams = $.extend({}, params, {\n        term: part\n      });\n\n      var data = createTag(partParams);\n\n      if (data == null) {\n        i++;\n        continue;\n      }\n\n      callback(data);\n\n      // Reset the term to not include the tokenized portion\n      term = term.substr(i + 1) || '';\n      i = 0;\n    }\n\n    return {\n      term: term\n    };\n  };\n\n  return Tokenizer;\n});\n\nS2.define('select2/data/minimumInputLength',[\n\n], function () {\n  function MinimumInputLength (decorated, $e, options) {\n    this.minimumInputLength = options.get('minimumInputLength');\n\n    decorated.call(this, $e, options);\n  }\n\n  MinimumInputLength.prototype.query = function (decorated, params, callback) {\n    params.term = params.term || '';\n\n    if (params.term.length < this.minimumInputLength) {\n      this.trigger('results:message', {\n        message: 'inputTooShort',\n        args: {\n          minimum: this.minimumInputLength,\n          input: params.term,\n          params: params\n        }\n      });\n\n      return;\n    }\n\n    decorated.call(this, params, callback);\n  };\n\n  return MinimumInputLength;\n});\n\nS2.define('select2/data/maximumInputLength',[\n\n], function () {\n  function MaximumInputLength (decorated, $e, options) {\n    this.maximumInputLength = options.get('maximumInputLength');\n\n    decorated.call(this, $e, options);\n  }\n\n  MaximumInputLength.prototype.query = function (decorated, params, callback) {\n    params.term = params.term || '';\n\n    if (this.maximumInputLength > 0 &&\n        params.term.length > this.maximumInputLength) {\n      this.trigger('results:message', {\n        message: 'inputTooLong',\n        args: {\n          maximum: this.maximumInputLength,\n          input: params.term,\n          params: params\n        }\n      });\n\n      return;\n    }\n\n    decorated.call(this, params, callback);\n  };\n\n  return MaximumInputLength;\n});\n\nS2.define('select2/data/maximumSelectionLength',[\n\n], function (){\n  function MaximumSelectionLength (decorated, $e, options) {\n    this.maximumSelectionLength = options.get('maximumSelectionLength');\n\n    decorated.call(this, $e, options);\n  }\n\n  MaximumSelectionLength.prototype.bind =\n    function (decorated, container, $container) {\n      var self = this;\n\n      decorated.call(this, container, $container);\n\n      container.on('select', function () {\n        self._checkIfMaximumSelected();\n      });\n  };\n\n  MaximumSelectionLength.prototype.query =\n    function (decorated, params, callback) {\n      var self = this;\n\n      this._checkIfMaximumSelected(function () {\n        decorated.call(self, params, callback);\n      });\n  };\n\n  MaximumSelectionLength.prototype._checkIfMaximumSelected =\n    function (_, successCallback) {\n      var self = this;\n\n      this.current(function (currentData) {\n        var count = currentData != null ? currentData.length : 0;\n        if (self.maximumSelectionLength > 0 &&\n          count >= self.maximumSelectionLength) {\n          self.trigger('results:message', {\n            message: 'maximumSelected',\n            args: {\n              maximum: self.maximumSelectionLength\n            }\n          });\n          return;\n        }\n\n        if (successCallback) {\n          successCallback();\n        }\n      });\n  };\n\n  return MaximumSelectionLength;\n});\n\nS2.define('select2/dropdown',[\n  'jquery',\n  './utils'\n], function ($, Utils) {\n  function Dropdown ($element, options) {\n    this.$element = $element;\n    this.options = options;\n\n    Dropdown.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(Dropdown, Utils.Observable);\n\n  Dropdown.prototype.render = function () {\n    var $dropdown = $(\n      '<span class=\"select2-dropdown\">' +\n        '<span class=\"select2-results\"></span>' +\n      '</span>'\n    );\n\n    $dropdown.attr('dir', this.options.get('dir'));\n\n    this.$dropdown = $dropdown;\n\n    return $dropdown;\n  };\n\n  Dropdown.prototype.bind = function () {\n    // Should be implemented in subclasses\n  };\n\n  Dropdown.prototype.position = function ($dropdown, $container) {\n    // Should be implemented in subclasses\n  };\n\n  Dropdown.prototype.destroy = function () {\n    // Remove the dropdown from the DOM\n    this.$dropdown.remove();\n  };\n\n  return Dropdown;\n});\n\nS2.define('select2/dropdown/search',[\n  'jquery',\n  '../utils'\n], function ($, Utils) {\n  function Search () { }\n\n  Search.prototype.render = function (decorated) {\n    var $rendered = decorated.call(this);\n\n    var $search = $(\n      '<span class=\"select2-search select2-search--dropdown\">' +\n        '<input class=\"select2-search__field\" type=\"search\" tabindex=\"-1\"' +\n        ' autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"none\"' +\n        ' spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" />' +\n      '</span>'\n    );\n\n    this.$searchContainer = $search;\n    this.$search = $search.find('input');\n\n    $rendered.prepend($search);\n\n    return $rendered;\n  };\n\n  Search.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    var resultsId = container.id + '-results';\n\n    decorated.call(this, container, $container);\n\n    this.$search.on('keydown', function (evt) {\n      self.trigger('keypress', evt);\n\n      self._keyUpPrevented = evt.isDefaultPrevented();\n    });\n\n    // Workaround for browsers which do not support the `input` event\n    // This will prevent double-triggering of events for browsers which support\n    // both the `keyup` and `input` events.\n    this.$search.on('input', function (evt) {\n      // Unbind the duplicated `keyup` event\n      $(this).off('keyup');\n    });\n\n    this.$search.on('keyup input', function (evt) {\n      self.handleSearch(evt);\n    });\n\n    container.on('open', function () {\n      self.$search.attr('tabindex', 0);\n      self.$search.attr('aria-controls', resultsId);\n\n      self.$search.trigger('focus');\n\n      window.setTimeout(function () {\n        self.$search.trigger('focus');\n      }, 0);\n    });\n\n    container.on('close', function () {\n      self.$search.attr('tabindex', -1);\n      self.$search.removeAttr('aria-controls');\n      self.$search.removeAttr('aria-activedescendant');\n\n      self.$search.val('');\n      self.$search.trigger('blur');\n    });\n\n    container.on('focus', function () {\n      if (!container.isOpen()) {\n        self.$search.trigger('focus');\n      }\n    });\n\n    container.on('results:all', function (params) {\n      if (params.query.term == null || params.query.term === '') {\n        var showSearch = self.showSearch(params);\n\n        if (showSearch) {\n          self.$searchContainer.removeClass('select2-search--hide');\n        } else {\n          self.$searchContainer.addClass('select2-search--hide');\n        }\n      }\n    });\n\n    container.on('results:focus', function (params) {\n      if (params.data._resultId) {\n        self.$search.attr('aria-activedescendant', params.data._resultId);\n      } else {\n        self.$search.removeAttr('aria-activedescendant');\n      }\n    });\n  };\n\n  Search.prototype.handleSearch = function (evt) {\n    if (!this._keyUpPrevented) {\n      var input = this.$search.val();\n\n      this.trigger('query', {\n        term: input\n      });\n    }\n\n    this._keyUpPrevented = false;\n  };\n\n  Search.prototype.showSearch = function (_, params) {\n    return true;\n  };\n\n  return Search;\n});\n\nS2.define('select2/dropdown/hidePlaceholder',[\n\n], function () {\n  function HidePlaceholder (decorated, $element, options, dataAdapter) {\n    this.placeholder = this.normalizePlaceholder(options.get('placeholder'));\n\n    decorated.call(this, $element, options, dataAdapter);\n  }\n\n  HidePlaceholder.prototype.append = function (decorated, data) {\n    data.results = this.removePlaceholder(data.results);\n\n    decorated.call(this, data);\n  };\n\n  HidePlaceholder.prototype.normalizePlaceholder = function (_, placeholder) {\n    if (typeof placeholder === 'string') {\n      placeholder = {\n        id: '',\n        text: placeholder\n      };\n    }\n\n    return placeholder;\n  };\n\n  HidePlaceholder.prototype.removePlaceholder = function (_, data) {\n    var modifiedData = data.slice(0);\n\n    for (var d = data.length - 1; d >= 0; d--) {\n      var item = data[d];\n\n      if (this.placeholder.id === item.id) {\n        modifiedData.splice(d, 1);\n      }\n    }\n\n    return modifiedData;\n  };\n\n  return HidePlaceholder;\n});\n\nS2.define('select2/dropdown/infiniteScroll',[\n  'jquery'\n], function ($) {\n  function InfiniteScroll (decorated, $element, options, dataAdapter) {\n    this.lastParams = {};\n\n    decorated.call(this, $element, options, dataAdapter);\n\n    this.$loadingMore = this.createLoadingMore();\n    this.loading = false;\n  }\n\n  InfiniteScroll.prototype.append = function (decorated, data) {\n    this.$loadingMore.remove();\n    this.loading = false;\n\n    decorated.call(this, data);\n\n    if (this.showLoadingMore(data)) {\n      this.$results.append(this.$loadingMore);\n      this.loadMoreIfNeeded();\n    }\n  };\n\n  InfiniteScroll.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('query', function (params) {\n      self.lastParams = params;\n      self.loading = true;\n    });\n\n    container.on('query:append', function (params) {\n      self.lastParams = params;\n      self.loading = true;\n    });\n\n    this.$results.on('scroll', this.loadMoreIfNeeded.bind(this));\n  };\n\n  InfiniteScroll.prototype.loadMoreIfNeeded = function () {\n    var isLoadMoreVisible = $.contains(\n      document.documentElement,\n      this.$loadingMore[0]\n    );\n\n    if (this.loading || !isLoadMoreVisible) {\n      return;\n    }\n\n    var currentOffset = this.$results.offset().top +\n      this.$results.outerHeight(false);\n    var loadingMoreOffset = this.$loadingMore.offset().top +\n      this.$loadingMore.outerHeight(false);\n\n    if (currentOffset + 50 >= loadingMoreOffset) {\n      this.loadMore();\n    }\n  };\n\n  InfiniteScroll.prototype.loadMore = function () {\n    this.loading = true;\n\n    var params = $.extend({}, {page: 1}, this.lastParams);\n\n    params.page++;\n\n    this.trigger('query:append', params);\n  };\n\n  InfiniteScroll.prototype.showLoadingMore = function (_, data) {\n    return data.pagination && data.pagination.more;\n  };\n\n  InfiniteScroll.prototype.createLoadingMore = function () {\n    var $option = $(\n      '<li ' +\n      'class=\"select2-results__option select2-results__option--load-more\"' +\n      'role=\"option\" aria-disabled=\"true\"></li>'\n    );\n\n    var message = this.options.get('translations').get('loadingMore');\n\n    $option.html(message(this.lastParams));\n\n    return $option;\n  };\n\n  return InfiniteScroll;\n});\n\nS2.define('select2/dropdown/attachBody',[\n  'jquery',\n  '../utils'\n], function ($, Utils) {\n  function AttachBody (decorated, $element, options) {\n    this.$dropdownParent = $(options.get('dropdownParent') || document.body);\n\n    decorated.call(this, $element, options);\n  }\n\n  AttachBody.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('open', function () {\n      self._showDropdown();\n      self._attachPositioningHandler(container);\n\n      // Must bind after the results handlers to ensure correct sizing\n      self._bindContainerResultHandlers(container);\n    });\n\n    container.on('close', function () {\n      self._hideDropdown();\n      self._detachPositioningHandler(container);\n    });\n\n    this.$dropdownContainer.on('mousedown', function (evt) {\n      evt.stopPropagation();\n    });\n  };\n\n  AttachBody.prototype.destroy = function (decorated) {\n    decorated.call(this);\n\n    this.$dropdownContainer.remove();\n  };\n\n  AttachBody.prototype.position = function (decorated, $dropdown, $container) {\n    // Clone all of the container classes\n    $dropdown.attr('class', $container.attr('class'));\n\n    $dropdown.removeClass('select2');\n    $dropdown.addClass('select2-container--open');\n\n    $dropdown.css({\n      position: 'absolute',\n      top: -999999\n    });\n\n    this.$container = $container;\n  };\n\n  AttachBody.prototype.render = function (decorated) {\n    var $container = $('<span></span>');\n\n    var $dropdown = decorated.call(this);\n    $container.append($dropdown);\n\n    this.$dropdownContainer = $container;\n\n    return $container;\n  };\n\n  AttachBody.prototype._hideDropdown = function (decorated) {\n    this.$dropdownContainer.detach();\n  };\n\n  AttachBody.prototype._bindContainerResultHandlers =\n      function (decorated, container) {\n\n    // These should only be bound once\n    if (this._containerResultsHandlersBound) {\n      return;\n    }\n\n    var self = this;\n\n    container.on('results:all', function () {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n\n    container.on('results:append', function () {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n\n    container.on('results:message', function () {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n\n    container.on('select', function () {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n\n    container.on('unselect', function () {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n\n    this._containerResultsHandlersBound = true;\n  };\n\n  AttachBody.prototype._attachPositioningHandler =\n      function (decorated, container) {\n    var self = this;\n\n    var scrollEvent = 'scroll.select2.' + container.id;\n    var resizeEvent = 'resize.select2.' + container.id;\n    var orientationEvent = 'orientationchange.select2.' + container.id;\n\n    var $watchers = this.$container.parents().filter(Utils.hasScroll);\n    $watchers.each(function () {\n      Utils.StoreData(this, 'select2-scroll-position', {\n        x: $(this).scrollLeft(),\n        y: $(this).scrollTop()\n      });\n    });\n\n    $watchers.on(scrollEvent, function (ev) {\n      var position = Utils.GetData(this, 'select2-scroll-position');\n      $(this).scrollTop(position.y);\n    });\n\n    $(window).on(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent,\n      function (e) {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n  };\n\n  AttachBody.prototype._detachPositioningHandler =\n      function (decorated, container) {\n    var scrollEvent = 'scroll.select2.' + container.id;\n    var resizeEvent = 'resize.select2.' + container.id;\n    var orientationEvent = 'orientationchange.select2.' + container.id;\n\n    var $watchers = this.$container.parents().filter(Utils.hasScroll);\n    $watchers.off(scrollEvent);\n\n    $(window).off(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent);\n  };\n\n  AttachBody.prototype._positionDropdown = function () {\n    var $window = $(window);\n\n    var isCurrentlyAbove = this.$dropdown.hasClass('select2-dropdown--above');\n    var isCurrentlyBelow = this.$dropdown.hasClass('select2-dropdown--below');\n\n    var newDirection = null;\n\n    var offset = this.$container.offset();\n\n    offset.bottom = offset.top + this.$container.outerHeight(false);\n\n    var container = {\n      height: this.$container.outerHeight(false)\n    };\n\n    container.top = offset.top;\n    container.bottom = offset.top + container.height;\n\n    var dropdown = {\n      height: this.$dropdown.outerHeight(false)\n    };\n\n    var viewport = {\n      top: $window.scrollTop(),\n      bottom: $window.scrollTop() + $window.height()\n    };\n\n    var enoughRoomAbove = viewport.top < (offset.top - dropdown.height);\n    var enoughRoomBelow = viewport.bottom > (offset.bottom + dropdown.height);\n\n    var css = {\n      left: offset.left,\n      top: container.bottom\n    };\n\n    // Determine what the parent element is to use for calculating the offset\n    var $offsetParent = this.$dropdownParent;\n\n    // For statically positioned elements, we need to get the element\n    // that is determining the offset\n    if ($offsetParent.css('position') === 'static') {\n      $offsetParent = $offsetParent.offsetParent();\n    }\n\n    var parentOffset = {\n      top: 0,\n      left: 0\n    };\n\n    if (\n      $.contains(document.body, $offsetParent[0]) ||\n      $offsetParent[0].isConnected\n      ) {\n      parentOffset = $offsetParent.offset();\n    }\n\n    css.top -= parentOffset.top;\n    css.left -= parentOffset.left;\n\n    if (!isCurrentlyAbove && !isCurrentlyBelow) {\n      newDirection = 'below';\n    }\n\n    if (!enoughRoomBelow && enoughRoomAbove && !isCurrentlyAbove) {\n      newDirection = 'above';\n    } else if (!enoughRoomAbove && enoughRoomBelow && isCurrentlyAbove) {\n      newDirection = 'below';\n    }\n\n    if (newDirection == 'above' ||\n      (isCurrentlyAbove && newDirection !== 'below')) {\n      css.top = container.top - parentOffset.top - dropdown.height;\n    }\n\n    if (newDirection != null) {\n      this.$dropdown\n        .removeClass('select2-dropdown--below select2-dropdown--above')\n        .addClass('select2-dropdown--' + newDirection);\n      this.$container\n        .removeClass('select2-container--below select2-container--above')\n        .addClass('select2-container--' + newDirection);\n    }\n\n    this.$dropdownContainer.css(css);\n  };\n\n  AttachBody.prototype._resizeDropdown = function () {\n    var css = {\n      width: this.$container.outerWidth(false) + 'px'\n    };\n\n    if (this.options.get('dropdownAutoWidth')) {\n      css.minWidth = css.width;\n      css.position = 'relative';\n      css.width = 'auto';\n    }\n\n    this.$dropdown.css(css);\n  };\n\n  AttachBody.prototype._showDropdown = function (decorated) {\n    this.$dropdownContainer.appendTo(this.$dropdownParent);\n\n    this._positionDropdown();\n    this._resizeDropdown();\n  };\n\n  return AttachBody;\n});\n\nS2.define('select2/dropdown/minimumResultsForSearch',[\n\n], function () {\n  function countResults (data) {\n    var count = 0;\n\n    for (var d = 0; d < data.length; d++) {\n      var item = data[d];\n\n      if (item.children) {\n        count += countResults(item.children);\n      } else {\n        count++;\n      }\n    }\n\n    return count;\n  }\n\n  function MinimumResultsForSearch (decorated, $element, options, dataAdapter) {\n    this.minimumResultsForSearch = options.get('minimumResultsForSearch');\n\n    if (this.minimumResultsForSearch < 0) {\n      this.minimumResultsForSearch = Infinity;\n    }\n\n    decorated.call(this, $element, options, dataAdapter);\n  }\n\n  MinimumResultsForSearch.prototype.showSearch = function (decorated, params) {\n    if (countResults(params.data.results) < this.minimumResultsForSearch) {\n      return false;\n    }\n\n    return decorated.call(this, params);\n  };\n\n  return MinimumResultsForSearch;\n});\n\nS2.define('select2/dropdown/selectOnClose',[\n  '../utils'\n], function (Utils) {\n  function SelectOnClose () { }\n\n  SelectOnClose.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('close', function (params) {\n      self._handleSelectOnClose(params);\n    });\n  };\n\n  SelectOnClose.prototype._handleSelectOnClose = function (_, params) {\n    if (params && params.originalSelect2Event != null) {\n      var event = params.originalSelect2Event;\n\n      // Don't select an item if the close event was triggered from a select or\n      // unselect event\n      if (event._type === 'select' || event._type === 'unselect') {\n        return;\n      }\n    }\n\n    var $highlightedResults = this.getHighlightedResults();\n\n    // Only select highlighted results\n    if ($highlightedResults.length < 1) {\n      return;\n    }\n\n    var data = Utils.GetData($highlightedResults[0], 'data');\n\n    // Don't re-select already selected resulte\n    if (\n      (data.element != null && data.element.selected) ||\n      (data.element == null && data.selected)\n    ) {\n      return;\n    }\n\n    this.trigger('select', {\n        data: data\n    });\n  };\n\n  return SelectOnClose;\n});\n\nS2.define('select2/dropdown/closeOnSelect',[\n\n], function () {\n  function CloseOnSelect () { }\n\n  CloseOnSelect.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('select', function (evt) {\n      self._selectTriggered(evt);\n    });\n\n    container.on('unselect', function (evt) {\n      self._selectTriggered(evt);\n    });\n  };\n\n  CloseOnSelect.prototype._selectTriggered = function (_, evt) {\n    var originalEvent = evt.originalEvent;\n\n    // Don't close if the control key is being held\n    if (originalEvent && (originalEvent.ctrlKey || originalEvent.metaKey)) {\n      return;\n    }\n\n    this.trigger('close', {\n      originalEvent: originalEvent,\n      originalSelect2Event: evt\n    });\n  };\n\n  return CloseOnSelect;\n});\n\nS2.define('select2/i18n/en',[],function () {\n  // English\n  return {\n    errorLoading: function () {\n      return 'The results could not be loaded.';\n    },\n    inputTooLong: function (args) {\n      var overChars = args.input.length - args.maximum;\n\n      var message = 'Please delete ' + overChars + ' character';\n\n      if (overChars != 1) {\n        message += 's';\n      }\n\n      return message;\n    },\n    inputTooShort: function (args) {\n      var remainingChars = args.minimum - args.input.length;\n\n      var message = 'Please enter ' + remainingChars + ' or more characters';\n\n      return message;\n    },\n    loadingMore: function () {\n      return 'Loading more results…';\n    },\n    maximumSelected: function (args) {\n      var message = 'You can only select ' + args.maximum + ' item';\n\n      if (args.maximum != 1) {\n        message += 's';\n      }\n\n      return message;\n    },\n    noResults: function () {\n      return 'No results found';\n    },\n    searching: function () {\n      return 'Searching…';\n    },\n    removeAllItems: function () {\n      return 'Remove all items';\n    }\n  };\n});\n\nS2.define('select2/defaults',[\n  'jquery',\n  'require',\n\n  './results',\n\n  './selection/single',\n  './selection/multiple',\n  './selection/placeholder',\n  './selection/allowClear',\n  './selection/search',\n  './selection/eventRelay',\n\n  './utils',\n  './translation',\n  './diacritics',\n\n  './data/select',\n  './data/array',\n  './data/ajax',\n  './data/tags',\n  './data/tokenizer',\n  './data/minimumInputLength',\n  './data/maximumInputLength',\n  './data/maximumSelectionLength',\n\n  './dropdown',\n  './dropdown/search',\n  './dropdown/hidePlaceholder',\n  './dropdown/infiniteScroll',\n  './dropdown/attachBody',\n  './dropdown/minimumResultsForSearch',\n  './dropdown/selectOnClose',\n  './dropdown/closeOnSelect',\n\n  './i18n/en'\n], function ($, require,\n\n             ResultsList,\n\n             SingleSelection, MultipleSelection, Placeholder, AllowClear,\n             SelectionSearch, EventRelay,\n\n             Utils, Translation, DIACRITICS,\n\n             SelectData, ArrayData, AjaxData, Tags, Tokenizer,\n             MinimumInputLength, MaximumInputLength, MaximumSelectionLength,\n\n             Dropdown, DropdownSearch, HidePlaceholder, InfiniteScroll,\n             AttachBody, MinimumResultsForSearch, SelectOnClose, CloseOnSelect,\n\n             EnglishTranslation) {\n  function Defaults () {\n    this.reset();\n  }\n\n  Defaults.prototype.apply = function (options) {\n    options = $.extend(true, {}, this.defaults, options);\n\n    if (options.dataAdapter == null) {\n      if (options.ajax != null) {\n        options.dataAdapter = AjaxData;\n      } else if (options.data != null) {\n        options.dataAdapter = ArrayData;\n      } else {\n        options.dataAdapter = SelectData;\n      }\n\n      if (options.minimumInputLength > 0) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          MinimumInputLength\n        );\n      }\n\n      if (options.maximumInputLength > 0) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          MaximumInputLength\n        );\n      }\n\n      if (options.maximumSelectionLength > 0) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          MaximumSelectionLength\n        );\n      }\n\n      if (options.tags) {\n        options.dataAdapter = Utils.Decorate(options.dataAdapter, Tags);\n      }\n\n      if (options.tokenSeparators != null || options.tokenizer != null) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          Tokenizer\n        );\n      }\n\n      if (options.query != null) {\n        var Query = require(options.amdBase + 'compat/query');\n\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          Query\n        );\n      }\n\n      if (options.initSelection != null) {\n        var InitSelection = require(options.amdBase + 'compat/initSelection');\n\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          InitSelection\n        );\n      }\n    }\n\n    if (options.resultsAdapter == null) {\n      options.resultsAdapter = ResultsList;\n\n      if (options.ajax != null) {\n        options.resultsAdapter = Utils.Decorate(\n          options.resultsAdapter,\n          InfiniteScroll\n        );\n      }\n\n      if (options.placeholder != null) {\n        options.resultsAdapter = Utils.Decorate(\n          options.resultsAdapter,\n          HidePlaceholder\n        );\n      }\n\n      if (options.selectOnClose) {\n        options.resultsAdapter = Utils.Decorate(\n          options.resultsAdapter,\n          SelectOnClose\n        );\n      }\n    }\n\n    if (options.dropdownAdapter == null) {\n      if (options.multiple) {\n        options.dropdownAdapter = Dropdown;\n      } else {\n        var SearchableDropdown = Utils.Decorate(Dropdown, DropdownSearch);\n\n        options.dropdownAdapter = SearchableDropdown;\n      }\n\n      if (options.minimumResultsForSearch !== 0) {\n        options.dropdownAdapter = Utils.Decorate(\n          options.dropdownAdapter,\n          MinimumResultsForSearch\n        );\n      }\n\n      if (options.closeOnSelect) {\n        options.dropdownAdapter = Utils.Decorate(\n          options.dropdownAdapter,\n          CloseOnSelect\n        );\n      }\n\n      if (\n        options.dropdownCssClass != null ||\n        options.dropdownCss != null ||\n        options.adaptDropdownCssClass != null\n      ) {\n        var DropdownCSS = require(options.amdBase + 'compat/dropdownCss');\n\n        options.dropdownAdapter = Utils.Decorate(\n          options.dropdownAdapter,\n          DropdownCSS\n        );\n      }\n\n      options.dropdownAdapter = Utils.Decorate(\n        options.dropdownAdapter,\n        AttachBody\n      );\n    }\n\n    if (options.selectionAdapter == null) {\n      if (options.multiple) {\n        options.selectionAdapter = MultipleSelection;\n      } else {\n        options.selectionAdapter = SingleSelection;\n      }\n\n      // Add the placeholder mixin if a placeholder was specified\n      if (options.placeholder != null) {\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          Placeholder\n        );\n      }\n\n      if (options.allowClear) {\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          AllowClear\n        );\n      }\n\n      if (options.multiple) {\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          SelectionSearch\n        );\n      }\n\n      if (\n        options.containerCssClass != null ||\n        options.containerCss != null ||\n        options.adaptContainerCssClass != null\n      ) {\n        var ContainerCSS = require(options.amdBase + 'compat/containerCss');\n\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          ContainerCSS\n        );\n      }\n\n      options.selectionAdapter = Utils.Decorate(\n        options.selectionAdapter,\n        EventRelay\n      );\n    }\n\n    // If the defaults were not previously applied from an element, it is\n    // possible for the language option to have not been resolved\n    options.language = this._resolveLanguage(options.language);\n\n    // Always fall back to English since it will always be complete\n    options.language.push('en');\n\n    var uniqueLanguages = [];\n\n    for (var l = 0; l < options.language.length; l++) {\n      var language = options.language[l];\n\n      if (uniqueLanguages.indexOf(language) === -1) {\n        uniqueLanguages.push(language);\n      }\n    }\n\n    options.language = uniqueLanguages;\n\n    options.translations = this._processTranslations(\n      options.language,\n      options.debug\n    );\n\n    return options;\n  };\n\n  Defaults.prototype.reset = function () {\n    function stripDiacritics (text) {\n      // Used 'uni range + named function' from http://jsperf.com/diacritics/18\n      function match(a) {\n        return DIACRITICS[a] || a;\n      }\n\n      return text.replace(/[^\\u0000-\\u007E]/g, match);\n    }\n\n    function matcher (params, data) {\n      // Always return the object if there is nothing to compare\n      if ($.trim(params.term) === '') {\n        return data;\n      }\n\n      // Do a recursive check for options with children\n      if (data.children && data.children.length > 0) {\n        // Clone the data object if there are children\n        // This is required as we modify the object to remove any non-matches\n        var match = $.extend(true, {}, data);\n\n        // Check each child of the option\n        for (var c = data.children.length - 1; c >= 0; c--) {\n          var child = data.children[c];\n\n          var matches = matcher(params, child);\n\n          // If there wasn't a match, remove the object in the array\n          if (matches == null) {\n            match.children.splice(c, 1);\n          }\n        }\n\n        // If any children matched, return the new object\n        if (match.children.length > 0) {\n          return match;\n        }\n\n        // If there were no matching children, check just the plain object\n        return matcher(params, match);\n      }\n\n      var original = stripDiacritics(data.text).toUpperCase();\n      var term = stripDiacritics(params.term).toUpperCase();\n\n      // Check if the text contains the term\n      if (original.indexOf(term) > -1) {\n        return data;\n      }\n\n      // If it doesn't contain the term, don't return anything\n      return null;\n    }\n\n    this.defaults = {\n      amdBase: './',\n      amdLanguageBase: './i18n/',\n      closeOnSelect: true,\n      debug: false,\n      dropdownAutoWidth: false,\n      escapeMarkup: Utils.escapeMarkup,\n      language: {},\n      matcher: matcher,\n      minimumInputLength: 0,\n      maximumInputLength: 0,\n      maximumSelectionLength: 0,\n      minimumResultsForSearch: 0,\n      selectOnClose: false,\n      scrollAfterSelect: false,\n      sorter: function (data) {\n        return data;\n      },\n      templateResult: function (result) {\n        return result.text;\n      },\n      templateSelection: function (selection) {\n        return selection.text;\n      },\n      theme: 'default',\n      width: 'resolve'\n    };\n  };\n\n  Defaults.prototype.applyFromElement = function (options, $element) {\n    var optionLanguage = options.language;\n    var defaultLanguage = this.defaults.language;\n    var elementLanguage = $element.prop('lang');\n    var parentLanguage = $element.closest('[lang]').prop('lang');\n\n    var languages = Array.prototype.concat.call(\n      this._resolveLanguage(elementLanguage),\n      this._resolveLanguage(optionLanguage),\n      this._resolveLanguage(defaultLanguage),\n      this._resolveLanguage(parentLanguage)\n    );\n\n    options.language = languages;\n\n    return options;\n  };\n\n  Defaults.prototype._resolveLanguage = function (language) {\n    if (!language) {\n      return [];\n    }\n\n    if ($.isEmptyObject(language)) {\n      return [];\n    }\n\n    if ($.isPlainObject(language)) {\n      return [language];\n    }\n\n    var languages;\n\n    if (!$.isArray(language)) {\n      languages = [language];\n    } else {\n      languages = language;\n    }\n\n    var resolvedLanguages = [];\n\n    for (var l = 0; l < languages.length; l++) {\n      resolvedLanguages.push(languages[l]);\n\n      if (typeof languages[l] === 'string' && languages[l].indexOf('-') > 0) {\n        // Extract the region information if it is included\n        var languageParts = languages[l].split('-');\n        var baseLanguage = languageParts[0];\n\n        resolvedLanguages.push(baseLanguage);\n      }\n    }\n\n    return resolvedLanguages;\n  };\n\n  Defaults.prototype._processTranslations = function (languages, debug) {\n    var translations = new Translation();\n\n    for (var l = 0; l < languages.length; l++) {\n      var languageData = new Translation();\n\n      var language = languages[l];\n\n      if (typeof language === 'string') {\n        try {\n          // Try to load it with the original name\n          languageData = Translation.loadPath(language);\n        } catch (e) {\n          try {\n            // If we couldn't load it, check if it wasn't the full path\n            language = this.defaults.amdLanguageBase + language;\n            languageData = Translation.loadPath(language);\n          } catch (ex) {\n            // The translation could not be loaded at all. Sometimes this is\n            // because of a configuration problem, other times this can be\n            // because of how Select2 helps load all possible translation files\n            if (debug && window.console && console.warn) {\n              console.warn(\n                'Select2: The language file for \"' + language + '\" could ' +\n                'not be automatically loaded. A fallback will be used instead.'\n              );\n            }\n          }\n        }\n      } else if ($.isPlainObject(language)) {\n        languageData = new Translation(language);\n      } else {\n        languageData = language;\n      }\n\n      translations.extend(languageData);\n    }\n\n    return translations;\n  };\n\n  Defaults.prototype.set = function (key, value) {\n    var camelKey = $.camelCase(key);\n\n    var data = {};\n    data[camelKey] = value;\n\n    var convertedData = Utils._convertData(data);\n\n    $.extend(true, this.defaults, convertedData);\n  };\n\n  var defaults = new Defaults();\n\n  return defaults;\n});\n\nS2.define('select2/options',[\n  'require',\n  'jquery',\n  './defaults',\n  './utils'\n], function (require, $, Defaults, Utils) {\n  function Options (options, $element) {\n    this.options = options;\n\n    if ($element != null) {\n      this.fromElement($element);\n    }\n\n    if ($element != null) {\n      this.options = Defaults.applyFromElement(this.options, $element);\n    }\n\n    this.options = Defaults.apply(this.options);\n\n    if ($element && $element.is('input')) {\n      var InputCompat = require(this.get('amdBase') + 'compat/inputData');\n\n      this.options.dataAdapter = Utils.Decorate(\n        this.options.dataAdapter,\n        InputCompat\n      );\n    }\n  }\n\n  Options.prototype.fromElement = function ($e) {\n    var excludedData = ['select2'];\n\n    if (this.options.multiple == null) {\n      this.options.multiple = $e.prop('multiple');\n    }\n\n    if (this.options.disabled == null) {\n      this.options.disabled = $e.prop('disabled');\n    }\n\n    if (this.options.dir == null) {\n      if ($e.prop('dir')) {\n        this.options.dir = $e.prop('dir');\n      } else if ($e.closest('[dir]').prop('dir')) {\n        this.options.dir = $e.closest('[dir]').prop('dir');\n      } else {\n        this.options.dir = 'ltr';\n      }\n    }\n\n    $e.prop('disabled', this.options.disabled);\n    $e.prop('multiple', this.options.multiple);\n\n    if (Utils.GetData($e[0], 'select2Tags')) {\n      if (this.options.debug && window.console && console.warn) {\n        console.warn(\n          'Select2: The `data-select2-tags` attribute has been changed to ' +\n          'use the `data-data` and `data-tags=\"true\"` attributes and will be ' +\n          'removed in future versions of Select2.'\n        );\n      }\n\n      Utils.StoreData($e[0], 'data', Utils.GetData($e[0], 'select2Tags'));\n      Utils.StoreData($e[0], 'tags', true);\n    }\n\n    if (Utils.GetData($e[0], 'ajaxUrl')) {\n      if (this.options.debug && window.console && console.warn) {\n        console.warn(\n          'Select2: The `data-ajax-url` attribute has been changed to ' +\n          '`data-ajax--url` and support for the old attribute will be removed' +\n          ' in future versions of Select2.'\n        );\n      }\n\n      $e.attr('ajax--url', Utils.GetData($e[0], 'ajaxUrl'));\n      Utils.StoreData($e[0], 'ajax-Url', Utils.GetData($e[0], 'ajaxUrl'));\n    }\n\n    var dataset = {};\n\n    function upperCaseLetter(_, letter) {\n      return letter.toUpperCase();\n    }\n\n    // Pre-load all of the attributes which are prefixed with `data-`\n    for (var attr = 0; attr < $e[0].attributes.length; attr++) {\n      var attributeName = $e[0].attributes[attr].name;\n      var prefix = 'data-';\n\n      if (attributeName.substr(0, prefix.length) == prefix) {\n        // Get the contents of the attribute after `data-`\n        var dataName = attributeName.substring(prefix.length);\n\n        // Get the data contents from the consistent source\n        // This is more than likely the jQuery data helper\n        var dataValue = Utils.GetData($e[0], dataName);\n\n        // camelCase the attribute name to match the spec\n        var camelDataName = dataName.replace(/-([a-z])/g, upperCaseLetter);\n\n        // Store the data attribute contents into the dataset since\n        dataset[camelDataName] = dataValue;\n      }\n    }\n\n    // Prefer the element's `dataset` attribute if it exists\n    // jQuery 1.x does not correctly handle data attributes with multiple dashes\n    if ($.fn.jquery && $.fn.jquery.substr(0, 2) == '1.' && $e[0].dataset) {\n      dataset = $.extend(true, {}, $e[0].dataset, dataset);\n    }\n\n    // Prefer our internal data cache if it exists\n    var data = $.extend(true, {}, Utils.GetData($e[0]), dataset);\n\n    data = Utils._convertData(data);\n\n    for (var key in data) {\n      if ($.inArray(key, excludedData) > -1) {\n        continue;\n      }\n\n      if ($.isPlainObject(this.options[key])) {\n        $.extend(this.options[key], data[key]);\n      } else {\n        this.options[key] = data[key];\n      }\n    }\n\n    return this;\n  };\n\n  Options.prototype.get = function (key) {\n    return this.options[key];\n  };\n\n  Options.prototype.set = function (key, val) {\n    this.options[key] = val;\n  };\n\n  return Options;\n});\n\nS2.define('select2/core',[\n  'jquery',\n  './options',\n  './utils',\n  './keys'\n], function ($, Options, Utils, KEYS) {\n  var Select2 = function ($element, options) {\n    if (Utils.GetData($element[0], 'select2') != null) {\n      Utils.GetData($element[0], 'select2').destroy();\n    }\n\n    this.$element = $element;\n\n    this.id = this._generateId($element);\n\n    options = options || {};\n\n    this.options = new Options(options, $element);\n\n    Select2.__super__.constructor.call(this);\n\n    // Set up the tabindex\n\n    var tabindex = $element.attr('tabindex') || 0;\n    Utils.StoreData($element[0], 'old-tabindex', tabindex);\n    $element.attr('tabindex', '-1');\n\n    // Set up containers and adapters\n\n    var DataAdapter = this.options.get('dataAdapter');\n    this.dataAdapter = new DataAdapter($element, this.options);\n\n    var $container = this.render();\n\n    this._placeContainer($container);\n\n    var SelectionAdapter = this.options.get('selectionAdapter');\n    this.selection = new SelectionAdapter($element, this.options);\n    this.$selection = this.selection.render();\n\n    this.selection.position(this.$selection, $container);\n\n    var DropdownAdapter = this.options.get('dropdownAdapter');\n    this.dropdown = new DropdownAdapter($element, this.options);\n    this.$dropdown = this.dropdown.render();\n\n    this.dropdown.position(this.$dropdown, $container);\n\n    var ResultsAdapter = this.options.get('resultsAdapter');\n    this.results = new ResultsAdapter($element, this.options, this.dataAdapter);\n    this.$results = this.results.render();\n\n    this.results.position(this.$results, this.$dropdown);\n\n    // Bind events\n\n    var self = this;\n\n    // Bind the container to all of the adapters\n    this._bindAdapters();\n\n    // Register any DOM event handlers\n    this._registerDomEvents();\n\n    // Register any internal event handlers\n    this._registerDataEvents();\n    this._registerSelectionEvents();\n    this._registerDropdownEvents();\n    this._registerResultsEvents();\n    this._registerEvents();\n\n    // Set the initial state\n    this.dataAdapter.current(function (initialData) {\n      self.trigger('selection:update', {\n        data: initialData\n      });\n    });\n\n    // Hide the original select\n    $element.addClass('select2-hidden-accessible');\n    $element.attr('aria-hidden', 'true');\n\n    // Synchronize any monitored attributes\n    this._syncAttributes();\n\n    Utils.StoreData($element[0], 'select2', this);\n\n    // Ensure backwards compatibility with $element.data('select2').\n    $element.data('select2', this);\n  };\n\n  Utils.Extend(Select2, Utils.Observable);\n\n  Select2.prototype._generateId = function ($element) {\n    var id = '';\n\n    if ($element.attr('id') != null) {\n      id = $element.attr('id');\n    } else if ($element.attr('name') != null) {\n      id = $element.attr('name') + '-' + Utils.generateChars(2);\n    } else {\n      id = Utils.generateChars(4);\n    }\n\n    id = id.replace(/(:|\\.|\\[|\\]|,)/g, '');\n    id = 'select2-' + id;\n\n    return id;\n  };\n\n  Select2.prototype._placeContainer = function ($container) {\n    $container.insertAfter(this.$element);\n\n    var width = this._resolveWidth(this.$element, this.options.get('width'));\n\n    if (width != null) {\n      $container.css('width', width);\n    }\n  };\n\n  Select2.prototype._resolveWidth = function ($element, method) {\n    var WIDTH = /^width:(([-+]?([0-9]*\\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;\n\n    if (method == 'resolve') {\n      var styleWidth = this._resolveWidth($element, 'style');\n\n      if (styleWidth != null) {\n        return styleWidth;\n      }\n\n      return this._resolveWidth($element, 'element');\n    }\n\n    if (method == 'element') {\n      var elementWidth = $element.outerWidth(false);\n\n      if (elementWidth <= 0) {\n        return 'auto';\n      }\n\n      return elementWidth + 'px';\n    }\n\n    if (method == 'style') {\n      var style = $element.attr('style');\n\n      if (typeof(style) !== 'string') {\n        return null;\n      }\n\n      var attrs = style.split(';');\n\n      for (var i = 0, l = attrs.length; i < l; i = i + 1) {\n        var attr = attrs[i].replace(/\\s/g, '');\n        var matches = attr.match(WIDTH);\n\n        if (matches !== null && matches.length >= 1) {\n          return matches[1];\n        }\n      }\n\n      return null;\n    }\n\n    if (method == 'computedstyle') {\n      var computedStyle = window.getComputedStyle($element[0]);\n\n      return computedStyle.width;\n    }\n\n    return method;\n  };\n\n  Select2.prototype._bindAdapters = function () {\n    this.dataAdapter.bind(this, this.$container);\n    this.selection.bind(this, this.$container);\n\n    this.dropdown.bind(this, this.$container);\n    this.results.bind(this, this.$container);\n  };\n\n  Select2.prototype._registerDomEvents = function () {\n    var self = this;\n\n    this.$element.on('change.select2', function () {\n      self.dataAdapter.current(function (data) {\n        self.trigger('selection:update', {\n          data: data\n        });\n      });\n    });\n\n    this.$element.on('focus.select2', function (evt) {\n      self.trigger('focus', evt);\n    });\n\n    this._syncA = Utils.bind(this._syncAttributes, this);\n    this._syncS = Utils.bind(this._syncSubtree, this);\n\n    if (this.$element[0].attachEvent) {\n      this.$element[0].attachEvent('onpropertychange', this._syncA);\n    }\n\n    var observer = window.MutationObserver ||\n      window.WebKitMutationObserver ||\n      window.MozMutationObserver\n    ;\n\n    if (observer != null) {\n      this._observer = new observer(function (mutations) {\n        self._syncA();\n        self._syncS(null, mutations);\n      });\n      this._observer.observe(this.$element[0], {\n        attributes: true,\n        childList: true,\n        subtree: false\n      });\n    } else if (this.$element[0].addEventListener) {\n      this.$element[0].addEventListener(\n        'DOMAttrModified',\n        self._syncA,\n        false\n      );\n      this.$element[0].addEventListener(\n        'DOMNodeInserted',\n        self._syncS,\n        false\n      );\n      this.$element[0].addEventListener(\n        'DOMNodeRemoved',\n        self._syncS,\n        false\n      );\n    }\n  };\n\n  Select2.prototype._registerDataEvents = function () {\n    var self = this;\n\n    this.dataAdapter.on('*', function (name, params) {\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerSelectionEvents = function () {\n    var self = this;\n    var nonRelayEvents = ['toggle', 'focus'];\n\n    this.selection.on('toggle', function () {\n      self.toggleDropdown();\n    });\n\n    this.selection.on('focus', function (params) {\n      self.focus(params);\n    });\n\n    this.selection.on('*', function (name, params) {\n      if ($.inArray(name, nonRelayEvents) !== -1) {\n        return;\n      }\n\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerDropdownEvents = function () {\n    var self = this;\n\n    this.dropdown.on('*', function (name, params) {\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerResultsEvents = function () {\n    var self = this;\n\n    this.results.on('*', function (name, params) {\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerEvents = function () {\n    var self = this;\n\n    this.on('open', function () {\n      self.$container.addClass('select2-container--open');\n    });\n\n    this.on('close', function () {\n      self.$container.removeClass('select2-container--open');\n    });\n\n    this.on('enable', function () {\n      self.$container.removeClass('select2-container--disabled');\n    });\n\n    this.on('disable', function () {\n      self.$container.addClass('select2-container--disabled');\n    });\n\n    this.on('blur', function () {\n      self.$container.removeClass('select2-container--focus');\n    });\n\n    this.on('query', function (params) {\n      if (!self.isOpen()) {\n        self.trigger('open', {});\n      }\n\n      this.dataAdapter.query(params, function (data) {\n        self.trigger('results:all', {\n          data: data,\n          query: params\n        });\n      });\n    });\n\n    this.on('query:append', function (params) {\n      this.dataAdapter.query(params, function (data) {\n        self.trigger('results:append', {\n          data: data,\n          query: params\n        });\n      });\n    });\n\n    this.on('keypress', function (evt) {\n      var key = evt.which;\n\n      if (self.isOpen()) {\n        if (key === KEYS.ESC || key === KEYS.TAB ||\n            (key === KEYS.UP && evt.altKey)) {\n          self.close(evt);\n\n          evt.preventDefault();\n        } else if (key === KEYS.ENTER) {\n          self.trigger('results:select', {});\n\n          evt.preventDefault();\n        } else if ((key === KEYS.SPACE && evt.ctrlKey)) {\n          self.trigger('results:toggle', {});\n\n          evt.preventDefault();\n        } else if (key === KEYS.UP) {\n          self.trigger('results:previous', {});\n\n          evt.preventDefault();\n        } else if (key === KEYS.DOWN) {\n          self.trigger('results:next', {});\n\n          evt.preventDefault();\n        }\n      } else {\n        if (key === KEYS.ENTER || key === KEYS.SPACE ||\n            (key === KEYS.DOWN && evt.altKey)) {\n          self.open();\n\n          evt.preventDefault();\n        }\n      }\n    });\n  };\n\n  Select2.prototype._syncAttributes = function () {\n    this.options.set('disabled', this.$element.prop('disabled'));\n\n    if (this.isDisabled()) {\n      if (this.isOpen()) {\n        this.close();\n      }\n\n      this.trigger('disable', {});\n    } else {\n      this.trigger('enable', {});\n    }\n  };\n\n  Select2.prototype._isChangeMutation = function (evt, mutations) {\n    var changed = false;\n    var self = this;\n\n    // Ignore any mutation events raised for elements that aren't options or\n    // optgroups. This handles the case when the select element is destroyed\n    if (\n      evt && evt.target && (\n        evt.target.nodeName !== 'OPTION' && evt.target.nodeName !== 'OPTGROUP'\n      )\n    ) {\n      return;\n    }\n\n    if (!mutations) {\n      // If mutation events aren't supported, then we can only assume that the\n      // change affected the selections\n      changed = true;\n    } else if (mutations.addedNodes && mutations.addedNodes.length > 0) {\n      for (var n = 0; n < mutations.addedNodes.length; n++) {\n        var node = mutations.addedNodes[n];\n\n        if (node.selected) {\n          changed = true;\n        }\n      }\n    } else if (mutations.removedNodes && mutations.removedNodes.length > 0) {\n      changed = true;\n    } else if ($.isArray(mutations)) {\n      $.each(mutations, function(evt, mutation) {\n        if (self._isChangeMutation(evt, mutation)) {\n          // We've found a change mutation.\n          // Let's escape from the loop and continue\n          changed = true;\n          return false;\n        }\n      });\n    }\n    return changed;\n  };\n\n  Select2.prototype._syncSubtree = function (evt, mutations) {\n    var changed = this._isChangeMutation(evt, mutations);\n    var self = this;\n\n    // Only re-pull the data if we think there is a change\n    if (changed) {\n      this.dataAdapter.current(function (currentData) {\n        self.trigger('selection:update', {\n          data: currentData\n        });\n      });\n    }\n  };\n\n  /**\n   * Override the trigger method to automatically trigger pre-events when\n   * there are events that can be prevented.\n   */\n  Select2.prototype.trigger = function (name, args) {\n    var actualTrigger = Select2.__super__.trigger;\n    var preTriggerMap = {\n      'open': 'opening',\n      'close': 'closing',\n      'select': 'selecting',\n      'unselect': 'unselecting',\n      'clear': 'clearing'\n    };\n\n    if (args === undefined) {\n      args = {};\n    }\n\n    if (name in preTriggerMap) {\n      var preTriggerName = preTriggerMap[name];\n      var preTriggerArgs = {\n        prevented: false,\n        name: name,\n        args: args\n      };\n\n      actualTrigger.call(this, preTriggerName, preTriggerArgs);\n\n      if (preTriggerArgs.prevented) {\n        args.prevented = true;\n\n        return;\n      }\n    }\n\n    actualTrigger.call(this, name, args);\n  };\n\n  Select2.prototype.toggleDropdown = function () {\n    if (this.isDisabled()) {\n      return;\n    }\n\n    if (this.isOpen()) {\n      this.close();\n    } else {\n      this.open();\n    }\n  };\n\n  Select2.prototype.open = function () {\n    if (this.isOpen()) {\n      return;\n    }\n\n    if (this.isDisabled()) {\n      return;\n    }\n\n    this.trigger('query', {});\n  };\n\n  Select2.prototype.close = function (evt) {\n    if (!this.isOpen()) {\n      return;\n    }\n\n    this.trigger('close', { originalEvent : evt });\n  };\n\n  /**\n   * Helper method to abstract the \"enabled\" (not \"disabled\") state of this\n   * object.\n   *\n   * @return {true} if the instance is not disabled.\n   * @return {false} if the instance is disabled.\n   */\n  Select2.prototype.isEnabled = function () {\n    return !this.isDisabled();\n  };\n\n  /**\n   * Helper method to abstract the \"disabled\" state of this object.\n   *\n   * @return {true} if the disabled option is true.\n   * @return {false} if the disabled option is false.\n   */\n  Select2.prototype.isDisabled = function () {\n    return this.options.get('disabled');\n  };\n\n  Select2.prototype.isOpen = function () {\n    return this.$container.hasClass('select2-container--open');\n  };\n\n  Select2.prototype.hasFocus = function () {\n    return this.$container.hasClass('select2-container--focus');\n  };\n\n  Select2.prototype.focus = function (data) {\n    // No need to re-trigger focus events if we are already focused\n    if (this.hasFocus()) {\n      return;\n    }\n\n    this.$container.addClass('select2-container--focus');\n    this.trigger('focus', {});\n  };\n\n  Select2.prototype.enable = function (args) {\n    if (this.options.get('debug') && window.console && console.warn) {\n      console.warn(\n        'Select2: The `select2(\"enable\")` method has been deprecated and will' +\n        ' be removed in later Select2 versions. Use $element.prop(\"disabled\")' +\n        ' instead.'\n      );\n    }\n\n    if (args == null || args.length === 0) {\n      args = [true];\n    }\n\n    var disabled = !args[0];\n\n    this.$element.prop('disabled', disabled);\n  };\n\n  Select2.prototype.data = function () {\n    if (this.options.get('debug') &&\n        arguments.length > 0 && window.console && console.warn) {\n      console.warn(\n        'Select2: Data can no longer be set using `select2(\"data\")`. You ' +\n        'should consider setting the value instead using `$element.val()`.'\n      );\n    }\n\n    var data = [];\n\n    this.dataAdapter.current(function (currentData) {\n      data = currentData;\n    });\n\n    return data;\n  };\n\n  Select2.prototype.val = function (args) {\n    if (this.options.get('debug') && window.console && console.warn) {\n      console.warn(\n        'Select2: The `select2(\"val\")` method has been deprecated and will be' +\n        ' removed in later Select2 versions. Use $element.val() instead.'\n      );\n    }\n\n    if (args == null || args.length === 0) {\n      return this.$element.val();\n    }\n\n    var newVal = args[0];\n\n    if ($.isArray(newVal)) {\n      newVal = $.map(newVal, function (obj) {\n        return obj.toString();\n      });\n    }\n\n    this.$element.val(newVal).trigger('input').trigger('change');\n  };\n\n  Select2.prototype.destroy = function () {\n    this.$container.remove();\n\n    if (this.$element[0].detachEvent) {\n      this.$element[0].detachEvent('onpropertychange', this._syncA);\n    }\n\n    if (this._observer != null) {\n      this._observer.disconnect();\n      this._observer = null;\n    } else if (this.$element[0].removeEventListener) {\n      this.$element[0]\n        .removeEventListener('DOMAttrModified', this._syncA, false);\n      this.$element[0]\n        .removeEventListener('DOMNodeInserted', this._syncS, false);\n      this.$element[0]\n        .removeEventListener('DOMNodeRemoved', this._syncS, false);\n    }\n\n    this._syncA = null;\n    this._syncS = null;\n\n    this.$element.off('.select2');\n    this.$element.attr('tabindex',\n    Utils.GetData(this.$element[0], 'old-tabindex'));\n\n    this.$element.removeClass('select2-hidden-accessible');\n    this.$element.attr('aria-hidden', 'false');\n    Utils.RemoveData(this.$element[0]);\n    this.$element.removeData('select2');\n\n    this.dataAdapter.destroy();\n    this.selection.destroy();\n    this.dropdown.destroy();\n    this.results.destroy();\n\n    this.dataAdapter = null;\n    this.selection = null;\n    this.dropdown = null;\n    this.results = null;\n  };\n\n  Select2.prototype.render = function () {\n    var $container = $(\n      '<span class=\"select2 select2-container\">' +\n        '<span class=\"selection\"></span>' +\n        '<span class=\"dropdown-wrapper\" aria-hidden=\"true\"></span>' +\n      '</span>'\n    );\n\n    $container.attr('dir', this.options.get('dir'));\n\n    this.$container = $container;\n\n    this.$container.addClass('select2-container--' + this.options.get('theme'));\n\n    Utils.StoreData($container[0], 'element', this.$element);\n\n    return $container;\n  };\n\n  return Select2;\n});\n\nS2.define('select2/compat/utils',[\n  'jquery'\n], function ($) {\n  function syncCssClasses ($dest, $src, adapter) {\n    var classes, replacements = [], adapted;\n\n    classes = $.trim($dest.attr('class'));\n\n    if (classes) {\n      classes = '' + classes; // for IE which returns object\n\n      $(classes.split(/\\s+/)).each(function () {\n        // Save all Select2 classes\n        if (this.indexOf('select2-') === 0) {\n          replacements.push(this);\n        }\n      });\n    }\n\n    classes = $.trim($src.attr('class'));\n\n    if (classes) {\n      classes = '' + classes; // for IE which returns object\n\n      $(classes.split(/\\s+/)).each(function () {\n        // Only adapt non-Select2 classes\n        if (this.indexOf('select2-') !== 0) {\n          adapted = adapter(this);\n\n          if (adapted != null) {\n            replacements.push(adapted);\n          }\n        }\n      });\n    }\n\n    $dest.attr('class', replacements.join(' '));\n  }\n\n  return {\n    syncCssClasses: syncCssClasses\n  };\n});\n\nS2.define('select2/compat/containerCss',[\n  'jquery',\n  './utils'\n], function ($, CompatUtils) {\n  // No-op CSS adapter that discards all classes by default\n  function _containerAdapter (clazz) {\n    return null;\n  }\n\n  function ContainerCSS () { }\n\n  ContainerCSS.prototype.render = function (decorated) {\n    var $container = decorated.call(this);\n\n    var containerCssClass = this.options.get('containerCssClass') || '';\n\n    if ($.isFunction(containerCssClass)) {\n      containerCssClass = containerCssClass(this.$element);\n    }\n\n    var containerCssAdapter = this.options.get('adaptContainerCssClass');\n    containerCssAdapter = containerCssAdapter || _containerAdapter;\n\n    if (containerCssClass.indexOf(':all:') !== -1) {\n      containerCssClass = containerCssClass.replace(':all:', '');\n\n      var _cssAdapter = containerCssAdapter;\n\n      containerCssAdapter = function (clazz) {\n        var adapted = _cssAdapter(clazz);\n\n        if (adapted != null) {\n          // Append the old one along with the adapted one\n          return adapted + ' ' + clazz;\n        }\n\n        return clazz;\n      };\n    }\n\n    var containerCss = this.options.get('containerCss') || {};\n\n    if ($.isFunction(containerCss)) {\n      containerCss = containerCss(this.$element);\n    }\n\n    CompatUtils.syncCssClasses($container, this.$element, containerCssAdapter);\n\n    $container.css(containerCss);\n    $container.addClass(containerCssClass);\n\n    return $container;\n  };\n\n  return ContainerCSS;\n});\n\nS2.define('select2/compat/dropdownCss',[\n  'jquery',\n  './utils'\n], function ($, CompatUtils) {\n  // No-op CSS adapter that discards all classes by default\n  function _dropdownAdapter (clazz) {\n    return null;\n  }\n\n  function DropdownCSS () { }\n\n  DropdownCSS.prototype.render = function (decorated) {\n    var $dropdown = decorated.call(this);\n\n    var dropdownCssClass = this.options.get('dropdownCssClass') || '';\n\n    if ($.isFunction(dropdownCssClass)) {\n      dropdownCssClass = dropdownCssClass(this.$element);\n    }\n\n    var dropdownCssAdapter = this.options.get('adaptDropdownCssClass');\n    dropdownCssAdapter = dropdownCssAdapter || _dropdownAdapter;\n\n    if (dropdownCssClass.indexOf(':all:') !== -1) {\n      dropdownCssClass = dropdownCssClass.replace(':all:', '');\n\n      var _cssAdapter = dropdownCssAdapter;\n\n      dropdownCssAdapter = function (clazz) {\n        var adapted = _cssAdapter(clazz);\n\n        if (adapted != null) {\n          // Append the old one along with the adapted one\n          return adapted + ' ' + clazz;\n        }\n\n        return clazz;\n      };\n    }\n\n    var dropdownCss = this.options.get('dropdownCss') || {};\n\n    if ($.isFunction(dropdownCss)) {\n      dropdownCss = dropdownCss(this.$element);\n    }\n\n    CompatUtils.syncCssClasses($dropdown, this.$element, dropdownCssAdapter);\n\n    $dropdown.css(dropdownCss);\n    $dropdown.addClass(dropdownCssClass);\n\n    return $dropdown;\n  };\n\n  return DropdownCSS;\n});\n\nS2.define('select2/compat/initSelection',[\n  'jquery'\n], function ($) {\n  function InitSelection (decorated, $element, options) {\n    if (options.get('debug') && window.console && console.warn) {\n      console.warn(\n        'Select2: The `initSelection` option has been deprecated in favor' +\n        ' of a custom data adapter that overrides the `current` method. ' +\n        'This method is now called multiple times instead of a single ' +\n        'time when the instance is initialized. Support will be removed ' +\n        'for the `initSelection` option in future versions of Select2'\n      );\n    }\n\n    this.initSelection = options.get('initSelection');\n    this._isInitialized = false;\n\n    decorated.call(this, $element, options);\n  }\n\n  InitSelection.prototype.current = function (decorated, callback) {\n    var self = this;\n\n    if (this._isInitialized) {\n      decorated.call(this, callback);\n\n      return;\n    }\n\n    this.initSelection.call(null, this.$element, function (data) {\n      self._isInitialized = true;\n\n      if (!$.isArray(data)) {\n        data = [data];\n      }\n\n      callback(data);\n    });\n  };\n\n  return InitSelection;\n});\n\nS2.define('select2/compat/inputData',[\n  'jquery',\n  '../utils'\n], function ($, Utils) {\n  function InputData (decorated, $element, options) {\n    this._currentData = [];\n    this._valueSeparator = options.get('valueSeparator') || ',';\n\n    if ($element.prop('type') === 'hidden') {\n      if (options.get('debug') && console && console.warn) {\n        console.warn(\n          'Select2: Using a hidden input with Select2 is no longer ' +\n          'supported and may stop working in the future. It is recommended ' +\n          'to use a `<select>` element instead.'\n        );\n      }\n    }\n\n    decorated.call(this, $element, options);\n  }\n\n  InputData.prototype.current = function (_, callback) {\n    function getSelected (data, selectedIds) {\n      var selected = [];\n\n      if (data.selected || $.inArray(data.id, selectedIds) !== -1) {\n        data.selected = true;\n        selected.push(data);\n      } else {\n        data.selected = false;\n      }\n\n      if (data.children) {\n        selected.push.apply(selected, getSelected(data.children, selectedIds));\n      }\n\n      return selected;\n    }\n\n    var selected = [];\n\n    for (var d = 0; d < this._currentData.length; d++) {\n      var data = this._currentData[d];\n\n      selected.push.apply(\n        selected,\n        getSelected(\n          data,\n          this.$element.val().split(\n            this._valueSeparator\n          )\n        )\n      );\n    }\n\n    callback(selected);\n  };\n\n  InputData.prototype.select = function (_, data) {\n    if (!this.options.get('multiple')) {\n      this.current(function (allData) {\n        $.map(allData, function (data) {\n          data.selected = false;\n        });\n      });\n\n      this.$element.val(data.id);\n      this.$element.trigger('input').trigger('change');\n    } else {\n      var value = this.$element.val();\n      value += this._valueSeparator + data.id;\n\n      this.$element.val(value);\n      this.$element.trigger('input').trigger('change');\n    }\n  };\n\n  InputData.prototype.unselect = function (_, data) {\n    var self = this;\n\n    data.selected = false;\n\n    this.current(function (allData) {\n      var values = [];\n\n      for (var d = 0; d < allData.length; d++) {\n        var item = allData[d];\n\n        if (data.id == item.id) {\n          continue;\n        }\n\n        values.push(item.id);\n      }\n\n      self.$element.val(values.join(self._valueSeparator));\n      self.$element.trigger('input').trigger('change');\n    });\n  };\n\n  InputData.prototype.query = function (_, params, callback) {\n    var results = [];\n\n    for (var d = 0; d < this._currentData.length; d++) {\n      var data = this._currentData[d];\n\n      var matches = this.matches(params, data);\n\n      if (matches !== null) {\n        results.push(matches);\n      }\n    }\n\n    callback({\n      results: results\n    });\n  };\n\n  InputData.prototype.addOptions = function (_, $options) {\n    var options = $.map($options, function ($option) {\n      return Utils.GetData($option[0], 'data');\n    });\n\n    this._currentData.push.apply(this._currentData, options);\n  };\n\n  return InputData;\n});\n\nS2.define('select2/compat/matcher',[\n  'jquery'\n], function ($) {\n  function oldMatcher (matcher) {\n    function wrappedMatcher (params, data) {\n      var match = $.extend(true, {}, data);\n\n      if (params.term == null || $.trim(params.term) === '') {\n        return match;\n      }\n\n      if (data.children) {\n        for (var c = data.children.length - 1; c >= 0; c--) {\n          var child = data.children[c];\n\n          // Check if the child object matches\n          // The old matcher returned a boolean true or false\n          var doesMatch = matcher(params.term, child.text, child);\n\n          // If the child didn't match, pop it off\n          if (!doesMatch) {\n            match.children.splice(c, 1);\n          }\n        }\n\n        if (match.children.length > 0) {\n          return match;\n        }\n      }\n\n      if (matcher(params.term, data.text, data)) {\n        return match;\n      }\n\n      return null;\n    }\n\n    return wrappedMatcher;\n  }\n\n  return oldMatcher;\n});\n\nS2.define('select2/compat/query',[\n\n], function () {\n  function Query (decorated, $element, options) {\n    if (options.get('debug') && window.console && console.warn) {\n      console.warn(\n        'Select2: The `query` option has been deprecated in favor of a ' +\n        'custom data adapter that overrides the `query` method. Support ' +\n        'will be removed for the `query` option in future versions of ' +\n        'Select2.'\n      );\n    }\n\n    decorated.call(this, $element, options);\n  }\n\n  Query.prototype.query = function (_, params, callback) {\n    params.callback = callback;\n\n    var query = this.options.get('query');\n\n    query.call(null, params);\n  };\n\n  return Query;\n});\n\nS2.define('select2/dropdown/attachContainer',[\n\n], function () {\n  function AttachContainer (decorated, $element, options) {\n    decorated.call(this, $element, options);\n  }\n\n  AttachContainer.prototype.position =\n    function (decorated, $dropdown, $container) {\n    var $dropdownContainer = $container.find('.dropdown-wrapper');\n    $dropdownContainer.append($dropdown);\n\n    $dropdown.addClass('select2-dropdown--below');\n    $container.addClass('select2-container--below');\n  };\n\n  return AttachContainer;\n});\n\nS2.define('select2/dropdown/stopPropagation',[\n\n], function () {\n  function StopPropagation () { }\n\n  StopPropagation.prototype.bind = function (decorated, container, $container) {\n    decorated.call(this, container, $container);\n\n    var stoppedEvents = [\n    'blur',\n    'change',\n    'click',\n    'dblclick',\n    'focus',\n    'focusin',\n    'focusout',\n    'input',\n    'keydown',\n    'keyup',\n    'keypress',\n    'mousedown',\n    'mouseenter',\n    'mouseleave',\n    'mousemove',\n    'mouseover',\n    'mouseup',\n    'search',\n    'touchend',\n    'touchstart'\n    ];\n\n    this.$dropdown.on(stoppedEvents.join(' '), function (evt) {\n      evt.stopPropagation();\n    });\n  };\n\n  return StopPropagation;\n});\n\nS2.define('select2/selection/stopPropagation',[\n\n], function () {\n  function StopPropagation () { }\n\n  StopPropagation.prototype.bind = function (decorated, container, $container) {\n    decorated.call(this, container, $container);\n\n    var stoppedEvents = [\n      'blur',\n      'change',\n      'click',\n      'dblclick',\n      'focus',\n      'focusin',\n      'focusout',\n      'input',\n      'keydown',\n      'keyup',\n      'keypress',\n      'mousedown',\n      'mouseenter',\n      'mouseleave',\n      'mousemove',\n      'mouseover',\n      'mouseup',\n      'search',\n      'touchend',\n      'touchstart'\n    ];\n\n    this.$selection.on(stoppedEvents.join(' '), function (evt) {\n      evt.stopPropagation();\n    });\n  };\n\n  return StopPropagation;\n});\n\n/*!\n * jQuery Mousewheel 3.1.13\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n */\n\n(function (factory) {\n    if ( typeof S2.define === 'function' && S2.define.amd ) {\n        // AMD. Register as an anonymous module.\n        S2.define('jquery-mousewheel',['jquery'], factory);\n    } else if (typeof exports === 'object') {\n        // Node/CommonJS style for Browserify\n        module.exports = factory;\n    } else {\n        // Browser globals\n        factory(jQuery);\n    }\n}(function ($) {\n\n    var toFix  = ['wheel', 'mousewheel', 'DOMMouseScroll', 'MozMousePixelScroll'],\n        toBind = ( 'onwheel' in document || document.documentMode >= 9 ) ?\n                    ['wheel'] : ['mousewheel', 'DomMouseScroll', 'MozMousePixelScroll'],\n        slice  = Array.prototype.slice,\n        nullLowestDeltaTimeout, lowestDelta;\n\n    if ( $.event.fixHooks ) {\n        for ( var i = toFix.length; i; ) {\n            $.event.fixHooks[ toFix[--i] ] = $.event.mouseHooks;\n        }\n    }\n\n    var special = $.event.special.mousewheel = {\n        version: '3.1.12',\n\n        setup: function() {\n            if ( this.addEventListener ) {\n                for ( var i = toBind.length; i; ) {\n                    this.addEventListener( toBind[--i], handler, false );\n                }\n            } else {\n                this.onmousewheel = handler;\n            }\n            // Store the line height and page height for this particular element\n            $.data(this, 'mousewheel-line-height', special.getLineHeight(this));\n            $.data(this, 'mousewheel-page-height', special.getPageHeight(this));\n        },\n\n        teardown: function() {\n            if ( this.removeEventListener ) {\n                for ( var i = toBind.length; i; ) {\n                    this.removeEventListener( toBind[--i], handler, false );\n                }\n            } else {\n                this.onmousewheel = null;\n            }\n            // Clean up the data we added to the element\n            $.removeData(this, 'mousewheel-line-height');\n            $.removeData(this, 'mousewheel-page-height');\n        },\n\n        getLineHeight: function(elem) {\n            var $elem = $(elem),\n                $parent = $elem['offsetParent' in $.fn ? 'offsetParent' : 'parent']();\n            if (!$parent.length) {\n                $parent = $('body');\n            }\n            return parseInt($parent.css('fontSize'), 10) || parseInt($elem.css('fontSize'), 10) || 16;\n        },\n\n        getPageHeight: function(elem) {\n            return $(elem).height();\n        },\n\n        settings: {\n            adjustOldDeltas: true, // see shouldAdjustOldDeltas() below\n            normalizeOffset: true  // calls getBoundingClientRect for each event\n        }\n    };\n\n    $.fn.extend({\n        mousewheel: function(fn) {\n            return fn ? this.bind('mousewheel', fn) : this.trigger('mousewheel');\n        },\n\n        unmousewheel: function(fn) {\n            return this.unbind('mousewheel', fn);\n        }\n    });\n\n\n    function handler(event) {\n        var orgEvent   = event || window.event,\n            args       = slice.call(arguments, 1),\n            delta      = 0,\n            deltaX     = 0,\n            deltaY     = 0,\n            absDelta   = 0,\n            offsetX    = 0,\n            offsetY    = 0;\n        event = $.event.fix(orgEvent);\n        event.type = 'mousewheel';\n\n        // Old school scrollwheel delta\n        if ( 'detail'      in orgEvent ) { deltaY = orgEvent.detail * -1;      }\n        if ( 'wheelDelta'  in orgEvent ) { deltaY = orgEvent.wheelDelta;       }\n        if ( 'wheelDeltaY' in orgEvent ) { deltaY = orgEvent.wheelDeltaY;      }\n        if ( 'wheelDeltaX' in orgEvent ) { deltaX = orgEvent.wheelDeltaX * -1; }\n\n        // Firefox < 17 horizontal scrolling related to DOMMouseScroll event\n        if ( 'axis' in orgEvent && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) {\n            deltaX = deltaY * -1;\n            deltaY = 0;\n        }\n\n        // Set delta to be deltaY or deltaX if deltaY is 0 for backwards compatabilitiy\n        delta = deltaY === 0 ? deltaX : deltaY;\n\n        // New school wheel delta (wheel event)\n        if ( 'deltaY' in orgEvent ) {\n            deltaY = orgEvent.deltaY * -1;\n            delta  = deltaY;\n        }\n        if ( 'deltaX' in orgEvent ) {\n            deltaX = orgEvent.deltaX;\n            if ( deltaY === 0 ) { delta  = deltaX * -1; }\n        }\n\n        // No change actually happened, no reason to go any further\n        if ( deltaY === 0 && deltaX === 0 ) { return; }\n\n        // Need to convert lines and pages to pixels if we aren't already in pixels\n        // There are three delta modes:\n        //   * deltaMode 0 is by pixels, nothing to do\n        //   * deltaMode 1 is by lines\n        //   * deltaMode 2 is by pages\n        if ( orgEvent.deltaMode === 1 ) {\n            var lineHeight = $.data(this, 'mousewheel-line-height');\n            delta  *= lineHeight;\n            deltaY *= lineHeight;\n            deltaX *= lineHeight;\n        } else if ( orgEvent.deltaMode === 2 ) {\n            var pageHeight = $.data(this, 'mousewheel-page-height');\n            delta  *= pageHeight;\n            deltaY *= pageHeight;\n            deltaX *= pageHeight;\n        }\n\n        // Store lowest absolute delta to normalize the delta values\n        absDelta = Math.max( Math.abs(deltaY), Math.abs(deltaX) );\n\n        if ( !lowestDelta || absDelta < lowestDelta ) {\n            lowestDelta = absDelta;\n\n            // Adjust older deltas if necessary\n            if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {\n                lowestDelta /= 40;\n            }\n        }\n\n        // Adjust older deltas if necessary\n        if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {\n            // Divide all the things by 40!\n            delta  /= 40;\n            deltaX /= 40;\n            deltaY /= 40;\n        }\n\n        // Get a whole, normalized value for the deltas\n        delta  = Math[ delta  >= 1 ? 'floor' : 'ceil' ](delta  / lowestDelta);\n        deltaX = Math[ deltaX >= 1 ? 'floor' : 'ceil' ](deltaX / lowestDelta);\n        deltaY = Math[ deltaY >= 1 ? 'floor' : 'ceil' ](deltaY / lowestDelta);\n\n        // Normalise offsetX and offsetY properties\n        if ( special.settings.normalizeOffset && this.getBoundingClientRect ) {\n            var boundingRect = this.getBoundingClientRect();\n            offsetX = event.clientX - boundingRect.left;\n            offsetY = event.clientY - boundingRect.top;\n        }\n\n        // Add information to the event object\n        event.deltaX = deltaX;\n        event.deltaY = deltaY;\n        event.deltaFactor = lowestDelta;\n        event.offsetX = offsetX;\n        event.offsetY = offsetY;\n        // Go ahead and set deltaMode to 0 since we converted to pixels\n        // Although this is a little odd since we overwrite the deltaX/Y\n        // properties with normalized deltas.\n        event.deltaMode = 0;\n\n        // Add event and delta to the front of the arguments\n        args.unshift(event, delta, deltaX, deltaY);\n\n        // Clearout lowestDelta after sometime to better\n        // handle multiple device types that give different\n        // a different lowestDelta\n        // Ex: trackpad = 3 and mouse wheel = 120\n        if (nullLowestDeltaTimeout) { clearTimeout(nullLowestDeltaTimeout); }\n        nullLowestDeltaTimeout = setTimeout(nullLowestDelta, 200);\n\n        return ($.event.dispatch || $.event.handle).apply(this, args);\n    }\n\n    function nullLowestDelta() {\n        lowestDelta = null;\n    }\n\n    function shouldAdjustOldDeltas(orgEvent, absDelta) {\n        // If this is an older event and the delta is divisable by 120,\n        // then we are assuming that the browser is treating this as an\n        // older mouse wheel event and that we should divide the deltas\n        // by 40 to try and get a more usable deltaFactor.\n        // Side note, this actually impacts the reported scroll distance\n        // in older browsers and can cause scrolling to be slower than native.\n        // Turn this off by setting $.event.special.mousewheel.settings.adjustOldDeltas to false.\n        return special.settings.adjustOldDeltas && orgEvent.type === 'mousewheel' && absDelta % 120 === 0;\n    }\n\n}));\n\nS2.define('jquery.select2',[\n  'jquery',\n  'jquery-mousewheel',\n\n  './select2/core',\n  './select2/defaults',\n  './select2/utils'\n], function ($, _, Select2, Defaults, Utils) {\n  if ($.fn.select2 == null) {\n    // All methods that should return the element\n    var thisMethods = ['open', 'close', 'destroy'];\n\n    $.fn.select2 = function (options) {\n      options = options || {};\n\n      if (typeof options === 'object') {\n        this.each(function () {\n          var instanceOptions = $.extend(true, {}, options);\n\n          var instance = new Select2($(this), instanceOptions);\n        });\n\n        return this;\n      } else if (typeof options === 'string') {\n        var ret;\n        var args = Array.prototype.slice.call(arguments, 1);\n\n        this.each(function () {\n          var instance = Utils.GetData(this, 'select2');\n\n          if (instance == null && window.console && console.error) {\n            console.error(\n              'The select2(\\'' + options + '\\') method was called on an ' +\n              'element that is not using Select2.'\n            );\n          }\n\n          ret = instance[options].apply(instance, args);\n        });\n\n        // Check if we should be returning `this`\n        if ($.inArray(options, thisMethods) > -1) {\n          return this;\n        }\n\n        return ret;\n      } else {\n        throw new Error('Invalid arguments for Select2: ' + options);\n      }\n    };\n  }\n\n  if ($.fn.select2.defaults == null) {\n    $.fn.select2.defaults = Defaults;\n  }\n\n  return Select2;\n});\n\n  // Return the AMD loader configuration so it can be used outside of this file\n  return {\n    define: S2.define,\n    require: S2.require\n  };\n}());\n\n  // Autoload the jQuery bindings\n  // We know that all of the modules exist above this, so we're safe\n  var select2 = S2.require('jquery.select2');\n\n  // Hold the AMD module references on the jQuery function that was just loaded\n  // This allows Select2 to use the internal loader outside of this file, such\n  // as in the language files.\n  jQuery.fn.select2.amd = S2;\n\n  // Return the Select2 instance for anyone who is importing it.\n  return select2;\n}));\n","export default class ButtonDropdown {\n  constructor(el) {\n    if (el) {\n      const button = el.getElementsByClassName(\"js-button\")[0];\n      const list = el.getElementsByClassName(\"js-list\")[0];\n\n      // Detect 'off-click' and close dropdown if open\n      document.addEventListener(\"click\", e => {\n        if (\n          e.target !== button &&\n          e.target !== list &&\n          list.classList.contains(\"js-open\")\n        ) {\n          list.classList.remove(\"js-open\");\n        }\n      });\n\n      button.addEventListener(\"click\", () => {\n        if (list.classList.contains(\"js-open\")) {\n          list.classList.remove(\"js-open\");\n        } else {\n          list.classList.add(\"js-open\");\n        }\n      });\n    }\n  }\n}\n","export default class CloseMenu {\n  constructor(el) {\n    if (el) {\n      this.el = el;\n\n      this.el.addEventListener(\"click\", () => {\n        document.body.classList.remove(\"menu-open\");\n      });\n    }\n  }\n}\n","export default class CoursePageSections {\n  constructor(el) {\n    if (el) {\n      this.el = el;\n      this.navButtons = Array.from(el.getElementsByClassName(\"js-navButton\"));\n      this.activeSectionClassName = \"js-activeSection\";\n      this.activeButtonClassName = \"js-activeButton\";\n\n      this.navButtons.forEach(button => {\n        button.addEventListener(\"click\", () => {\n          const newSectionName = button.getAttribute(\"data-section\");\n          const newSection = document.getElementById(newSectionName);\n          if (newSection.classList.contains(this.activeSectionClassName)) {\n            // If we are already on that section do nothing\n            return;\n          } else {\n            // Otherwise remove the active class name from the currently active\n            // section and button and apply it to the new active section and button\n            document\n              .getElementsByClassName(this.activeSectionClassName)[0]\n              .classList.remove(this.activeSectionClassName);\n            document\n              .getElementsByClassName(this.activeButtonClassName)[0]\n              .classList.remove(this.activeButtonClassName);\n            newSection.classList.add(this.activeSectionClassName);\n            button.classList.add(this.activeButtonClassName);\n          }\n        });\n      });\n    }\n  }\n}\n","export default class ImageGallery {\n  constructor(el) {\n    if (el) {\n      this.imagesLarge = Array.from(el.getElementsByClassName(\"js-imageLarge\"));\n      this.imagesThumb = Array.from(el.getElementsByClassName(\"js-imageThumb\"));\n      this.currentImage = this.imagesLarge[0];\n      this.currentImage.classList.add(\"js-active\");\n\n      this.imagesThumb.forEach((imageThumb, index) => {\n        imageThumb.addEventListener(\"click\", () => {\n          if (!this.imagesLarge[index].classList.contains(\"js-active\")) {\n            this.currentImage.classList.remove(\"js-active\");\n            this.imagesLarge[index].classList.add(\"js-active\");\n            this.currentImage = this.imagesLarge[index];\n          }\n        });\n      });\n    }\n  }\n}\n","export default class SortStart {\n  constructor(el) {\n    if (el) {\n      const queryString = window.location.search;\n      const urlParams = new URLSearchParams(queryString);\n      const orderBy = urlParams.get(\"order_by\");\n      const filterBy = urlParams.get(\"filter_by\");\n      const items = Array.from(el.getElementsByClassName(\"js-listSort-item\"));\n      let currentParam;\n      if (orderBy || filterBy) {\n        if (items.length > 0)\n          currentParam = document.getElementById(`js-listSort-${orderBy}`);\n      } else {\n        if (items.length > 0) currentParam = items[0];\n      }\n      currentParam.classList.add(\"js-listSort-current\");\n    }\n  }\n}\n","import MarkerMap from \"./MarkerMap\";\n\nexport default class MapOverlay {\n  constructor(buttonEl) {\n    if (buttonEl) {\n      const areaId = buttonEl.getAttribute(\"data-area-id\");\n      const areaName = buttonEl.getAttribute(\"data-area-name\");\n      this.areaHistory = [{ id: areaId, name: areaName }];\n      this.handleOpenOverlay = this.handleOpenOverlay.bind(this);\n      this.handleCloseOverlay = this.handleCloseOverlay.bind(this);\n      this.handleAreaClick = this.handleAreaClick.bind(this);\n      this.handleBackButtonClick = this.handleBackButtonClick.bind(this);\n      buttonEl.addEventListener(\"click\", this.handleOpenOverlay);\n    }\n  }\n\n  handleOpenOverlay() {\n    const currArea = this.areaHistory[this.areaHistory.length - 1];\n    const html = `\n      <div class=\"MapOverlay\">\n        <div class=\"MapOverlay-inner\">\n          <div class=\"MapOverlay-header\">\n            <img class=\"MapOverlay-headerLogo\" src=\"${window.bridge.logo}\">\n            <div class=\"MapOverlay-headerTab\">\n              <h1 class=\"MapOverlay-headerTitle\">${currArea.verbose_name}</h1>\n            </div>\n            <button class=\"MapOverlay-closeButton\">\n              <img src=\"${window.bridge.close_white}\">\n            </button>\n          </div>\n          <div class=\"MarkerMap\" data-area-id=\"${currArea.id}\"></div>\n          <div class=\"MapOverlay-footer\">\n            <button class=\"MapOverlay-backButton\">Back</button>\n            <a class=\"Key\" href=\"${window.bridge.course_definitions_page_url}\" target=\"_blank\">\n              <div class=\"Key-title\"><p>Rating key<p></div>\n              <div class=\"Key-icons\">\n                <img class=\"Key-icon\" src=\"${window.bridge.ratings[\"01-5b\"]}\" alt=\"${window.bridge.rating_defs[\"01-5b\"]}\" title=\"${window.bridge.rating_defs[\"01-5b\"]}\" >\n                <img class=\"Key-icon\" src=\"${window.bridge.ratings[\"02-5a\"]}\" alt=\"${window.bridge.rating_defs[\"02-5a\"]}\" title=\"${window.bridge.rating_defs[\"02-5a\"]}\" >\n                <img class=\"Key-icon\" src=\"${window.bridge.ratings[\"03-4b\"]}\" alt=\"${window.bridge.rating_defs[\"03-4b\"]}\" title=\"${window.bridge.rating_defs[\"03-4b\"]}\" >\n                <img class=\"Key-icon\" src=\"${window.bridge.ratings[\"04-4a\"]}\" alt=\"${window.bridge.rating_defs[\"04-4a\"]}\" title=\"${window.bridge.rating_defs[\"04-4a\"]}\" >\n                <img class=\"Key-icon\" src=\"${window.bridge.ratings[\"05-3b\"]}\" alt=\"${window.bridge.rating_defs[\"05-3b\"]}\" title=\"${window.bridge.rating_defs[\"05-3b\"]}\" >\n                <img class=\"Key-icon\" src=\"${window.bridge.ratings[\"06-3a\"]}\" alt=\"${window.bridge.rating_defs[\"06-3a\"]}\" title=\"${window.bridge.rating_defs[\"06-3a\"]}\" >\n                <img class=\"Key-icon\" src=\"${window.bridge.ratings[\"07-2a\"]}\" alt=\"${window.bridge.rating_defs[\"07-2a\"]}\" title=\"${window.bridge.rating_defs[\"07-2a\"]}\" >\n                <img class=\"Key-icon\" src=\"${window.bridge.ratings[\"09-u\"]}\" alt=\"${window.bridge.rating_defs[\"09-u\"]}\" title=\"${window.bridge.rating_defs[\"09-u\"]}\" >\n                <img class=\"Key-icon\" src=\"${window.bridge.ratings[\"08-p\"]}\" alt=\"${window.bridge.rating_defs[\"08-p\"]}\" title=\"${window.bridge.rating_defs[\"08-p\"]}\" >\n                <img class=\"Key-icon Key-stayPlay\" src=\"${window.bridge.stay_and_play}\" alt=\"${window.bridge.stay_and_play_def}\" title=\"${window.bridge.stay_and_play_def}\" >\n              </div>\n            </a>\n          </div>\n        </div>\n      </div>\n    `;\n    // Add the overlay to the DOM\n    this.overlayEl = document.createElement(\"div\");\n    this.overlayEl.innerHTML = html;\n    document.body.appendChild(this.overlayEl);\n\n    // Close button\n    this.closeButton = this.overlayEl.getElementsByClassName(\n      \"MapOverlay-closeButton\"\n    )[0];\n    this.closeButton.addEventListener(\"click\", this.handleCloseOverlay);\n\n    // Close with background click\n    this.overlayBackground = this.overlayEl.getElementsByClassName(\n      \"MapOverlay\"\n    )[0];\n    this.overlayEl.addEventListener(\"click\", e => {\n      if (e.target === this.overlayBackground) this.handleCloseOverlay();\n    });\n\n    // Back button\n    this.backButton = this.overlayEl.getElementsByClassName(\n      \"MapOverlay-backButton\"\n    )[0];\n    this.backButton.addEventListener(\"click\", this.handleBackButtonClick);\n\n    // Marker map\n    const markerMapEl = this.overlayEl.getElementsByClassName(\"MarkerMap\")[0];\n    const markerMapTitle = this.overlayEl.getElementsByClassName(\n      \"MapOverlay-headerTitle\"\n    )[0];\n    this.markerMap = new MarkerMap(markerMapEl, true, markerMapTitle);\n    this.markerMap.el.addEventListener(\"areaClick\", this.handleAreaClick);\n  }\n\n  handleCloseOverlay() {\n    this.closeButton.removeEventListener(\"click\", this.handleCloseOverlay);\n    document.body.removeChild(this.overlayEl);\n  }\n\n  handleAreaClick(e) {\n    this.areaHistory.push(e.detail);\n  }\n\n  handleBackButtonClick() {\n    if (this.areaHistory.length > 1) {\n      this.areaHistory.pop();\n      const currArea = this.areaHistory[this.areaHistory.length - 1];\n      this.markerMap.updateAreaId(currArea.id);\n    }\n  }\n}\n","export default class OpenMenu {\n  constructor(el) {\n    if (el) {\n      this.el = el;\n\n      this.el.addEventListener(\"click\", () => {\n        document.body.classList.add(\"menu-open\");\n      });\n    }\n  }\n}\n","export default class RevealContent {\n  constructor(el) {\n    if (el) {\n      this.el = el;\n\n      this.button = this.el.getElementsByClassName(\"js-row-revealButton\")[0];\n      this.button.addEventListener(\"click\", () => {\n        if (this.el.classList.contains(\"js-row-open\")) {\n          this.el.classList.remove(\"js-row-open\");\n          this.el.classList.add(\"js-row-closed\");\n        } else {\n          this.el.classList.add(\"js-row-open\");\n          this.el.classList.remove(\"js-row-closed\");\n        }\n      });\n    }\n  }\n}\n","import axios from \"axios\";\nimport throttle from \"lodash/throttle\";\n\nexport default class SearchDropdown {\n  constructor(el) {\n    if (el) {\n      const inputEl = el.getElementsByClassName(\"js-input\")[0];\n      const searchType = inputEl.getAttribute(\"data-searchType\");\n      this.listEl = el.getElementsByClassName(\"js-list\")[0];\n\n      this.getResults = throttle(this._getResults, 500);\n      this.previousValue = null;\n\n      inputEl.addEventListener(\"keyup\", e => {\n        const query = e.target.value;\n        if (query.length >= 3) {\n          // Protect against key changes whereby the query hasn't actually changed\n          // eg. search, close dropdown, click back in, press a key eg. cursor\n          if (query !== this.previousValue) {\n            this.getResults(searchType, e.target.value);\n            this.listEl.classList.add(\"js-open\");\n          }\n        } else if (query == \"\") {\n          this.listEl.classList.remove(\"js-open\");\n          this.listEl.innerHTML = \"\";\n        }\n        this.previousValue = query;\n      });\n\n      inputEl.addEventListener(\"blur\", () => {\n        // Delay the removal of the dropdown to the link clicks chance to kick in\n        setTimeout(() => {\n          this.listEl.classList.remove(\"js-open\");\n          this.listEl.innerHTML = \"\";\n        }, 200);\n      });\n    }\n  }\n\n  _getResults(searchType, query) {\n    axios\n      .get(`/api/${searchType}/?query=${query}`)\n      .then(({ data }) => {\n        let html;\n        if (data.length == 0) {\n          html =\n            \"<li class='Dropdown-item'><p class='Dropdown-noResults'>No results</p></li>\";\n        } else {\n          html = data.reduce((acc, curr) => {\n            return (\n              acc +\n              `<li class=\"Dropdown-item\"><a href=\"${curr.url}\" class=\"Dropdown-link\">${curr.name}</a></li>`\n            );\n          }, \"\");\n        }\n        if (this.listEl.classList.contains(\"js-open\")) {\n          // Check the dropdown is still open - as the user might have closed it while we were fetching the data\n          this.listEl.innerHTML = html;\n        }\n      })\n      .catch(error => {\n        console.log(error);\n      });\n  }\n}\n","import \"select2/dist/js/select2.full.js\";\n\nimport $ from \"jquery\";\n\nfunction getOptionTemplate(option) {\n  if (!option.id) {\n    return option.text;\n  } else {\n    return $(`<a href=\"${option.id}\">${option.text}</a>`);\n  }\n}\n\nexport default class SearchableSelect {\n  constructor(el) {\n    if (el) {\n      this.el = el;\n      const placeholder = this.el.getAttribute(\"data-placeholder\");\n\n      $(this.el).select2({\n        theme: \"SearchableSelect\",\n        templateResult: getOptionTemplate,\n        placeholder: placeholder\n      });\n\n      $(this.el).on(\"select2:open\", e => {\n        $(\"input.select2-search__field\").prop(\"placeholder\", \"Search...\");\n      });\n\n      $(this.el).on(\"select2:selecting\", e => {\n        e.preventDefault();\n        window.location.href = e.target.value;\n      });\n    }\n  }\n}\n","export default class Share {\n  constructor(el) {\n    if (el) {\n      this.el = el;\n\n      this.el.addEventListener(\"click\", e => {\n        const platform = this.el.getAttribute(\"data-platform\");\n        if (platform === \"facebook\") {\n          const uri = window.location.href;\n          const res = encodeURI(uri);\n          popup(\n            \"https://www.facebook.com/sharer/sharer.php?u=\" + res,\n            \"\",\n            550,\n            450\n          );\n          e.preventDefault();\n        }\n        if (platform === \"twitter\") {\n          const title = document.title + \" \";\n          const url = \"http://twitter.com/intent/tweet?text=\" + title;\n          popup(url + window.location.href, \"\", 600, 400);\n          e.preventDefault();\n        }\n      });\n    }\n  }\n}\n\nfunction popup(url, title, width, height) {\n  var x = Number((window.screen.width - width) / 2);\n  var y = Number((window.screen.height - height) / 2);\n\n  window.open(\n    url,\n    \"\",\n    \"menubar=no,toolbar=no,resizable=yes,scrollbars=yes,height=\" +\n      height +\n      \",width=\" +\n      width +\n      \",left=\" +\n      x +\n      \",top=\" +\n      y\n  );\n}\n","var originalFunctionToString;\n/** Patch toString calls to return proper name for wrapped functions */\nvar FunctionToString = /** @class */ (function () {\n    function FunctionToString() {\n        /**\n         * @inheritDoc\n         */\n        this.name = FunctionToString.id;\n    }\n    /**\n     * @inheritDoc\n     */\n    FunctionToString.prototype.setupOnce = function () {\n        // eslint-disable-next-line @typescript-eslint/unbound-method\n        originalFunctionToString = Function.prototype.toString;\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        Function.prototype.toString = function () {\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            var context = this.__sentry_original__ || this;\n            return originalFunctionToString.apply(context, args);\n        };\n    };\n    /**\n     * @inheritDoc\n     */\n    FunctionToString.id = 'FunctionToString';\n    return FunctionToString;\n}());\nexport { FunctionToString };\n//# sourceMappingURL=functiontostring.js.map","/* eslint-disable @typescript-eslint/explicit-function-return-type */\n/* eslint-disable @typescript-eslint/typedef */\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { isThenable } from './is';\n/** SyncPromise internal states */\nvar States;\n(function (States) {\n    /** Pending */\n    States[\"PENDING\"] = \"PENDING\";\n    /** Resolved / OK */\n    States[\"RESOLVED\"] = \"RESOLVED\";\n    /** Rejected / Error */\n    States[\"REJECTED\"] = \"REJECTED\";\n})(States || (States = {}));\n/**\n * Thenable class that behaves like a Promise and follows it's interface\n * but is not async internally\n */\nvar SyncPromise = /** @class */ (function () {\n    function SyncPromise(executor) {\n        var _this = this;\n        this._state = States.PENDING;\n        this._handlers = [];\n        /** JSDoc */\n        this._resolve = function (value) {\n            _this._setResult(States.RESOLVED, value);\n        };\n        /** JSDoc */\n        this._reject = function (reason) {\n            _this._setResult(States.REJECTED, reason);\n        };\n        /** JSDoc */\n        this._setResult = function (state, value) {\n            if (_this._state !== States.PENDING) {\n                return;\n            }\n            if (isThenable(value)) {\n                value.then(_this._resolve, _this._reject);\n                return;\n            }\n            _this._state = state;\n            _this._value = value;\n            _this._executeHandlers();\n        };\n        // TODO: FIXME\n        /** JSDoc */\n        this._attachHandler = function (handler) {\n            _this._handlers = _this._handlers.concat(handler);\n            _this._executeHandlers();\n        };\n        /** JSDoc */\n        this._executeHandlers = function () {\n            if (_this._state === States.PENDING) {\n                return;\n            }\n            var cachedHandlers = _this._handlers.slice();\n            _this._handlers = [];\n            cachedHandlers.forEach(function (handler) {\n                if (handler.done) {\n                    return;\n                }\n                if (_this._state === States.RESOLVED) {\n                    if (handler.onfulfilled) {\n                        // eslint-disable-next-line @typescript-eslint/no-floating-promises\n                        handler.onfulfilled(_this._value);\n                    }\n                }\n                if (_this._state === States.REJECTED) {\n                    if (handler.onrejected) {\n                        handler.onrejected(_this._value);\n                    }\n                }\n                handler.done = true;\n            });\n        };\n        try {\n            executor(this._resolve, this._reject);\n        }\n        catch (e) {\n            this._reject(e);\n        }\n    }\n    /** JSDoc */\n    SyncPromise.resolve = function (value) {\n        return new SyncPromise(function (resolve) {\n            resolve(value);\n        });\n    };\n    /** JSDoc */\n    SyncPromise.reject = function (reason) {\n        return new SyncPromise(function (_, reject) {\n            reject(reason);\n        });\n    };\n    /** JSDoc */\n    SyncPromise.all = function (collection) {\n        return new SyncPromise(function (resolve, reject) {\n            if (!Array.isArray(collection)) {\n                reject(new TypeError(\"Promise.all requires an array as input.\"));\n                return;\n            }\n            if (collection.length === 0) {\n                resolve([]);\n                return;\n            }\n            var counter = collection.length;\n            var resolvedCollection = [];\n            collection.forEach(function (item, index) {\n                SyncPromise.resolve(item)\n                    .then(function (value) {\n                    resolvedCollection[index] = value;\n                    counter -= 1;\n                    if (counter !== 0) {\n                        return;\n                    }\n                    resolve(resolvedCollection);\n                })\n                    .then(null, reject);\n            });\n        });\n    };\n    /** JSDoc */\n    SyncPromise.prototype.then = function (onfulfilled, onrejected) {\n        var _this = this;\n        return new SyncPromise(function (resolve, reject) {\n            _this._attachHandler({\n                done: false,\n                onfulfilled: function (result) {\n                    if (!onfulfilled) {\n                        // TODO: ¯\\_(ツ)_/¯\n                        // TODO: FIXME\n                        resolve(result);\n                        return;\n                    }\n                    try {\n                        resolve(onfulfilled(result));\n                        return;\n                    }\n                    catch (e) {\n                        reject(e);\n                        return;\n                    }\n                },\n                onrejected: function (reason) {\n                    if (!onrejected) {\n                        reject(reason);\n                        return;\n                    }\n                    try {\n                        resolve(onrejected(reason));\n                        return;\n                    }\n                    catch (e) {\n                        reject(e);\n                        return;\n                    }\n                },\n            });\n        });\n    };\n    /** JSDoc */\n    SyncPromise.prototype.catch = function (onrejected) {\n        return this.then(function (val) { return val; }, onrejected);\n    };\n    /** JSDoc */\n    SyncPromise.prototype.finally = function (onfinally) {\n        var _this = this;\n        return new SyncPromise(function (resolve, reject) {\n            var val;\n            var isRejected;\n            return _this.then(function (value) {\n                isRejected = false;\n                val = value;\n                if (onfinally) {\n                    onfinally();\n                }\n            }, function (reason) {\n                isRejected = true;\n                val = reason;\n                if (onfinally) {\n                    onfinally();\n                }\n            }).then(function () {\n                if (isRejected) {\n                    reject(val);\n                    return;\n                }\n                resolve(val);\n            });\n        });\n    };\n    /** JSDoc */\n    SyncPromise.prototype.toString = function () {\n        return '[object SyncPromise]';\n    };\n    return SyncPromise;\n}());\nexport { SyncPromise };\n//# sourceMappingURL=syncpromise.js.map","import { GOOGLE_MAPS_API_KEY } from \"../core/constants\";\nimport { getScript } from \"../core/utils\";\n\nexport default class SimpleMap {\n  constructor(el) {\n    if (el) {\n      this.el = el;\n      getScript(\n        `https://maps.googleapis.com/maps/api/js?key=${GOOGLE_MAPS_API_KEY}`,\n        () => {\n          this.handleMapsAPILoaded();\n        }\n      );\n    }\n  }\n\n  handleMapsAPILoaded() {\n    const latlng = new window.google.maps.LatLng(\n      this.el.getAttribute(\"data-map-lat\"),\n      this.el.getAttribute(\"data-map-lng\")\n    );\n\n    const map = new window.google.maps.Map(this.el, {\n      zoom: 16,\n      center: latlng,\n      disableDefaultUI: true,\n      scaleControl: true,\n      scrollwheel: false,\n      gestureHandling: \"none\"\n    });\n    const marker = new window.google.maps.Marker({\n      position: latlng,\n      map: map\n    });\n    marker.setMap(map);\n  }\n}\n","import { __assign, __read, __spread } from \"tslib\";\nimport { dateTimestampInSeconds, getGlobalObject, isPlainObject, isThenable, SyncPromise } from '@sentry/utils';\n/**\n * Holds additional event information. {@link Scope.applyToEvent} will be\n * called by the client before an event will be sent.\n */\nvar Scope = /** @class */ (function () {\n    function Scope() {\n        /** Flag if notifiying is happening. */\n        this._notifyingListeners = false;\n        /** Callback for client to receive scope changes. */\n        this._scopeListeners = [];\n        /** Callback list that will be called after {@link applyToEvent}. */\n        this._eventProcessors = [];\n        /** Array of breadcrumbs. */\n        this._breadcrumbs = [];\n        /** User */\n        this._user = {};\n        /** Tags */\n        this._tags = {};\n        /** Extra */\n        this._extra = {};\n        /** Contexts */\n        this._contexts = {};\n    }\n    /**\n     * Inherit values from the parent scope.\n     * @param scope to clone.\n     */\n    Scope.clone = function (scope) {\n        var newScope = new Scope();\n        if (scope) {\n            newScope._breadcrumbs = __spread(scope._breadcrumbs);\n            newScope._tags = __assign({}, scope._tags);\n            newScope._extra = __assign({}, scope._extra);\n            newScope._contexts = __assign({}, scope._contexts);\n            newScope._user = scope._user;\n            newScope._level = scope._level;\n            newScope._span = scope._span;\n            newScope._session = scope._session;\n            newScope._transactionName = scope._transactionName;\n            newScope._fingerprint = scope._fingerprint;\n            newScope._eventProcessors = __spread(scope._eventProcessors);\n        }\n        return newScope;\n    };\n    /**\n     * Add internal on change listener. Used for sub SDKs that need to store the scope.\n     * @hidden\n     */\n    Scope.prototype.addScopeListener = function (callback) {\n        this._scopeListeners.push(callback);\n    };\n    /**\n     * @inheritDoc\n     */\n    Scope.prototype.addEventProcessor = function (callback) {\n        this._eventProcessors.push(callback);\n        return this;\n    };\n    /**\n     * @inheritDoc\n     */\n    Scope.prototype.setUser = function (user) {\n        this._user = user || {};\n        if (this._session) {\n            this._session.update({ user: user });\n        }\n        this._notifyScopeListeners();\n        return this;\n    };\n    /**\n     * @inheritDoc\n     */\n    Scope.prototype.getUser = function () {\n        return this._user;\n    };\n    /**\n     * @inheritDoc\n     */\n    Scope.prototype.setTags = function (tags) {\n        this._tags = __assign(__assign({}, this._tags), tags);\n        this._notifyScopeListeners();\n        return this;\n    };\n    /**\n     * @inheritDoc\n     */\n    Scope.prototype.setTag = function (key, value) {\n        var _a;\n        this._tags = __assign(__assign({}, this._tags), (_a = {}, _a[key] = value, _a));\n        this._notifyScopeListeners();\n        return this;\n    };\n    /**\n     * @inheritDoc\n     */\n    Scope.prototype.setExtras = function (extras) {\n        this._extra = __assign(__assign({}, this._extra), extras);\n        this._notifyScopeListeners();\n        return this;\n    };\n    /**\n     * @inheritDoc\n     */\n    Scope.prototype.setExtra = function (key, extra) {\n        var _a;\n        this._extra = __assign(__assign({}, this._extra), (_a = {}, _a[key] = extra, _a));\n        this._notifyScopeListeners();\n        return this;\n    };\n    /**\n     * @inheritDoc\n     */\n    Scope.prototype.setFingerprint = function (fingerprint) {\n        this._fingerprint = fingerprint;\n        this._notifyScopeListeners();\n        return this;\n    };\n    /**\n     * @inheritDoc\n     */\n    Scope.prototype.setLevel = function (level) {\n        this._level = level;\n        this._notifyScopeListeners();\n        return this;\n    };\n    /**\n     * @inheritDoc\n     */\n    Scope.prototype.setTransactionName = function (name) {\n        this._transactionName = name;\n        this._notifyScopeListeners();\n        return this;\n    };\n    /**\n     * Can be removed in major version.\n     * @deprecated in favor of {@link this.setTransactionName}\n     */\n    Scope.prototype.setTransaction = function (name) {\n        return this.setTransactionName(name);\n    };\n    /**\n     * @inheritDoc\n     */\n    Scope.prototype.setContext = function (key, context) {\n        var _a;\n        if (context === null) {\n            // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n            delete this._contexts[key];\n        }\n        else {\n            this._contexts = __assign(__assign({}, this._contexts), (_a = {}, _a[key] = context, _a));\n        }\n        this._notifyScopeListeners();\n        return this;\n    };\n    /**\n     * @inheritDoc\n     */\n    Scope.prototype.setSpan = function (span) {\n        this._span = span;\n        this._notifyScopeListeners();\n        return this;\n    };\n    /**\n     * @inheritDoc\n     */\n    Scope.prototype.getSpan = function () {\n        return this._span;\n    };\n    /**\n     * @inheritDoc\n     */\n    Scope.prototype.getTransaction = function () {\n        var _a, _b, _c, _d;\n        // often, this span will be a transaction, but it's not guaranteed to be\n        var span = this.getSpan();\n        // try it the new way first\n        if ((_a = span) === null || _a === void 0 ? void 0 : _a.transaction) {\n            return (_b = span) === null || _b === void 0 ? void 0 : _b.transaction;\n        }\n        // fallback to the old way (known bug: this only finds transactions with sampled = true)\n        if ((_d = (_c = span) === null || _c === void 0 ? void 0 : _c.spanRecorder) === null || _d === void 0 ? void 0 : _d.spans[0]) {\n            return span.spanRecorder.spans[0];\n        }\n        // neither way found a transaction\n        return undefined;\n    };\n    /**\n     * @inheritDoc\n     */\n    Scope.prototype.setSession = function (session) {\n        if (!session) {\n            delete this._session;\n        }\n        else {\n            this._session = session;\n        }\n        this._notifyScopeListeners();\n        return this;\n    };\n    /**\n     * @inheritDoc\n     */\n    Scope.prototype.getSession = function () {\n        return this._session;\n    };\n    /**\n     * @inheritDoc\n     */\n    Scope.prototype.update = function (captureContext) {\n        if (!captureContext) {\n            return this;\n        }\n        if (typeof captureContext === 'function') {\n            var updatedScope = captureContext(this);\n            return updatedScope instanceof Scope ? updatedScope : this;\n        }\n        if (captureContext instanceof Scope) {\n            this._tags = __assign(__assign({}, this._tags), captureContext._tags);\n            this._extra = __assign(__assign({}, this._extra), captureContext._extra);\n            this._contexts = __assign(__assign({}, this._contexts), captureContext._contexts);\n            if (captureContext._user && Object.keys(captureContext._user).length) {\n                this._user = captureContext._user;\n            }\n            if (captureContext._level) {\n                this._level = captureContext._level;\n            }\n            if (captureContext._fingerprint) {\n                this._fingerprint = captureContext._fingerprint;\n            }\n        }\n        else if (isPlainObject(captureContext)) {\n            // eslint-disable-next-line no-param-reassign\n            captureContext = captureContext;\n            this._tags = __assign(__assign({}, this._tags), captureContext.tags);\n            this._extra = __assign(__assign({}, this._extra), captureContext.extra);\n            this._contexts = __assign(__assign({}, this._contexts), captureContext.contexts);\n            if (captureContext.user) {\n                this._user = captureContext.user;\n            }\n            if (captureContext.level) {\n                this._level = captureContext.level;\n            }\n            if (captureContext.fingerprint) {\n                this._fingerprint = captureContext.fingerprint;\n            }\n        }\n        return this;\n    };\n    /**\n     * @inheritDoc\n     */\n    Scope.prototype.clear = function () {\n        this._breadcrumbs = [];\n        this._tags = {};\n        this._extra = {};\n        this._user = {};\n        this._contexts = {};\n        this._level = undefined;\n        this._transactionName = undefined;\n        this._fingerprint = undefined;\n        this._span = undefined;\n        this._session = undefined;\n        this._notifyScopeListeners();\n        return this;\n    };\n    /**\n     * @inheritDoc\n     */\n    Scope.prototype.addBreadcrumb = function (breadcrumb, maxBreadcrumbs) {\n        var mergedBreadcrumb = __assign({ timestamp: dateTimestampInSeconds() }, breadcrumb);\n        this._breadcrumbs =\n            maxBreadcrumbs !== undefined && maxBreadcrumbs >= 0\n                ? __spread(this._breadcrumbs, [mergedBreadcrumb]).slice(-maxBreadcrumbs)\n                : __spread(this._breadcrumbs, [mergedBreadcrumb]);\n        this._notifyScopeListeners();\n        return this;\n    };\n    /**\n     * @inheritDoc\n     */\n    Scope.prototype.clearBreadcrumbs = function () {\n        this._breadcrumbs = [];\n        this._notifyScopeListeners();\n        return this;\n    };\n    /**\n     * Applies the current context and fingerprint to the event.\n     * Note that breadcrumbs will be added by the client.\n     * Also if the event has already breadcrumbs on it, we do not merge them.\n     * @param event Event\n     * @param hint May contain additional informartion about the original exception.\n     * @hidden\n     */\n    Scope.prototype.applyToEvent = function (event, hint) {\n        var _a;\n        if (this._extra && Object.keys(this._extra).length) {\n            event.extra = __assign(__assign({}, this._extra), event.extra);\n        }\n        if (this._tags && Object.keys(this._tags).length) {\n            event.tags = __assign(__assign({}, this._tags), event.tags);\n        }\n        if (this._user && Object.keys(this._user).length) {\n            event.user = __assign(__assign({}, this._user), event.user);\n        }\n        if (this._contexts && Object.keys(this._contexts).length) {\n            event.contexts = __assign(__assign({}, this._contexts), event.contexts);\n        }\n        if (this._level) {\n            event.level = this._level;\n        }\n        if (this._transactionName) {\n            event.transaction = this._transactionName;\n        }\n        // We want to set the trace context for normal events only if there isn't already\n        // a trace context on the event. There is a product feature in place where we link\n        // errors with transaction and it relys on that.\n        if (this._span) {\n            event.contexts = __assign({ trace: this._span.getTraceContext() }, event.contexts);\n            var transactionName = (_a = this._span.transaction) === null || _a === void 0 ? void 0 : _a.name;\n            if (transactionName) {\n                event.tags = __assign({ transaction: transactionName }, event.tags);\n            }\n        }\n        this._applyFingerprint(event);\n        event.breadcrumbs = __spread((event.breadcrumbs || []), this._breadcrumbs);\n        event.breadcrumbs = event.breadcrumbs.length > 0 ? event.breadcrumbs : undefined;\n        return this._notifyEventProcessors(__spread(getGlobalEventProcessors(), this._eventProcessors), event, hint);\n    };\n    /**\n     * This will be called after {@link applyToEvent} is finished.\n     */\n    Scope.prototype._notifyEventProcessors = function (processors, event, hint, index) {\n        var _this = this;\n        if (index === void 0) { index = 0; }\n        return new SyncPromise(function (resolve, reject) {\n            var processor = processors[index];\n            if (event === null || typeof processor !== 'function') {\n                resolve(event);\n            }\n            else {\n                var result = processor(__assign({}, event), hint);\n                if (isThenable(result)) {\n                    result\n                        .then(function (final) { return _this._notifyEventProcessors(processors, final, hint, index + 1).then(resolve); })\n                        .then(null, reject);\n                }\n                else {\n                    _this._notifyEventProcessors(processors, result, hint, index + 1)\n                        .then(resolve)\n                        .then(null, reject);\n                }\n            }\n        });\n    };\n    /**\n     * This will be called on every set call.\n     */\n    Scope.prototype._notifyScopeListeners = function () {\n        var _this = this;\n        // We need this check for this._notifyingListeners to be able to work on scope during updates\n        // If this check is not here we'll produce endless recursion when something is done with the scope\n        // during the callback.\n        if (!this._notifyingListeners) {\n            this._notifyingListeners = true;\n            this._scopeListeners.forEach(function (callback) {\n                callback(_this);\n            });\n            this._notifyingListeners = false;\n        }\n    };\n    /**\n     * Applies fingerprint from the scope to the event if there's one,\n     * uses message if there's one instead or get rid of empty fingerprint\n     */\n    Scope.prototype._applyFingerprint = function (event) {\n        // Make sure it's an array first and we actually have something in place\n        event.fingerprint = event.fingerprint\n            ? Array.isArray(event.fingerprint)\n                ? event.fingerprint\n                : [event.fingerprint]\n            : [];\n        // If we have something on the scope, then merge it with event\n        if (this._fingerprint) {\n            event.fingerprint = event.fingerprint.concat(this._fingerprint);\n        }\n        // If we have no data at all, remove empty array default\n        if (event.fingerprint && !event.fingerprint.length) {\n            delete event.fingerprint;\n        }\n    };\n    return Scope;\n}());\nexport { Scope };\n/**\n * Retruns the global event processors.\n */\nfunction getGlobalEventProcessors() {\n    /* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access  */\n    var global = getGlobalObject();\n    global.__SENTRY__ = global.__SENTRY__ || {};\n    global.__SENTRY__.globalEventProcessors = global.__SENTRY__.globalEventProcessors || [];\n    return global.__SENTRY__.globalEventProcessors;\n    /* eslint-enable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access */\n}\n/**\n * Add a EventProcessor to be kept globally.\n * @param callback EventProcessor to add\n */\nexport function addGlobalEventProcessor(callback) {\n    getGlobalEventProcessors().push(callback);\n}\n//# sourceMappingURL=scope.js.map","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { consoleSandbox, getGlobalObject } from './misc';\n// TODO: Implement different loggers for different environments\nvar global = getGlobalObject();\n/** Prefix for logging strings */\nvar PREFIX = 'Sentry Logger ';\n/** JSDoc */\nvar Logger = /** @class */ (function () {\n    /** JSDoc */\n    function Logger() {\n        this._enabled = false;\n    }\n    /** JSDoc */\n    Logger.prototype.disable = function () {\n        this._enabled = false;\n    };\n    /** JSDoc */\n    Logger.prototype.enable = function () {\n        this._enabled = true;\n    };\n    /** JSDoc */\n    Logger.prototype.log = function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        if (!this._enabled) {\n            return;\n        }\n        consoleSandbox(function () {\n            global.console.log(PREFIX + \"[Log]: \" + args.join(' '));\n        });\n    };\n    /** JSDoc */\n    Logger.prototype.warn = function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        if (!this._enabled) {\n            return;\n        }\n        consoleSandbox(function () {\n            global.console.warn(PREFIX + \"[Warn]: \" + args.join(' '));\n        });\n    };\n    /** JSDoc */\n    Logger.prototype.error = function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        if (!this._enabled) {\n            return;\n        }\n        consoleSandbox(function () {\n            global.console.error(PREFIX + \"[Error]: \" + args.join(' '));\n        });\n    };\n    return Logger;\n}());\n// Ensure we only have a single logger instance, even if multiple versions of @sentry/utils are being used\nglobal.__SENTRY__ = global.__SENTRY__ || {};\nvar logger = global.__SENTRY__.logger || (global.__SENTRY__.logger = new Logger());\nexport { logger };\n//# sourceMappingURL=logger.js.map","/**\n * Session Status\n */\nexport var SessionStatus;\n(function (SessionStatus) {\n    /** JSDoc */\n    SessionStatus[\"Ok\"] = \"ok\";\n    /** JSDoc */\n    SessionStatus[\"Exited\"] = \"exited\";\n    /** JSDoc */\n    SessionStatus[\"Crashed\"] = \"crashed\";\n    /** JSDoc */\n    SessionStatus[\"Abnormal\"] = \"abnormal\";\n})(SessionStatus || (SessionStatus = {}));\n//# sourceMappingURL=session.js.map","import { SessionStatus } from '@sentry/types';\nimport { dropUndefinedKeys, uuid4 } from '@sentry/utils';\n/**\n * @inheritdoc\n */\nvar Session = /** @class */ (function () {\n    function Session(context) {\n        this.errors = 0;\n        this.sid = uuid4();\n        this.timestamp = Date.now();\n        this.started = Date.now();\n        this.duration = 0;\n        this.status = SessionStatus.Ok;\n        if (context) {\n            this.update(context);\n        }\n    }\n    /** JSDoc */\n    // eslint-disable-next-line complexity\n    Session.prototype.update = function (context) {\n        if (context === void 0) { context = {}; }\n        if (context.user) {\n            if (context.user.ip_address) {\n                this.ipAddress = context.user.ip_address;\n            }\n            if (!context.did) {\n                this.did = context.user.id || context.user.email || context.user.username;\n            }\n        }\n        this.timestamp = context.timestamp || Date.now();\n        if (context.sid) {\n            // Good enough uuid validation. — Kamil\n            this.sid = context.sid.length === 32 ? context.sid : uuid4();\n        }\n        if (context.did) {\n            this.did = \"\" + context.did;\n        }\n        if (typeof context.started === 'number') {\n            this.started = context.started;\n        }\n        if (typeof context.duration === 'number') {\n            this.duration = context.duration;\n        }\n        else {\n            this.duration = this.timestamp - this.started;\n        }\n        if (context.release) {\n            this.release = context.release;\n        }\n        if (context.environment) {\n            this.environment = context.environment;\n        }\n        if (context.ipAddress) {\n            this.ipAddress = context.ipAddress;\n        }\n        if (context.userAgent) {\n            this.userAgent = context.userAgent;\n        }\n        if (typeof context.errors === 'number') {\n            this.errors = context.errors;\n        }\n        if (context.status) {\n            this.status = context.status;\n        }\n    };\n    /** JSDoc */\n    Session.prototype.close = function (status) {\n        if (status) {\n            this.update({ status: status });\n        }\n        else if (this.status === SessionStatus.Ok) {\n            this.update({ status: SessionStatus.Exited });\n        }\n        else {\n            this.update();\n        }\n    };\n    /** JSDoc */\n    Session.prototype.toJSON = function () {\n        return dropUndefinedKeys({\n            sid: \"\" + this.sid,\n            init: true,\n            started: new Date(this.started).toISOString(),\n            timestamp: new Date(this.timestamp).toISOString(),\n            status: this.status,\n            errors: this.errors,\n            did: typeof this.did === 'number' || typeof this.did === 'string' ? \"\" + this.did : undefined,\n            duration: this.duration,\n            attrs: dropUndefinedKeys({\n                release: this.release,\n                environment: this.environment,\n                ip_address: this.ipAddress,\n                user_agent: this.userAgent,\n            }),\n        });\n    };\n    return Session;\n}());\nexport { Session };\n//# sourceMappingURL=session.js.map","import { __assign, __read, __spread } from \"tslib\";\nimport { consoleSandbox, dateTimestampInSeconds, getGlobalObject, isNodeEnv, logger, uuid4 } from '@sentry/utils';\nimport { Scope } from './scope';\nimport { Session } from './session';\n/**\n * API compatibility version of this hub.\n *\n * WARNING: This number should only be increased when the global interface\n * changes and new methods are introduced.\n *\n * @hidden\n */\nexport var API_VERSION = 3;\n/**\n * Default maximum number of breadcrumbs added to an event. Can be overwritten\n * with {@link Options.maxBreadcrumbs}.\n */\nvar DEFAULT_BREADCRUMBS = 100;\n/**\n * Absolute maximum number of breadcrumbs added to an event. The\n * `maxBreadcrumbs` option cannot be higher than this value.\n */\nvar MAX_BREADCRUMBS = 100;\n/**\n * @inheritDoc\n */\nvar Hub = /** @class */ (function () {\n    /**\n     * Creates a new instance of the hub, will push one {@link Layer} into the\n     * internal stack on creation.\n     *\n     * @param client bound to the hub.\n     * @param scope bound to the hub.\n     * @param version number, higher number means higher priority.\n     */\n    function Hub(client, scope, _version) {\n        if (scope === void 0) { scope = new Scope(); }\n        if (_version === void 0) { _version = API_VERSION; }\n        this._version = _version;\n        /** Is a {@link Layer}[] containing the client and scope */\n        this._stack = [{}];\n        this.getStackTop().scope = scope;\n        this.bindClient(client);\n    }\n    /**\n     * @inheritDoc\n     */\n    Hub.prototype.isOlderThan = function (version) {\n        return this._version < version;\n    };\n    /**\n     * @inheritDoc\n     */\n    Hub.prototype.bindClient = function (client) {\n        var top = this.getStackTop();\n        top.client = client;\n        if (client && client.setupIntegrations) {\n            client.setupIntegrations();\n        }\n    };\n    /**\n     * @inheritDoc\n     */\n    Hub.prototype.pushScope = function () {\n        // We want to clone the content of prev scope\n        var scope = Scope.clone(this.getScope());\n        this.getStack().push({\n            client: this.getClient(),\n            scope: scope,\n        });\n        return scope;\n    };\n    /**\n     * @inheritDoc\n     */\n    Hub.prototype.popScope = function () {\n        if (this.getStack().length <= 1)\n            return false;\n        return !!this.getStack().pop();\n    };\n    /**\n     * @inheritDoc\n     */\n    Hub.prototype.withScope = function (callback) {\n        var scope = this.pushScope();\n        try {\n            callback(scope);\n        }\n        finally {\n            this.popScope();\n        }\n    };\n    /**\n     * @inheritDoc\n     */\n    Hub.prototype.getClient = function () {\n        return this.getStackTop().client;\n    };\n    /** Returns the scope of the top stack. */\n    Hub.prototype.getScope = function () {\n        return this.getStackTop().scope;\n    };\n    /** Returns the scope stack for domains or the process. */\n    Hub.prototype.getStack = function () {\n        return this._stack;\n    };\n    /** Returns the topmost scope layer in the order domain > local > process. */\n    Hub.prototype.getStackTop = function () {\n        return this._stack[this._stack.length - 1];\n    };\n    /**\n     * @inheritDoc\n     */\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n    Hub.prototype.captureException = function (exception, hint) {\n        var eventId = (this._lastEventId = uuid4());\n        var finalHint = hint;\n        // If there's no explicit hint provided, mimick the same thing that would happen\n        // in the minimal itself to create a consistent behavior.\n        // We don't do this in the client, as it's the lowest level API, and doing this,\n        // would prevent user from having full control over direct calls.\n        if (!hint) {\n            var syntheticException = void 0;\n            try {\n                throw new Error('Sentry syntheticException');\n            }\n            catch (exception) {\n                syntheticException = exception;\n            }\n            finalHint = {\n                originalException: exception,\n                syntheticException: syntheticException,\n            };\n        }\n        this._invokeClient('captureException', exception, __assign(__assign({}, finalHint), { event_id: eventId }));\n        return eventId;\n    };\n    /**\n     * @inheritDoc\n     */\n    Hub.prototype.captureMessage = function (message, level, hint) {\n        var eventId = (this._lastEventId = uuid4());\n        var finalHint = hint;\n        // If there's no explicit hint provided, mimick the same thing that would happen\n        // in the minimal itself to create a consistent behavior.\n        // We don't do this in the client, as it's the lowest level API, and doing this,\n        // would prevent user from having full control over direct calls.\n        if (!hint) {\n            var syntheticException = void 0;\n            try {\n                throw new Error(message);\n            }\n            catch (exception) {\n                syntheticException = exception;\n            }\n            finalHint = {\n                originalException: message,\n                syntheticException: syntheticException,\n            };\n        }\n        this._invokeClient('captureMessage', message, level, __assign(__assign({}, finalHint), { event_id: eventId }));\n        return eventId;\n    };\n    /**\n     * @inheritDoc\n     */\n    Hub.prototype.captureEvent = function (event, hint) {\n        var eventId = (this._lastEventId = uuid4());\n        this._invokeClient('captureEvent', event, __assign(__assign({}, hint), { event_id: eventId }));\n        return eventId;\n    };\n    /**\n     * @inheritDoc\n     */\n    Hub.prototype.lastEventId = function () {\n        return this._lastEventId;\n    };\n    /**\n     * @inheritDoc\n     */\n    Hub.prototype.addBreadcrumb = function (breadcrumb, hint) {\n        var _a = this.getStackTop(), scope = _a.scope, client = _a.client;\n        if (!scope || !client)\n            return;\n        // eslint-disable-next-line @typescript-eslint/unbound-method\n        var _b = (client.getOptions && client.getOptions()) || {}, _c = _b.beforeBreadcrumb, beforeBreadcrumb = _c === void 0 ? null : _c, _d = _b.maxBreadcrumbs, maxBreadcrumbs = _d === void 0 ? DEFAULT_BREADCRUMBS : _d;\n        if (maxBreadcrumbs <= 0)\n            return;\n        var timestamp = dateTimestampInSeconds();\n        var mergedBreadcrumb = __assign({ timestamp: timestamp }, breadcrumb);\n        var finalBreadcrumb = beforeBreadcrumb\n            ? consoleSandbox(function () { return beforeBreadcrumb(mergedBreadcrumb, hint); })\n            : mergedBreadcrumb;\n        if (finalBreadcrumb === null)\n            return;\n        scope.addBreadcrumb(finalBreadcrumb, Math.min(maxBreadcrumbs, MAX_BREADCRUMBS));\n    };\n    /**\n     * @inheritDoc\n     */\n    Hub.prototype.setUser = function (user) {\n        var scope = this.getScope();\n        if (scope)\n            scope.setUser(user);\n    };\n    /**\n     * @inheritDoc\n     */\n    Hub.prototype.setTags = function (tags) {\n        var scope = this.getScope();\n        if (scope)\n            scope.setTags(tags);\n    };\n    /**\n     * @inheritDoc\n     */\n    Hub.prototype.setExtras = function (extras) {\n        var scope = this.getScope();\n        if (scope)\n            scope.setExtras(extras);\n    };\n    /**\n     * @inheritDoc\n     */\n    Hub.prototype.setTag = function (key, value) {\n        var scope = this.getScope();\n        if (scope)\n            scope.setTag(key, value);\n    };\n    /**\n     * @inheritDoc\n     */\n    Hub.prototype.setExtra = function (key, extra) {\n        var scope = this.getScope();\n        if (scope)\n            scope.setExtra(key, extra);\n    };\n    /**\n     * @inheritDoc\n     */\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    Hub.prototype.setContext = function (name, context) {\n        var scope = this.getScope();\n        if (scope)\n            scope.setContext(name, context);\n    };\n    /**\n     * @inheritDoc\n     */\n    Hub.prototype.configureScope = function (callback) {\n        var _a = this.getStackTop(), scope = _a.scope, client = _a.client;\n        if (scope && client) {\n            callback(scope);\n        }\n    };\n    /**\n     * @inheritDoc\n     */\n    Hub.prototype.run = function (callback) {\n        var oldHub = makeMain(this);\n        try {\n            callback(this);\n        }\n        finally {\n            makeMain(oldHub);\n        }\n    };\n    /**\n     * @inheritDoc\n     */\n    Hub.prototype.getIntegration = function (integration) {\n        var client = this.getClient();\n        if (!client)\n            return null;\n        try {\n            return client.getIntegration(integration);\n        }\n        catch (_oO) {\n            logger.warn(\"Cannot retrieve integration \" + integration.id + \" from the current Hub\");\n            return null;\n        }\n    };\n    /**\n     * @inheritDoc\n     */\n    Hub.prototype.startSpan = function (context) {\n        return this._callExtensionMethod('startSpan', context);\n    };\n    /**\n     * @inheritDoc\n     */\n    Hub.prototype.startTransaction = function (context, customSamplingContext) {\n        return this._callExtensionMethod('startTransaction', context, customSamplingContext);\n    };\n    /**\n     * @inheritDoc\n     */\n    Hub.prototype.traceHeaders = function () {\n        return this._callExtensionMethod('traceHeaders');\n    };\n    /**\n     * @inheritDoc\n     */\n    Hub.prototype.startSession = function (context) {\n        // End existing session if there's one\n        this.endSession();\n        var _a = this.getStackTop(), scope = _a.scope, client = _a.client;\n        var _b = (client && client.getOptions()) || {}, release = _b.release, environment = _b.environment;\n        var session = new Session(__assign(__assign({ release: release,\n            environment: environment }, (scope && { user: scope.getUser() })), context));\n        if (scope) {\n            scope.setSession(session);\n        }\n        return session;\n    };\n    /**\n     * @inheritDoc\n     */\n    Hub.prototype.endSession = function () {\n        var _a = this.getStackTop(), scope = _a.scope, client = _a.client;\n        if (!scope)\n            return;\n        var session = scope.getSession && scope.getSession();\n        if (session) {\n            session.close();\n            if (client && client.captureSession) {\n                client.captureSession(session);\n            }\n            scope.setSession();\n        }\n    };\n    /**\n     * Internal helper function to call a method on the top client if it exists.\n     *\n     * @param method The method to call on the client.\n     * @param args Arguments to pass to the client function.\n     */\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    Hub.prototype._invokeClient = function (method) {\n        var _a;\n        var args = [];\n        for (var _i = 1; _i < arguments.length; _i++) {\n            args[_i - 1] = arguments[_i];\n        }\n        var _b = this.getStackTop(), scope = _b.scope, client = _b.client;\n        if (client && client[method]) {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any\n            (_a = client)[method].apply(_a, __spread(args, [scope]));\n        }\n    };\n    /**\n     * Calls global extension method and binding current instance to the function call\n     */\n    // @ts-ignore Function lacks ending return statement and return type does not include 'undefined'. ts(2366)\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    Hub.prototype._callExtensionMethod = function (method) {\n        var args = [];\n        for (var _i = 1; _i < arguments.length; _i++) {\n            args[_i - 1] = arguments[_i];\n        }\n        var carrier = getMainCarrier();\n        var sentry = carrier.__SENTRY__;\n        if (sentry && sentry.extensions && typeof sentry.extensions[method] === 'function') {\n            return sentry.extensions[method].apply(this, args);\n        }\n        logger.warn(\"Extension method \" + method + \" couldn't be found, doing nothing.\");\n    };\n    return Hub;\n}());\nexport { Hub };\n/** Returns the global shim registry. */\nexport function getMainCarrier() {\n    var carrier = getGlobalObject();\n    carrier.__SENTRY__ = carrier.__SENTRY__ || {\n        extensions: {},\n        hub: undefined,\n    };\n    return carrier;\n}\n/**\n * Replaces the current main hub with the passed one on the global object\n *\n * @returns The old replaced hub\n */\nexport function makeMain(hub) {\n    var registry = getMainCarrier();\n    var oldHub = getHubFromCarrier(registry);\n    setHubOnCarrier(registry, hub);\n    return oldHub;\n}\n/**\n * Returns the default hub instance.\n *\n * If a hub is already registered in the global carrier but this module\n * contains a more recent version, it replaces the registered version.\n * Otherwise, the currently registered hub will be returned.\n */\nexport function getCurrentHub() {\n    // Get main carrier (global for every environment)\n    var registry = getMainCarrier();\n    // If there's no hub, or its an old API, assign a new one\n    if (!hasHubOnCarrier(registry) || getHubFromCarrier(registry).isOlderThan(API_VERSION)) {\n        setHubOnCarrier(registry, new Hub());\n    }\n    // Prefer domains over global if they are there (applicable only to Node environment)\n    if (isNodeEnv()) {\n        return getHubFromActiveDomain(registry);\n    }\n    // Return hub that lives on a global object\n    return getHubFromCarrier(registry);\n}\n/**\n * Returns the active domain, if one exists\n *\n * @returns The domain, or undefined if there is no active domain\n */\nexport function getActiveDomain() {\n    var sentry = getMainCarrier().__SENTRY__;\n    return sentry && sentry.extensions && sentry.extensions.domain && sentry.extensions.domain.active;\n}\n/**\n * Try to read the hub from an active domain, and fallback to the registry if one doesn't exist\n * @returns discovered hub\n */\nfunction getHubFromActiveDomain(registry) {\n    try {\n        var activeDomain = getActiveDomain();\n        // If there's no active domain, just return global hub\n        if (!activeDomain) {\n            return getHubFromCarrier(registry);\n        }\n        // If there's no hub on current domain, or it's an old API, assign a new one\n        if (!hasHubOnCarrier(activeDomain) || getHubFromCarrier(activeDomain).isOlderThan(API_VERSION)) {\n            var registryHubTopStack = getHubFromCarrier(registry).getStackTop();\n            setHubOnCarrier(activeDomain, new Hub(registryHubTopStack.client, Scope.clone(registryHubTopStack.scope)));\n        }\n        // Return hub that lives on a domain\n        return getHubFromCarrier(activeDomain);\n    }\n    catch (_Oo) {\n        // Return hub that lives on a global object\n        return getHubFromCarrier(registry);\n    }\n}\n/**\n * This will tell whether a carrier has a hub on it or not\n * @param carrier object\n */\nfunction hasHubOnCarrier(carrier) {\n    return !!(carrier && carrier.__SENTRY__ && carrier.__SENTRY__.hub);\n}\n/**\n * This will create a new {@link Hub} and add to the passed object on\n * __SENTRY__.hub.\n * @param carrier object\n * @hidden\n */\nexport function getHubFromCarrier(carrier) {\n    if (carrier && carrier.__SENTRY__ && carrier.__SENTRY__.hub)\n        return carrier.__SENTRY__.hub;\n    carrier.__SENTRY__ = carrier.__SENTRY__ || {};\n    carrier.__SENTRY__.hub = new Hub();\n    return carrier.__SENTRY__.hub;\n}\n/**\n * This will set passed {@link Hub} on the passed object's __SENTRY__.hub attribute\n * @param carrier object\n * @param hub Hub\n */\nexport function setHubOnCarrier(carrier, hub) {\n    if (!carrier)\n        return false;\n    carrier.__SENTRY__ = carrier.__SENTRY__ || {};\n    carrier.__SENTRY__.hub = hub;\n    return true;\n}\n//# sourceMappingURL=hub.js.map","import { __read, __spread } from \"tslib\";\nimport { addGlobalEventProcessor, getCurrentHub } from '@sentry/hub';\nimport { getEventDescription, isMatchingPattern, logger } from '@sentry/utils';\n// \"Script error.\" is hard coded into browsers for errors that it can't read.\n// this is the result of a script being pulled in from an external domain and CORS.\nvar DEFAULT_IGNORE_ERRORS = [/^Script error\\.?$/, /^Javascript error: Script error\\.? on line 0$/];\n/** Inbound filters configurable by the user */\nvar InboundFilters = /** @class */ (function () {\n    function InboundFilters(_options) {\n        if (_options === void 0) { _options = {}; }\n        this._options = _options;\n        /**\n         * @inheritDoc\n         */\n        this.name = InboundFilters.id;\n    }\n    /**\n     * @inheritDoc\n     */\n    InboundFilters.prototype.setupOnce = function () {\n        addGlobalEventProcessor(function (event) {\n            var hub = getCurrentHub();\n            if (!hub) {\n                return event;\n            }\n            var self = hub.getIntegration(InboundFilters);\n            if (self) {\n                var client = hub.getClient();\n                var clientOptions = client ? client.getOptions() : {};\n                var options = self._mergeOptions(clientOptions);\n                if (self._shouldDropEvent(event, options)) {\n                    return null;\n                }\n            }\n            return event;\n        });\n    };\n    /** JSDoc */\n    InboundFilters.prototype._shouldDropEvent = function (event, options) {\n        if (this._isSentryError(event, options)) {\n            logger.warn(\"Event dropped due to being internal Sentry Error.\\nEvent: \" + getEventDescription(event));\n            return true;\n        }\n        if (this._isIgnoredError(event, options)) {\n            logger.warn(\"Event dropped due to being matched by `ignoreErrors` option.\\nEvent: \" + getEventDescription(event));\n            return true;\n        }\n        if (this._isDeniedUrl(event, options)) {\n            logger.warn(\"Event dropped due to being matched by `denyUrls` option.\\nEvent: \" + getEventDescription(event) + \".\\nUrl: \" + this._getEventFilterUrl(event));\n            return true;\n        }\n        if (!this._isAllowedUrl(event, options)) {\n            logger.warn(\"Event dropped due to not being matched by `allowUrls` option.\\nEvent: \" + getEventDescription(event) + \".\\nUrl: \" + this._getEventFilterUrl(event));\n            return true;\n        }\n        return false;\n    };\n    /** JSDoc */\n    InboundFilters.prototype._isSentryError = function (event, options) {\n        if (!options.ignoreInternal) {\n            return false;\n        }\n        try {\n            return ((event &&\n                event.exception &&\n                event.exception.values &&\n                event.exception.values[0] &&\n                event.exception.values[0].type === 'SentryError') ||\n                false);\n        }\n        catch (_oO) {\n            return false;\n        }\n    };\n    /** JSDoc */\n    InboundFilters.prototype._isIgnoredError = function (event, options) {\n        if (!options.ignoreErrors || !options.ignoreErrors.length) {\n            return false;\n        }\n        return this._getPossibleEventMessages(event).some(function (message) {\n            // Not sure why TypeScript complains here...\n            return options.ignoreErrors.some(function (pattern) { return isMatchingPattern(message, pattern); });\n        });\n    };\n    /** JSDoc */\n    InboundFilters.prototype._isDeniedUrl = function (event, options) {\n        // TODO: Use Glob instead?\n        if (!options.denyUrls || !options.denyUrls.length) {\n            return false;\n        }\n        var url = this._getEventFilterUrl(event);\n        return !url ? false : options.denyUrls.some(function (pattern) { return isMatchingPattern(url, pattern); });\n    };\n    /** JSDoc */\n    InboundFilters.prototype._isAllowedUrl = function (event, options) {\n        // TODO: Use Glob instead?\n        if (!options.allowUrls || !options.allowUrls.length) {\n            return true;\n        }\n        var url = this._getEventFilterUrl(event);\n        return !url ? true : options.allowUrls.some(function (pattern) { return isMatchingPattern(url, pattern); });\n    };\n    /** JSDoc */\n    InboundFilters.prototype._mergeOptions = function (clientOptions) {\n        if (clientOptions === void 0) { clientOptions = {}; }\n        return {\n            allowUrls: __spread((this._options.whitelistUrls || []), (this._options.allowUrls || []), (clientOptions.whitelistUrls || []), (clientOptions.allowUrls || [])),\n            denyUrls: __spread((this._options.blacklistUrls || []), (this._options.denyUrls || []), (clientOptions.blacklistUrls || []), (clientOptions.denyUrls || [])),\n            ignoreErrors: __spread((this._options.ignoreErrors || []), (clientOptions.ignoreErrors || []), DEFAULT_IGNORE_ERRORS),\n            ignoreInternal: typeof this._options.ignoreInternal !== 'undefined' ? this._options.ignoreInternal : true,\n        };\n    };\n    /** JSDoc */\n    InboundFilters.prototype._getPossibleEventMessages = function (event) {\n        if (event.message) {\n            return [event.message];\n        }\n        if (event.exception) {\n            try {\n                var _a = (event.exception.values && event.exception.values[0]) || {}, _b = _a.type, type = _b === void 0 ? '' : _b, _c = _a.value, value = _c === void 0 ? '' : _c;\n                return [\"\" + value, type + \": \" + value];\n            }\n            catch (oO) {\n                logger.error(\"Cannot extract message for event \" + getEventDescription(event));\n                return [];\n            }\n        }\n        return [];\n    };\n    /** JSDoc */\n    InboundFilters.prototype._getEventFilterUrl = function (event) {\n        try {\n            if (event.stacktrace) {\n                var frames_1 = event.stacktrace.frames;\n                return (frames_1 && frames_1[frames_1.length - 1].filename) || null;\n            }\n            if (event.exception) {\n                var frames_2 = event.exception.values && event.exception.values[0].stacktrace && event.exception.values[0].stacktrace.frames;\n                return (frames_2 && frames_2[frames_2.length - 1].filename) || null;\n            }\n            return null;\n        }\n        catch (oO) {\n            logger.error(\"Cannot extract url for event \" + getEventDescription(event));\n            return null;\n        }\n    };\n    /**\n     * @inheritDoc\n     */\n    InboundFilters.id = 'InboundFilters';\n    return InboundFilters;\n}());\nexport { InboundFilters };\n//# sourceMappingURL=inboundfilters.js.map","export var setPrototypeOf = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array ? setProtoOf : mixinProperties);\n/**\n * setPrototypeOf polyfill using __proto__\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction setProtoOf(obj, proto) {\n    // @ts-ignore __proto__ does not exist on obj\n    obj.__proto__ = proto;\n    return obj;\n}\n/**\n * setPrototypeOf polyfill using mixin\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction mixinProperties(obj, proto) {\n    for (var prop in proto) {\n        // eslint-disable-next-line no-prototype-builtins\n        if (!obj.hasOwnProperty(prop)) {\n            // @ts-ignore typescript complains about indexing so we remove\n            obj[prop] = proto[prop];\n        }\n    }\n    return obj;\n}\n//# sourceMappingURL=polyfill.js.map","import { __extends } from \"tslib\";\nimport { setPrototypeOf } from './polyfill';\n/** An error emitted by Sentry SDKs and related utilities. */\nvar SentryError = /** @class */ (function (_super) {\n    __extends(SentryError, _super);\n    function SentryError(message) {\n        var _newTarget = this.constructor;\n        var _this = _super.call(this, message) || this;\n        _this.message = message;\n        _this.name = _newTarget.prototype.constructor.name;\n        setPrototypeOf(_this, _newTarget.prototype);\n        return _this;\n    }\n    return SentryError;\n}(Error));\nexport { SentryError };\n//# sourceMappingURL=error.js.map","import { __read } from \"tslib\";\nimport { SentryError } from './error';\n/** Regular expression used to parse a Dsn. */\nvar DSN_REGEX = /^(?:(\\w+):)\\/\\/(?:(\\w+)(?::(\\w+))?@)([\\w.-]+)(?::(\\d+))?\\/(.+)/;\n/** Error message */\nvar ERROR_MESSAGE = 'Invalid Dsn';\n/** The Sentry Dsn, identifying a Sentry instance and project. */\nvar Dsn = /** @class */ (function () {\n    /** Creates a new Dsn component */\n    function Dsn(from) {\n        if (typeof from === 'string') {\n            this._fromString(from);\n        }\n        else {\n            this._fromComponents(from);\n        }\n        this._validate();\n    }\n    /**\n     * Renders the string representation of this Dsn.\n     *\n     * By default, this will render the public representation without the password\n     * component. To get the deprecated private representation, set `withPassword`\n     * to true.\n     *\n     * @param withPassword When set to true, the password will be included.\n     */\n    Dsn.prototype.toString = function (withPassword) {\n        if (withPassword === void 0) { withPassword = false; }\n        var _a = this, host = _a.host, path = _a.path, pass = _a.pass, port = _a.port, projectId = _a.projectId, protocol = _a.protocol, user = _a.user;\n        return (protocol + \"://\" + user + (withPassword && pass ? \":\" + pass : '') +\n            (\"@\" + host + (port ? \":\" + port : '') + \"/\" + (path ? path + \"/\" : path) + projectId));\n    };\n    /** Parses a string into this Dsn. */\n    Dsn.prototype._fromString = function (str) {\n        var match = DSN_REGEX.exec(str);\n        if (!match) {\n            throw new SentryError(ERROR_MESSAGE);\n        }\n        var _a = __read(match.slice(1), 6), protocol = _a[0], user = _a[1], _b = _a[2], pass = _b === void 0 ? '' : _b, host = _a[3], _c = _a[4], port = _c === void 0 ? '' : _c, lastPath = _a[5];\n        var path = '';\n        var projectId = lastPath;\n        var split = projectId.split('/');\n        if (split.length > 1) {\n            path = split.slice(0, -1).join('/');\n            projectId = split.pop();\n        }\n        if (projectId) {\n            var projectMatch = projectId.match(/^\\d+/);\n            if (projectMatch) {\n                projectId = projectMatch[0];\n            }\n        }\n        this._fromComponents({ host: host, pass: pass, path: path, projectId: projectId, port: port, protocol: protocol, user: user });\n    };\n    /** Maps Dsn components into this instance. */\n    Dsn.prototype._fromComponents = function (components) {\n        this.protocol = components.protocol;\n        this.user = components.user;\n        this.pass = components.pass || '';\n        this.host = components.host;\n        this.port = components.port || '';\n        this.path = components.path || '';\n        this.projectId = components.projectId;\n    };\n    /** Validates this Dsn and throws on error. */\n    Dsn.prototype._validate = function () {\n        var _this = this;\n        ['protocol', 'user', 'host', 'projectId'].forEach(function (component) {\n            if (!_this[component]) {\n                throw new SentryError(ERROR_MESSAGE + \": \" + component + \" missing\");\n            }\n        });\n        if (!this.projectId.match(/^\\d+$/)) {\n            throw new SentryError(ERROR_MESSAGE + \": Invalid projectId \" + this.projectId);\n        }\n        if (this.protocol !== 'http' && this.protocol !== 'https') {\n            throw new SentryError(ERROR_MESSAGE + \": Invalid protocol \" + this.protocol);\n        }\n        if (this.port && isNaN(parseInt(this.port, 10))) {\n            throw new SentryError(ERROR_MESSAGE + \": Invalid port \" + this.port);\n        }\n    };\n    return Dsn;\n}());\nexport { Dsn };\n//# sourceMappingURL=dsn.js.map","import { __read, __spread } from \"tslib\";\nimport { addGlobalEventProcessor, getCurrentHub } from '@sentry/hub';\nimport { logger } from '@sentry/utils';\nexport var installedIntegrations = [];\n/** Gets integration to install */\nexport function getIntegrationsToSetup(options) {\n    var defaultIntegrations = (options.defaultIntegrations && __spread(options.defaultIntegrations)) || [];\n    var userIntegrations = options.integrations;\n    var integrations = [];\n    if (Array.isArray(userIntegrations)) {\n        var userIntegrationsNames_1 = userIntegrations.map(function (i) { return i.name; });\n        var pickedIntegrationsNames_1 = [];\n        // Leave only unique default integrations, that were not overridden with provided user integrations\n        defaultIntegrations.forEach(function (defaultIntegration) {\n            if (userIntegrationsNames_1.indexOf(defaultIntegration.name) === -1 &&\n                pickedIntegrationsNames_1.indexOf(defaultIntegration.name) === -1) {\n                integrations.push(defaultIntegration);\n                pickedIntegrationsNames_1.push(defaultIntegration.name);\n            }\n        });\n        // Don't add same user integration twice\n        userIntegrations.forEach(function (userIntegration) {\n            if (pickedIntegrationsNames_1.indexOf(userIntegration.name) === -1) {\n                integrations.push(userIntegration);\n                pickedIntegrationsNames_1.push(userIntegration.name);\n            }\n        });\n    }\n    else if (typeof userIntegrations === 'function') {\n        integrations = userIntegrations(defaultIntegrations);\n        integrations = Array.isArray(integrations) ? integrations : [integrations];\n    }\n    else {\n        integrations = __spread(defaultIntegrations);\n    }\n    // Make sure that if present, `Debug` integration will always run last\n    var integrationsNames = integrations.map(function (i) { return i.name; });\n    var alwaysLastToRun = 'Debug';\n    if (integrationsNames.indexOf(alwaysLastToRun) !== -1) {\n        integrations.push.apply(integrations, __spread(integrations.splice(integrationsNames.indexOf(alwaysLastToRun), 1)));\n    }\n    return integrations;\n}\n/** Setup given integration */\nexport function setupIntegration(integration) {\n    if (installedIntegrations.indexOf(integration.name) !== -1) {\n        return;\n    }\n    integration.setupOnce(addGlobalEventProcessor, getCurrentHub);\n    installedIntegrations.push(integration.name);\n    logger.log(\"Integration installed: \" + integration.name);\n}\n/**\n * Given a list of integration instances this installs them all. When `withDefaults` is set to `true` then all default\n * integrations are added unless they were already provided before.\n * @param integrations array of integration instances\n * @param withDefault should enable default integrations\n */\nexport function setupIntegrations(options) {\n    var integrations = {};\n    getIntegrationsToSetup(options).forEach(function (integration) {\n        integrations[integration.name] = integration;\n        setupIntegration(integration);\n    });\n    return integrations;\n}\n//# sourceMappingURL=integration.js.map","import { __assign, __values } from \"tslib\";\n/* eslint-disable max-lines */\nimport { Scope } from '@sentry/hub';\nimport { SessionStatus, } from '@sentry/types';\nimport { dateTimestampInSeconds, Dsn, isPrimitive, isThenable, logger, normalize, SentryError, SyncPromise, truncate, uuid4, } from '@sentry/utils';\nimport { setupIntegrations } from './integration';\n/**\n * Base implementation for all JavaScript SDK clients.\n *\n * Call the constructor with the corresponding backend constructor and options\n * specific to the client subclass. To access these options later, use\n * {@link Client.getOptions}. Also, the Backend instance is available via\n * {@link Client.getBackend}.\n *\n * If a Dsn is specified in the options, it will be parsed and stored. Use\n * {@link Client.getDsn} to retrieve the Dsn at any moment. In case the Dsn is\n * invalid, the constructor will throw a {@link SentryException}. Note that\n * without a valid Dsn, the SDK will not send any events to Sentry.\n *\n * Before sending an event via the backend, it is passed through\n * {@link BaseClient.prepareEvent} to add SDK information and scope data\n * (breadcrumbs and context). To add more custom information, override this\n * method and extend the resulting prepared event.\n *\n * To issue automatically created events (e.g. via instrumentation), use\n * {@link Client.captureEvent}. It will prepare the event and pass it through\n * the callback lifecycle. To issue auto-breadcrumbs, use\n * {@link Client.addBreadcrumb}.\n *\n * @example\n * class NodeClient extends BaseClient<NodeBackend, NodeOptions> {\n *   public constructor(options: NodeOptions) {\n *     super(NodeBackend, options);\n *   }\n *\n *   // ...\n * }\n */\nvar BaseClient = /** @class */ (function () {\n    /**\n     * Initializes this client instance.\n     *\n     * @param backendClass A constructor function to create the backend.\n     * @param options Options for the client.\n     */\n    function BaseClient(backendClass, options) {\n        /** Array of used integrations. */\n        this._integrations = {};\n        /** Number of call being processed */\n        this._processing = 0;\n        this._backend = new backendClass(options);\n        this._options = options;\n        if (options.dsn) {\n            this._dsn = new Dsn(options.dsn);\n        }\n    }\n    /**\n     * @inheritDoc\n     */\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n    BaseClient.prototype.captureException = function (exception, hint, scope) {\n        var _this = this;\n        var eventId = hint && hint.event_id;\n        this._process(this._getBackend()\n            .eventFromException(exception, hint)\n            .then(function (event) { return _this._captureEvent(event, hint, scope); })\n            .then(function (result) {\n            eventId = result;\n        }));\n        return eventId;\n    };\n    /**\n     * @inheritDoc\n     */\n    BaseClient.prototype.captureMessage = function (message, level, hint, scope) {\n        var _this = this;\n        var eventId = hint && hint.event_id;\n        var promisedEvent = isPrimitive(message)\n            ? this._getBackend().eventFromMessage(String(message), level, hint)\n            : this._getBackend().eventFromException(message, hint);\n        this._process(promisedEvent\n            .then(function (event) { return _this._captureEvent(event, hint, scope); })\n            .then(function (result) {\n            eventId = result;\n        }));\n        return eventId;\n    };\n    /**\n     * @inheritDoc\n     */\n    BaseClient.prototype.captureEvent = function (event, hint, scope) {\n        var eventId = hint && hint.event_id;\n        this._process(this._captureEvent(event, hint, scope).then(function (result) {\n            eventId = result;\n        }));\n        return eventId;\n    };\n    /**\n     * @inheritDoc\n     */\n    BaseClient.prototype.captureSession = function (session) {\n        if (!session.release) {\n            logger.warn('Discarded session because of missing release');\n        }\n        else {\n            this._sendSession(session);\n        }\n    };\n    /**\n     * @inheritDoc\n     */\n    BaseClient.prototype.getDsn = function () {\n        return this._dsn;\n    };\n    /**\n     * @inheritDoc\n     */\n    BaseClient.prototype.getOptions = function () {\n        return this._options;\n    };\n    /**\n     * @inheritDoc\n     */\n    BaseClient.prototype.flush = function (timeout) {\n        var _this = this;\n        return this._isClientProcessing(timeout).then(function (ready) {\n            return _this._getBackend()\n                .getTransport()\n                .close(timeout)\n                .then(function (transportFlushed) { return ready && transportFlushed; });\n        });\n    };\n    /**\n     * @inheritDoc\n     */\n    BaseClient.prototype.close = function (timeout) {\n        var _this = this;\n        return this.flush(timeout).then(function (result) {\n            _this.getOptions().enabled = false;\n            return result;\n        });\n    };\n    /**\n     * Sets up the integrations\n     */\n    BaseClient.prototype.setupIntegrations = function () {\n        if (this._isEnabled()) {\n            this._integrations = setupIntegrations(this._options);\n        }\n    };\n    /**\n     * @inheritDoc\n     */\n    BaseClient.prototype.getIntegration = function (integration) {\n        try {\n            return this._integrations[integration.id] || null;\n        }\n        catch (_oO) {\n            logger.warn(\"Cannot retrieve integration \" + integration.id + \" from the current Client\");\n            return null;\n        }\n    };\n    /** Updates existing session based on the provided event */\n    BaseClient.prototype._updateSessionFromEvent = function (session, event) {\n        var e_1, _a;\n        var crashed = false;\n        var errored = false;\n        var userAgent;\n        var exceptions = event.exception && event.exception.values;\n        if (exceptions) {\n            errored = true;\n            try {\n                for (var exceptions_1 = __values(exceptions), exceptions_1_1 = exceptions_1.next(); !exceptions_1_1.done; exceptions_1_1 = exceptions_1.next()) {\n                    var ex = exceptions_1_1.value;\n                    var mechanism = ex.mechanism;\n                    if (mechanism && mechanism.handled === false) {\n                        crashed = true;\n                        break;\n                    }\n                }\n            }\n            catch (e_1_1) { e_1 = { error: e_1_1 }; }\n            finally {\n                try {\n                    if (exceptions_1_1 && !exceptions_1_1.done && (_a = exceptions_1.return)) _a.call(exceptions_1);\n                }\n                finally { if (e_1) throw e_1.error; }\n            }\n        }\n        var user = event.user;\n        if (!session.userAgent) {\n            var headers = event.request ? event.request.headers : {};\n            for (var key in headers) {\n                if (key.toLowerCase() === 'user-agent') {\n                    userAgent = headers[key];\n                    break;\n                }\n            }\n        }\n        session.update(__assign(__assign({}, (crashed && { status: SessionStatus.Crashed })), { user: user,\n            userAgent: userAgent, errors: session.errors + Number(errored || crashed) }));\n    };\n    /** Deliver captured session to Sentry */\n    BaseClient.prototype._sendSession = function (session) {\n        this._getBackend().sendSession(session);\n    };\n    /** Waits for the client to be done with processing. */\n    BaseClient.prototype._isClientProcessing = function (timeout) {\n        var _this = this;\n        return new SyncPromise(function (resolve) {\n            var ticked = 0;\n            var tick = 1;\n            var interval = setInterval(function () {\n                if (_this._processing == 0) {\n                    clearInterval(interval);\n                    resolve(true);\n                }\n                else {\n                    ticked += tick;\n                    if (timeout && ticked >= timeout) {\n                        clearInterval(interval);\n                        resolve(false);\n                    }\n                }\n            }, tick);\n        });\n    };\n    /** Returns the current backend. */\n    BaseClient.prototype._getBackend = function () {\n        return this._backend;\n    };\n    /** Determines whether this SDK is enabled and a valid Dsn is present. */\n    BaseClient.prototype._isEnabled = function () {\n        return this.getOptions().enabled !== false && this._dsn !== undefined;\n    };\n    /**\n     * Adds common information to events.\n     *\n     * The information includes release and environment from `options`,\n     * breadcrumbs and context (extra, tags and user) from the scope.\n     *\n     * Information that is already present in the event is never overwritten. For\n     * nested objects, such as the context, keys are merged.\n     *\n     * @param event The original event.\n     * @param hint May contain additional information about the original exception.\n     * @param scope A scope containing event metadata.\n     * @returns A new event with more information.\n     */\n    BaseClient.prototype._prepareEvent = function (event, scope, hint) {\n        var _this = this;\n        var _a = this.getOptions().normalizeDepth, normalizeDepth = _a === void 0 ? 3 : _a;\n        var prepared = __assign(__assign({}, event), { event_id: event.event_id || (hint && hint.event_id ? hint.event_id : uuid4()), timestamp: event.timestamp || dateTimestampInSeconds() });\n        this._applyClientOptions(prepared);\n        this._applyIntegrationsMetadata(prepared);\n        // If we have scope given to us, use it as the base for further modifications.\n        // This allows us to prevent unnecessary copying of data if `captureContext` is not provided.\n        var finalScope = scope;\n        if (hint && hint.captureContext) {\n            finalScope = Scope.clone(finalScope).update(hint.captureContext);\n        }\n        // We prepare the result here with a resolved Event.\n        var result = SyncPromise.resolve(prepared);\n        // This should be the last thing called, since we want that\n        // {@link Hub.addEventProcessor} gets the finished prepared event.\n        if (finalScope) {\n            // In case we have a hub we reassign it.\n            result = finalScope.applyToEvent(prepared, hint);\n        }\n        return result.then(function (evt) {\n            if (typeof normalizeDepth === 'number' && normalizeDepth > 0) {\n                return _this._normalizeEvent(evt, normalizeDepth);\n            }\n            return evt;\n        });\n    };\n    /**\n     * Applies `normalize` function on necessary `Event` attributes to make them safe for serialization.\n     * Normalized keys:\n     * - `breadcrumbs.data`\n     * - `user`\n     * - `contexts`\n     * - `extra`\n     * @param event Event\n     * @returns Normalized event\n     */\n    BaseClient.prototype._normalizeEvent = function (event, depth) {\n        if (!event) {\n            return null;\n        }\n        var normalized = __assign(__assign(__assign(__assign(__assign({}, event), (event.breadcrumbs && {\n            breadcrumbs: event.breadcrumbs.map(function (b) { return (__assign(__assign({}, b), (b.data && {\n                data: normalize(b.data, depth),\n            }))); }),\n        })), (event.user && {\n            user: normalize(event.user, depth),\n        })), (event.contexts && {\n            contexts: normalize(event.contexts, depth),\n        })), (event.extra && {\n            extra: normalize(event.extra, depth),\n        }));\n        // event.contexts.trace stores information about a Transaction. Similarly,\n        // event.spans[] stores information about child Spans. Given that a\n        // Transaction is conceptually a Span, normalization should apply to both\n        // Transactions and Spans consistently.\n        // For now the decision is to skip normalization of Transactions and Spans,\n        // so this block overwrites the normalized event to add back the original\n        // Transaction information prior to normalization.\n        if (event.contexts && event.contexts.trace) {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n            normalized.contexts.trace = event.contexts.trace;\n        }\n        return normalized;\n    };\n    /**\n     *  Enhances event using the client configuration.\n     *  It takes care of all \"static\" values like environment, release and `dist`,\n     *  as well as truncating overly long values.\n     * @param event event instance to be enhanced\n     */\n    BaseClient.prototype._applyClientOptions = function (event) {\n        var options = this.getOptions();\n        var environment = options.environment, release = options.release, dist = options.dist, _a = options.maxValueLength, maxValueLength = _a === void 0 ? 250 : _a;\n        if (!('environment' in event)) {\n            event.environment = 'environment' in options ? environment : 'production';\n        }\n        if (event.release === undefined && release !== undefined) {\n            event.release = release;\n        }\n        if (event.dist === undefined && dist !== undefined) {\n            event.dist = dist;\n        }\n        if (event.message) {\n            event.message = truncate(event.message, maxValueLength);\n        }\n        var exception = event.exception && event.exception.values && event.exception.values[0];\n        if (exception && exception.value) {\n            exception.value = truncate(exception.value, maxValueLength);\n        }\n        var request = event.request;\n        if (request && request.url) {\n            request.url = truncate(request.url, maxValueLength);\n        }\n    };\n    /**\n     * This function adds all used integrations to the SDK info in the event.\n     * @param sdkInfo The sdkInfo of the event that will be filled with all integrations.\n     */\n    BaseClient.prototype._applyIntegrationsMetadata = function (event) {\n        var sdkInfo = event.sdk;\n        var integrationsArray = Object.keys(this._integrations);\n        if (sdkInfo && integrationsArray.length > 0) {\n            sdkInfo.integrations = integrationsArray;\n        }\n    };\n    /**\n     * Tells the backend to send this event\n     * @param event The Sentry event to send\n     */\n    BaseClient.prototype._sendEvent = function (event) {\n        this._getBackend().sendEvent(event);\n    };\n    /**\n     * Processes the event and logs an error in case of rejection\n     * @param event\n     * @param hint\n     * @param scope\n     */\n    BaseClient.prototype._captureEvent = function (event, hint, scope) {\n        return this._processEvent(event, hint, scope).then(function (finalEvent) {\n            return finalEvent.event_id;\n        }, function (reason) {\n            logger.error(reason);\n            return undefined;\n        });\n    };\n    /**\n     * Processes an event (either error or message) and sends it to Sentry.\n     *\n     * This also adds breadcrumbs and context information to the event. However,\n     * platform specific meta data (such as the User's IP address) must be added\n     * by the SDK implementor.\n     *\n     *\n     * @param event The event to send to Sentry.\n     * @param hint May contain additional information about the original exception.\n     * @param scope A scope containing event metadata.\n     * @returns A SyncPromise that resolves with the event or rejects in case event was/will not be send.\n     */\n    BaseClient.prototype._processEvent = function (event, hint, scope) {\n        var _this = this;\n        // eslint-disable-next-line @typescript-eslint/unbound-method\n        var _a = this.getOptions(), beforeSend = _a.beforeSend, sampleRate = _a.sampleRate;\n        if (!this._isEnabled()) {\n            return SyncPromise.reject(new SentryError('SDK not enabled, will not send event.'));\n        }\n        var isTransaction = event.type === 'transaction';\n        // 1.0 === 100% events are sent\n        // 0.0 === 0% events are sent\n        // Sampling for transaction happens somewhere else\n        if (!isTransaction && typeof sampleRate === 'number' && Math.random() > sampleRate) {\n            return SyncPromise.reject(new SentryError(\"Discarding event because it's not included in the random sample (sampling rate = \" + sampleRate + \")\"));\n        }\n        return this._prepareEvent(event, scope, hint)\n            .then(function (prepared) {\n            if (prepared === null) {\n                throw new SentryError('An event processor returned null, will not send event.');\n            }\n            var isInternalException = hint && hint.data && hint.data.__sentry__ === true;\n            if (isInternalException || isTransaction || !beforeSend) {\n                return prepared;\n            }\n            var beforeSendResult = beforeSend(prepared, hint);\n            if (typeof beforeSendResult === 'undefined') {\n                throw new SentryError('`beforeSend` method has to return `null` or a valid event.');\n            }\n            else if (isThenable(beforeSendResult)) {\n                return beforeSendResult.then(function (event) { return event; }, function (e) {\n                    throw new SentryError(\"beforeSend rejected with \" + e);\n                });\n            }\n            return beforeSendResult;\n        })\n            .then(function (processedEvent) {\n            if (processedEvent === null) {\n                throw new SentryError('`beforeSend` returned `null`, will not send event.');\n            }\n            var session = scope && scope.getSession && scope.getSession();\n            if (!isTransaction && session) {\n                _this._updateSessionFromEvent(session, processedEvent);\n            }\n            _this._sendEvent(processedEvent);\n            return processedEvent;\n        })\n            .then(null, function (reason) {\n            if (reason instanceof SentryError) {\n                throw reason;\n            }\n            _this.captureException(reason, {\n                data: {\n                    __sentry__: true,\n                },\n                originalException: reason,\n            });\n            throw new SentryError(\"Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event.\\nReason: \" + reason);\n        });\n    };\n    /**\n     * Occupies the client with processing and event\n     */\n    BaseClient.prototype._process = function (promise) {\n        var _this = this;\n        this._processing += 1;\n        promise.then(function (value) {\n            _this._processing -= 1;\n            return value;\n        }, function (reason) {\n            _this._processing -= 1;\n            return reason;\n        });\n    };\n    return BaseClient;\n}());\nexport { BaseClient };\n//# sourceMappingURL=baseclient.js.map","/** The status of an event. */\n// eslint-disable-next-line import/export\nexport var Status;\n(function (Status) {\n    /** The status could not be determined. */\n    Status[\"Unknown\"] = \"unknown\";\n    /** The event was skipped due to configuration or callbacks. */\n    Status[\"Skipped\"] = \"skipped\";\n    /** The event was sent to Sentry successfully. */\n    Status[\"Success\"] = \"success\";\n    /** The client is currently rate limited and will try again later. */\n    Status[\"RateLimit\"] = \"rate_limit\";\n    /** The event could not be processed. */\n    Status[\"Invalid\"] = \"invalid\";\n    /** A server-side error ocurred during submission. */\n    Status[\"Failed\"] = \"failed\";\n})(Status || (Status = {}));\n// eslint-disable-next-line @typescript-eslint/no-namespace, import/export\n(function (Status) {\n    /**\n     * Converts a HTTP status code into a {@link Status}.\n     *\n     * @param code The HTTP response status code.\n     * @returns The send status or {@link Status.Unknown}.\n     */\n    function fromHttpCode(code) {\n        if (code >= 200 && code < 300) {\n            return Status.Success;\n        }\n        if (code === 429) {\n            return Status.RateLimit;\n        }\n        if (code >= 400 && code < 500) {\n            return Status.Invalid;\n        }\n        if (code >= 500) {\n            return Status.Failed;\n        }\n        return Status.Unknown;\n    }\n    Status.fromHttpCode = fromHttpCode;\n})(Status || (Status = {}));\n//# sourceMappingURL=status.js.map","import { Status } from '@sentry/types';\nimport { SyncPromise } from '@sentry/utils';\n/** Noop transport */\nvar NoopTransport = /** @class */ (function () {\n    function NoopTransport() {\n    }\n    /**\n     * @inheritDoc\n     */\n    NoopTransport.prototype.sendEvent = function (_) {\n        return SyncPromise.resolve({\n            reason: \"NoopTransport: Event has been skipped because no Dsn is configured.\",\n            status: Status.Skipped,\n        });\n    };\n    /**\n     * @inheritDoc\n     */\n    NoopTransport.prototype.close = function (_) {\n        return SyncPromise.resolve(true);\n    };\n    return NoopTransport;\n}());\nexport { NoopTransport };\n//# sourceMappingURL=noop.js.map","/** JSDoc */\n// eslint-disable-next-line import/export\nexport var Severity;\n(function (Severity) {\n    /** JSDoc */\n    Severity[\"Fatal\"] = \"fatal\";\n    /** JSDoc */\n    Severity[\"Error\"] = \"error\";\n    /** JSDoc */\n    Severity[\"Warning\"] = \"warning\";\n    /** JSDoc */\n    Severity[\"Log\"] = \"log\";\n    /** JSDoc */\n    Severity[\"Info\"] = \"info\";\n    /** JSDoc */\n    Severity[\"Debug\"] = \"debug\";\n    /** JSDoc */\n    Severity[\"Critical\"] = \"critical\";\n})(Severity || (Severity = {}));\n// eslint-disable-next-line @typescript-eslint/no-namespace, import/export\n(function (Severity) {\n    /**\n     * Converts a string-based level into a {@link Severity}.\n     *\n     * @param level string representation of Severity\n     * @returns Severity\n     */\n    function fromString(level) {\n        switch (level) {\n            case 'debug':\n                return Severity.Debug;\n            case 'info':\n                return Severity.Info;\n            case 'warn':\n            case 'warning':\n                return Severity.Warning;\n            case 'error':\n                return Severity.Error;\n            case 'fatal':\n                return Severity.Fatal;\n            case 'critical':\n                return Severity.Critical;\n            case 'log':\n            default:\n                return Severity.Log;\n        }\n    }\n    Severity.fromString = fromString;\n})(Severity || (Severity = {}));\n//# sourceMappingURL=severity.js.map","import { logger, SentryError } from '@sentry/utils';\nimport { NoopTransport } from './transports/noop';\n/**\n * This is the base implemention of a Backend.\n * @hidden\n */\nvar BaseBackend = /** @class */ (function () {\n    /** Creates a new backend instance. */\n    function BaseBackend(options) {\n        this._options = options;\n        if (!this._options.dsn) {\n            logger.warn('No DSN provided, backend will not do anything.');\n        }\n        this._transport = this._setupTransport();\n    }\n    /**\n     * @inheritDoc\n     */\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n    BaseBackend.prototype.eventFromException = function (_exception, _hint) {\n        throw new SentryError('Backend has to implement `eventFromException` method');\n    };\n    /**\n     * @inheritDoc\n     */\n    BaseBackend.prototype.eventFromMessage = function (_message, _level, _hint) {\n        throw new SentryError('Backend has to implement `eventFromMessage` method');\n    };\n    /**\n     * @inheritDoc\n     */\n    BaseBackend.prototype.sendEvent = function (event) {\n        this._transport.sendEvent(event).then(null, function (reason) {\n            logger.error(\"Error while sending event: \" + reason);\n        });\n    };\n    /**\n     * @inheritDoc\n     */\n    BaseBackend.prototype.sendSession = function (session) {\n        if (!this._transport.sendSession) {\n            logger.warn(\"Dropping session because custom transport doesn't implement sendSession\");\n            return;\n        }\n        this._transport.sendSession(session).then(null, function (reason) {\n            logger.error(\"Error while sending session: \" + reason);\n        });\n    };\n    /**\n     * @inheritDoc\n     */\n    BaseBackend.prototype.getTransport = function () {\n        return this._transport;\n    };\n    /**\n     * Sets up the transport so it can be used later to send requests.\n     */\n    BaseBackend.prototype._setupTransport = function () {\n        return new NoopTransport();\n    };\n    return BaseBackend;\n}());\nexport { BaseBackend };\n//# sourceMappingURL=basebackend.js.map","import { logger } from './logger';\nimport { getGlobalObject } from './misc';\n/**\n * Tells whether current environment supports ErrorEvent objects\n * {@link supportsErrorEvent}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsErrorEvent() {\n    try {\n        new ErrorEvent('');\n        return true;\n    }\n    catch (e) {\n        return false;\n    }\n}\n/**\n * Tells whether current environment supports DOMError objects\n * {@link supportsDOMError}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsDOMError() {\n    try {\n        // Chrome: VM89:1 Uncaught TypeError: Failed to construct 'DOMError':\n        // 1 argument required, but only 0 present.\n        // @ts-ignore It really needs 1 argument, not 0.\n        new DOMError('');\n        return true;\n    }\n    catch (e) {\n        return false;\n    }\n}\n/**\n * Tells whether current environment supports DOMException objects\n * {@link supportsDOMException}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsDOMException() {\n    try {\n        new DOMException('');\n        return true;\n    }\n    catch (e) {\n        return false;\n    }\n}\n/**\n * Tells whether current environment supports Fetch API\n * {@link supportsFetch}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsFetch() {\n    if (!('fetch' in getGlobalObject())) {\n        return false;\n    }\n    try {\n        new Headers();\n        new Request('');\n        new Response();\n        return true;\n    }\n    catch (e) {\n        return false;\n    }\n}\n/**\n * isNativeFetch checks if the given function is a native implementation of fetch()\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction isNativeFetch(func) {\n    return func && /^function fetch\\(\\)\\s+\\{\\s+\\[native code\\]\\s+\\}$/.test(func.toString());\n}\n/**\n * Tells whether current environment supports Fetch API natively\n * {@link supportsNativeFetch}.\n *\n * @returns true if `window.fetch` is natively implemented, false otherwise\n */\nexport function supportsNativeFetch() {\n    if (!supportsFetch()) {\n        return false;\n    }\n    var global = getGlobalObject();\n    // Fast path to avoid DOM I/O\n    // eslint-disable-next-line @typescript-eslint/unbound-method\n    if (isNativeFetch(global.fetch)) {\n        return true;\n    }\n    // window.fetch is implemented, but is polyfilled or already wrapped (e.g: by a chrome extension)\n    // so create a \"pure\" iframe to see if that has native fetch\n    var result = false;\n    var doc = global.document;\n    // eslint-disable-next-line deprecation/deprecation\n    if (doc && typeof doc.createElement === \"function\") {\n        try {\n            var sandbox = doc.createElement('iframe');\n            sandbox.hidden = true;\n            doc.head.appendChild(sandbox);\n            if (sandbox.contentWindow && sandbox.contentWindow.fetch) {\n                // eslint-disable-next-line @typescript-eslint/unbound-method\n                result = isNativeFetch(sandbox.contentWindow.fetch);\n            }\n            doc.head.removeChild(sandbox);\n        }\n        catch (err) {\n            logger.warn('Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ', err);\n        }\n    }\n    return result;\n}\n/**\n * Tells whether current environment supports ReportingObserver API\n * {@link supportsReportingObserver}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsReportingObserver() {\n    return 'ReportingObserver' in getGlobalObject();\n}\n/**\n * Tells whether current environment supports Referrer Policy API\n * {@link supportsReferrerPolicy}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsReferrerPolicy() {\n    // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default\n    // https://caniuse.com/#feat=referrer-policy\n    // It doesn't. And it throw exception instead of ignoring this parameter...\n    // REF: https://github.com/getsentry/raven-js/issues/1233\n    if (!supportsFetch()) {\n        return false;\n    }\n    try {\n        new Request('_', {\n            referrerPolicy: 'origin',\n        });\n        return true;\n    }\n    catch (e) {\n        return false;\n    }\n}\n/**\n * Tells whether current environment supports History API\n * {@link supportsHistory}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsHistory() {\n    // NOTE: in Chrome App environment, touching history.pushState, *even inside\n    //       a try/catch block*, will cause Chrome to output an error to console.error\n    // borrowed from: https://github.com/angular/angular.js/pull/13945/files\n    var global = getGlobalObject();\n    /* eslint-disable @typescript-eslint/no-unsafe-member-access */\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    var chrome = global.chrome;\n    var isChromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n    /* eslint-enable @typescript-eslint/no-unsafe-member-access */\n    var hasHistoryApi = 'history' in global && !!global.history.pushState && !!global.history.replaceState;\n    return !isChromePackagedApp && hasHistoryApi;\n}\n//# sourceMappingURL=supports.js.map","/**\n * This was originally forked from https://github.com/occ/TraceKit, but has since been\n * largely modified and is now maintained as part of Sentry JS SDK.\n */\nimport { __assign } from \"tslib\";\n// global reference to slice\nvar UNKNOWN_FUNCTION = '?';\n// Chromium based browsers: Chrome, Brave, new Opera, new Edge\nvar chrome = /^\\s*at (?:(.*?) ?\\()?((?:file|https?|blob|chrome-extension|address|native|eval|webpack|<anonymous>|[-a-z]+:|.*bundle|\\/).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\n// gecko regex: `(?:bundle|\\d+\\.js)`: `bundle` is for react native, `\\d+\\.js` also but specifically for ram bundles because it\n// generates filenames without a prefix like `file://` the filenames in the stacktrace are just 42.js\n// We need this specific case for now because we want no other regex to match.\nvar gecko = /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)?((?:file|https?|blob|chrome|webpack|resource|moz-extension|capacitor).*?:\\/.*?|\\[native code\\]|[^@]*(?:bundle|\\d+\\.js)|\\/[\\w\\-. /=]+)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\nvar winjs = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\nvar geckoEval = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\nvar chromeEval = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n// Based on our own mapping pattern - https://github.com/getsentry/sentry/blob/9f08305e09866c8bd6d0c24f5b0aabdd7dd6c59c/src/sentry/lang/javascript/errormapping.py#L83-L108\nvar reactMinifiedRegexp = /Minified React error #\\d+;/i;\n/** JSDoc */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\nexport function computeStackTrace(ex) {\n    var stack = null;\n    var popSize = 0;\n    if (ex) {\n        if (typeof ex.framesToPop === 'number') {\n            popSize = ex.framesToPop;\n        }\n        else if (reactMinifiedRegexp.test(ex.message)) {\n            popSize = 1;\n        }\n    }\n    try {\n        // This must be tried first because Opera 10 *destroys*\n        // its stacktrace property if you try to access the stack\n        // property first!!\n        stack = computeStackTraceFromStacktraceProp(ex);\n        if (stack) {\n            return popFrames(stack, popSize);\n        }\n    }\n    catch (e) {\n        // no-empty\n    }\n    try {\n        stack = computeStackTraceFromStackProp(ex);\n        if (stack) {\n            return popFrames(stack, popSize);\n        }\n    }\n    catch (e) {\n        // no-empty\n    }\n    return {\n        message: extractMessage(ex),\n        name: ex && ex.name,\n        stack: [],\n        failed: true,\n    };\n}\n/** JSDoc */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any, complexity\nfunction computeStackTraceFromStackProp(ex) {\n    if (!ex || !ex.stack) {\n        return null;\n    }\n    var stack = [];\n    var lines = ex.stack.split('\\n');\n    var isEval;\n    var submatch;\n    var parts;\n    var element;\n    for (var i = 0; i < lines.length; ++i) {\n        if ((parts = chrome.exec(lines[i]))) {\n            var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line\n            isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n            if (isEval && (submatch = chromeEval.exec(parts[2]))) {\n                // throw out eval line/column and use top-most line/column number\n                parts[2] = submatch[1]; // url\n                parts[3] = submatch[2]; // line\n                parts[4] = submatch[3]; // column\n            }\n            element = {\n                // working with the regexp above is super painful. it is quite a hack, but just stripping the `address at `\n                // prefix here seems like the quickest solution for now.\n                url: parts[2] && parts[2].indexOf('address at ') === 0 ? parts[2].substr('address at '.length) : parts[2],\n                func: parts[1] || UNKNOWN_FUNCTION,\n                args: isNative ? [parts[2]] : [],\n                line: parts[3] ? +parts[3] : null,\n                column: parts[4] ? +parts[4] : null,\n            };\n        }\n        else if ((parts = winjs.exec(lines[i]))) {\n            element = {\n                url: parts[2],\n                func: parts[1] || UNKNOWN_FUNCTION,\n                args: [],\n                line: +parts[3],\n                column: parts[4] ? +parts[4] : null,\n            };\n        }\n        else if ((parts = gecko.exec(lines[i]))) {\n            isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n            if (isEval && (submatch = geckoEval.exec(parts[3]))) {\n                // throw out eval line/column and use top-most line number\n                parts[1] = parts[1] || \"eval\";\n                parts[3] = submatch[1];\n                parts[4] = submatch[2];\n                parts[5] = ''; // no column when eval\n            }\n            else if (i === 0 && !parts[5] && ex.columnNumber !== void 0) {\n                // FireFox uses this awesome columnNumber property for its top frame\n                // Also note, Firefox's column number is 0-based and everything else expects 1-based,\n                // so adding 1\n                // NOTE: this hack doesn't work if top-most frame is eval\n                stack[0].column = ex.columnNumber + 1;\n            }\n            element = {\n                url: parts[3],\n                func: parts[1] || UNKNOWN_FUNCTION,\n                args: parts[2] ? parts[2].split(',') : [],\n                line: parts[4] ? +parts[4] : null,\n                column: parts[5] ? +parts[5] : null,\n            };\n        }\n        else {\n            continue;\n        }\n        if (!element.func && element.line) {\n            element.func = UNKNOWN_FUNCTION;\n        }\n        stack.push(element);\n    }\n    if (!stack.length) {\n        return null;\n    }\n    return {\n        message: extractMessage(ex),\n        name: ex.name,\n        stack: stack,\n    };\n}\n/** JSDoc */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction computeStackTraceFromStacktraceProp(ex) {\n    if (!ex || !ex.stacktrace) {\n        return null;\n    }\n    // Access and store the stacktrace property before doing ANYTHING\n    // else to it because Opera is not very good at providing it\n    // reliably in other circumstances.\n    var stacktrace = ex.stacktrace;\n    var opera10Regex = / line (\\d+).*script (?:in )?(\\S+)(?:: in function (\\S+))?$/i;\n    var opera11Regex = / line (\\d+), column (\\d+)\\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\\((.*)\\))? in (.*):\\s*$/i;\n    var lines = stacktrace.split('\\n');\n    var stack = [];\n    var parts;\n    for (var line = 0; line < lines.length; line += 2) {\n        var element = null;\n        if ((parts = opera10Regex.exec(lines[line]))) {\n            element = {\n                url: parts[2],\n                func: parts[3],\n                args: [],\n                line: +parts[1],\n                column: null,\n            };\n        }\n        else if ((parts = opera11Regex.exec(lines[line]))) {\n            element = {\n                url: parts[6],\n                func: parts[3] || parts[4],\n                args: parts[5] ? parts[5].split(',') : [],\n                line: +parts[1],\n                column: +parts[2],\n            };\n        }\n        if (element) {\n            if (!element.func && element.line) {\n                element.func = UNKNOWN_FUNCTION;\n            }\n            stack.push(element);\n        }\n    }\n    if (!stack.length) {\n        return null;\n    }\n    return {\n        message: extractMessage(ex),\n        name: ex.name,\n        stack: stack,\n    };\n}\n/** Remove N number of frames from the stack */\nfunction popFrames(stacktrace, popSize) {\n    try {\n        return __assign(__assign({}, stacktrace), { stack: stacktrace.stack.slice(popSize) });\n    }\n    catch (e) {\n        return stacktrace;\n    }\n}\n/**\n * There are cases where stacktrace.message is an Event object\n * https://github.com/getsentry/sentry-javascript/issues/1949\n * In this specific case we try to extract stacktrace.message.error.message\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction extractMessage(ex) {\n    var message = ex && ex.message;\n    if (!message) {\n        return 'No error message';\n    }\n    if (message.error && typeof message.error.message === 'string') {\n        return message.error.message;\n    }\n    return message;\n}\n//# sourceMappingURL=tracekit.js.map","import { extractExceptionKeysForMessage, isEvent, normalizeToSize } from '@sentry/utils';\nimport { computeStackTrace } from './tracekit';\nvar STACKTRACE_LIMIT = 50;\n/**\n * This function creates an exception from an TraceKitStackTrace\n * @param stacktrace TraceKitStackTrace that will be converted to an exception\n * @hidden\n */\nexport function exceptionFromStacktrace(stacktrace) {\n    var frames = prepareFramesForEvent(stacktrace.stack);\n    var exception = {\n        type: stacktrace.name,\n        value: stacktrace.message,\n    };\n    if (frames && frames.length) {\n        exception.stacktrace = { frames: frames };\n    }\n    if (exception.type === undefined && exception.value === '') {\n        exception.value = 'Unrecoverable error caught';\n    }\n    return exception;\n}\n/**\n * @hidden\n */\nexport function eventFromPlainObject(exception, syntheticException, rejection) {\n    var event = {\n        exception: {\n            values: [\n                {\n                    type: isEvent(exception) ? exception.constructor.name : rejection ? 'UnhandledRejection' : 'Error',\n                    value: \"Non-Error \" + (rejection ? 'promise rejection' : 'exception') + \" captured with keys: \" + extractExceptionKeysForMessage(exception),\n                },\n            ],\n        },\n        extra: {\n            __serialized__: normalizeToSize(exception),\n        },\n    };\n    if (syntheticException) {\n        var stacktrace = computeStackTrace(syntheticException);\n        var frames_1 = prepareFramesForEvent(stacktrace.stack);\n        event.stacktrace = {\n            frames: frames_1,\n        };\n    }\n    return event;\n}\n/**\n * @hidden\n */\nexport function eventFromStacktrace(stacktrace) {\n    var exception = exceptionFromStacktrace(stacktrace);\n    return {\n        exception: {\n            values: [exception],\n        },\n    };\n}\n/**\n * @hidden\n */\nexport function prepareFramesForEvent(stack) {\n    if (!stack || !stack.length) {\n        return [];\n    }\n    var localStack = stack;\n    var firstFrameFunction = localStack[0].func || '';\n    var lastFrameFunction = localStack[localStack.length - 1].func || '';\n    // If stack starts with one of our API calls, remove it (starts, meaning it's the top of the stack - aka last call)\n    if (firstFrameFunction.indexOf('captureMessage') !== -1 || firstFrameFunction.indexOf('captureException') !== -1) {\n        localStack = localStack.slice(1);\n    }\n    // If stack ends with one of our internal API calls, remove it (ends, meaning it's the bottom of the stack - aka top-most call)\n    if (lastFrameFunction.indexOf('sentryWrapped') !== -1) {\n        localStack = localStack.slice(0, -1);\n    }\n    // The frame where the crash happened, should be the last entry in the array\n    return localStack\n        .slice(0, STACKTRACE_LIMIT)\n        .map(function (frame) { return ({\n        colno: frame.column === null ? undefined : frame.column,\n        filename: frame.url || localStack[0].url,\n        function: frame.func || '?',\n        in_app: true,\n        lineno: frame.line === null ? undefined : frame.line,\n    }); })\n        .reverse();\n}\n//# sourceMappingURL=parsers.js.map","import { __assign } from \"tslib\";\nimport { Severity } from '@sentry/types';\nimport { addExceptionMechanism, addExceptionTypeValue, isDOMError, isDOMException, isError, isErrorEvent, isEvent, isPlainObject, SyncPromise, } from '@sentry/utils';\nimport { eventFromPlainObject, eventFromStacktrace, prepareFramesForEvent } from './parsers';\nimport { computeStackTrace } from './tracekit';\n/**\n * Builds and Event from a Exception\n * @hidden\n */\nexport function eventFromException(options, exception, hint) {\n    var syntheticException = (hint && hint.syntheticException) || undefined;\n    var event = eventFromUnknownInput(exception, syntheticException, {\n        attachStacktrace: options.attachStacktrace,\n    });\n    addExceptionMechanism(event, {\n        handled: true,\n        type: 'generic',\n    });\n    event.level = Severity.Error;\n    if (hint && hint.event_id) {\n        event.event_id = hint.event_id;\n    }\n    return SyncPromise.resolve(event);\n}\n/**\n * Builds and Event from a Message\n * @hidden\n */\nexport function eventFromMessage(options, message, level, hint) {\n    if (level === void 0) { level = Severity.Info; }\n    var syntheticException = (hint && hint.syntheticException) || undefined;\n    var event = eventFromString(message, syntheticException, {\n        attachStacktrace: options.attachStacktrace,\n    });\n    event.level = level;\n    if (hint && hint.event_id) {\n        event.event_id = hint.event_id;\n    }\n    return SyncPromise.resolve(event);\n}\n/**\n * @hidden\n */\nexport function eventFromUnknownInput(exception, syntheticException, options) {\n    if (options === void 0) { options = {}; }\n    var event;\n    if (isErrorEvent(exception) && exception.error) {\n        // If it is an ErrorEvent with `error` property, extract it to get actual Error\n        var errorEvent = exception;\n        // eslint-disable-next-line no-param-reassign\n        exception = errorEvent.error;\n        event = eventFromStacktrace(computeStackTrace(exception));\n        return event;\n    }\n    if (isDOMError(exception) || isDOMException(exception)) {\n        // If it is a DOMError or DOMException (which are legacy APIs, but still supported in some browsers)\n        // then we just extract the name, code, and message, as they don't provide anything else\n        // https://developer.mozilla.org/en-US/docs/Web/API/DOMError\n        // https://developer.mozilla.org/en-US/docs/Web/API/DOMException\n        var domException = exception;\n        var name_1 = domException.name || (isDOMError(domException) ? 'DOMError' : 'DOMException');\n        var message = domException.message ? name_1 + \": \" + domException.message : name_1;\n        event = eventFromString(message, syntheticException, options);\n        addExceptionTypeValue(event, message);\n        if ('code' in domException) {\n            event.tags = __assign(__assign({}, event.tags), { 'DOMException.code': \"\" + domException.code });\n        }\n        return event;\n    }\n    if (isError(exception)) {\n        // we have a real Error object, do nothing\n        event = eventFromStacktrace(computeStackTrace(exception));\n        return event;\n    }\n    if (isPlainObject(exception) || isEvent(exception)) {\n        // If it is plain Object or Event, serialize it manually and extract options\n        // This will allow us to group events based on top-level keys\n        // which is much better than creating new group when any key/value change\n        var objectException = exception;\n        event = eventFromPlainObject(objectException, syntheticException, options.rejection);\n        addExceptionMechanism(event, {\n            synthetic: true,\n        });\n        return event;\n    }\n    // If none of previous checks were valid, then it means that it's not:\n    // - an instance of DOMError\n    // - an instance of DOMException\n    // - an instance of Event\n    // - an instance of Error\n    // - a valid ErrorEvent (one with an error property)\n    // - a plain Object\n    //\n    // So bail out and capture it as a simple message:\n    event = eventFromString(exception, syntheticException, options);\n    addExceptionTypeValue(event, \"\" + exception, undefined);\n    addExceptionMechanism(event, {\n        synthetic: true,\n    });\n    return event;\n}\n/**\n * @hidden\n */\nexport function eventFromString(input, syntheticException, options) {\n    if (options === void 0) { options = {}; }\n    var event = {\n        message: input,\n    };\n    if (options.attachStacktrace && syntheticException) {\n        var stacktrace = computeStackTrace(syntheticException);\n        var frames_1 = prepareFramesForEvent(stacktrace.stack);\n        event.stacktrace = {\n            frames: frames_1,\n        };\n    }\n    return event;\n}\n//# sourceMappingURL=eventbuilder.js.map","import { __rest } from \"tslib\";\n/** Creates a SentryRequest from an event. */\nexport function sessionToSentryRequest(session, api) {\n    var envelopeHeaders = JSON.stringify({\n        sent_at: new Date().toISOString(),\n    });\n    var itemHeaders = JSON.stringify({\n        type: 'session',\n    });\n    return {\n        body: envelopeHeaders + \"\\n\" + itemHeaders + \"\\n\" + JSON.stringify(session),\n        type: 'session',\n        url: api.getEnvelopeEndpointWithUrlEncodedAuth(),\n    };\n}\n/** Creates a SentryRequest from an event. */\nexport function eventToSentryRequest(event, api) {\n    // since JS has no Object.prototype.pop()\n    var _a = event.tags || {}, samplingMethod = _a.__sentry_samplingMethod, sampleRate = _a.__sentry_sampleRate, otherTags = __rest(_a, [\"__sentry_samplingMethod\", \"__sentry_sampleRate\"]);\n    event.tags = otherTags;\n    var useEnvelope = event.type === 'transaction';\n    var req = {\n        body: JSON.stringify(event),\n        type: event.type || 'event',\n        url: useEnvelope ? api.getEnvelopeEndpointWithUrlEncodedAuth() : api.getStoreEndpointWithUrlEncodedAuth(),\n    };\n    // https://develop.sentry.dev/sdk/envelopes/\n    // Since we don't need to manipulate envelopes nor store them, there is no\n    // exported concept of an Envelope with operations including serialization and\n    // deserialization. Instead, we only implement a minimal subset of the spec to\n    // serialize events inline here.\n    if (useEnvelope) {\n        var envelopeHeaders = JSON.stringify({\n            event_id: event.event_id,\n            sent_at: new Date().toISOString(),\n        });\n        var itemHeaders = JSON.stringify({\n            type: event.type,\n            // TODO: Right now, sampleRate may or may not be defined (it won't be in the cases of inheritance and\n            // explicitly-set sampling decisions). Are we good with that?\n            sample_rates: [{ id: samplingMethod, rate: sampleRate }],\n        });\n        // The trailing newline is optional. We intentionally don't send it to avoid\n        // sending unnecessary bytes.\n        //\n        // const envelope = `${envelopeHeaders}\\n${itemHeaders}\\n${req.body}\\n`;\n        var envelope = envelopeHeaders + \"\\n\" + itemHeaders + \"\\n\" + req.body;\n        req.body = envelope;\n    }\n    return req;\n}\n//# sourceMappingURL=request.js.map","import { Dsn, urlEncode } from '@sentry/utils';\nvar SENTRY_API_VERSION = '7';\n/** Helper class to provide urls to different Sentry endpoints. */\nvar API = /** @class */ (function () {\n    /** Create a new instance of API */\n    function API(dsn) {\n        this.dsn = dsn;\n        this._dsnObject = new Dsn(dsn);\n    }\n    /** Returns the Dsn object. */\n    API.prototype.getDsn = function () {\n        return this._dsnObject;\n    };\n    /** Returns the prefix to construct Sentry ingestion API endpoints. */\n    API.prototype.getBaseApiEndpoint = function () {\n        var dsn = this._dsnObject;\n        var protocol = dsn.protocol ? dsn.protocol + \":\" : '';\n        var port = dsn.port ? \":\" + dsn.port : '';\n        return protocol + \"//\" + dsn.host + port + (dsn.path ? \"/\" + dsn.path : '') + \"/api/\";\n    };\n    /** Returns the store endpoint URL. */\n    API.prototype.getStoreEndpoint = function () {\n        return this._getIngestEndpoint('store');\n    };\n    /**\n     * Returns the store endpoint URL with auth in the query string.\n     *\n     * Sending auth as part of the query string and not as custom HTTP headers avoids CORS preflight requests.\n     */\n    API.prototype.getStoreEndpointWithUrlEncodedAuth = function () {\n        return this.getStoreEndpoint() + \"?\" + this._encodedAuth();\n    };\n    /**\n     * Returns the envelope endpoint URL with auth in the query string.\n     *\n     * Sending auth as part of the query string and not as custom HTTP headers avoids CORS preflight requests.\n     */\n    API.prototype.getEnvelopeEndpointWithUrlEncodedAuth = function () {\n        return this._getEnvelopeEndpoint() + \"?\" + this._encodedAuth();\n    };\n    /** Returns only the path component for the store endpoint. */\n    API.prototype.getStoreEndpointPath = function () {\n        var dsn = this._dsnObject;\n        return (dsn.path ? \"/\" + dsn.path : '') + \"/api/\" + dsn.projectId + \"/store/\";\n    };\n    /**\n     * Returns an object that can be used in request headers.\n     * This is needed for node and the old /store endpoint in sentry\n     */\n    API.prototype.getRequestHeaders = function (clientName, clientVersion) {\n        var dsn = this._dsnObject;\n        var header = [\"Sentry sentry_version=\" + SENTRY_API_VERSION];\n        header.push(\"sentry_client=\" + clientName + \"/\" + clientVersion);\n        header.push(\"sentry_key=\" + dsn.user);\n        if (dsn.pass) {\n            header.push(\"sentry_secret=\" + dsn.pass);\n        }\n        return {\n            'Content-Type': 'application/json',\n            'X-Sentry-Auth': header.join(', '),\n        };\n    };\n    /** Returns the url to the report dialog endpoint. */\n    API.prototype.getReportDialogEndpoint = function (dialogOptions) {\n        if (dialogOptions === void 0) { dialogOptions = {}; }\n        var dsn = this._dsnObject;\n        var endpoint = this.getBaseApiEndpoint() + \"embed/error-page/\";\n        var encodedOptions = [];\n        encodedOptions.push(\"dsn=\" + dsn.toString());\n        for (var key in dialogOptions) {\n            if (key === 'dsn') {\n                continue;\n            }\n            if (key === 'user') {\n                if (!dialogOptions.user) {\n                    continue;\n                }\n                if (dialogOptions.user.name) {\n                    encodedOptions.push(\"name=\" + encodeURIComponent(dialogOptions.user.name));\n                }\n                if (dialogOptions.user.email) {\n                    encodedOptions.push(\"email=\" + encodeURIComponent(dialogOptions.user.email));\n                }\n            }\n            else {\n                encodedOptions.push(encodeURIComponent(key) + \"=\" + encodeURIComponent(dialogOptions[key]));\n            }\n        }\n        if (encodedOptions.length) {\n            return endpoint + \"?\" + encodedOptions.join('&');\n        }\n        return endpoint;\n    };\n    /** Returns the envelope endpoint URL. */\n    API.prototype._getEnvelopeEndpoint = function () {\n        return this._getIngestEndpoint('envelope');\n    };\n    /** Returns the ingest API endpoint for target. */\n    API.prototype._getIngestEndpoint = function (target) {\n        var base = this.getBaseApiEndpoint();\n        var dsn = this._dsnObject;\n        return \"\" + base + dsn.projectId + \"/\" + target + \"/\";\n    };\n    /** Returns a URL-encoded string with auth config suitable for a query string. */\n    API.prototype._encodedAuth = function () {\n        var dsn = this._dsnObject;\n        var auth = {\n            // We send only the minimum set of required information. See\n            // https://github.com/getsentry/sentry-javascript/issues/2572.\n            sentry_key: dsn.user,\n            sentry_version: SENTRY_API_VERSION,\n        };\n        return urlEncode(auth);\n    };\n    return API;\n}());\nexport { API };\n//# sourceMappingURL=api.js.map","import { SentryError } from './error';\nimport { SyncPromise } from './syncpromise';\n/** A simple queue that holds promises. */\nvar PromiseBuffer = /** @class */ (function () {\n    function PromiseBuffer(_limit) {\n        this._limit = _limit;\n        /** Internal set of queued Promises */\n        this._buffer = [];\n    }\n    /**\n     * Says if the buffer is ready to take more requests\n     */\n    PromiseBuffer.prototype.isReady = function () {\n        return this._limit === undefined || this.length() < this._limit;\n    };\n    /**\n     * Add a promise to the queue.\n     *\n     * @param task Can be any PromiseLike<T>\n     * @returns The original promise.\n     */\n    PromiseBuffer.prototype.add = function (task) {\n        var _this = this;\n        if (!this.isReady()) {\n            return SyncPromise.reject(new SentryError('Not adding Promise due to buffer limit reached.'));\n        }\n        if (this._buffer.indexOf(task) === -1) {\n            this._buffer.push(task);\n        }\n        task\n            .then(function () { return _this.remove(task); })\n            .then(null, function () {\n            return _this.remove(task).then(null, function () {\n                // We have to add this catch here otherwise we have an unhandledPromiseRejection\n                // because it's a new Promise chain.\n            });\n        });\n        return task;\n    };\n    /**\n     * Remove a promise to the queue.\n     *\n     * @param task Can be any PromiseLike<T>\n     * @returns Removed promise.\n     */\n    PromiseBuffer.prototype.remove = function (task) {\n        var removedTask = this._buffer.splice(this._buffer.indexOf(task), 1)[0];\n        return removedTask;\n    };\n    /**\n     * This function returns the number of unresolved promises in the queue.\n     */\n    PromiseBuffer.prototype.length = function () {\n        return this._buffer.length;\n    };\n    /**\n     * This will drain the whole queue, returns true if queue is empty or drained.\n     * If timeout is provided and the queue takes longer to drain, the promise still resolves but with false.\n     *\n     * @param timeout Number in ms to wait until it resolves with false.\n     */\n    PromiseBuffer.prototype.drain = function (timeout) {\n        var _this = this;\n        return new SyncPromise(function (resolve) {\n            var capturedSetTimeout = setTimeout(function () {\n                if (timeout && timeout > 0) {\n                    resolve(false);\n                }\n            }, timeout);\n            SyncPromise.all(_this._buffer)\n                .then(function () {\n                clearTimeout(capturedSetTimeout);\n                resolve(true);\n            })\n                .then(null, function () {\n                resolve(true);\n            });\n        });\n    };\n    return PromiseBuffer;\n}());\nexport { PromiseBuffer };\n//# sourceMappingURL=promisebuffer.js.map","import { __values } from \"tslib\";\nimport { API } from '@sentry/core';\nimport { Status, } from '@sentry/types';\nimport { logger, parseRetryAfterHeader, PromiseBuffer, SentryError } from '@sentry/utils';\n/** Base Transport class implementation */\nvar BaseTransport = /** @class */ (function () {\n    function BaseTransport(options) {\n        this.options = options;\n        /** A simple buffer holding all requests. */\n        this._buffer = new PromiseBuffer(30);\n        /** Locks transport after receiving rate limits in a response */\n        this._rateLimits = {};\n        this._api = new API(this.options.dsn);\n        // eslint-disable-next-line deprecation/deprecation\n        this.url = this._api.getStoreEndpointWithUrlEncodedAuth();\n    }\n    /**\n     * @inheritDoc\n     */\n    BaseTransport.prototype.sendEvent = function (_) {\n        throw new SentryError('Transport Class has to implement `sendEvent` method');\n    };\n    /**\n     * @inheritDoc\n     */\n    BaseTransport.prototype.close = function (timeout) {\n        return this._buffer.drain(timeout);\n    };\n    /**\n     * Handle Sentry repsonse for promise-based transports.\n     */\n    BaseTransport.prototype._handleResponse = function (_a) {\n        var requestType = _a.requestType, response = _a.response, headers = _a.headers, resolve = _a.resolve, reject = _a.reject;\n        var status = Status.fromHttpCode(response.status);\n        /**\n         * \"The name is case-insensitive.\"\n         * https://developer.mozilla.org/en-US/docs/Web/API/Headers/get\n         */\n        var limited = this._handleRateLimit(headers);\n        if (limited)\n            logger.warn(\"Too many requests, backing off until: \" + this._disabledUntil(requestType));\n        if (status === Status.Success) {\n            resolve({ status: status });\n            return;\n        }\n        reject(response);\n    };\n    /**\n     * Gets the time that given category is disabled until for rate limiting\n     */\n    BaseTransport.prototype._disabledUntil = function (category) {\n        return this._rateLimits[category] || this._rateLimits.all;\n    };\n    /**\n     * Checks if a category is rate limited\n     */\n    BaseTransport.prototype._isRateLimited = function (category) {\n        return this._disabledUntil(category) > new Date(Date.now());\n    };\n    /**\n     * Sets internal _rateLimits from incoming headers. Returns true if headers contains a non-empty rate limiting header.\n     */\n    BaseTransport.prototype._handleRateLimit = function (headers) {\n        var e_1, _a, e_2, _b;\n        var now = Date.now();\n        var rlHeader = headers['x-sentry-rate-limits'];\n        var raHeader = headers['retry-after'];\n        if (rlHeader) {\n            try {\n                // rate limit headers are of the form\n                //     <header>,<header>,..\n                // where each <header> is of the form\n                //     <retry_after>: <categories>: <scope>: <reason_code>\n                // where\n                //     <retry_after> is a delay in ms\n                //     <categories> is the event type(s) (error, transaction, etc) being rate limited and is of the form\n                //         <category>;<category>;...\n                //     <scope> is what's being limited (org, project, or key) - ignored by SDK\n                //     <reason_code> is an arbitrary string like \"org_quota\" - ignored by SDK\n                for (var _c = __values(rlHeader.trim().split(',')), _d = _c.next(); !_d.done; _d = _c.next()) {\n                    var limit = _d.value;\n                    var parameters = limit.split(':', 2);\n                    var headerDelay = parseInt(parameters[0], 10);\n                    var delay = (!isNaN(headerDelay) ? headerDelay : 60) * 1000; // 60sec default\n                    try {\n                        for (var _e = (e_2 = void 0, __values(parameters[1].split(';'))), _f = _e.next(); !_f.done; _f = _e.next()) {\n                            var category = _f.value;\n                            this._rateLimits[category || 'all'] = new Date(now + delay);\n                        }\n                    }\n                    catch (e_2_1) { e_2 = { error: e_2_1 }; }\n                    finally {\n                        try {\n                            if (_f && !_f.done && (_b = _e.return)) _b.call(_e);\n                        }\n                        finally { if (e_2) throw e_2.error; }\n                    }\n                }\n            }\n            catch (e_1_1) { e_1 = { error: e_1_1 }; }\n            finally {\n                try {\n                    if (_d && !_d.done && (_a = _c.return)) _a.call(_c);\n                }\n                finally { if (e_1) throw e_1.error; }\n            }\n            return true;\n        }\n        else if (raHeader) {\n            this._rateLimits.all = new Date(now + parseRetryAfterHeader(now, raHeader));\n            return true;\n        }\n        return false;\n    };\n    return BaseTransport;\n}());\nexport { BaseTransport };\n//# sourceMappingURL=base.js.map","import { __extends } from \"tslib\";\nimport { eventToSentryRequest, sessionToSentryRequest } from '@sentry/core';\nimport { getGlobalObject, supportsReferrerPolicy, SyncPromise } from '@sentry/utils';\nimport { BaseTransport } from './base';\nvar global = getGlobalObject();\n/** `fetch` based transport */\nvar FetchTransport = /** @class */ (function (_super) {\n    __extends(FetchTransport, _super);\n    function FetchTransport() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * @inheritDoc\n     */\n    FetchTransport.prototype.sendEvent = function (event) {\n        return this._sendRequest(eventToSentryRequest(event, this._api), event);\n    };\n    /**\n     * @inheritDoc\n     */\n    FetchTransport.prototype.sendSession = function (session) {\n        return this._sendRequest(sessionToSentryRequest(session, this._api), session);\n    };\n    /**\n     * @param sentryRequest Prepared SentryRequest to be delivered\n     * @param originalPayload Original payload used to create SentryRequest\n     */\n    FetchTransport.prototype._sendRequest = function (sentryRequest, originalPayload) {\n        var _this = this;\n        if (this._isRateLimited(sentryRequest.type)) {\n            return Promise.reject({\n                event: originalPayload,\n                type: sentryRequest.type,\n                reason: \"Transport locked till \" + this._disabledUntil(sentryRequest.type) + \" due to too many requests.\",\n                status: 429,\n            });\n        }\n        var options = {\n            body: sentryRequest.body,\n            method: 'POST',\n            // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default\n            // https://caniuse.com/#feat=referrer-policy\n            // It doesn't. And it throw exception instead of ignoring this parameter...\n            // REF: https://github.com/getsentry/raven-js/issues/1233\n            referrerPolicy: (supportsReferrerPolicy() ? 'origin' : ''),\n        };\n        if (this.options.fetchParameters !== undefined) {\n            Object.assign(options, this.options.fetchParameters);\n        }\n        if (this.options.headers !== undefined) {\n            options.headers = this.options.headers;\n        }\n        return this._buffer.add(new SyncPromise(function (resolve, reject) {\n            global\n                .fetch(sentryRequest.url, options)\n                .then(function (response) {\n                var headers = {\n                    'x-sentry-rate-limits': response.headers.get('X-Sentry-Rate-Limits'),\n                    'retry-after': response.headers.get('Retry-After'),\n                };\n                _this._handleResponse({\n                    requestType: sentryRequest.type,\n                    response: response,\n                    headers: headers,\n                    resolve: resolve,\n                    reject: reject,\n                });\n            })\n                .catch(reject);\n        }));\n    };\n    return FetchTransport;\n}(BaseTransport));\nexport { FetchTransport };\n//# sourceMappingURL=fetch.js.map","import { __extends } from \"tslib\";\nimport { eventToSentryRequest, sessionToSentryRequest } from '@sentry/core';\nimport { SyncPromise } from '@sentry/utils';\nimport { BaseTransport } from './base';\n/** `XHR` based transport */\nvar XHRTransport = /** @class */ (function (_super) {\n    __extends(XHRTransport, _super);\n    function XHRTransport() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * @inheritDoc\n     */\n    XHRTransport.prototype.sendEvent = function (event) {\n        return this._sendRequest(eventToSentryRequest(event, this._api), event);\n    };\n    /**\n     * @inheritDoc\n     */\n    XHRTransport.prototype.sendSession = function (session) {\n        return this._sendRequest(sessionToSentryRequest(session, this._api), session);\n    };\n    /**\n     * @param sentryRequest Prepared SentryRequest to be delivered\n     * @param originalPayload Original payload used to create SentryRequest\n     */\n    XHRTransport.prototype._sendRequest = function (sentryRequest, originalPayload) {\n        var _this = this;\n        if (this._isRateLimited(sentryRequest.type)) {\n            return Promise.reject({\n                event: originalPayload,\n                type: sentryRequest.type,\n                reason: \"Transport locked till \" + this._disabledUntil(sentryRequest.type) + \" due to too many requests.\",\n                status: 429,\n            });\n        }\n        return this._buffer.add(new SyncPromise(function (resolve, reject) {\n            var request = new XMLHttpRequest();\n            request.onreadystatechange = function () {\n                if (request.readyState === 4) {\n                    var headers = {\n                        'x-sentry-rate-limits': request.getResponseHeader('X-Sentry-Rate-Limits'),\n                        'retry-after': request.getResponseHeader('Retry-After'),\n                    };\n                    _this._handleResponse({ requestType: sentryRequest.type, response: request, headers: headers, resolve: resolve, reject: reject });\n                }\n            };\n            request.open('POST', sentryRequest.url);\n            for (var header in _this.options.headers) {\n                if (_this.options.headers.hasOwnProperty(header)) {\n                    request.setRequestHeader(header, _this.options.headers[header]);\n                }\n            }\n            request.send(sentryRequest.body);\n        }));\n    };\n    return XHRTransport;\n}(BaseTransport));\nexport { XHRTransport };\n//# sourceMappingURL=xhr.js.map","import { __assign, __extends } from \"tslib\";\nimport { BaseBackend } from '@sentry/core';\nimport { Severity } from '@sentry/types';\nimport { supportsFetch } from '@sentry/utils';\nimport { eventFromException, eventFromMessage } from './eventbuilder';\nimport { FetchTransport, XHRTransport } from './transports';\n/**\n * The Sentry Browser SDK Backend.\n * @hidden\n */\nvar BrowserBackend = /** @class */ (function (_super) {\n    __extends(BrowserBackend, _super);\n    function BrowserBackend() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * @inheritDoc\n     */\n    BrowserBackend.prototype.eventFromException = function (exception, hint) {\n        return eventFromException(this._options, exception, hint);\n    };\n    /**\n     * @inheritDoc\n     */\n    BrowserBackend.prototype.eventFromMessage = function (message, level, hint) {\n        if (level === void 0) { level = Severity.Info; }\n        return eventFromMessage(this._options, message, level, hint);\n    };\n    /**\n     * @inheritDoc\n     */\n    BrowserBackend.prototype._setupTransport = function () {\n        if (!this._options.dsn) {\n            // We return the noop transport here in case there is no Dsn.\n            return _super.prototype._setupTransport.call(this);\n        }\n        var transportOptions = __assign(__assign({}, this._options.transportOptions), { dsn: this._options.dsn });\n        if (this._options.transport) {\n            return new this._options.transport(transportOptions);\n        }\n        if (supportsFetch()) {\n            return new FetchTransport(transportOptions);\n        }\n        return new XHRTransport(transportOptions);\n    };\n    return BrowserBackend;\n}(BaseBackend));\nexport { BrowserBackend };\n//# sourceMappingURL=backend.js.map","import { __assign, __read, __spread } from \"tslib\";\nimport { getCurrentHub } from '@sentry/hub';\n/**\n * This calls a function on the current hub.\n * @param method function to call on hub.\n * @param args to pass to function.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction callOnHub(method) {\n    var args = [];\n    for (var _i = 1; _i < arguments.length; _i++) {\n        args[_i - 1] = arguments[_i];\n    }\n    var hub = getCurrentHub();\n    if (hub && hub[method]) {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        return hub[method].apply(hub, __spread(args));\n    }\n    throw new Error(\"No hub defined or \" + method + \" was not found on the hub, please open a bug report.\");\n}\n/**\n * Captures an exception event and sends it to Sentry.\n *\n * @param exception An exception-like object.\n * @returns The generated eventId.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\nexport function captureException(exception, captureContext) {\n    var syntheticException;\n    try {\n        throw new Error('Sentry syntheticException');\n    }\n    catch (exception) {\n        syntheticException = exception;\n    }\n    return callOnHub('captureException', exception, {\n        captureContext: captureContext,\n        originalException: exception,\n        syntheticException: syntheticException,\n    });\n}\n/**\n * Captures a message event and sends it to Sentry.\n *\n * @param message The message to send to Sentry.\n * @param level Define the level of the message.\n * @returns The generated eventId.\n */\nexport function captureMessage(message, captureContext) {\n    var syntheticException;\n    try {\n        throw new Error(message);\n    }\n    catch (exception) {\n        syntheticException = exception;\n    }\n    // This is necessary to provide explicit scopes upgrade, without changing the original\n    // arity of the `captureMessage(message, level)` method.\n    var level = typeof captureContext === 'string' ? captureContext : undefined;\n    var context = typeof captureContext !== 'string' ? { captureContext: captureContext } : undefined;\n    return callOnHub('captureMessage', message, level, __assign({ originalException: message, syntheticException: syntheticException }, context));\n}\n/**\n * Captures a manually created event and sends it to Sentry.\n *\n * @param event The event to send to Sentry.\n * @returns The generated eventId.\n */\nexport function captureEvent(event) {\n    return callOnHub('captureEvent', event);\n}\n/**\n * Callback to set context information onto the scope.\n * @param callback Callback function that receives Scope.\n */\nexport function configureScope(callback) {\n    callOnHub('configureScope', callback);\n}\n/**\n * Records a new breadcrumb which will be attached to future events.\n *\n * Breadcrumbs will be added to subsequent events to provide more context on\n * user's actions prior to an error or crash.\n *\n * @param breadcrumb The breadcrumb to record.\n */\nexport function addBreadcrumb(breadcrumb) {\n    callOnHub('addBreadcrumb', breadcrumb);\n}\n/**\n * Sets context data with the given name.\n * @param name of the context\n * @param context Any kind of data. This data will be normalized.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function setContext(name, context) {\n    callOnHub('setContext', name, context);\n}\n/**\n * Set an object that will be merged sent as extra data with the event.\n * @param extras Extras object to merge into current context.\n */\nexport function setExtras(extras) {\n    callOnHub('setExtras', extras);\n}\n/**\n * Set an object that will be merged sent as tags data with the event.\n * @param tags Tags context object to merge into current context.\n */\nexport function setTags(tags) {\n    callOnHub('setTags', tags);\n}\n/**\n * Set key:value that will be sent as extra data with the event.\n * @param key String of extra\n * @param extra Any kind of data. This data will be normalized.\n */\nexport function setExtra(key, extra) {\n    callOnHub('setExtra', key, extra);\n}\n/**\n * Set key:value that will be sent as tags data with the event.\n *\n * Can also be used to unset a tag, by passing `undefined`.\n *\n * @param key String key of tag\n * @param value Value of tag\n */\nexport function setTag(key, value) {\n    callOnHub('setTag', key, value);\n}\n/**\n * Updates user context information for future events.\n *\n * @param user User context object to be set in the current context. Pass `null` to unset the user.\n */\nexport function setUser(user) {\n    callOnHub('setUser', user);\n}\n/**\n * Creates a new scope with and executes the given operation within.\n * The scope is automatically removed once the operation\n * finishes or throws.\n *\n * This is essentially a convenience function for:\n *\n *     pushScope();\n *     callback();\n *     popScope();\n *\n * @param callback that will be enclosed into push/popScope.\n */\nexport function withScope(callback) {\n    callOnHub('withScope', callback);\n}\n/**\n * Calls a function on the latest client. Use this with caution, it's meant as\n * in \"internal\" helper so we don't need to expose every possible function in\n * the shim. It is not guaranteed that the client actually implements the\n * function.\n *\n * @param method The method to call on the client/client.\n * @param args Arguments to pass to the client/fontend.\n * @hidden\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function _callOnClient(method) {\n    var args = [];\n    for (var _i = 1; _i < arguments.length; _i++) {\n        args[_i - 1] = arguments[_i];\n    }\n    callOnHub.apply(void 0, __spread(['_invokeClient', method], args));\n}\n/**\n * Starts a new `Transaction` and returns it. This is the entry point to manual tracing instrumentation.\n *\n * A tree structure can be built by adding child spans to the transaction, and child spans to other spans. To start a\n * new child span within the transaction or any span, call the respective `.startChild()` method.\n *\n * Every child span must be finished before the transaction is finished, otherwise the unfinished spans are discarded.\n *\n * The transaction must be finished with a call to its `.finish()` method, at which point the transaction with all its\n * finished child spans will be sent to Sentry.\n *\n * @param context Properties of the new `Transaction`.\n * @param customSamplingContext Information given to the transaction sampling function (along with context-dependent\n * default values). See {@link Options.tracesSampler}.\n *\n * @returns The transaction which was just started\n */\nexport function startTransaction(context, customSamplingContext) {\n    return callOnHub('startTransaction', __assign({}, context), customSamplingContext);\n}\n//# sourceMappingURL=index.js.map","import { __assign } from \"tslib\";\nimport { API, captureException, withScope } from '@sentry/core';\nimport { addExceptionMechanism, addExceptionTypeValue, logger } from '@sentry/utils';\nvar ignoreOnError = 0;\n/**\n * @hidden\n */\nexport function shouldIgnoreOnError() {\n    return ignoreOnError > 0;\n}\n/**\n * @hidden\n */\nexport function ignoreNextOnError() {\n    // onerror should trigger before setTimeout\n    ignoreOnError += 1;\n    setTimeout(function () {\n        ignoreOnError -= 1;\n    });\n}\n/**\n * Instruments the given function and sends an event to Sentry every time the\n * function throws an exception.\n *\n * @param fn A function to wrap.\n * @returns The wrapped function.\n * @hidden\n */\nexport function wrap(fn, options, before) {\n    if (options === void 0) { options = {}; }\n    if (typeof fn !== 'function') {\n        return fn;\n    }\n    try {\n        // We don't wanna wrap it twice\n        if (fn.__sentry__) {\n            return fn;\n        }\n        // If this has already been wrapped in the past, return that wrapped function\n        if (fn.__sentry_wrapped__) {\n            return fn.__sentry_wrapped__;\n        }\n    }\n    catch (e) {\n        // Just accessing custom props in some Selenium environments\n        // can cause a \"Permission denied\" exception (see raven-js#495).\n        // Bail on wrapping and return the function as-is (defers to window.onerror).\n        return fn;\n    }\n    /* eslint-disable prefer-rest-params */\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    var sentryWrapped = function () {\n        var args = Array.prototype.slice.call(arguments);\n        try {\n            if (before && typeof before === 'function') {\n                before.apply(this, arguments);\n            }\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n            var wrappedArguments = args.map(function (arg) { return wrap(arg, options); });\n            if (fn.handleEvent) {\n                // Attempt to invoke user-land function\n                // NOTE: If you are a Sentry user, and you are seeing this stack frame, it\n                //       means the sentry.javascript SDK caught an error invoking your application code. This\n                //       is expected behavior and NOT indicative of a bug with sentry.javascript.\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n                return fn.handleEvent.apply(this, wrappedArguments);\n            }\n            // Attempt to invoke user-land function\n            // NOTE: If you are a Sentry user, and you are seeing this stack frame, it\n            //       means the sentry.javascript SDK caught an error invoking your application code. This\n            //       is expected behavior and NOT indicative of a bug with sentry.javascript.\n            return fn.apply(this, wrappedArguments);\n        }\n        catch (ex) {\n            ignoreNextOnError();\n            withScope(function (scope) {\n                scope.addEventProcessor(function (event) {\n                    var processedEvent = __assign({}, event);\n                    if (options.mechanism) {\n                        addExceptionTypeValue(processedEvent, undefined, undefined);\n                        addExceptionMechanism(processedEvent, options.mechanism);\n                    }\n                    processedEvent.extra = __assign(__assign({}, processedEvent.extra), { arguments: args });\n                    return processedEvent;\n                });\n                captureException(ex);\n            });\n            throw ex;\n        }\n    };\n    /* eslint-enable prefer-rest-params */\n    // Accessing some objects may throw\n    // ref: https://github.com/getsentry/sentry-javascript/issues/1168\n    try {\n        for (var property in fn) {\n            if (Object.prototype.hasOwnProperty.call(fn, property)) {\n                sentryWrapped[property] = fn[property];\n            }\n        }\n    }\n    catch (_oO) { } // eslint-disable-line no-empty\n    fn.prototype = fn.prototype || {};\n    sentryWrapped.prototype = fn.prototype;\n    Object.defineProperty(fn, '__sentry_wrapped__', {\n        enumerable: false,\n        value: sentryWrapped,\n    });\n    // Signal that this function has been wrapped/filled already\n    // for both debugging and to prevent it to being wrapped/filled twice\n    Object.defineProperties(sentryWrapped, {\n        __sentry__: {\n            enumerable: false,\n            value: true,\n        },\n        __sentry_original__: {\n            enumerable: false,\n            value: fn,\n        },\n    });\n    // Restore original function name (not all browsers allow that)\n    try {\n        var descriptor = Object.getOwnPropertyDescriptor(sentryWrapped, 'name');\n        if (descriptor.configurable) {\n            Object.defineProperty(sentryWrapped, 'name', {\n                get: function () {\n                    return fn.name;\n                },\n            });\n        }\n        // eslint-disable-next-line no-empty\n    }\n    catch (_oO) { }\n    return sentryWrapped;\n}\n/**\n * Injects the Report Dialog script\n * @hidden\n */\nexport function injectReportDialog(options) {\n    if (options === void 0) { options = {}; }\n    if (!options.eventId) {\n        logger.error(\"Missing eventId option in showReportDialog call\");\n        return;\n    }\n    if (!options.dsn) {\n        logger.error(\"Missing dsn option in showReportDialog call\");\n        return;\n    }\n    var script = document.createElement('script');\n    script.async = true;\n    script.src = new API(options.dsn).getReportDialogEndpoint(options);\n    if (options.onLoad) {\n        // eslint-disable-next-line @typescript-eslint/unbound-method\n        script.onload = options.onLoad;\n    }\n    (document.head || document.body).appendChild(script);\n}\n//# sourceMappingURL=helpers.js.map","import { __assign, __values } from \"tslib\";\nimport { isInstanceOf, isString } from './is';\nimport { logger } from './logger';\nimport { getGlobalObject } from './misc';\nimport { fill } from './object';\nimport { getFunctionName } from './stacktrace';\nimport { supportsHistory, supportsNativeFetch } from './supports';\nvar global = getGlobalObject();\n/**\n * Instrument native APIs to call handlers that can be used to create breadcrumbs, APM spans etc.\n *  - Console API\n *  - Fetch API\n *  - XHR API\n *  - History API\n *  - DOM API (click/typing)\n *  - Error API\n *  - UnhandledRejection API\n */\nvar handlers = {};\nvar instrumented = {};\n/** Instruments given API */\nfunction instrument(type) {\n    if (instrumented[type]) {\n        return;\n    }\n    instrumented[type] = true;\n    switch (type) {\n        case 'console':\n            instrumentConsole();\n            break;\n        case 'dom':\n            instrumentDOM();\n            break;\n        case 'xhr':\n            instrumentXHR();\n            break;\n        case 'fetch':\n            instrumentFetch();\n            break;\n        case 'history':\n            instrumentHistory();\n            break;\n        case 'error':\n            instrumentError();\n            break;\n        case 'unhandledrejection':\n            instrumentUnhandledRejection();\n            break;\n        default:\n            logger.warn('unknown instrumentation type:', type);\n    }\n}\n/**\n * Add handler that will be called when given type of instrumentation triggers.\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addInstrumentationHandler(handler) {\n    if (!handler || typeof handler.type !== 'string' || typeof handler.callback !== 'function') {\n        return;\n    }\n    handlers[handler.type] = handlers[handler.type] || [];\n    handlers[handler.type].push(handler.callback);\n    instrument(handler.type);\n}\n/** JSDoc */\nfunction triggerHandlers(type, data) {\n    var e_1, _a;\n    if (!type || !handlers[type]) {\n        return;\n    }\n    try {\n        for (var _b = __values(handlers[type] || []), _c = _b.next(); !_c.done; _c = _b.next()) {\n            var handler = _c.value;\n            try {\n                handler(data);\n            }\n            catch (e) {\n                logger.error(\"Error while triggering instrumentation handler.\\nType: \" + type + \"\\nName: \" + getFunctionName(handler) + \"\\nError: \" + e);\n            }\n        }\n    }\n    catch (e_1_1) { e_1 = { error: e_1_1 }; }\n    finally {\n        try {\n            if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n        }\n        finally { if (e_1) throw e_1.error; }\n    }\n}\n/** JSDoc */\nfunction instrumentConsole() {\n    if (!('console' in global)) {\n        return;\n    }\n    ['debug', 'info', 'warn', 'error', 'log', 'assert'].forEach(function (level) {\n        if (!(level in global.console)) {\n            return;\n        }\n        fill(global.console, level, function (originalConsoleLevel) {\n            return function () {\n                var args = [];\n                for (var _i = 0; _i < arguments.length; _i++) {\n                    args[_i] = arguments[_i];\n                }\n                triggerHandlers('console', { args: args, level: level });\n                // this fails for some browsers. :(\n                if (originalConsoleLevel) {\n                    Function.prototype.apply.call(originalConsoleLevel, global.console, args);\n                }\n            };\n        });\n    });\n}\n/** JSDoc */\nfunction instrumentFetch() {\n    if (!supportsNativeFetch()) {\n        return;\n    }\n    fill(global, 'fetch', function (originalFetch) {\n        return function () {\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            var handlerData = {\n                args: args,\n                fetchData: {\n                    method: getFetchMethod(args),\n                    url: getFetchUrl(args),\n                },\n                startTimestamp: Date.now(),\n            };\n            triggerHandlers('fetch', __assign({}, handlerData));\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n            return originalFetch.apply(global, args).then(function (response) {\n                triggerHandlers('fetch', __assign(__assign({}, handlerData), { endTimestamp: Date.now(), response: response }));\n                return response;\n            }, function (error) {\n                triggerHandlers('fetch', __assign(__assign({}, handlerData), { endTimestamp: Date.now(), error: error }));\n                // NOTE: If you are a Sentry user, and you are seeing this stack frame,\n                //       it means the sentry.javascript SDK caught an error invoking your application code.\n                //       This is expected behavior and NOT indicative of a bug with sentry.javascript.\n                throw error;\n            });\n        };\n    });\n}\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/** Extract `method` from fetch call arguments */\nfunction getFetchMethod(fetchArgs) {\n    if (fetchArgs === void 0) { fetchArgs = []; }\n    if ('Request' in global && isInstanceOf(fetchArgs[0], Request) && fetchArgs[0].method) {\n        return String(fetchArgs[0].method).toUpperCase();\n    }\n    if (fetchArgs[1] && fetchArgs[1].method) {\n        return String(fetchArgs[1].method).toUpperCase();\n    }\n    return 'GET';\n}\n/** Extract `url` from fetch call arguments */\nfunction getFetchUrl(fetchArgs) {\n    if (fetchArgs === void 0) { fetchArgs = []; }\n    if (typeof fetchArgs[0] === 'string') {\n        return fetchArgs[0];\n    }\n    if ('Request' in global && isInstanceOf(fetchArgs[0], Request)) {\n        return fetchArgs[0].url;\n    }\n    return String(fetchArgs[0]);\n}\n/* eslint-enable @typescript-eslint/no-unsafe-member-access */\n/** JSDoc */\nfunction instrumentXHR() {\n    if (!('XMLHttpRequest' in global)) {\n        return;\n    }\n    // Poor man's implementation of ES6 `Map`, tracking and keeping in sync key and value separately.\n    var requestKeys = [];\n    var requestValues = [];\n    var xhrproto = XMLHttpRequest.prototype;\n    fill(xhrproto, 'open', function (originalOpen) {\n        return function () {\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            // eslint-disable-next-line @typescript-eslint/no-this-alias\n            var xhr = this;\n            var url = args[1];\n            xhr.__sentry_xhr__ = {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n                method: isString(args[0]) ? args[0].toUpperCase() : args[0],\n                url: args[1],\n            };\n            // if Sentry key appears in URL, don't capture it as a request\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n            if (isString(url) && xhr.__sentry_xhr__.method === 'POST' && url.match(/sentry_key/)) {\n                xhr.__sentry_own_request__ = true;\n            }\n            var onreadystatechangeHandler = function () {\n                if (xhr.readyState === 4) {\n                    try {\n                        // touching statusCode in some platforms throws\n                        // an exception\n                        if (xhr.__sentry_xhr__) {\n                            xhr.__sentry_xhr__.status_code = xhr.status;\n                        }\n                    }\n                    catch (e) {\n                        /* do nothing */\n                    }\n                    try {\n                        var requestPos = requestKeys.indexOf(xhr);\n                        if (requestPos !== -1) {\n                            // Make sure to pop both key and value to keep it in sync.\n                            requestKeys.splice(requestPos);\n                            var args_1 = requestValues.splice(requestPos)[0];\n                            if (xhr.__sentry_xhr__ && args_1[0] !== undefined) {\n                                xhr.__sentry_xhr__.body = args_1[0];\n                            }\n                        }\n                    }\n                    catch (e) {\n                        /* do nothing */\n                    }\n                    triggerHandlers('xhr', {\n                        args: args,\n                        endTimestamp: Date.now(),\n                        startTimestamp: Date.now(),\n                        xhr: xhr,\n                    });\n                }\n            };\n            if ('onreadystatechange' in xhr && typeof xhr.onreadystatechange === 'function') {\n                fill(xhr, 'onreadystatechange', function (original) {\n                    return function () {\n                        var readyStateArgs = [];\n                        for (var _i = 0; _i < arguments.length; _i++) {\n                            readyStateArgs[_i] = arguments[_i];\n                        }\n                        onreadystatechangeHandler();\n                        return original.apply(xhr, readyStateArgs);\n                    };\n                });\n            }\n            else {\n                xhr.addEventListener('readystatechange', onreadystatechangeHandler);\n            }\n            return originalOpen.apply(xhr, args);\n        };\n    });\n    fill(xhrproto, 'send', function (originalSend) {\n        return function () {\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            requestKeys.push(this);\n            requestValues.push(args);\n            triggerHandlers('xhr', {\n                args: args,\n                startTimestamp: Date.now(),\n                xhr: this,\n            });\n            return originalSend.apply(this, args);\n        };\n    });\n}\nvar lastHref;\n/** JSDoc */\nfunction instrumentHistory() {\n    if (!supportsHistory()) {\n        return;\n    }\n    var oldOnPopState = global.onpopstate;\n    global.onpopstate = function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        var to = global.location.href;\n        // keep track of the current URL state, as we always receive only the updated state\n        var from = lastHref;\n        lastHref = to;\n        triggerHandlers('history', {\n            from: from,\n            to: to,\n        });\n        if (oldOnPopState) {\n            return oldOnPopState.apply(this, args);\n        }\n    };\n    /** @hidden */\n    function historyReplacementFunction(originalHistoryFunction) {\n        return function () {\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            var url = args.length > 2 ? args[2] : undefined;\n            if (url) {\n                // coerce to string (this is what pushState does)\n                var from = lastHref;\n                var to = String(url);\n                // keep track of the current URL state, as we always receive only the updated state\n                lastHref = to;\n                triggerHandlers('history', {\n                    from: from,\n                    to: to,\n                });\n            }\n            return originalHistoryFunction.apply(this, args);\n        };\n    }\n    fill(global.history, 'pushState', historyReplacementFunction);\n    fill(global.history, 'replaceState', historyReplacementFunction);\n}\n/** JSDoc */\nfunction instrumentDOM() {\n    if (!('document' in global)) {\n        return;\n    }\n    // Capture breadcrumbs from any click that is unhandled / bubbled up all the way\n    // to the document. Do this before we instrument addEventListener.\n    global.document.addEventListener('click', domEventHandler('click', triggerHandlers.bind(null, 'dom')), false);\n    global.document.addEventListener('keypress', keypressEventHandler(triggerHandlers.bind(null, 'dom')), false);\n    // After hooking into document bubbled up click and keypresses events, we also hook into user handled click & keypresses.\n    ['EventTarget', 'Node'].forEach(function (target) {\n        /* eslint-disable @typescript-eslint/no-unsafe-member-access */\n        var proto = global[target] && global[target].prototype;\n        // eslint-disable-next-line no-prototype-builtins\n        if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty('addEventListener')) {\n            return;\n        }\n        /* eslint-enable @typescript-eslint/no-unsafe-member-access */\n        fill(proto, 'addEventListener', function (original) {\n            return function (eventName, fn, options) {\n                if (fn && fn.handleEvent) {\n                    if (eventName === 'click') {\n                        fill(fn, 'handleEvent', function (innerOriginal) {\n                            return function (event) {\n                                domEventHandler('click', triggerHandlers.bind(null, 'dom'))(event);\n                                return innerOriginal.call(this, event);\n                            };\n                        });\n                    }\n                    if (eventName === 'keypress') {\n                        fill(fn, 'handleEvent', function (innerOriginal) {\n                            return function (event) {\n                                keypressEventHandler(triggerHandlers.bind(null, 'dom'))(event);\n                                return innerOriginal.call(this, event);\n                            };\n                        });\n                    }\n                }\n                else {\n                    if (eventName === 'click') {\n                        domEventHandler('click', triggerHandlers.bind(null, 'dom'), true)(this);\n                    }\n                    if (eventName === 'keypress') {\n                        keypressEventHandler(triggerHandlers.bind(null, 'dom'))(this);\n                    }\n                }\n                return original.call(this, eventName, fn, options);\n            };\n        });\n        fill(proto, 'removeEventListener', function (original) {\n            return function (eventName, fn, options) {\n                try {\n                    original.call(this, eventName, fn.__sentry_wrapped__, options);\n                }\n                catch (e) {\n                    // ignore, accessing __sentry_wrapped__ will throw in some Selenium environments\n                }\n                return original.call(this, eventName, fn, options);\n            };\n        });\n    });\n}\nvar debounceDuration = 1000;\nvar debounceTimer = 0;\nvar keypressTimeout;\nvar lastCapturedEvent;\n/**\n * Wraps addEventListener to capture UI breadcrumbs\n * @param name the event name (e.g. \"click\")\n * @param handler function that will be triggered\n * @param debounce decides whether it should wait till another event loop\n * @returns wrapped breadcrumb events handler\n * @hidden\n */\nfunction domEventHandler(name, handler, debounce) {\n    if (debounce === void 0) { debounce = false; }\n    return function (event) {\n        // reset keypress timeout; e.g. triggering a 'click' after\n        // a 'keypress' will reset the keypress debounce so that a new\n        // set of keypresses can be recorded\n        keypressTimeout = undefined;\n        // It's possible this handler might trigger multiple times for the same\n        // event (e.g. event propagation through node ancestors). Ignore if we've\n        // already captured the event.\n        if (!event || lastCapturedEvent === event) {\n            return;\n        }\n        lastCapturedEvent = event;\n        if (debounceTimer) {\n            clearTimeout(debounceTimer);\n        }\n        if (debounce) {\n            debounceTimer = setTimeout(function () {\n                handler({ event: event, name: name });\n            });\n        }\n        else {\n            handler({ event: event, name: name });\n        }\n    };\n}\n/**\n * Wraps addEventListener to capture keypress UI events\n * @param handler function that will be triggered\n * @returns wrapped keypress events handler\n * @hidden\n */\nfunction keypressEventHandler(handler) {\n    // TODO: if somehow user switches keypress target before\n    //       debounce timeout is triggered, we will only capture\n    //       a single breadcrumb from the FIRST target (acceptable?)\n    return function (event) {\n        var target;\n        try {\n            target = event.target;\n        }\n        catch (e) {\n            // just accessing event properties can throw an exception in some rare circumstances\n            // see: https://github.com/getsentry/raven-js/issues/838\n            return;\n        }\n        var tagName = target && target.tagName;\n        // only consider keypress events on actual input elements\n        // this will disregard keypresses targeting body (e.g. tabbing\n        // through elements, hotkeys, etc)\n        if (!tagName || (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && !target.isContentEditable)) {\n            return;\n        }\n        // record first keypress in a series, but ignore subsequent\n        // keypresses until debounce clears\n        if (!keypressTimeout) {\n            domEventHandler('input', handler)(event);\n        }\n        clearTimeout(keypressTimeout);\n        keypressTimeout = setTimeout(function () {\n            keypressTimeout = undefined;\n        }, debounceDuration);\n    };\n}\nvar _oldOnErrorHandler = null;\n/** JSDoc */\nfunction instrumentError() {\n    _oldOnErrorHandler = global.onerror;\n    global.onerror = function (msg, url, line, column, error) {\n        triggerHandlers('error', {\n            column: column,\n            error: error,\n            line: line,\n            msg: msg,\n            url: url,\n        });\n        if (_oldOnErrorHandler) {\n            // eslint-disable-next-line prefer-rest-params\n            return _oldOnErrorHandler.apply(this, arguments);\n        }\n        return false;\n    };\n}\nvar _oldOnUnhandledRejectionHandler = null;\n/** JSDoc */\nfunction instrumentUnhandledRejection() {\n    _oldOnUnhandledRejectionHandler = global.onunhandledrejection;\n    global.onunhandledrejection = function (e) {\n        triggerHandlers('unhandledrejection', e);\n        if (_oldOnUnhandledRejectionHandler) {\n            // eslint-disable-next-line prefer-rest-params\n            return _oldOnUnhandledRejectionHandler.apply(this, arguments);\n        }\n        return true;\n    };\n}\n//# sourceMappingURL=instrument.js.map","import { __assign, __read, __spread } from \"tslib\";\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable max-lines */\nimport { getCurrentHub } from '@sentry/core';\nimport { Severity } from '@sentry/types';\nimport { addInstrumentationHandler, getEventDescription, getGlobalObject, htmlTreeAsString, parseUrl, safeJoin, } from '@sentry/utils';\n/**\n * Default Breadcrumbs instrumentations\n * TODO: Deprecated - with v6, this will be renamed to `Instrument`\n */\nvar Breadcrumbs = /** @class */ (function () {\n    /**\n     * @inheritDoc\n     */\n    function Breadcrumbs(options) {\n        /**\n         * @inheritDoc\n         */\n        this.name = Breadcrumbs.id;\n        this._options = __assign({ console: true, dom: true, fetch: true, history: true, sentry: true, xhr: true }, options);\n    }\n    /**\n     * Create a breadcrumb of `sentry` from the events themselves\n     */\n    Breadcrumbs.prototype.addSentryBreadcrumb = function (event) {\n        if (!this._options.sentry) {\n            return;\n        }\n        getCurrentHub().addBreadcrumb({\n            category: \"sentry.\" + (event.type === 'transaction' ? 'transaction' : 'event'),\n            event_id: event.event_id,\n            level: event.level,\n            message: getEventDescription(event),\n        }, {\n            event: event,\n        });\n    };\n    /**\n     * Instrument browser built-ins w/ breadcrumb capturing\n     *  - Console API\n     *  - DOM API (click/typing)\n     *  - XMLHttpRequest API\n     *  - Fetch API\n     *  - History API\n     */\n    Breadcrumbs.prototype.setupOnce = function () {\n        var _this = this;\n        if (this._options.console) {\n            addInstrumentationHandler({\n                callback: function () {\n                    var args = [];\n                    for (var _i = 0; _i < arguments.length; _i++) {\n                        args[_i] = arguments[_i];\n                    }\n                    _this._consoleBreadcrumb.apply(_this, __spread(args));\n                },\n                type: 'console',\n            });\n        }\n        if (this._options.dom) {\n            addInstrumentationHandler({\n                callback: function () {\n                    var args = [];\n                    for (var _i = 0; _i < arguments.length; _i++) {\n                        args[_i] = arguments[_i];\n                    }\n                    _this._domBreadcrumb.apply(_this, __spread(args));\n                },\n                type: 'dom',\n            });\n        }\n        if (this._options.xhr) {\n            addInstrumentationHandler({\n                callback: function () {\n                    var args = [];\n                    for (var _i = 0; _i < arguments.length; _i++) {\n                        args[_i] = arguments[_i];\n                    }\n                    _this._xhrBreadcrumb.apply(_this, __spread(args));\n                },\n                type: 'xhr',\n            });\n        }\n        if (this._options.fetch) {\n            addInstrumentationHandler({\n                callback: function () {\n                    var args = [];\n                    for (var _i = 0; _i < arguments.length; _i++) {\n                        args[_i] = arguments[_i];\n                    }\n                    _this._fetchBreadcrumb.apply(_this, __spread(args));\n                },\n                type: 'fetch',\n            });\n        }\n        if (this._options.history) {\n            addInstrumentationHandler({\n                callback: function () {\n                    var args = [];\n                    for (var _i = 0; _i < arguments.length; _i++) {\n                        args[_i] = arguments[_i];\n                    }\n                    _this._historyBreadcrumb.apply(_this, __spread(args));\n                },\n                type: 'history',\n            });\n        }\n    };\n    /**\n     * Creates breadcrumbs from console API calls\n     */\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    Breadcrumbs.prototype._consoleBreadcrumb = function (handlerData) {\n        var breadcrumb = {\n            category: 'console',\n            data: {\n                arguments: handlerData.args,\n                logger: 'console',\n            },\n            level: Severity.fromString(handlerData.level),\n            message: safeJoin(handlerData.args, ' '),\n        };\n        if (handlerData.level === 'assert') {\n            if (handlerData.args[0] === false) {\n                breadcrumb.message = \"Assertion failed: \" + (safeJoin(handlerData.args.slice(1), ' ') || 'console.assert');\n                breadcrumb.data.arguments = handlerData.args.slice(1);\n            }\n            else {\n                // Don't capture a breadcrumb for passed assertions\n                return;\n            }\n        }\n        getCurrentHub().addBreadcrumb(breadcrumb, {\n            input: handlerData.args,\n            level: handlerData.level,\n        });\n    };\n    /**\n     * Creates breadcrumbs from DOM API calls\n     */\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    Breadcrumbs.prototype._domBreadcrumb = function (handlerData) {\n        var target;\n        // Accessing event.target can throw (see getsentry/raven-js#838, #768)\n        try {\n            target = handlerData.event.target\n                ? htmlTreeAsString(handlerData.event.target)\n                : htmlTreeAsString(handlerData.event);\n        }\n        catch (e) {\n            target = '<unknown>';\n        }\n        if (target.length === 0) {\n            return;\n        }\n        getCurrentHub().addBreadcrumb({\n            category: \"ui.\" + handlerData.name,\n            message: target,\n        }, {\n            event: handlerData.event,\n            name: handlerData.name,\n        });\n    };\n    /**\n     * Creates breadcrumbs from XHR API calls\n     */\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    Breadcrumbs.prototype._xhrBreadcrumb = function (handlerData) {\n        if (handlerData.endTimestamp) {\n            // We only capture complete, non-sentry requests\n            if (handlerData.xhr.__sentry_own_request__) {\n                return;\n            }\n            var _a = handlerData.xhr.__sentry_xhr__ || {}, method = _a.method, url = _a.url, status_code = _a.status_code, body = _a.body;\n            getCurrentHub().addBreadcrumb({\n                category: 'xhr',\n                data: {\n                    method: method,\n                    url: url,\n                    status_code: status_code,\n                },\n                type: 'http',\n            }, {\n                xhr: handlerData.xhr,\n                input: body,\n            });\n            return;\n        }\n    };\n    /**\n     * Creates breadcrumbs from fetch API calls\n     */\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    Breadcrumbs.prototype._fetchBreadcrumb = function (handlerData) {\n        // We only capture complete fetch requests\n        if (!handlerData.endTimestamp) {\n            return;\n        }\n        if (handlerData.fetchData.url.match(/sentry_key/) && handlerData.fetchData.method === 'POST') {\n            // We will not create breadcrumbs for fetch requests that contain `sentry_key` (internal sentry requests)\n            return;\n        }\n        if (handlerData.error) {\n            getCurrentHub().addBreadcrumb({\n                category: 'fetch',\n                data: handlerData.fetchData,\n                level: Severity.Error,\n                type: 'http',\n            }, {\n                data: handlerData.error,\n                input: handlerData.args,\n            });\n        }\n        else {\n            getCurrentHub().addBreadcrumb({\n                category: 'fetch',\n                data: __assign(__assign({}, handlerData.fetchData), { status_code: handlerData.response.status }),\n                type: 'http',\n            }, {\n                input: handlerData.args,\n                response: handlerData.response,\n            });\n        }\n    };\n    /**\n     * Creates breadcrumbs from history API calls\n     */\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    Breadcrumbs.prototype._historyBreadcrumb = function (handlerData) {\n        var global = getGlobalObject();\n        var from = handlerData.from;\n        var to = handlerData.to;\n        var parsedLoc = parseUrl(global.location.href);\n        var parsedFrom = parseUrl(from);\n        var parsedTo = parseUrl(to);\n        // Initial pushState doesn't provide `from` information\n        if (!parsedFrom.path) {\n            parsedFrom = parsedLoc;\n        }\n        // Use only the path component of the URL if the URL matches the current\n        // document (almost all the time when using pushState)\n        if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host) {\n            to = parsedTo.relative;\n        }\n        if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host) {\n            from = parsedFrom.relative;\n        }\n        getCurrentHub().addBreadcrumb({\n            category: 'navigation',\n            data: {\n                from: from,\n                to: to,\n            },\n        });\n    };\n    /**\n     * @inheritDoc\n     */\n    Breadcrumbs.id = 'Breadcrumbs';\n    return Breadcrumbs;\n}());\nexport { Breadcrumbs };\n//# sourceMappingURL=breadcrumbs.js.map","import { __assign, __extends, __read, __spread } from \"tslib\";\nimport { BaseClient } from '@sentry/core';\nimport { getGlobalObject, logger } from '@sentry/utils';\nimport { BrowserBackend } from './backend';\nimport { injectReportDialog } from './helpers';\nimport { Breadcrumbs } from './integrations';\nimport { SDK_NAME, SDK_VERSION } from './version';\n/**\n * The Sentry Browser SDK Client.\n *\n * @see BrowserOptions for documentation on configuration options.\n * @see SentryClient for usage documentation.\n */\nvar BrowserClient = /** @class */ (function (_super) {\n    __extends(BrowserClient, _super);\n    /**\n     * Creates a new Browser SDK instance.\n     *\n     * @param options Configuration options for this SDK.\n     */\n    function BrowserClient(options) {\n        if (options === void 0) { options = {}; }\n        return _super.call(this, BrowserBackend, options) || this;\n    }\n    /**\n     * Show a report dialog to the user to send feedback to a specific event.\n     *\n     * @param options Set individual options for the dialog\n     */\n    BrowserClient.prototype.showReportDialog = function (options) {\n        if (options === void 0) { options = {}; }\n        // doesn't work without a document (React Native)\n        var document = getGlobalObject().document;\n        if (!document) {\n            return;\n        }\n        if (!this._isEnabled()) {\n            logger.error('Trying to call showReportDialog with Sentry Client disabled');\n            return;\n        }\n        injectReportDialog(__assign(__assign({}, options), { dsn: options.dsn || this.getDsn() }));\n    };\n    /**\n     * @inheritDoc\n     */\n    BrowserClient.prototype._prepareEvent = function (event, scope, hint) {\n        event.platform = event.platform || 'javascript';\n        event.sdk = __assign(__assign({}, event.sdk), { name: SDK_NAME, packages: __spread(((event.sdk && event.sdk.packages) || []), [\n                {\n                    name: 'npm:@sentry/browser',\n                    version: SDK_VERSION,\n                },\n            ]), version: SDK_VERSION });\n        return _super.prototype._prepareEvent.call(this, event, scope, hint);\n    };\n    /**\n     * @inheritDoc\n     */\n    BrowserClient.prototype._sendEvent = function (event) {\n        var integration = this.getIntegration(Breadcrumbs);\n        if (integration) {\n            integration.addSentryBreadcrumb(event);\n        }\n        _super.prototype._sendEvent.call(this, event);\n    };\n    return BrowserClient;\n}(BaseClient));\nexport { BrowserClient };\n//# sourceMappingURL=client.js.map","export var SDK_NAME = 'sentry.javascript.browser';\nexport var SDK_VERSION = '5.30.0';\n//# sourceMappingURL=version.js.map","import { __assign } from \"tslib\";\nimport { fill, getFunctionName, getGlobalObject } from '@sentry/utils';\nimport { wrap } from '../helpers';\nvar DEFAULT_EVENT_TARGET = [\n    'EventTarget',\n    'Window',\n    'Node',\n    'ApplicationCache',\n    'AudioTrackList',\n    'ChannelMergerNode',\n    'CryptoOperation',\n    'EventSource',\n    'FileReader',\n    'HTMLUnknownElement',\n    'IDBDatabase',\n    'IDBRequest',\n    'IDBTransaction',\n    'KeyOperation',\n    'MediaController',\n    'MessagePort',\n    'ModalWindow',\n    'Notification',\n    'SVGElementInstance',\n    'Screen',\n    'TextTrack',\n    'TextTrackCue',\n    'TextTrackList',\n    'WebSocket',\n    'WebSocketWorker',\n    'Worker',\n    'XMLHttpRequest',\n    'XMLHttpRequestEventTarget',\n    'XMLHttpRequestUpload',\n];\n/** Wrap timer functions and event targets to catch errors and provide better meta data */\nvar TryCatch = /** @class */ (function () {\n    /**\n     * @inheritDoc\n     */\n    function TryCatch(options) {\n        /**\n         * @inheritDoc\n         */\n        this.name = TryCatch.id;\n        this._options = __assign({ XMLHttpRequest: true, eventTarget: true, requestAnimationFrame: true, setInterval: true, setTimeout: true }, options);\n    }\n    /**\n     * Wrap timer functions and event targets to catch errors\n     * and provide better metadata.\n     */\n    TryCatch.prototype.setupOnce = function () {\n        var global = getGlobalObject();\n        if (this._options.setTimeout) {\n            fill(global, 'setTimeout', this._wrapTimeFunction.bind(this));\n        }\n        if (this._options.setInterval) {\n            fill(global, 'setInterval', this._wrapTimeFunction.bind(this));\n        }\n        if (this._options.requestAnimationFrame) {\n            fill(global, 'requestAnimationFrame', this._wrapRAF.bind(this));\n        }\n        if (this._options.XMLHttpRequest && 'XMLHttpRequest' in global) {\n            fill(XMLHttpRequest.prototype, 'send', this._wrapXHR.bind(this));\n        }\n        if (this._options.eventTarget) {\n            var eventTarget = Array.isArray(this._options.eventTarget) ? this._options.eventTarget : DEFAULT_EVENT_TARGET;\n            eventTarget.forEach(this._wrapEventTarget.bind(this));\n        }\n    };\n    /** JSDoc */\n    TryCatch.prototype._wrapTimeFunction = function (original) {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        return function () {\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            var originalCallback = args[0];\n            args[0] = wrap(originalCallback, {\n                mechanism: {\n                    data: { function: getFunctionName(original) },\n                    handled: true,\n                    type: 'instrument',\n                },\n            });\n            return original.apply(this, args);\n        };\n    };\n    /** JSDoc */\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    TryCatch.prototype._wrapRAF = function (original) {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        return function (callback) {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n            return original.call(this, wrap(callback, {\n                mechanism: {\n                    data: {\n                        function: 'requestAnimationFrame',\n                        handler: getFunctionName(original),\n                    },\n                    handled: true,\n                    type: 'instrument',\n                },\n            }));\n        };\n    };\n    /** JSDoc */\n    TryCatch.prototype._wrapEventTarget = function (target) {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        var global = getGlobalObject();\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n        var proto = global[target] && global[target].prototype;\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n        if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty('addEventListener')) {\n            return;\n        }\n        fill(proto, 'addEventListener', function (original) {\n            return function (eventName, fn, options) {\n                try {\n                    if (typeof fn.handleEvent === 'function') {\n                        fn.handleEvent = wrap(fn.handleEvent.bind(fn), {\n                            mechanism: {\n                                data: {\n                                    function: 'handleEvent',\n                                    handler: getFunctionName(fn),\n                                    target: target,\n                                },\n                                handled: true,\n                                type: 'instrument',\n                            },\n                        });\n                    }\n                }\n                catch (err) {\n                    // can sometimes get 'Permission denied to access property \"handle Event'\n                }\n                return original.call(this, eventName, \n                // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                wrap(fn, {\n                    mechanism: {\n                        data: {\n                            function: 'addEventListener',\n                            handler: getFunctionName(fn),\n                            target: target,\n                        },\n                        handled: true,\n                        type: 'instrument',\n                    },\n                }), options);\n            };\n        });\n        fill(proto, 'removeEventListener', function (originalRemoveEventListener) {\n            return function (eventName, fn, options) {\n                var _a;\n                /**\n                 * There are 2 possible scenarios here:\n                 *\n                 * 1. Someone passes a callback, which was attached prior to Sentry initialization, or by using unmodified\n                 * method, eg. `document.addEventListener.call(el, name, handler). In this case, we treat this function\n                 * as a pass-through, and call original `removeEventListener` with it.\n                 *\n                 * 2. Someone passes a callback, which was attached after Sentry was initialized, which means that it was using\n                 * our wrapped version of `addEventListener`, which internally calls `wrap` helper.\n                 * This helper \"wraps\" whole callback inside a try/catch statement, and attached appropriate metadata to it,\n                 * in order for us to make a distinction between wrapped/non-wrapped functions possible.\n                 * If a function was wrapped, it has additional property of `__sentry_wrapped__`, holding the handler.\n                 *\n                 * When someone adds a handler prior to initialization, and then do it again, but after,\n                 * then we have to detach both of them. Otherwise, if we'd detach only wrapped one, it'd be impossible\n                 * to get rid of the initial handler and it'd stick there forever.\n                 */\n                var wrappedEventHandler = fn;\n                try {\n                    var originalEventHandler = (_a = wrappedEventHandler) === null || _a === void 0 ? void 0 : _a.__sentry_wrapped__;\n                    if (originalEventHandler) {\n                        originalRemoveEventListener.call(this, eventName, originalEventHandler, options);\n                    }\n                }\n                catch (e) {\n                    // ignore, accessing __sentry_wrapped__ will throw in some Selenium environments\n                }\n                return originalRemoveEventListener.call(this, eventName, wrappedEventHandler, options);\n            };\n        });\n    };\n    /** JSDoc */\n    TryCatch.prototype._wrapXHR = function (originalSend) {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        return function () {\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            // eslint-disable-next-line @typescript-eslint/no-this-alias\n            var xhr = this;\n            var xmlHttpRequestProps = ['onload', 'onerror', 'onprogress', 'onreadystatechange'];\n            xmlHttpRequestProps.forEach(function (prop) {\n                if (prop in xhr && typeof xhr[prop] === 'function') {\n                    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                    fill(xhr, prop, function (original) {\n                        var wrapOptions = {\n                            mechanism: {\n                                data: {\n                                    function: prop,\n                                    handler: getFunctionName(original),\n                                },\n                                handled: true,\n                                type: 'instrument',\n                            },\n                        };\n                        // If Instrument integration has been called before TryCatch, get the name of original function\n                        if (original.__sentry_original__) {\n                            wrapOptions.mechanism.data.handler = getFunctionName(original.__sentry_original__);\n                        }\n                        // Otherwise wrap directly\n                        return wrap(original, wrapOptions);\n                    });\n                }\n            });\n            return originalSend.apply(this, args);\n        };\n    };\n    /**\n     * @inheritDoc\n     */\n    TryCatch.id = 'TryCatch';\n    return TryCatch;\n}());\nexport { TryCatch };\n//# sourceMappingURL=trycatch.js.map","import { __assign } from \"tslib\";\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\nimport { getCurrentHub } from '@sentry/core';\nimport { Severity } from '@sentry/types';\nimport { addExceptionMechanism, addInstrumentationHandler, getLocationHref, isErrorEvent, isPrimitive, isString, logger, } from '@sentry/utils';\nimport { eventFromUnknownInput } from '../eventbuilder';\nimport { shouldIgnoreOnError } from '../helpers';\n/** Global handlers */\nvar GlobalHandlers = /** @class */ (function () {\n    /** JSDoc */\n    function GlobalHandlers(options) {\n        /**\n         * @inheritDoc\n         */\n        this.name = GlobalHandlers.id;\n        /** JSDoc */\n        this._onErrorHandlerInstalled = false;\n        /** JSDoc */\n        this._onUnhandledRejectionHandlerInstalled = false;\n        this._options = __assign({ onerror: true, onunhandledrejection: true }, options);\n    }\n    /**\n     * @inheritDoc\n     */\n    GlobalHandlers.prototype.setupOnce = function () {\n        Error.stackTraceLimit = 50;\n        if (this._options.onerror) {\n            logger.log('Global Handler attached: onerror');\n            this._installGlobalOnErrorHandler();\n        }\n        if (this._options.onunhandledrejection) {\n            logger.log('Global Handler attached: onunhandledrejection');\n            this._installGlobalOnUnhandledRejectionHandler();\n        }\n    };\n    /** JSDoc */\n    GlobalHandlers.prototype._installGlobalOnErrorHandler = function () {\n        var _this = this;\n        if (this._onErrorHandlerInstalled) {\n            return;\n        }\n        addInstrumentationHandler({\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            callback: function (data) {\n                var error = data.error;\n                var currentHub = getCurrentHub();\n                var hasIntegration = currentHub.getIntegration(GlobalHandlers);\n                var isFailedOwnDelivery = error && error.__sentry_own_request__ === true;\n                if (!hasIntegration || shouldIgnoreOnError() || isFailedOwnDelivery) {\n                    return;\n                }\n                var client = currentHub.getClient();\n                var event = isPrimitive(error)\n                    ? _this._eventFromIncompleteOnError(data.msg, data.url, data.line, data.column)\n                    : _this._enhanceEventWithInitialFrame(eventFromUnknownInput(error, undefined, {\n                        attachStacktrace: client && client.getOptions().attachStacktrace,\n                        rejection: false,\n                    }), data.url, data.line, data.column);\n                addExceptionMechanism(event, {\n                    handled: false,\n                    type: 'onerror',\n                });\n                currentHub.captureEvent(event, {\n                    originalException: error,\n                });\n            },\n            type: 'error',\n        });\n        this._onErrorHandlerInstalled = true;\n    };\n    /** JSDoc */\n    GlobalHandlers.prototype._installGlobalOnUnhandledRejectionHandler = function () {\n        var _this = this;\n        if (this._onUnhandledRejectionHandlerInstalled) {\n            return;\n        }\n        addInstrumentationHandler({\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            callback: function (e) {\n                var error = e;\n                // dig the object of the rejection out of known event types\n                try {\n                    // PromiseRejectionEvents store the object of the rejection under 'reason'\n                    // see https://developer.mozilla.org/en-US/docs/Web/API/PromiseRejectionEvent\n                    if ('reason' in e) {\n                        error = e.reason;\n                    }\n                    // something, somewhere, (likely a browser extension) effectively casts PromiseRejectionEvents\n                    // to CustomEvents, moving the `promise` and `reason` attributes of the PRE into\n                    // the CustomEvent's `detail` attribute, since they're not part of CustomEvent's spec\n                    // see https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent and\n                    // https://github.com/getsentry/sentry-javascript/issues/2380\n                    else if ('detail' in e && 'reason' in e.detail) {\n                        error = e.detail.reason;\n                    }\n                }\n                catch (_oO) {\n                    // no-empty\n                }\n                var currentHub = getCurrentHub();\n                var hasIntegration = currentHub.getIntegration(GlobalHandlers);\n                var isFailedOwnDelivery = error && error.__sentry_own_request__ === true;\n                if (!hasIntegration || shouldIgnoreOnError() || isFailedOwnDelivery) {\n                    return true;\n                }\n                var client = currentHub.getClient();\n                var event = isPrimitive(error)\n                    ? _this._eventFromRejectionWithPrimitive(error)\n                    : eventFromUnknownInput(error, undefined, {\n                        attachStacktrace: client && client.getOptions().attachStacktrace,\n                        rejection: true,\n                    });\n                event.level = Severity.Error;\n                addExceptionMechanism(event, {\n                    handled: false,\n                    type: 'onunhandledrejection',\n                });\n                currentHub.captureEvent(event, {\n                    originalException: error,\n                });\n                return;\n            },\n            type: 'unhandledrejection',\n        });\n        this._onUnhandledRejectionHandlerInstalled = true;\n    };\n    /**\n     * This function creates a stack from an old, error-less onerror handler.\n     */\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    GlobalHandlers.prototype._eventFromIncompleteOnError = function (msg, url, line, column) {\n        var ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i;\n        // If 'message' is ErrorEvent, get real message from inside\n        var message = isErrorEvent(msg) ? msg.message : msg;\n        var name;\n        if (isString(message)) {\n            var groups = message.match(ERROR_TYPES_RE);\n            if (groups) {\n                name = groups[1];\n                message = groups[2];\n            }\n        }\n        var event = {\n            exception: {\n                values: [\n                    {\n                        type: name || 'Error',\n                        value: message,\n                    },\n                ],\n            },\n        };\n        return this._enhanceEventWithInitialFrame(event, url, line, column);\n    };\n    /**\n     * Create an event from a promise rejection where the `reason` is a primitive.\n     *\n     * @param reason: The `reason` property of the promise rejection\n     * @returns An Event object with an appropriate `exception` value\n     */\n    GlobalHandlers.prototype._eventFromRejectionWithPrimitive = function (reason) {\n        return {\n            exception: {\n                values: [\n                    {\n                        type: 'UnhandledRejection',\n                        // String() is needed because the Primitive type includes symbols (which can't be automatically stringified)\n                        value: \"Non-Error promise rejection captured with value: \" + String(reason),\n                    },\n                ],\n            },\n        };\n    };\n    /** JSDoc */\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    GlobalHandlers.prototype._enhanceEventWithInitialFrame = function (event, url, line, column) {\n        event.exception = event.exception || {};\n        event.exception.values = event.exception.values || [];\n        event.exception.values[0] = event.exception.values[0] || {};\n        event.exception.values[0].stacktrace = event.exception.values[0].stacktrace || {};\n        event.exception.values[0].stacktrace.frames = event.exception.values[0].stacktrace.frames || [];\n        var colno = isNaN(parseInt(column, 10)) ? undefined : column;\n        var lineno = isNaN(parseInt(line, 10)) ? undefined : line;\n        var filename = isString(url) && url.length > 0 ? url : getLocationHref();\n        if (event.exception.values[0].stacktrace.frames.length === 0) {\n            event.exception.values[0].stacktrace.frames.push({\n                colno: colno,\n                filename: filename,\n                function: '?',\n                in_app: true,\n                lineno: lineno,\n            });\n        }\n        return event;\n    };\n    /**\n     * @inheritDoc\n     */\n    GlobalHandlers.id = 'GlobalHandlers';\n    return GlobalHandlers;\n}());\nexport { GlobalHandlers };\n//# sourceMappingURL=globalhandlers.js.map","import { __read, __spread } from \"tslib\";\nimport { addGlobalEventProcessor, getCurrentHub } from '@sentry/core';\nimport { isInstanceOf } from '@sentry/utils';\nimport { exceptionFromStacktrace } from '../parsers';\nimport { computeStackTrace } from '../tracekit';\nvar DEFAULT_KEY = 'cause';\nvar DEFAULT_LIMIT = 5;\n/** Adds SDK info to an event. */\nvar LinkedErrors = /** @class */ (function () {\n    /**\n     * @inheritDoc\n     */\n    function LinkedErrors(options) {\n        if (options === void 0) { options = {}; }\n        /**\n         * @inheritDoc\n         */\n        this.name = LinkedErrors.id;\n        this._key = options.key || DEFAULT_KEY;\n        this._limit = options.limit || DEFAULT_LIMIT;\n    }\n    /**\n     * @inheritDoc\n     */\n    LinkedErrors.prototype.setupOnce = function () {\n        addGlobalEventProcessor(function (event, hint) {\n            var self = getCurrentHub().getIntegration(LinkedErrors);\n            if (self) {\n                return self._handler(event, hint);\n            }\n            return event;\n        });\n    };\n    /**\n     * @inheritDoc\n     */\n    LinkedErrors.prototype._handler = function (event, hint) {\n        if (!event.exception || !event.exception.values || !hint || !isInstanceOf(hint.originalException, Error)) {\n            return event;\n        }\n        var linkedErrors = this._walkErrorTree(hint.originalException, this._key);\n        event.exception.values = __spread(linkedErrors, event.exception.values);\n        return event;\n    };\n    /**\n     * @inheritDoc\n     */\n    LinkedErrors.prototype._walkErrorTree = function (error, key, stack) {\n        if (stack === void 0) { stack = []; }\n        if (!isInstanceOf(error[key], Error) || stack.length + 1 >= this._limit) {\n            return stack;\n        }\n        var stacktrace = computeStackTrace(error[key]);\n        var exception = exceptionFromStacktrace(stacktrace);\n        return this._walkErrorTree(error[key], key, __spread([exception], stack));\n    };\n    /**\n     * @inheritDoc\n     */\n    LinkedErrors.id = 'LinkedErrors';\n    return LinkedErrors;\n}());\nexport { LinkedErrors };\n//# sourceMappingURL=linkederrors.js.map","import { __assign } from \"tslib\";\nimport { addGlobalEventProcessor, getCurrentHub } from '@sentry/core';\nimport { getGlobalObject } from '@sentry/utils';\nvar global = getGlobalObject();\n/** UserAgent */\nvar UserAgent = /** @class */ (function () {\n    function UserAgent() {\n        /**\n         * @inheritDoc\n         */\n        this.name = UserAgent.id;\n    }\n    /**\n     * @inheritDoc\n     */\n    UserAgent.prototype.setupOnce = function () {\n        addGlobalEventProcessor(function (event) {\n            var _a, _b, _c;\n            if (getCurrentHub().getIntegration(UserAgent)) {\n                // if none of the information we want exists, don't bother\n                if (!global.navigator && !global.location && !global.document) {\n                    return event;\n                }\n                // grab as much info as exists and add it to the event\n                var url = ((_a = event.request) === null || _a === void 0 ? void 0 : _a.url) || ((_b = global.location) === null || _b === void 0 ? void 0 : _b.href);\n                var referrer = (global.document || {}).referrer;\n                var userAgent = (global.navigator || {}).userAgent;\n                var headers = __assign(__assign(__assign({}, (_c = event.request) === null || _c === void 0 ? void 0 : _c.headers), (referrer && { Referer: referrer })), (userAgent && { 'User-Agent': userAgent }));\n                var request = __assign(__assign({}, (url && { url: url })), { headers: headers });\n                return __assign(__assign({}, event), { request: request });\n            }\n            return event;\n        });\n    };\n    /**\n     * @inheritDoc\n     */\n    UserAgent.id = 'UserAgent';\n    return UserAgent;\n}());\nexport { UserAgent };\n//# sourceMappingURL=useragent.js.map","import { getCurrentHub, initAndBind, Integrations as CoreIntegrations } from '@sentry/core';\nimport { getGlobalObject, SyncPromise } from '@sentry/utils';\nimport { BrowserClient } from './client';\nimport { wrap as internalWrap } from './helpers';\nimport { Breadcrumbs, GlobalHandlers, LinkedErrors, TryCatch, UserAgent } from './integrations';\nexport var defaultIntegrations = [\n    new CoreIntegrations.InboundFilters(),\n    new CoreIntegrations.FunctionToString(),\n    new TryCatch(),\n    new Breadcrumbs(),\n    new GlobalHandlers(),\n    new LinkedErrors(),\n    new UserAgent(),\n];\n/**\n * The Sentry Browser SDK Client.\n *\n * To use this SDK, call the {@link init} function as early as possible when\n * loading the web page. To set context information or send manual events, use\n * the provided methods.\n *\n * @example\n *\n * ```\n *\n * import { init } from '@sentry/browser';\n *\n * init({\n *   dsn: '__DSN__',\n *   // ...\n * });\n * ```\n *\n * @example\n * ```\n *\n * import { configureScope } from '@sentry/browser';\n * configureScope((scope: Scope) => {\n *   scope.setExtra({ battery: 0.7 });\n *   scope.setTag({ user_mode: 'admin' });\n *   scope.setUser({ id: '4711' });\n * });\n * ```\n *\n * @example\n * ```\n *\n * import { addBreadcrumb } from '@sentry/browser';\n * addBreadcrumb({\n *   message: 'My Breadcrumb',\n *   // ...\n * });\n * ```\n *\n * @example\n *\n * ```\n *\n * import * as Sentry from '@sentry/browser';\n * Sentry.captureMessage('Hello, world!');\n * Sentry.captureException(new Error('Good bye'));\n * Sentry.captureEvent({\n *   message: 'Manual',\n *   stacktrace: [\n *     // ...\n *   ],\n * });\n * ```\n *\n * @see {@link BrowserOptions} for documentation on configuration options.\n */\nexport function init(options) {\n    if (options === void 0) { options = {}; }\n    if (options.defaultIntegrations === undefined) {\n        options.defaultIntegrations = defaultIntegrations;\n    }\n    if (options.release === undefined) {\n        var window_1 = getGlobalObject();\n        // This supports the variable that sentry-webpack-plugin injects\n        if (window_1.SENTRY_RELEASE && window_1.SENTRY_RELEASE.id) {\n            options.release = window_1.SENTRY_RELEASE.id;\n        }\n    }\n    if (options.autoSessionTracking === undefined) {\n        options.autoSessionTracking = false;\n    }\n    initAndBind(BrowserClient, options);\n    if (options.autoSessionTracking) {\n        startSessionTracking();\n    }\n}\n/**\n * Present the user with a report dialog.\n *\n * @param options Everything is optional, we try to fetch all info need from the global scope.\n */\nexport function showReportDialog(options) {\n    if (options === void 0) { options = {}; }\n    if (!options.eventId) {\n        options.eventId = getCurrentHub().lastEventId();\n    }\n    var client = getCurrentHub().getClient();\n    if (client) {\n        client.showReportDialog(options);\n    }\n}\n/**\n * This is the getter for lastEventId.\n *\n * @returns The last event id of a captured event.\n */\nexport function lastEventId() {\n    return getCurrentHub().lastEventId();\n}\n/**\n * This function is here to be API compatible with the loader.\n * @hidden\n */\nexport function forceLoad() {\n    // Noop\n}\n/**\n * This function is here to be API compatible with the loader.\n * @hidden\n */\nexport function onLoad(callback) {\n    callback();\n}\n/**\n * A promise that resolves when all current events have been sent.\n * If you provide a timeout and the queue takes longer to drain the promise returns false.\n *\n * @param timeout Maximum time in ms the client should wait.\n */\nexport function flush(timeout) {\n    var client = getCurrentHub().getClient();\n    if (client) {\n        return client.flush(timeout);\n    }\n    return SyncPromise.reject(false);\n}\n/**\n * A promise that resolves when all current events have been sent.\n * If you provide a timeout and the queue takes longer to drain the promise returns false.\n *\n * @param timeout Maximum time in ms the client should wait.\n */\nexport function close(timeout) {\n    var client = getCurrentHub().getClient();\n    if (client) {\n        return client.close(timeout);\n    }\n    return SyncPromise.reject(false);\n}\n/**\n * Wrap code within a try/catch block so the SDK is able to capture errors.\n *\n * @param fn A function to wrap.\n *\n * @returns The result of wrapped function call.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function wrap(fn) {\n    return internalWrap(fn)();\n}\n/**\n * Enable automatic Session Tracking for the initial page load.\n */\nfunction startSessionTracking() {\n    var window = getGlobalObject();\n    var hub = getCurrentHub();\n    /**\n     * We should be using `Promise.all([windowLoaded, firstContentfulPaint])` here,\n     * but, as always, it's not available in the IE10-11. Thanks IE.\n     */\n    var loadResolved = document.readyState === 'complete';\n    var fcpResolved = false;\n    var possiblyEndSession = function () {\n        if (fcpResolved && loadResolved) {\n            hub.endSession();\n        }\n    };\n    var resolveWindowLoaded = function () {\n        loadResolved = true;\n        possiblyEndSession();\n        window.removeEventListener('load', resolveWindowLoaded);\n    };\n    hub.startSession();\n    if (!loadResolved) {\n        // IE doesn't support `{ once: true }` for event listeners, so we have to manually\n        // attach and then detach it once completed.\n        window.addEventListener('load', resolveWindowLoaded);\n    }\n    try {\n        var po = new PerformanceObserver(function (entryList, po) {\n            entryList.getEntries().forEach(function (entry) {\n                if (entry.name === 'first-contentful-paint' && entry.startTime < firstHiddenTime_1) {\n                    po.disconnect();\n                    fcpResolved = true;\n                    possiblyEndSession();\n                }\n            });\n        });\n        // There's no need to even attach this listener if `PerformanceObserver` constructor will fail,\n        // so we do it below here.\n        var firstHiddenTime_1 = document.visibilityState === 'hidden' ? 0 : Infinity;\n        document.addEventListener('visibilitychange', function (event) {\n            firstHiddenTime_1 = Math.min(firstHiddenTime_1, event.timeStamp);\n        }, { once: true });\n        po.observe({\n            type: 'paint',\n            buffered: true,\n        });\n    }\n    catch (e) {\n        fcpResolved = true;\n        possiblyEndSession();\n    }\n}\n//# sourceMappingURL=sdk.js.map","import { getCurrentHub } from '@sentry/hub';\nimport { logger } from '@sentry/utils';\n/**\n * Internal function to create a new SDK client instance. The client is\n * installed and then bound to the current scope.\n *\n * @param clientClass The client class to instantiate.\n * @param options Options to pass to the client.\n */\nexport function initAndBind(clientClass, options) {\n    if (options.debug === true) {\n        logger.enable();\n    }\n    var hub = getCurrentHub();\n    var client = new clientClass(options);\n    hub.bindClient(client);\n}\n//# sourceMappingURL=sdk.js.map","import { getGlobalObject, logger } from '@sentry/utils';\nimport { FINISH_REASON_TAG, IDLE_TRANSACTION_FINISH_REASONS } from '../constants';\nimport { getActiveTransaction } from '../utils';\nvar global = getGlobalObject();\n/**\n * Add a listener that cancels and finishes a transaction when the global\n * document is hidden.\n */\nexport function registerBackgroundTabDetection() {\n    if (global && global.document) {\n        global.document.addEventListener('visibilitychange', function () {\n            var activeTransaction = getActiveTransaction();\n            if (global.document.hidden && activeTransaction) {\n                var statusType = 'cancelled';\n                logger.log(\"[Tracing] Transaction: \" + statusType + \" -> since tab moved to the background, op: \" + activeTransaction.op);\n                // We should not set status if it is already set, this prevent important statuses like\n                // error or data loss from being overwritten on transaction.\n                if (!activeTransaction.status) {\n                    activeTransaction.setStatus(statusType);\n                }\n                activeTransaction.setTag('visibilitychange', 'document.hidden');\n                activeTransaction.setTag(FINISH_REASON_TAG, IDLE_TRANSACTION_FINISH_REASONS[2]);\n                activeTransaction.finish();\n            }\n        });\n    }\n    else {\n        logger.warn('[Tracing] Could not set up background tab detection due to lack of global document');\n    }\n}\n//# sourceMappingURL=backgroundtab.js.map","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport var bindReporter = function (callback, metric, reportAllChanges) {\n    var prevValue;\n    return function (forceReport) {\n        if (metric.value >= 0) {\n            if (forceReport || reportAllChanges) {\n                metric.delta = metric.value - (prevValue || 0);\n                // Report the metric if there's a non-zero delta or if no previous\n                // value exists (which can happen in the case of the document becoming\n                // hidden when the metric value is 0).\n                // See: https://github.com/GoogleChrome/web-vitals/issues/14\n                if (metric.delta || prevValue === undefined) {\n                    prevValue = metric.value;\n                    callback(metric);\n                }\n            }\n        }\n    };\n};\n//# sourceMappingURL=bindReporter.js.map","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { generateUniqueID } from './generateUniqueID';\nexport var initMetric = function (name, value) {\n    return {\n        name: name,\n        value: (value !== null && value !== void 0 ? value : -1),\n        delta: 0,\n        entries: [],\n        id: generateUniqueID(),\n    };\n};\n//# sourceMappingURL=initMetric.js.map","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Performantly generate a unique, 30-char string by combining a version\n * number, the current timestamp with a 13-digit number integer.\n * @return {string}\n */\nexport var generateUniqueID = function () {\n    return \"v2-\" + Date.now() + \"-\" + (Math.floor(Math.random() * (9e12 - 1)) + 1e12);\n};\n//# sourceMappingURL=generateUniqueID.js.map","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Takes a performance entry type and a callback function, and creates a\n * `PerformanceObserver` instance that will observe the specified entry type\n * with buffering enabled and call the callback _for each entry_.\n *\n * This function also feature-detects entry support and wraps the logic in a\n * try/catch to avoid errors in unsupporting browsers.\n */\nexport var observe = function (type, callback) {\n    try {\n        if (PerformanceObserver.supportedEntryTypes.includes(type)) {\n            // More extensive feature detect needed for Firefox due to:\n            // https://github.com/GoogleChrome/web-vitals/issues/142\n            if (type === 'first-input' && !('PerformanceEventTiming' in self)) {\n                return;\n            }\n            var po = new PerformanceObserver(function (l) { return l.getEntries().map(callback); });\n            po.observe({ type: type, buffered: true });\n            return po;\n        }\n    }\n    catch (e) {\n        // Do nothing.\n    }\n    return;\n};\n//# sourceMappingURL=observe.js.map","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { getGlobalObject } from '@sentry/utils';\nexport var onHidden = function (cb, once) {\n    var onHiddenOrPageHide = function (event) {\n        if (event.type === 'pagehide' || getGlobalObject().document.visibilityState === 'hidden') {\n            cb(event);\n            if (once) {\n                removeEventListener('visibilitychange', onHiddenOrPageHide, true);\n                removeEventListener('pagehide', onHiddenOrPageHide, true);\n            }\n        }\n    };\n    addEventListener('visibilitychange', onHiddenOrPageHide, true);\n    // Some browsers have buggy implementations of visibilitychange,\n    // so we use pagehide in addition, just to be safe.\n    addEventListener('pagehide', onHiddenOrPageHide, true);\n};\n//# sourceMappingURL=onHidden.js.map","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { getGlobalObject } from '@sentry/utils';\nimport { onHidden } from './onHidden';\nvar firstHiddenTime = -1;\nvar initHiddenTime = function () {\n    return getGlobalObject().document.visibilityState === 'hidden' ? 0 : Infinity;\n};\nvar trackChanges = function () {\n    // Update the time if/when the document becomes hidden.\n    onHidden(function (_a) {\n        var timeStamp = _a.timeStamp;\n        firstHiddenTime = timeStamp;\n    }, true);\n};\nexport var getVisibilityWatcher = function () {\n    if (firstHiddenTime < 0) {\n        // If the document is hidden when this code runs, assume it was hidden\n        // since navigation start. This isn't a perfect heuristic, but it's the\n        // best we can do until an API is available to support querying past\n        // visibilityState.\n        firstHiddenTime = initHiddenTime();\n        trackChanges();\n    }\n    return {\n        get firstHiddenTime() {\n            return firstHiddenTime;\n        },\n    };\n};\n//# sourceMappingURL=getVisibilityWatcher.js.map","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { bindReporter } from './lib/bindReporter';\nimport { getVisibilityWatcher } from './lib/getVisibilityWatcher';\nimport { initMetric } from './lib/initMetric';\nimport { observe } from './lib/observe';\nimport { onHidden } from './lib/onHidden';\nvar reportedMetricIDs = {};\nexport var getLCP = function (onReport, reportAllChanges) {\n    var visibilityWatcher = getVisibilityWatcher();\n    var metric = initMetric('LCP');\n    var report;\n    var entryHandler = function (entry) {\n        // The startTime attribute returns the value of the renderTime if it is not 0,\n        // and the value of the loadTime otherwise.\n        var value = entry.startTime;\n        // If the page was hidden prior to paint time of the entry,\n        // ignore it and mark the metric as final, otherwise add the entry.\n        if (value < visibilityWatcher.firstHiddenTime) {\n            metric.value = value;\n            metric.entries.push(entry);\n        }\n        if (report) {\n            report();\n        }\n    };\n    var po = observe('largest-contentful-paint', entryHandler);\n    if (po) {\n        report = bindReporter(onReport, metric, reportAllChanges);\n        var stopListening_1 = function () {\n            if (!reportedMetricIDs[metric.id]) {\n                po.takeRecords().map(entryHandler);\n                po.disconnect();\n                reportedMetricIDs[metric.id] = true;\n                report(true);\n            }\n        };\n        // Stop listening after input. Note: while scrolling is an input that\n        // stop LCP observation, it's unreliable since it can be programmatically\n        // generated. See: https://github.com/GoogleChrome/web-vitals/issues/75\n        ['keydown', 'click'].forEach(function (type) {\n            addEventListener(type, stopListening_1, { once: true, capture: true });\n        });\n        onHidden(stopListening_1, true);\n    }\n};\n//# sourceMappingURL=getLCP.js.map","import { __assign, __rest } from \"tslib\";\nimport { browserPerformanceTimeOrigin, getGlobalObject, htmlTreeAsString, isNodeEnv, logger } from '@sentry/utils';\nimport { msToSec } from '../utils';\nimport { getCLS } from './web-vitals/getCLS';\nimport { getFID } from './web-vitals/getFID';\nimport { getLCP } from './web-vitals/getLCP';\nimport { getVisibilityWatcher } from './web-vitals/lib/getVisibilityWatcher';\nvar global = getGlobalObject();\n/** Class tracking metrics  */\nvar MetricsInstrumentation = /** @class */ (function () {\n    function MetricsInstrumentation(_reportAllChanges) {\n        if (_reportAllChanges === void 0) { _reportAllChanges = false; }\n        this._reportAllChanges = _reportAllChanges;\n        this._measurements = {};\n        this._performanceCursor = 0;\n        if (!isNodeEnv() && global && global.performance && global.document) {\n            if (global.performance.mark) {\n                global.performance.mark('sentry-tracing-init');\n            }\n            this._trackCLS();\n            this._trackLCP();\n            this._trackFID();\n        }\n    }\n    /** Add performance related spans to a transaction */\n    MetricsInstrumentation.prototype.addPerformanceEntries = function (transaction) {\n        var _this = this;\n        if (!global || !global.performance || !global.performance.getEntries || !browserPerformanceTimeOrigin) {\n            // Gatekeeper if performance API not available\n            return;\n        }\n        logger.log('[Tracing] Adding & adjusting spans using Performance API');\n        var timeOrigin = msToSec(browserPerformanceTimeOrigin);\n        var responseStartTimestamp;\n        var requestStartTimestamp;\n        global.performance\n            .getEntries()\n            .slice(this._performanceCursor)\n            .forEach(function (entry) {\n            var startTime = msToSec(entry.startTime);\n            var duration = msToSec(entry.duration);\n            if (transaction.op === 'navigation' && timeOrigin + startTime < transaction.startTimestamp) {\n                return;\n            }\n            switch (entry.entryType) {\n                case 'navigation': {\n                    addNavigationSpans(transaction, entry, timeOrigin);\n                    responseStartTimestamp = timeOrigin + msToSec(entry.responseStart);\n                    requestStartTimestamp = timeOrigin + msToSec(entry.requestStart);\n                    break;\n                }\n                case 'mark':\n                case 'paint':\n                case 'measure': {\n                    var startTimestamp = addMeasureSpans(transaction, entry, startTime, duration, timeOrigin);\n                    // capture web vitals\n                    var firstHidden = getVisibilityWatcher();\n                    // Only report if the page wasn't hidden prior to the web vital.\n                    var shouldRecord = entry.startTime < firstHidden.firstHiddenTime;\n                    if (entry.name === 'first-paint' && shouldRecord) {\n                        logger.log('[Measurements] Adding FP');\n                        _this._measurements['fp'] = { value: entry.startTime };\n                        _this._measurements['mark.fp'] = { value: startTimestamp };\n                    }\n                    if (entry.name === 'first-contentful-paint' && shouldRecord) {\n                        logger.log('[Measurements] Adding FCP');\n                        _this._measurements['fcp'] = { value: entry.startTime };\n                        _this._measurements['mark.fcp'] = { value: startTimestamp };\n                    }\n                    break;\n                }\n                case 'resource': {\n                    var resourceName = entry.name.replace(global.location.origin, '');\n                    addResourceSpans(transaction, entry, resourceName, startTime, duration, timeOrigin);\n                    break;\n                }\n                default:\n                // Ignore other entry types.\n            }\n        });\n        this._performanceCursor = Math.max(performance.getEntries().length - 1, 0);\n        this._trackNavigator(transaction);\n        // Measurements are only available for pageload transactions\n        if (transaction.op === 'pageload') {\n            // normalize applicable web vital values to be relative to transaction.startTimestamp\n            var timeOrigin_1 = msToSec(browserPerformanceTimeOrigin);\n            // Generate TTFB (Time to First Byte), which measured as the time between the beginning of the transaction and the\n            // start of the response in milliseconds\n            if (typeof responseStartTimestamp === 'number') {\n                logger.log('[Measurements] Adding TTFB');\n                this._measurements['ttfb'] = { value: (responseStartTimestamp - transaction.startTimestamp) * 1000 };\n                if (typeof requestStartTimestamp === 'number' && requestStartTimestamp <= responseStartTimestamp) {\n                    // Capture the time spent making the request and receiving the first byte of the response.\n                    // This is the time between the start of the request and the start of the response in milliseconds.\n                    this._measurements['ttfb.requestTime'] = { value: (responseStartTimestamp - requestStartTimestamp) * 1000 };\n                }\n            }\n            ['fcp', 'fp', 'lcp'].forEach(function (name) {\n                if (!_this._measurements[name] || timeOrigin_1 >= transaction.startTimestamp) {\n                    return;\n                }\n                // The web vitals, fcp, fp, lcp, and ttfb, all measure relative to timeOrigin.\n                // Unfortunately, timeOrigin is not captured within the transaction span data, so these web vitals will need\n                // to be adjusted to be relative to transaction.startTimestamp.\n                var oldValue = _this._measurements[name].value;\n                var measurementTimestamp = timeOrigin_1 + msToSec(oldValue);\n                // normalizedValue should be in milliseconds\n                var normalizedValue = Math.abs((measurementTimestamp - transaction.startTimestamp) * 1000);\n                var delta = normalizedValue - oldValue;\n                logger.log(\"[Measurements] Normalized \" + name + \" from \" + oldValue + \" to \" + normalizedValue + \" (\" + delta + \")\");\n                _this._measurements[name].value = normalizedValue;\n            });\n            if (this._measurements['mark.fid'] && this._measurements['fid']) {\n                // create span for FID\n                _startChild(transaction, {\n                    description: 'first input delay',\n                    endTimestamp: this._measurements['mark.fid'].value + msToSec(this._measurements['fid'].value),\n                    op: 'web.vitals',\n                    startTimestamp: this._measurements['mark.fid'].value,\n                });\n            }\n            // If FCP is not recorded we should not record the cls value\n            // according to the new definition of CLS.\n            if (!('fcp' in this._measurements)) {\n                delete this._measurements.cls;\n            }\n            transaction.setMeasurements(this._measurements);\n            tagMetricInfo(transaction, this._lcpEntry, this._clsEntry);\n            transaction.setTag('sentry_reportAllChanges', this._reportAllChanges);\n        }\n    };\n    /**\n     * Capture the information of the user agent.\n     */\n    MetricsInstrumentation.prototype._trackNavigator = function (transaction) {\n        var navigator = global.navigator;\n        if (!navigator) {\n            return;\n        }\n        // track network connectivity\n        var connection = navigator.connection;\n        if (connection) {\n            if (connection.effectiveType) {\n                transaction.setTag('effectiveConnectionType', connection.effectiveType);\n            }\n            if (connection.type) {\n                transaction.setTag('connectionType', connection.type);\n            }\n            if (isMeasurementValue(connection.rtt)) {\n                this._measurements['connection.rtt'] = { value: connection.rtt };\n            }\n            if (isMeasurementValue(connection.downlink)) {\n                this._measurements['connection.downlink'] = { value: connection.downlink };\n            }\n        }\n        if (isMeasurementValue(navigator.deviceMemory)) {\n            transaction.setTag('deviceMemory', String(navigator.deviceMemory));\n        }\n        if (isMeasurementValue(navigator.hardwareConcurrency)) {\n            transaction.setTag('hardwareConcurrency', String(navigator.hardwareConcurrency));\n        }\n    };\n    /** Starts tracking the Cumulative Layout Shift on the current page. */\n    MetricsInstrumentation.prototype._trackCLS = function () {\n        var _this = this;\n        // See:\n        // https://web.dev/evolving-cls/\n        // https://web.dev/cls-web-tooling/\n        getCLS(function (metric) {\n            var entry = metric.entries.pop();\n            if (!entry) {\n                return;\n            }\n            logger.log('[Measurements] Adding CLS');\n            _this._measurements['cls'] = { value: metric.value };\n            _this._clsEntry = entry;\n        });\n    };\n    /** Starts tracking the Largest Contentful Paint on the current page. */\n    MetricsInstrumentation.prototype._trackLCP = function () {\n        var _this = this;\n        getLCP(function (metric) {\n            var entry = metric.entries.pop();\n            if (!entry) {\n                return;\n            }\n            var timeOrigin = msToSec(browserPerformanceTimeOrigin);\n            var startTime = msToSec(entry.startTime);\n            logger.log('[Measurements] Adding LCP');\n            _this._measurements['lcp'] = { value: metric.value };\n            _this._measurements['mark.lcp'] = { value: timeOrigin + startTime };\n            _this._lcpEntry = entry;\n        }, this._reportAllChanges);\n    };\n    /** Starts tracking the First Input Delay on the current page. */\n    MetricsInstrumentation.prototype._trackFID = function () {\n        var _this = this;\n        getFID(function (metric) {\n            var entry = metric.entries.pop();\n            if (!entry) {\n                return;\n            }\n            var timeOrigin = msToSec(browserPerformanceTimeOrigin);\n            var startTime = msToSec(entry.startTime);\n            logger.log('[Measurements] Adding FID');\n            _this._measurements['fid'] = { value: metric.value };\n            _this._measurements['mark.fid'] = { value: timeOrigin + startTime };\n        });\n    };\n    return MetricsInstrumentation;\n}());\nexport { MetricsInstrumentation };\n/** Instrument navigation entries */\nfunction addNavigationSpans(transaction, entry, timeOrigin) {\n    ['unloadEvent', 'redirect', 'domContentLoadedEvent', 'loadEvent', 'connect'].forEach(function (event) {\n        addPerformanceNavigationTiming(transaction, entry, event, timeOrigin);\n    });\n    addPerformanceNavigationTiming(transaction, entry, 'secureConnection', timeOrigin, 'TLS/SSL', 'connectEnd');\n    addPerformanceNavigationTiming(transaction, entry, 'fetch', timeOrigin, 'cache', 'domainLookupStart');\n    addPerformanceNavigationTiming(transaction, entry, 'domainLookup', timeOrigin, 'DNS');\n    addRequest(transaction, entry, timeOrigin);\n}\n/** Create measure related spans */\nfunction addMeasureSpans(transaction, entry, startTime, duration, timeOrigin) {\n    var measureStartTimestamp = timeOrigin + startTime;\n    var measureEndTimestamp = measureStartTimestamp + duration;\n    _startChild(transaction, {\n        description: entry.name,\n        endTimestamp: measureEndTimestamp,\n        op: entry.entryType,\n        startTimestamp: measureStartTimestamp,\n    });\n    return measureStartTimestamp;\n}\n/** Create resource-related spans */\nexport function addResourceSpans(transaction, entry, resourceName, startTime, duration, timeOrigin) {\n    // we already instrument based on fetch and xhr, so we don't need to\n    // duplicate spans here.\n    if (entry.initiatorType === 'xmlhttprequest' || entry.initiatorType === 'fetch') {\n        return;\n    }\n    var data = {};\n    if ('transferSize' in entry) {\n        data['Transfer Size'] = entry.transferSize;\n    }\n    if ('encodedBodySize' in entry) {\n        data['Encoded Body Size'] = entry.encodedBodySize;\n    }\n    if ('decodedBodySize' in entry) {\n        data['Decoded Body Size'] = entry.decodedBodySize;\n    }\n    var startTimestamp = timeOrigin + startTime;\n    var endTimestamp = startTimestamp + duration;\n    _startChild(transaction, {\n        description: resourceName,\n        endTimestamp: endTimestamp,\n        op: entry.initiatorType ? \"resource.\" + entry.initiatorType : 'resource',\n        startTimestamp: startTimestamp,\n        data: data,\n    });\n}\n/** Create performance navigation related spans */\nfunction addPerformanceNavigationTiming(transaction, entry, event, timeOrigin, description, eventEnd) {\n    var end = eventEnd ? entry[eventEnd] : entry[event + \"End\"];\n    var start = entry[event + \"Start\"];\n    if (!start || !end) {\n        return;\n    }\n    _startChild(transaction, {\n        op: 'browser',\n        description: (description !== null && description !== void 0 ? description : event),\n        startTimestamp: timeOrigin + msToSec(start),\n        endTimestamp: timeOrigin + msToSec(end),\n    });\n}\n/** Create request and response related spans */\nfunction addRequest(transaction, entry, timeOrigin) {\n    _startChild(transaction, {\n        op: 'browser',\n        description: 'request',\n        startTimestamp: timeOrigin + msToSec(entry.requestStart),\n        endTimestamp: timeOrigin + msToSec(entry.responseEnd),\n    });\n    _startChild(transaction, {\n        op: 'browser',\n        description: 'response',\n        startTimestamp: timeOrigin + msToSec(entry.responseStart),\n        endTimestamp: timeOrigin + msToSec(entry.responseEnd),\n    });\n}\n/**\n * Helper function to start child on transactions. This function will make sure that the transaction will\n * use the start timestamp of the created child span if it is earlier than the transactions actual\n * start timestamp.\n */\nexport function _startChild(transaction, _a) {\n    var startTimestamp = _a.startTimestamp, ctx = __rest(_a, [\"startTimestamp\"]);\n    if (startTimestamp && transaction.startTimestamp > startTimestamp) {\n        transaction.startTimestamp = startTimestamp;\n    }\n    return transaction.startChild(__assign({ startTimestamp: startTimestamp }, ctx));\n}\n/**\n * Checks if a given value is a valid measurement value.\n */\nfunction isMeasurementValue(value) {\n    return typeof value === 'number' && isFinite(value);\n}\n/** Add LCP / CLS data to transaction to allow debugging */\nfunction tagMetricInfo(transaction, lcpEntry, clsEntry) {\n    if (lcpEntry) {\n        logger.log('[Measurements] Adding LCP Data');\n        // Capture Properties of the LCP element that contributes to the LCP.\n        if (lcpEntry.element) {\n            transaction.setTag('lcp.element', htmlTreeAsString(lcpEntry.element));\n        }\n        if (lcpEntry.id) {\n            transaction.setTag('lcp.id', lcpEntry.id);\n        }\n        if (lcpEntry.url) {\n            // Trim URL to the first 200 characters.\n            transaction.setTag('lcp.url', lcpEntry.url.trim().slice(0, 200));\n        }\n        transaction.setTag('lcp.size', lcpEntry.size);\n    }\n    // See: https://developer.mozilla.org/en-US/docs/Web/API/LayoutShift\n    if (clsEntry && clsEntry.sources) {\n        logger.log('[Measurements] Adding CLS Data');\n        clsEntry.sources.forEach(function (source, index) {\n            return transaction.setTag(\"cls.source.\" + (index + 1), htmlTreeAsString(source.node));\n        });\n    }\n}\n//# sourceMappingURL=metrics.js.map","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { bindReporter } from './lib/bindReporter';\nimport { initMetric } from './lib/initMetric';\nimport { observe } from './lib/observe';\nimport { onHidden } from './lib/onHidden';\nexport var getCLS = function (onReport, reportAllChanges) {\n    var metric = initMetric('CLS', 0);\n    var report;\n    var sessionValue = 0;\n    var sessionEntries = [];\n    var entryHandler = function (entry) {\n        // Only count layout shifts without recent user input.\n        // TODO: Figure out why entry can be undefined\n        if (entry && !entry.hadRecentInput) {\n            var firstSessionEntry = sessionEntries[0];\n            var lastSessionEntry = sessionEntries[sessionEntries.length - 1];\n            // If the entry occurred less than 1 second after the previous entry and\n            // less than 5 seconds after the first entry in the session, include the\n            // entry in the current session. Otherwise, start a new session.\n            if (sessionValue &&\n                sessionEntries.length !== 0 &&\n                entry.startTime - lastSessionEntry.startTime < 1000 &&\n                entry.startTime - firstSessionEntry.startTime < 5000) {\n                sessionValue += entry.value;\n                sessionEntries.push(entry);\n            }\n            else {\n                sessionValue = entry.value;\n                sessionEntries = [entry];\n            }\n            // If the current session value is larger than the current CLS value,\n            // update CLS and the entries contributing to it.\n            if (sessionValue > metric.value) {\n                metric.value = sessionValue;\n                metric.entries = sessionEntries;\n                if (report) {\n                    report();\n                }\n            }\n        }\n    };\n    var po = observe('layout-shift', entryHandler);\n    if (po) {\n        report = bindReporter(onReport, metric, reportAllChanges);\n        onHidden(function () {\n            po.takeRecords().map(entryHandler);\n            report(true);\n        });\n    }\n};\n//# sourceMappingURL=getCLS.js.map","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { bindReporter } from './lib/bindReporter';\nimport { getVisibilityWatcher } from './lib/getVisibilityWatcher';\nimport { initMetric } from './lib/initMetric';\nimport { observe } from './lib/observe';\nimport { onHidden } from './lib/onHidden';\nexport var getFID = function (onReport, reportAllChanges) {\n    var visibilityWatcher = getVisibilityWatcher();\n    var metric = initMetric('FID');\n    var report;\n    var entryHandler = function (entry) {\n        // Only report if the page wasn't hidden prior to the first input.\n        if (report && entry.startTime < visibilityWatcher.firstHiddenTime) {\n            metric.value = entry.processingStart - entry.startTime;\n            metric.entries.push(entry);\n            report(true);\n        }\n    };\n    var po = observe('first-input', entryHandler);\n    if (po) {\n        report = bindReporter(onReport, metric, reportAllChanges);\n        onHidden(function () {\n            po.takeRecords().map(entryHandler);\n            po.disconnect();\n        }, true);\n    }\n};\n//# sourceMappingURL=getFID.js.map","import { __assign, __read, __spread } from \"tslib\";\nimport { addInstrumentationHandler, isInstanceOf, isMatchingPattern } from '@sentry/utils';\nimport { getActiveTransaction, hasTracingEnabled } from '../utils';\nexport var DEFAULT_TRACING_ORIGINS = ['localhost', /^\\//];\nexport var defaultRequestInstrumentationOptions = {\n    traceFetch: true,\n    traceXHR: true,\n    tracingOrigins: DEFAULT_TRACING_ORIGINS,\n};\n/** Registers span creators for xhr and fetch requests  */\nexport function instrumentOutgoingRequests(_options) {\n    // eslint-disable-next-line @typescript-eslint/unbound-method\n    var _a = __assign(__assign({}, defaultRequestInstrumentationOptions), _options), traceFetch = _a.traceFetch, traceXHR = _a.traceXHR, tracingOrigins = _a.tracingOrigins, shouldCreateSpanForRequest = _a.shouldCreateSpanForRequest;\n    // We should cache url -> decision so that we don't have to compute\n    // regexp everytime we create a request.\n    var urlMap = {};\n    var defaultShouldCreateSpan = function (url) {\n        if (urlMap[url]) {\n            return urlMap[url];\n        }\n        var origins = tracingOrigins;\n        urlMap[url] =\n            origins.some(function (origin) { return isMatchingPattern(url, origin); }) &&\n                !isMatchingPattern(url, 'sentry_key');\n        return urlMap[url];\n    };\n    // We want that our users don't have to re-implement shouldCreateSpanForRequest themselves\n    // That's why we filter out already unwanted Spans from tracingOrigins\n    var shouldCreateSpan = defaultShouldCreateSpan;\n    if (typeof shouldCreateSpanForRequest === 'function') {\n        shouldCreateSpan = function (url) {\n            return defaultShouldCreateSpan(url) && shouldCreateSpanForRequest(url);\n        };\n    }\n    var spans = {};\n    if (traceFetch) {\n        addInstrumentationHandler('fetch', function (handlerData) {\n            fetchCallback(handlerData, shouldCreateSpan, spans);\n        });\n    }\n    if (traceXHR) {\n        addInstrumentationHandler('xhr', function (handlerData) {\n            xhrCallback(handlerData, shouldCreateSpan, spans);\n        });\n    }\n}\n/**\n * Create and track fetch request spans\n */\nexport function fetchCallback(handlerData, shouldCreateSpan, spans) {\n    if (!hasTracingEnabled() || !(handlerData.fetchData && shouldCreateSpan(handlerData.fetchData.url))) {\n        return;\n    }\n    if (handlerData.endTimestamp) {\n        var spanId = handlerData.fetchData.__span;\n        if (!spanId)\n            return;\n        var span = spans[spanId];\n        if (span) {\n            if (handlerData.response) {\n                // TODO (kmclb) remove this once types PR goes through\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n                span.setHttpStatus(handlerData.response.status);\n            }\n            else if (handlerData.error) {\n                span.setStatus('internal_error');\n            }\n            span.finish();\n            // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n            delete spans[spanId];\n        }\n        return;\n    }\n    var activeTransaction = getActiveTransaction();\n    if (activeTransaction) {\n        var span = activeTransaction.startChild({\n            data: __assign(__assign({}, handlerData.fetchData), { type: 'fetch' }),\n            description: handlerData.fetchData.method + \" \" + handlerData.fetchData.url,\n            op: 'http.client',\n        });\n        handlerData.fetchData.__span = span.spanId;\n        spans[span.spanId] = span;\n        var request = (handlerData.args[0] = handlerData.args[0]);\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        var options = (handlerData.args[1] = handlerData.args[1] || {});\n        var headers = options.headers;\n        if (isInstanceOf(request, Request)) {\n            headers = request.headers;\n        }\n        if (headers) {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n            if (typeof headers.append === 'function') {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n                headers.append('sentry-trace', span.toTraceparent());\n            }\n            else if (Array.isArray(headers)) {\n                headers = __spread(headers, [['sentry-trace', span.toTraceparent()]]);\n            }\n            else {\n                headers = __assign(__assign({}, headers), { 'sentry-trace': span.toTraceparent() });\n            }\n        }\n        else {\n            headers = { 'sentry-trace': span.toTraceparent() };\n        }\n        options.headers = headers;\n    }\n}\n/**\n * Create and track xhr request spans\n */\nexport function xhrCallback(handlerData, shouldCreateSpan, spans) {\n    if (!hasTracingEnabled() ||\n        (handlerData.xhr && handlerData.xhr.__sentry_own_request__) ||\n        !(handlerData.xhr && handlerData.xhr.__sentry_xhr__ && shouldCreateSpan(handlerData.xhr.__sentry_xhr__.url))) {\n        return;\n    }\n    var xhr = handlerData.xhr.__sentry_xhr__;\n    // check first if the request has finished and is tracked by an existing span which should now end\n    if (handlerData.endTimestamp) {\n        var spanId = handlerData.xhr.__sentry_xhr_span_id__;\n        if (!spanId)\n            return;\n        var span = spans[spanId];\n        if (span) {\n            span.setHttpStatus(xhr.status_code);\n            span.finish();\n            // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n            delete spans[spanId];\n        }\n        return;\n    }\n    // if not, create a new span to track it\n    var activeTransaction = getActiveTransaction();\n    if (activeTransaction) {\n        var span = activeTransaction.startChild({\n            data: __assign(__assign({}, xhr.data), { type: 'xhr', method: xhr.method, url: xhr.url }),\n            description: xhr.method + \" \" + xhr.url,\n            op: 'http.client',\n        });\n        handlerData.xhr.__sentry_xhr_span_id__ = span.spanId;\n        spans[handlerData.xhr.__sentry_xhr_span_id__] = span;\n        if (handlerData.xhr.setRequestHeader) {\n            try {\n                handlerData.xhr.setRequestHeader('sentry-trace', span.toTraceparent());\n            }\n            catch (_) {\n                // Error: InvalidStateError: Failed to execute 'setRequestHeader' on 'XMLHttpRequest': The object's state must be OPENED.\n            }\n        }\n    }\n}\n//# sourceMappingURL=request.js.map","import { addInstrumentationHandler, getGlobalObject, logger } from '@sentry/utils';\nvar global = getGlobalObject();\n/**\n * Default function implementing pageload and navigation transactions\n */\nexport function instrumentRoutingWithDefaults(customStartTransaction, startTransactionOnPageLoad, startTransactionOnLocationChange) {\n    if (startTransactionOnPageLoad === void 0) { startTransactionOnPageLoad = true; }\n    if (startTransactionOnLocationChange === void 0) { startTransactionOnLocationChange = true; }\n    if (!global || !global.location) {\n        logger.warn('Could not initialize routing instrumentation due to invalid location');\n        return;\n    }\n    var startingUrl = global.location.href;\n    var activeTransaction;\n    if (startTransactionOnPageLoad) {\n        activeTransaction = customStartTransaction({ name: global.location.pathname, op: 'pageload' });\n    }\n    if (startTransactionOnLocationChange) {\n        addInstrumentationHandler('history', function (_a) {\n            var to = _a.to, from = _a.from;\n            /**\n             * This early return is there to account for some cases where a navigation transaction starts right after\n             * long-running pageload. We make sure that if `from` is undefined and a valid `startingURL` exists, we don't\n             * create an uneccessary navigation transaction.\n             *\n             * This was hard to duplicate, but this behavior stopped as soon as this fix was applied. This issue might also\n             * only be caused in certain development environments where the usage of a hot module reloader is causing\n             * errors.\n             */\n            if (from === undefined && startingUrl && startingUrl.indexOf(to) !== -1) {\n                startingUrl = undefined;\n                return;\n            }\n            if (from !== to) {\n                startingUrl = undefined;\n                if (activeTransaction) {\n                    logger.log(\"[Tracing] Finishing current transaction with op: \" + activeTransaction.op);\n                    // If there's an open transaction on the scope, we need to finish it before creating an new one.\n                    activeTransaction.finish();\n                }\n                activeTransaction = customStartTransaction({ name: global.location.pathname, op: 'navigation' });\n            }\n        });\n    }\n}\n//# sourceMappingURL=router.js.map","import { __assign } from \"tslib\";\nimport { getGlobalObject, logger } from '@sentry/utils';\nimport { startIdleTransaction } from '../hubextensions';\nimport { DEFAULT_IDLE_TIMEOUT } from '../idletransaction';\nimport { extractTraceparentData, secToMs } from '../utils';\nimport { registerBackgroundTabDetection } from './backgroundtab';\nimport { MetricsInstrumentation } from './metrics';\nimport { defaultRequestInstrumentationOptions, instrumentOutgoingRequests, } from './request';\nimport { instrumentRoutingWithDefaults } from './router';\nexport var DEFAULT_MAX_TRANSACTION_DURATION_SECONDS = 600;\nvar DEFAULT_BROWSER_TRACING_OPTIONS = __assign({ idleTimeout: DEFAULT_IDLE_TIMEOUT, markBackgroundTransactions: true, maxTransactionDuration: DEFAULT_MAX_TRANSACTION_DURATION_SECONDS, routingInstrumentation: instrumentRoutingWithDefaults, startTransactionOnLocationChange: true, startTransactionOnPageLoad: true }, defaultRequestInstrumentationOptions);\n/**\n * The Browser Tracing integration automatically instruments browser pageload/navigation\n * actions as transactions, and captures requests, metrics and errors as spans.\n *\n * The integration can be configured with a variety of options, and can be extended to use\n * any routing library. This integration uses {@see IdleTransaction} to create transactions.\n */\nvar BrowserTracing = /** @class */ (function () {\n    function BrowserTracing(_options) {\n        /**\n         * @inheritDoc\n         */\n        this.name = BrowserTracing.id;\n        this._emitOptionsWarning = false;\n        /** Store configured idle timeout so that it can be added as a tag to transactions */\n        this._configuredIdleTimeout = undefined;\n        var tracingOrigins = defaultRequestInstrumentationOptions.tracingOrigins;\n        // NOTE: Logger doesn't work in constructors, as it's initialized after integrations instances\n        if (_options) {\n            this._configuredIdleTimeout = _options.idleTimeout;\n            if (_options.tracingOrigins && Array.isArray(_options.tracingOrigins) && _options.tracingOrigins.length !== 0) {\n                tracingOrigins = _options.tracingOrigins;\n            }\n            else {\n                this._emitOptionsWarning = true;\n            }\n        }\n        this.options = __assign(__assign(__assign({}, DEFAULT_BROWSER_TRACING_OPTIONS), _options), { tracingOrigins: tracingOrigins });\n        var _metricOptions = this.options._metricOptions;\n        this._metrics = new MetricsInstrumentation(_metricOptions && _metricOptions._reportAllChanges);\n    }\n    /**\n     * @inheritDoc\n     */\n    BrowserTracing.prototype.setupOnce = function (_, getCurrentHub) {\n        var _this = this;\n        this._getCurrentHub = getCurrentHub;\n        if (this._emitOptionsWarning) {\n            logger.warn('[Tracing] You need to define `tracingOrigins` in the options. Set an array of urls or patterns to trace.');\n            logger.warn(\"[Tracing] We added a reasonable default for you: \" + defaultRequestInstrumentationOptions.tracingOrigins);\n        }\n        // eslint-disable-next-line @typescript-eslint/unbound-method\n        var _a = this.options, instrumentRouting = _a.routingInstrumentation, startTransactionOnLocationChange = _a.startTransactionOnLocationChange, startTransactionOnPageLoad = _a.startTransactionOnPageLoad, markBackgroundTransactions = _a.markBackgroundTransactions, traceFetch = _a.traceFetch, traceXHR = _a.traceXHR, tracingOrigins = _a.tracingOrigins, shouldCreateSpanForRequest = _a.shouldCreateSpanForRequest;\n        instrumentRouting(function (context) { return _this._createRouteTransaction(context); }, startTransactionOnPageLoad, startTransactionOnLocationChange);\n        if (markBackgroundTransactions) {\n            registerBackgroundTabDetection();\n        }\n        instrumentOutgoingRequests({ traceFetch: traceFetch, traceXHR: traceXHR, tracingOrigins: tracingOrigins, shouldCreateSpanForRequest: shouldCreateSpanForRequest });\n    };\n    /** Create routing idle transaction. */\n    BrowserTracing.prototype._createRouteTransaction = function (context) {\n        var _this = this;\n        if (!this._getCurrentHub) {\n            logger.warn(\"[Tracing] Did not create \" + context.op + \" transaction because _getCurrentHub is invalid.\");\n            return undefined;\n        }\n        // eslint-disable-next-line @typescript-eslint/unbound-method\n        var _a = this.options, beforeNavigate = _a.beforeNavigate, idleTimeout = _a.idleTimeout, maxTransactionDuration = _a.maxTransactionDuration;\n        var parentContextFromHeader = context.op === 'pageload' ? getHeaderContext() : undefined;\n        var expandedContext = __assign(__assign(__assign({}, context), parentContextFromHeader), { trimEnd: true });\n        var modifiedContext = typeof beforeNavigate === 'function' ? beforeNavigate(expandedContext) : expandedContext;\n        // For backwards compatibility reasons, beforeNavigate can return undefined to \"drop\" the transaction (prevent it\n        // from being sent to Sentry).\n        var finalContext = modifiedContext === undefined ? __assign(__assign({}, expandedContext), { sampled: false }) : modifiedContext;\n        if (finalContext.sampled === false) {\n            logger.log(\"[Tracing] Will not send \" + finalContext.op + \" transaction because of beforeNavigate.\");\n        }\n        logger.log(\"[Tracing] Starting \" + finalContext.op + \" transaction on scope\");\n        var hub = this._getCurrentHub();\n        var location = getGlobalObject().location;\n        var idleTransaction = startIdleTransaction(hub, finalContext, idleTimeout, true, { location: location });\n        idleTransaction.registerBeforeFinishCallback(function (transaction, endTimestamp) {\n            _this._metrics.addPerformanceEntries(transaction);\n            adjustTransactionDuration(secToMs(maxTransactionDuration), transaction, endTimestamp);\n        });\n        idleTransaction.setTag('idleTimeout', this._configuredIdleTimeout);\n        return idleTransaction;\n    };\n    /**\n     * @inheritDoc\n     */\n    BrowserTracing.id = 'BrowserTracing';\n    return BrowserTracing;\n}());\nexport { BrowserTracing };\n/**\n * Gets transaction context from a sentry-trace meta.\n *\n * @returns Transaction context data from the header or undefined if there's no header or the header is malformed\n */\nexport function getHeaderContext() {\n    var header = getMetaContent('sentry-trace');\n    if (header) {\n        return extractTraceparentData(header);\n    }\n    return undefined;\n}\n/** Returns the value of a meta tag */\nexport function getMetaContent(metaName) {\n    var el = getGlobalObject().document.querySelector(\"meta[name=\" + metaName + \"]\");\n    return el ? el.getAttribute('content') : null;\n}\n/** Adjusts transaction value based on max transaction duration */\nfunction adjustTransactionDuration(maxDuration, transaction, endTimestamp) {\n    var diff = endTimestamp - transaction.startTimestamp;\n    var isOutdatedTransaction = endTimestamp && (diff > maxDuration || diff < 0);\n    if (isOutdatedTransaction) {\n        transaction.setStatus('deadline_exceeded');\n        transaction.setTag('maxTransactionDurationExceeded', 'true');\n    }\n}\n//# sourceMappingURL=browsertracing.js.map","import { addExtensionMethods } from './hubextensions';\nimport * as Integrations from './integrations';\nexport { Integrations };\n// This is already exported as part of `Integrations` above (and for the moment will remain so for\n// backwards compatibility), but that interferes with treeshaking, so we also export it separately\n// here.\n//\n// Previously we expected users to import tracing integrations like\n//\n// import { Integrations } from '@sentry/tracing';\n// const instance = new Integrations.BrowserTracing();\n//\n// This makes the integrations unable to be treeshaken though. To address this, we now have\n// this individual export. We now expect users to consume BrowserTracing like so:\n//\n// import { BrowserTracing } from '@sentry/tracing';\n// const instance = new BrowserTracing();\n//\n// For an example of of the new usage of BrowserTracing, see @sentry/nextjs index.client.ts\nexport { BrowserTracing } from './browser';\nexport { Span, spanStatusfromHttpCode } from './span';\n// eslint-disable-next-line deprecation/deprecation\nexport { SpanStatus } from './spanstatus';\nexport { Transaction } from './transaction';\nexport { \n// TODO deprecate old name in v7\ninstrumentOutgoingRequests as registerRequestInstrumentation, defaultRequestInstrumentationOptions, } from './browser';\nexport { IdleTransaction } from './idletransaction';\nexport { startIdleTransaction } from './hubextensions';\n// We are patching the global object with our hub extension methods\naddExtensionMethods();\nexport { addExtensionMethods };\nexport { extractTraceparentData, getActiveTransaction, hasTracingEnabled, stripUrlQueryAndFragment, TRACEPARENT_REGEXP, } from './utils';\n//# sourceMappingURL=index.js.map","import ButtonDropdown from \"./components/ButtonDropdown\";\nimport CloseMenu from \"./components/CloseMenu\";\nimport CoursePageSections from \"./components/CoursePageSections\";\nimport ImageGallery from \"./components/ImageGallery\";\nimport ListSort from \"./components/ListSort\";\nimport MapOverlay from \"./components/MapOverlay\";\nimport OpenMenu from \"./components/OpenMenu\";\nimport RevealContent from \"./components/RevealContent\";\nimport SearchDropdown from \"./components/SearchDropdown\";\nimport SearchableSelect from \"./components/SearchableSelect\";\nimport Share from \"./components/Share\";\nimport SimpleMap from \"./components/SimpleMap\";\nimport * as Sentry from \"@sentry/browser\";\nimport { BrowserTracing } from \"@sentry/tracing\";\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n  if (process.env.NODE_ENV !== \"development\") {\n    try {\n      Sentry.init({\n        dsn: window.bridge.SENTRY_DSN,\n        release: window.bridge.VERSION,\n        integrations: [new BrowserTracing()],\n        tracesSampleRate: 0.1,\n        allowUrls: \"where2golf\"\n      });\n    } catch (error) {\n      console.log(\"Error setting up Sentry\");\n    }\n  }\n\n  // Prevent right click and save of images\n  document.body.addEventListener(\"contextmenu\", e => {\n    if (e.target.tagName === \"IMG\") {\n      e.preventDefault();\n    }\n  });\n  // Prevent drag and save of images\n  const images = Array.from(document.getElementsByTagName(\"IMG\"));\n  images.forEach(image => {\n    image.addEventListener(\"mousedown\", e => {\n      e.preventDefault();\n    });\n  });\n  // Make all external links open in new tabs\n  const links = Array.from(document.getElementsByTagName(\"a\"));\n  links.forEach(link => {\n    if (link.hostname !== location.hostname) {\n      link.setAttribute(\"target\", \"_blank\");\n    }\n  });\n\n  // CoursePageSections\n  const sectionNavs = Array.from(\n    document.getElementsByClassName(\"js-sectionNav\")\n  );\n  sectionNavs.forEach(sectionNav => {\n    new CoursePageSections(sectionNav);\n  });\n\n  // ImageGallery\n  const imageGalleries = Array.from(\n    document.getElementsByClassName(\"js-imageGallery\")\n  );\n  imageGalleries.forEach(imageGallery => {\n    new ImageGallery(imageGallery);\n  });\n\n  // SimpleMap\n  const simpleMaps = Array.from(\n    document.getElementsByClassName(\"js-simpleMap\")\n  );\n  simpleMaps.forEach(simpleMap => {\n    new SimpleMap(simpleMap);\n  });\n\n  // RevealContent\n  const courseListRows = Array.from(document.getElementsByClassName(\"js-row\"));\n  courseListRows.forEach(courseListRow => {\n    new RevealContent(courseListRow);\n  });\n\n  // MapOverlay\n  const mapOverlayButtons = Array.from(\n    document.getElementsByClassName(\"js-MapOverlay-button\")\n  );\n  mapOverlayButtons.forEach(mapOverlayButton => {\n    new MapOverlay(mapOverlayButton);\n  });\n\n  // ButtonDropdown\n  const buttonDropdowns = Array.from(\n    document.getElementsByClassName(\"js-ButtonDropdown\")\n  );\n  buttonDropdowns.forEach(buttonDropdown => {\n    new ButtonDropdown(buttonDropdown);\n  });\n\n  // SearchDropdown\n  const searchDropdowns = Array.from(\n    document.getElementsByClassName(\"js-SearchDropdown\")\n  );\n  searchDropdowns.forEach(searchDropdown => {\n    new SearchDropdown(searchDropdown);\n  });\n\n  // SortStart\n  const listSorts = Array.from(document.getElementsByClassName(\"js-listSort\"));\n  listSorts.forEach(listSort => {\n    new ListSort(listSort);\n  });\n\n  // OpenMenu\n  const openMenuButtons = Array.from(\n    document.getElementsByClassName(\"js-openMenuButton\")\n  );\n  openMenuButtons.forEach(openMenuButton => {\n    new OpenMenu(openMenuButton);\n  });\n\n  // CloseMenu\n  const closeMenuButtons = Array.from(\n    document.getElementsByClassName(\"js-closeMenuButton\")\n  );\n  closeMenuButtons.forEach(closeMenuButton => {\n    new CloseMenu(closeMenuButton);\n  });\n\n  // Share\n  const shareButtons = Array.from(document.getElementsByClassName(\"js-share\"));\n  shareButtons.forEach(shareButton => {\n    new Share(shareButton);\n  });\n\n  // SearchableSelect\n  const searchableSelects = Array.from(\n    document.getElementsByClassName(\"js-searchableSelect\")\n  );\n  searchableSelects.forEach(searchableSelect => {\n    new SearchableSelect(searchableSelect);\n  });\n});\n\n// SearchableSelect\nconst searchableSelects = Array.from(\n  document.getElementsByClassName(\"js-searchableSelect\")\n);\nsearchableSelects.forEach(searchableSelect => {\n  new SearchableSelect(searchableSelect);\n});\n","import { getGlobalObject } from './misc';\nimport { dynamicRequire, isNodeEnv } from './node';\n/**\n * A TimestampSource implementation for environments that do not support the Performance Web API natively.\n *\n * Note that this TimestampSource does not use a monotonic clock. A call to `nowSeconds` may return a timestamp earlier\n * than a previously returned value. We do not try to emulate a monotonic behavior in order to facilitate debugging. It\n * is more obvious to explain \"why does my span have negative duration\" than \"why my spans have zero duration\".\n */\nvar dateTimestampSource = {\n    nowSeconds: function () { return Date.now() / 1000; },\n};\n/**\n * Returns a wrapper around the native Performance API browser implementation, or undefined for browsers that do not\n * support the API.\n *\n * Wrapping the native API works around differences in behavior from different browsers.\n */\nfunction getBrowserPerformance() {\n    var performance = getGlobalObject().performance;\n    if (!performance || !performance.now) {\n        return undefined;\n    }\n    // Replace performance.timeOrigin with our own timeOrigin based on Date.now().\n    //\n    // This is a partial workaround for browsers reporting performance.timeOrigin such that performance.timeOrigin +\n    // performance.now() gives a date arbitrarily in the past.\n    //\n    // Additionally, computing timeOrigin in this way fills the gap for browsers where performance.timeOrigin is\n    // undefined.\n    //\n    // The assumption that performance.timeOrigin + performance.now() ~= Date.now() is flawed, but we depend on it to\n    // interact with data coming out of performance entries.\n    //\n    // Note that despite recommendations against it in the spec, browsers implement the Performance API with a clock that\n    // might stop when the computer is asleep (and perhaps under other circumstances). Such behavior causes\n    // performance.timeOrigin + performance.now() to have an arbitrary skew over Date.now(). In laptop computers, we have\n    // observed skews that can be as long as days, weeks or months.\n    //\n    // See https://github.com/getsentry/sentry-javascript/issues/2590.\n    //\n    // BUG: despite our best intentions, this workaround has its limitations. It mostly addresses timings of pageload\n    // transactions, but ignores the skew built up over time that can aversely affect timestamps of navigation\n    // transactions of long-lived web pages.\n    var timeOrigin = Date.now() - performance.now();\n    return {\n        now: function () { return performance.now(); },\n        timeOrigin: timeOrigin,\n    };\n}\n/**\n * Returns the native Performance API implementation from Node.js. Returns undefined in old Node.js versions that don't\n * implement the API.\n */\nfunction getNodePerformance() {\n    try {\n        var perfHooks = dynamicRequire(module, 'perf_hooks');\n        return perfHooks.performance;\n    }\n    catch (_) {\n        return undefined;\n    }\n}\n/**\n * The Performance API implementation for the current platform, if available.\n */\nvar platformPerformance = isNodeEnv() ? getNodePerformance() : getBrowserPerformance();\nvar timestampSource = platformPerformance === undefined\n    ? dateTimestampSource\n    : {\n        nowSeconds: function () { return (platformPerformance.timeOrigin + platformPerformance.now()) / 1000; },\n    };\n/**\n * Returns a timestamp in seconds since the UNIX epoch using the Date API.\n */\nexport var dateTimestampInSeconds = dateTimestampSource.nowSeconds.bind(dateTimestampSource);\n/**\n * Returns a timestamp in seconds since the UNIX epoch using either the Performance or Date APIs, depending on the\n * availability of the Performance API.\n *\n * See `usingPerformanceAPI` to test whether the Performance API is used.\n *\n * BUG: Note that because of how browsers implement the Performance API, the clock might stop when the computer is\n * asleep. This creates a skew between `dateTimestampInSeconds` and `timestampInSeconds`. The\n * skew can grow to arbitrary amounts like days, weeks or months.\n * See https://github.com/getsentry/sentry-javascript/issues/2590.\n */\nexport var timestampInSeconds = timestampSource.nowSeconds.bind(timestampSource);\n// Re-exported with an old name for backwards-compatibility.\nexport var timestampWithMs = timestampInSeconds;\n/**\n * A boolean that is true when timestampInSeconds uses the Performance API to produce monotonic timestamps.\n */\nexport var usingPerformanceAPI = platformPerformance !== undefined;\n/**\n * The number of milliseconds since the UNIX epoch. This value is only usable in a browser, and only when the\n * performance API is available.\n */\nexport var browserPerformanceTimeOrigin = (function () {\n    var performance = getGlobalObject().performance;\n    if (!performance) {\n        return undefined;\n    }\n    if (performance.timeOrigin) {\n        return performance.timeOrigin;\n    }\n    // While performance.timing.navigationStart is deprecated in favor of performance.timeOrigin, performance.timeOrigin\n    // is not as widely supported. Namely, performance.timeOrigin is undefined in Safari as of writing.\n    // Also as of writing, performance.timing is not available in Web Workers in mainstream browsers, so it is not always\n    // a valid fallback. In the absence of an initial time provided by the browser, fallback to the current time from the\n    // Date API.\n    // eslint-disable-next-line deprecation/deprecation\n    return (performance.timing && performance.timing.navigationStart) || Date.now();\n})();\n//# sourceMappingURL=time.js.map"],"sourceRoot":""}